Ihmisten herkkäuskoisuus

Luulisi, että nyky-yhteiskunnassa ihmiset olisivat kyynisiä ja skeptisiä, ja että keskimäärin korkea sivistystaso auttaisi ihmisiä erottamaan järkevät väitteet naurettavista. Mutta kun ei.

Ihmiset eivät ole tässä suhteessa muuttuneet yhtään varmastikaan tuhansiin vuosiin. Ainoastaan palturin aihe ja kertomistapa on muuttunut vuosisatojen varrella, sillä muuttuva kulttuuri ja sivistytaso vaativat muuttuvia tyylejä kertoa palturia, mutta kun se kerrotaan oikein, suurin osa ihmisistä nielee sen purematta.

Kaikki perättömät huhut, urbaanit legendat, ketjukirjeet, salaliittoteoriat ja ns. pseudotiede perustuvat nimenomaan tähän ihmisten herkkäuskoisuuteen.

Tämä herkkäuskoisuus esiintyy periaatteessa kahdessa eri muodossa:


Konkreettisia esimerkkejä

Tuskin lienee tarpeellista luetella kaiken maailman esimerkkejä ketjukirjeistä, perättömistä virusvaroituksista (eli ns. hoaxit) ja muista vastaavista, jotka aina aika ajoin leviävät kulovalkean tavoin pitkin internettiä. Tässä kuitenkin hieman mielenkiintoisempi ja teknisempi kuvaus eräästä väärästä huhusta, joka levisi vuosia sitten kulovalkean tavoin tietyissä foorumeissa (peleihin ja pelien kehittämiseen liittyvissä):

Quake-pelin syy käyttää matematiikkaprosessoria

Quake tuli tietyissä piireissä kuuluisaksi siitä, että se oli ehkä ensimmäinen peli, joka nojautui hyvin vahvasti matematiikkaprosessoriin (eli FPU:hun). Niihin aikoihin kun Quake ilmestyi, Intelin Pentium-prosessoreissa oli varsin nopea FPU, kun taas kilpailijoiden (pääasiallisesti AMD:n) prosessoreissa se oli huomattavasti huonompi. Tästä taas seurasi se, että Quake oli huomattavasti nopeampi Intelin prosessorilla kuin kilpailijoiden.

Tekninen selitys, miksi Quake riippui niin vahvasti FPU:sta

Toisin kuin siihenastisissa first-person-shooter-3D-peleissä (poislukien Descent), Quakessa on täysi vapaus katsoa mihin suuntaan tahansa. Siihenastisissa FPS-peleissä kamera oli voinut katsoa vain vaakatason suuntaisesti (ts. se ei voi kääntyä ylös eikä alas, eikä kallistua sivulle; mutta kuten sanottu, Descent oli poikkeus tähän). Samaten kaikki seinät olivat pystysuoria ja lattiat ja katot vaakasuoria.

Syy siihen, miksi täysin vapaa katsominen tuottaa erityisiä ongelmia, löytyy polygonien teksturoinnista: Jotta polygonin tekstuuri näyttäisi oikealta, se pitää teksturoida ns. perspektiivikorjatusti (mikäli polygoni teksturoidaan lineaarisella interpoloinnilla, tekstuuri näyttää erittäin vääristyneeltä). Kun kameran liike on rajoitettu vaakatasoon ja seinät ovat pystysuoria ja lattiat ja katot vaakasuoria, on perspektiivikorjattu teksturointi hyvin nopeaa ja suoraviivaista laskea.

Mutta silloin kun kameran ja seinien asentoa ei ole rajoitettu, perspektiivikorjaus onkin kertaluokkaa hankalampaa: Täydellinen perspektiivikorjaus vaatii yhden jakolaskun per pikseli (plus muita nopeampia operaatioita, luonnollisesti). Lisää infoa perspektiivikorjatusta tekstuurimappauksesta löytää helposti vaikkapa Googlella.

Senaikaisilla prosessoreilla, vaikka käytössä olisikin ollut nopeampi matematiikkaprosessori, jakolaskun suoritus oli niin hidasta, että sitä ei yksinkertaisesti voitu tehdä jokaista ruudun pikseliä kohti, koska muuten peli olisi ollut toivottoman hidas. Nykyiset 3D-kortit toki pystyvät tähän kevyesti, mutta sen ajan koneilla siitä pystyttiin vain unelmoimaan.

Yleisin nopeutuskikka, jolla saatiin suhteellisen hyväksyttävä tulos, oli se, että ei lasketakaan sitä jakolaskua jokaiselle pikselille, vaan esimerkiksi vain joka 16. pikselille. Väliin jäävät pikselit voidaan sitten interpoloida lineaarisesti. Tämä ei tietenkään tuota läheskään yhtä hyvää tulosta kuin joka pikselille laskettaessa, mutta tulos oli kuitenkin paljon parempi kuin täysin ilman perspektiivikorjausta, ja käytännössä ihan riittävä.

Quakessa käytettiin nerokasta optimointia tämän suhteen: Koska matematiikkaprosessori on erillinen pääprosessorista (CPU), voidaan FPU laittaa laskemaan sitä jakolaskua samalla kun CPU piirtää ne väliin jäävät 16 pikseliä lineaarisesti interpoloiden. Käytännössä tämä tarkoittaa sitä, että CPU:n ja koko piirtämisen kannalta jokainen jakolasku vie pari kellojaksoa sen sijaan, että se veisi kymmeniä kellojaksoja kuten yleensä. Tämä toki nopeuttaa laskemista huomattavasti. Tämä sallii suurempien polygonimäärien ja resoluution käytön, plus kaikenlaisten lisäominaisuuden käytön, kun nopeampi piirtäminen antaa aikaa kaikenlaiselle muulle laskennalle.

Hitaammilla FPU:illa kuitenkin käy niin, että CPU saa ne 16 pikseliä valmiiksi, mutta FPU ei ole vieläkään saanut tulosta aikaiseksi, joten CPU joutuu vain odottamaan tyhjäkäynnillä.

Netissä kulovalkean tavoin levinnyt väärä huhu

Joku tyyppi keksi kummallisen selityksen sille, miksi Quake riippuu niin paljon FPU:n nopeudesta. Jostain syystä tämä selitys upposi ihmisiin kuin kuuma veitsi voihin, aiheuttaen tyypilliset ilmiöt, mitä kuvasin sivun alussa (eli ei millään haluta luopua siitä ensimmäisestä selityksestä mitä kuulee).

Tämän teorian mukaan Quake laskee kuvan ensin muistiin, ja se sitten siirtää sen näyttömuistiin käyttäen FPU:ta siirtämään 8 tavua kerralla (FPU:hun voi ladata ja sieltä muistiin voi tallettaa 8-tavuisen liukuluvun), ja että tämä olisi ainoa asia, miten Quake käyttää FPU:ta ohjelman nopeuttamiseen. (Toki itse alkuperäinen selitys oli paljon pitempi, mutta pähkinänkuoressa se on tämä.)

Tässä väittämässä oli selkeä taka-ajatus, joka enemmän tai vähemmän suoraan sanottiin siinä: ID-Software (Quaken tekijätiimi) sortaa muita kuin Intelin prosessorin käyttäjiä kun ne käyttää näin halpamaista kikkaa.

Ehkä se oli nimenomaan tämä seikka, joka aiheutti tässä huhussa niin suurta suosiota. Siinä oli vähän samaa makua kuin yleensäkin salaliittoteorioissa, ja sen takia se kiehtoi ihmisiä niin paljon.

Kuitenkin tämä selitys ei kestä lainkaan lähempää tarkastelua, kun tietää, mitä kaikkea 3D-grafiikan piirtämiseen liittyy.

Ensinnäkin tämä selitys tekee erittäin virheellisen oletuksen: Se olettaa, että itse kuvan piirtäminen on hyvin nopeaa, mutta sen kuvan siirtäminen näyttömuistiin on erittäin hidasta ja vie kaikista eniten aikaa. Tämä oletus on luonnollisesti täysin naurettava kun tietää, mitä pelimoottorin sisällä oikeasti tapahtuu (eli aikaisemmin kuvaamani ongelma perspektiivikorjatusta teksturoinnista). Ehdottomasti suurin osa ajasta menee kuvan laskemiseen, sillä se on erittäin raskas operaatio. Muistilohkon siirtäminen paikasta toiseen vienee varmasti alle kymmenesosan tästä ajasta.

Toisekseen, käytännön testaus sen aikaisella Pentiumilla osoittaa, ettei datan siirto muistista näyttömuistiin FPU:n avulla ole yhtään sen nopeampaa kuin normaalisti CPU:n avulla. Ja vaikka se olisikin marginaalisesti nopeampaa, se voisi korkeintaan nopeuttaa peliä muutamalla prosentilla (sillä datan siirto muistista näyttömuistiin vie jo itsessään niin pienen osuuden koko laskenta-ajasta).


"We never went to the Moon"

Viime vuosina jenkkilässä on tullut muotiin tämä salaliittoteoria, että ihminen ei ole koskaan käynyt Kuussa, ja että kaikki kuvat ja TV-lähetykset olivat väärennettyjä. Lisää infoa siitä, miksi tämä salaliittoteoria on täysin naurettava, löytyy esim. täältä.

Tämä salaliittoteoria on kuitenkin varsinainen malliesimerkki ihmisten herkkäuskoisuudesta. Se sisältää todella ison kasan väittämiä, joista suurin osa on totaalisen naurettavia, ja ehkä muutama vaatii vähän enemmän tuntemusta. Kuitenkin ehdottomasti suurin osa väittämistä on juuri sellaisia, että ihmiset ovat herkkiä uskomaan niitä, vaikka niissä ei ole minkäänlaista perää (ts. ne väittämät valehtelevat täysin suoraan).

Tässä tyypillinen esimerkki yhdestä tällaisesta väittämästä: "Kuussa ei ole ilmaa, joten varjossa olevat yksityiskohdat pitäisi olla täysin mustia. Syy miksi maan päällä näemme varjoihin on se, että ilma taittaa ja hajottaa valoa, jolloin se osuu varjoissa oleviin esineisiin."

Tämä saattaa ehkä olla maallikon mielestä järkevää ja loogista, mutta kaikki paitsi "kuussa ei ole ilmaa" on suoraa valhetta. Esimerkiksi sellaiselle, joka on yhtään perehtynyt tietokonegrafiikkaan ja sen valaistustekniikoihin, tämä väite on naurettava.

Otetaan esimerkkinä tietokoneella luotu kuva:

Tämä kuva mallintaa suhteellisen hyvin sitä, mitä luonnossakin tapahtuu.

Pari kysymystä: Miksi ruskea ruukku on valaistu, vaikka se on varjossa? Miksi tällä ruskealla ruukulla on itselläänkin varjo?

Vastauksen pitäisi näkyä kuvasta lähes suoraan: Koska valo heijastuu vasemmanpuoleisesta seinästä ja valaisee ruukkua. (Myös etu- ja takaseinäkin toki vaikuttaa osittain sen valaistukseen.) Samainen valo valaisee myös valkoista ruukkua (koska heijastunut valo on seinän väristä, eli oranssia, valkoinen ruukku saa oranssia sävyä vasemmanpuoleiselle pinnalleen).

Tarvitseeko selitystä enää tästä jatkaa? Mielestäni vastaus siihen, miksi Kuussakin varjossa olevat esineet näkyvät on varsin selkeä: Valo heijastuu muista pinnoisa (yleensä Kuun pinnasta) ja valaisee näitä varjossa olevia esineitä.

Vaikka maan päällä ilmalla on marginaalisen pieni vaikutus valaistukseen, se on kuitenkin niin häviävän pieni, että se voidaan esimerkiksi tietokoneella luoduissa kuvissa jättää täysin huomioimatta (kuten yllä olevassa on tehty) ja silti saada luonnollisen näköisiä kuvia. Tämä yksinkertaistaa laskuja todella paljon.

Tietokonegrafiikan valaistusmalleihin vähänkään perehtyneelle on itsestäänselvä asia, että valo heijastuu pinnoista ja valaisee muita pintoja tätä kautta. Tuo salaliittoteorian väittämä on siis täysin naurettava ja valheellinen.