AvatarXboxLarge
6
Stereoskopisk 3D

Till försvar av 3D: Del 3 – Problemen med 3D

I förra delen behandlade jag hur man kunde lösa prestandafrågan när det gäller stereoskopisk 3D. Men i den här delen skall prata om hur det kommer sig att många upplever stereoskopisk 3D som jobbig att titta på och visa på olika lösningar på dessa problem.

Många känner att det är  något som inte känns riktigt rätt med stereoskopisk 3D och att det är ansträngande för ögonen. Men hur kan detta vara? Vi ser ju 3D-bilder hela tiden i verkligheten. Vi upplever världen i 3D och från första stund vi öppnar ögonen till dess vi inte längre kan se eller slutligen har förbrukat det där sista extralivet, så är det i 3D vi upplever världen. Hur kan detta då vara ansträngande när vi spelar eller ser på film? Det beror på flera saker vilka då denna del handlar om.

Den främsta anledningen är ganska enkel. Innehållsskaparna gör fel helt enkelt. Frestelsen är stark att lägga objekt i djupled så de till synes sticker ut ur skärmen. Det blir häftigt men det är också väldigt lätt att det blir ansträngande att se på. Detta då saker har en tendens att inte ligga i mitten av bilden utan med kamerarörelse så beskärs de av kanten på bildskärmen eller projektorduken. Det är då hjärnan får core meltdown och blåskärm. Saker som befinner sig nära kan ju inte täckas över av något som är längre bort, dvs. bildkanten. Slutresultatet är en känsla av att det inte riktigt är särskilt trevligt att titta på. Här verkar Crytek-folket vara på rätt bana då de motstår frestelsen att låta saker poppa ur skärmen och istället låter den vara likt ett fönster mot ut mot den virtuella verkligheten. Gränssnittsdelarna ligger på det djup som skärmens yta och övriga saker sträcker sig enbart inåt i bild. Det är också därför de självsäkert kan hävda att deras 3D är skönare för ögat än den i Killzone 3. Frestelsen är dock stor, vilket syns i varenda reklam för 3D. Bilden kommer ut ur skärmen, när den egentligen för att bli bra enbart borde sträcka sig in i skärmen. Det blir även ett mycket mer effektivt demo när det sticker ut ur skärmen.

Hur han än försöker kan inte Mario sträcka sig utanför bildkant.

Ett annat problem som gör det hela lite svårare är att när pupillerna fokuserar på något nära så flyttar de sig in mot näsan och när de fokuserar på något långt bort hamnar mer i mitten av ögat. I ett spel är det svårt att veta exakt på vilket djup personen fokuserar och det är därför svårt att exakt göra motsvarande justering – så kallade toe-in – av de virtuella ögonen. Naturligtvis kan man använda djupet vid själva siktet som bra referens på var man tittar. Dessutom, om man undviker att lägga saker närmare betraktaren än själva skärmen så är mängden toe-in som behöver göras ytterst begränsad och man kan därmed i många fall helt strunta i den.

Pupillerna tittar inte alltid helt rakt fram...

Det sista problemet är lite lättare att lösa, men är dock av en mindre magnitud. Om du rör på dig sidledes när du spelar så justeras inte kameran på motsvarande sätt. När vi spelar vanliga spel är detta av mindre problem, men med 3D-spel är det mer frestande att vilja luta sig åt sidan och därmed se lite runt hörnen. Detta är ju naturligtvis inget som går så bilden blir istället något skev och lätta spykänslor framkallas. Inget allvarligt, men ändå lite. Detta kan dock avhjälpas med hjälp av headtracking. Om man följer ansiktets sidoförflyttning i förhållande till skärmen med hjälp av exempelvis Playstation Eye-kameran, eller för ännu bättre resultat Kinect, och justerar kameran med det så att även sådana rörelser kommer med är detta problem avlöst. Blir spännande att se hur mycket sådant som används i framtidens spel. I vilket fall är det problem som det avhjälper inget jättestort problem. Däremot vore det häftigt att se. Jag har tidigare hoppats att Halo: Reach skall implementera headtracking med hjälp av Kinect, men så verkar inte bli fallet.

Slutligen finns en fallgrop till. Det orsakar inte illamående eller kräver någon extra prestanda, men är fel eftersom den är just fel. Fallgropen är att man vill förstärka sin 3D-effekt genom att flytta sina virtuella kameror isär mer än vad ögonen är separerade. Slutresultatet av detta är en tydligare 3D-effekt, med konsekvensen att allt ser väldigt litet ut. Som små miniatyrer. Detta drabbar naturligtvis närvarokänslan enormt. Det blir helt plötsligt inte särskilt mäktigt då alla fiender ser ut som små He-Man gubbar. Som vanligt när det gäller nya effekter kommer detta att missbrukas för just den större 3D-effekten. Precis som lens-flaren, bloomfiltering och de flesta andra liknande effekter gjorts när de lanserades.

Imorgon kommer den sista och avslutande delen i den här serien. Den kommer handla om 3D på Xbox 360.

AvatarXboxLarge
3
Stereoskopisk 3D

Till försvar av 3D: Del 2 – Gratis 3D

I förra delen behandlade jag grunderna för stereoskopisk 3D och skall i den här delen gå lite djupare och visa hur man kan göra vilket spel som helst till 3D utan större kostnad rent prestandamässigt. Detta inlägg handlar således inte om hur du kan få till 3D effekt gratis genom att dra en damstrumpa över plasma-TV:n och ta på dig ett par Ray-Bans från -76.

Det kan verka magiskt, men det går faktiskt att skapa två bilder med olika perspektiv på nästan samma tid som det tar att skapa en utan att rendera två gånger och därmed behöva kompromissa med bilden. Vilka spel det är som använder sig av denna tekniken är svårt att veta. Att döma av utvecklarkommentarer så är det nästan helt säkert att Crysis 2 gör det. De kallar det för sin secret sause. De förklarar inte hur de gör, men givet mina erfarenheter är det ganska tydligt att själva hemligheten har sin början i något som är vanligt inom spelgrafik och som något kryptiskt kallas z-buffer.

En enkel 3D-scen (vänster) och dess z-buffer (höger)

När man renderar en bild i ett spel skapar grafikprocessorn automatiskt även ytterligare en bild som aldrig visas. Denna bild innehåller, för varje pixel, bara ett värde som säger hur långt ifrån betraktaren det som är i just den pixeln är. Ett avstånd kort och gott. Detta används för att se till att saker som är längre bort än den aktuella pixeln inte ritas ut, och att saker som är närmare skriver om i bilden så det nya djupet lagras. Detta så att det hela tiden är det som är närmast betraktaren som syns i bild. Denna bild kallas för z-buffer - eller djupbuffer på svenska. Det är även en sådan bild som Kinectkameran skapar, fast då istället från att läsa av verkligheten och inte ifrån massa matematiska polygoner i datorns minne. På senare tid har man kommit på att denna bild även kan användas till andra saker än att bara betsämma vad som skall ritas ut och inte. Exempelvis används det för att skapa skuggeffekter (ambient occlusion) och för ljussättning (global illumination). Mycket troligt är även att Alan Wake har hjälp av den vid skapandet av sina atmosfäriska effekter.

När det kommer till stereoskopisk 3D så kan man använda djupbuffern till att skapa en andra bild för det andra ögat med hjälp av djupet i de olika pixlarna. I stort är det ju faktiskt så att skillnaden mellan två bilder skapade av två kameror med liten förskjutning åt sidan är att saker som ligger nära kameran förskjuts åt sidan mer än det som ligger långt bort. Tänk dig hur det är när du åker tåg. Saker nära svischar förbi fönstret i snabbt tempo medan saker borta vid horisonten ser ut att stå helt stilla. Så för att skapa bilden för andra ögat så flyttar man helt enkelt pixlarna som ligger nära enligt djupbuffern lite lätt åt ena hållet och saker som ligger långt bort enligt djupbuffern lite mindre. Rent tekniskt hur detta går till för att undvika massa hål i bilden kommer jag inte gå in på nu, men kort kan man säga att det finns en rad sätt att göra detta på. Det som är värt att veta är att detta går att göra väldigt snabbt på grafikkorten eller på en av PS3:ans hjälpprocessorer. Crytek säger själva att i Crysis 2 så står skapandet av denna extra bild för enbart ungefär 1,5% av renderingstiden. Så det är i stort sett gratis. Dessutom, när man väl fått det att fungera så är det relativt lite extraarbete som behövs för att få det att fungera i spelet. Det var exempelvis svårare att gå över till bra high-dynamic range rendering då det krävde mer arbete med texturer och ljussättning.

Crysis 2 blir ett av de första storspelen med stereoskopisk 3D.

En nackdel med ovanstående teknik är dock att det inte fungerar med genomskinliga objekt. Inte alls. Det betyder att rök, explosioner och liknande måste renderas två gånger på vanligt vis efter det att man skapat sin andra bild. Det är dock en fraktion av kostnaden av att rendera hela bilden två gånger. Gränssnitt som ligger ovanpå bilden behöver också renderas två gånger. Helst vill man ju dock att gränssnittet är så lättläst som möjligt och man placerar det då på ett sådant sätt i bilden att det ser likadant ut i de båda bilderna.

Vilket osökt tar mig till nästa punkt i mitt försvar för stereoskopisk 3D. Med prestandafrågan ur bild så är nästa problem med 3D att många upplever den som lite obekväm att titta på. Varför och vad kan man göra åt det? Läs om detta i nästa del.

AvatarXboxLarge
8
Stereoskopisk 3D

Till försvar av 3D: Del 1 – Hur det funkar

Stereoskopisk 3D är hett just nu. Riktigt hett. Avatar knuffade igång bollen ordentligt, och nu i spelvärlden har vi kommande Nintendos 3DS och dessutom Sonys stora fokussering på 3D för Playstation 3. Allt för att sälja på oss ny teknik och göra vår gamla teknik något för Blocket. Fantastiskt!

Som med all ny teknik så finns det missförstånd och tekniska detaljer som missas. Exempelvis hörde jag ganska nyss på bland annat spelradion hur de oroade sig för att Killzone 3 skulle ha massor med kompromisser för att klara av att rendera bilden för de båda ögonen. Detta må vara sant även om det inte behöver vara så (kommer till det i nästa del), men för att klara upp så mycket oklarheter som möjlig så tänkte jag nu gå till försvar för 3D-fieringen av våra spel och visa hur vi har väldigt lite att förlora på det rent tekniskt och prestandamässigt. Dessutom vill jag klara upp lite oklarheter kring Xbox 360 och dess 3D-stöd. Det finns väldigt mycket att säga om detta, så jag delar upp detta i fyra inlägg som jag publicerar ett om dagen av.

Men vem är då jag att säga något om detta? Jag råkar jobba med 3D, då i form av filmning och effekter för sådant. Jag har varit involverad i flera 3D-produktioner av reklamfilm för både bio och annat. Har även skrivit en del mjukvara för att hjälpa till med hanteringen och skapandet av stereoskopiskt bildmaterial. Så jag har helt klart tänkt både en och två tankar kring 3D-film. Så förhoppningsvis kan jag komma med något vettigt att säga.

Men låt oss börja med grunden. Stereoskopisk 3D är inget magiskt. Det är faktiskt ganska enkelt. Precis som att man har två ögon så behövs det två bilder. En för varje öga. Själva 3D-effekten skapar ju sedan hjärnan åt oss så länge dessa två bilder är hyffsat korrekt gjorda. Hur dessa bilder ser ut är inte heller det något magiskt. De skall bara vara så lika det som vardera öga skulle se om man tittade i verkligheten. Alltså två kameror med ungefär sex centimeter däremellan. Inget mer och inget mindre. Problemet med en vanlig skärm är dock att den kan inte välja att göra så att ditt ena öga ser en bild och ditt andra ser en annan bild. Det är här glasögonen kommer in. Det finns olika tekniker, allt ifrån röd-cyan färgade glasögon till de mer avancerade glasögon som följer med de nyligen lanserade 3D TV-apparaterna. Men oavset teknik så handlar det om just att få den vanliga skärmen att visa olika bilder för de olika ögonen. I nya TV-apparater växlar de mellan de två bilderna väldigt snabbt, så varannan bild är för ena ögat, och varannan för det andra ögat. Glasögonens uppgift är att samtidigt ”hålla för” det ögat som inte skall ta emot bilden så att bara ett öga åt gången ser något ut. Lite som väldigt kraftiga solgalsögon som stängs av och på väldigt fort.

Killzone 3 blir i 3D. Ovanstående bild är dock väldigt tvådimensionell även med glasögon.

Så långt om tekniken för visning. Det fungerar idag och kommer blir bättre och bättre med färre problem och lägre pris, men hur man än vänder och vrider på det, oavsett vilken teknik man använder så kräver det i slutändan ändå två olika bilder, en för varje öga. Det betyder således att ett spel som är optimerat och grafiskt pushat till sin gräns för att visa 30 fantastiskt fina bilder per sekund då måste kunna skapa dubbelt så många, ett för varje öga. Detta är precis vad många spel gör, och får då kompromissa lite med det visuella, precis som många spel gör när man byter till split-screen. Ett träd mindre här, en skugga mindre där. Men det finns naturligtvis begränsningar för hur långt man kan ta detta. Därmed inte sagt att det är omöjligt. Det finns idag många fina spel som fungerar utmärkt i 60 bilder per sekund. Att ta dem ner till 30 bilder per sekund och få stereoskopisk 3D är inte otänkbart. Dessutom finns det en rad optimeringar man kan göra för att få renderingen av det extra ögats vy att vara så billig som möjligt.

Men det finns en helt annan väg att gå, som kan tyckas vara magisk, och den behandlar jag i nästa del.