Carl Nyholm

Vad är Virtual Reality (vr)?

Tekniken har funnits länge men det är först under senare år som vr-system börjar bli tillgängliga för hemmabruk. Det handlar om att lura hjärnan att man befinner sig i en annan värld genom att ta på sig ett par glasögon med bildskärmar som är anpassade för att täcka hela synfältet. Bildskärmarna i glasögonen presenterar en tredimensionell värld som användaren kan interagera med. En grundläggande faktor är att världen är uppbyggd för en 360 graders vy – det vill säga att man ska kunna vända sig om åt alla håll och bilden anpassar sig därefter på ett övertygande sätt.

Jag kommer utgå ifrån användandet av ett virtual reality system som heter HTC-VIVE, vilket syns på bilderna. Utöver vr-glasögonen ingår två sensorer som placeras i en varsin ände av rummet man rör sig i. Sensorerna läser av användarens position med hjälp av hjälmen. Till VIVE hör också två kontroller som kan fungera som händer i spelet.

Vad är Unity?

Unity är en plattform för spelutveckling som i grunden är gratis att använda men det finns mer komplexa versioner anpassade för större produktioner, vilka kostar pengar. Ni kan hämta hem det från https://unity3d.com/

Unity är kompatibelt med en stor mängd 3d-program, det är enkelt att importera modeller och animationer från till exempel Maya.

Användargränssnittet

1 – Hierarchy som visar alla scener och underliggande objekt i en textlista, motsvarar outlinern i Maya.

2 – Scenfönstret som motsvarar viewporten i Maya, utgår dock inte från någon kamera. Scenen renderas genom kameran i spelfönstret.

3 – Spelfönstret som renderar spelet så som det kommer se ut för användaren. Spelfönstrets vy utgår från kameran i scenen. När man trycker på play kommer man se spelarens vy här, vilken anpassas efter hur man vänder sig med vr-glasögonen.

4 – Projektmapp som visar alla filer som är tillgängliga i projektet. Det är alltså filerna i projektmappen på hårddisken som man också kan bläddra bland utanför Unity.

5 – En playknapp som aktiverar, avaktiverar eller pausar spelet.

6 – Inspectorfönstret där man får detaljerad information om det markerade objektet. Lite som attribute editor i Maya. Här kan man redigera och lägga till komponenter på objektet, så som transforms, colliders och scripts.

 

Skapa en första scen i Unity

När man skapar en ny scen i Unity utgörs projektet av en kamera, en ljuskälla (directional light) och en himmel (skybox).

Hämta vr-kameran från Asset store

Asset Store är ett bibliotek med resurser man kan använda i sina scener, till exempel animerade modeller, användbara scripts och färdiga miljöer. Det mesta i Asset Store måste man betala för att få tillgång till men där finns också en del som är gratis att ladda ner.

För att få vr att fungera med Unity behöver man använda sig av ett plugin som heter SteamVR. Det inkluderar en kamera som renderar vr. Sök efter SteamVR i asset store och slanga hem. Leta sedan upp kameran i SteamVR-mappen som skapats i projektmappen och dra in [CameraRig] till scenfönstret. Du kan även söka efter Camerarig i sökfältet för att snabbare lokalisera filen. Ta bort startkameran och vips är scenen vr-baserad.

För att snabbt få in objekt att leka med kan man importera ett gratispaket som heter ”Standard Assets” från Asset Store. Dels för att där finns en hel del användbara assets, så som material, script, modeller och framför allt så kallade prefabs. Prefabs är en typ av asset som fungerar som en sammansättning av objekt som man kan dra in flera kopior av i scenen. Sedan kan man redigera prefaben och därigenom ändras alla objekt som baseras på den. Eller så kan man redigera varje objekt för sig, där man vill skilja på dom.

Att ladda ner assets innan man lärt sig programmet är inte bara en bra idé för att använda direkt i projektet, utan också för att se hur erfarna användare bygger upp sina scener och prefabs. Även om man saknar erfarenhet vad gäller programmering kan man utläsa mycket ur färdigskrivna scripts och plocka ut sådant man kan ha användning av för att applicera i egna scripts.

Terräng

Unity har ett system för att skapa en terräng väldigt enkelt. Man skapar ny terräng genom menyn GameObject->3D Object->Terrain. Det påminner om Mudbox för de som är bekanta med det. Med pensel målar man höjningar och sänkningar i terrängen. Man kan även välja att måla med olika texturer och inkludera normal maps. Dessutom kan man måla ut objekt, så som träd och buskar. Något att tänka på när man börjar skapa terrängen är att man inte kan sänka ytan under grundhöjden.

Här kan ni se ett exempel på arbetsflödet då man skapar terräng med hjälp av Unitys terrängsystem:

Himmel och ljus

Himmeln utgörs av något som kallas skybox. Den redigerar man genom att gå in i menyn Window->Lighting->Settings. Där hittar man också inställningar för dimma och lite annat gott.

Det finns fyra olika ljuskällor att tillgå, utöver himmeln. Directional-, point-, spot- och arealight. Är man bekant med ljussättning i Maya så kan man också hantera dessa då de är förenklade versioner av det Maya har att erbjuda. Ljuskällorna hittar man under menyn GameObject->Light.

Skapa polygonobjekt i Unity

Utöver terrängen går det att skapa enkla 3d-objekt direkt i Unity men de är så enkla att de mest är att rekommendera som placeholders, osynliga kollisionsobjekt och så vidare.

Importera från Maya

Det vanligaste är att man exporterar .fbx-filer till Unity men det går också att använda .ma och .mb filer. Det krävs då att man har Maya installerat på datorn eftersom Maya behöver startas i bakgrunden för att konvertera scenerna till ett format som Unity kan hantera.

Topologi

Som de flesta spelmotorerna renderar Unity i trianglar. Quadsen (fyrkantiga polygoner) omvandlas alltså till trianglar vid rendering. Det är en osynlig process och kostar inte särskilt mycket datorkraft. Har man erfarenhet av 3d-modellering vet man att en quadbaserad topologi är att föredra under modelleringen av flera anledningar och det kan vi fortsätta hålla oss till. Det viktiga här är att hålla ner polygonantalet så mycket det går eftersom det ska renderas i realtid. Att rendera i virtual reality är krävande i sig och det börjar lätt att flimra om datorn inte hänger med i svängarna. Man får komplettera de förenklade modellerna med välarbetade texturer och normal maps.

Karaktärer

Man kan importera hela karaktärer skinnade och riggade från Maya för att använda direkt i Unity.

Det enklaste sättet att applicera animationer på karaktärer är att först importera karaktären med rigg från Maya och sedan baka animationer och exportera varje animation för sig för att sedan applicera på karaktären i Unity.

Här finns en enkel tutorial för den processen:

Interaktivitet

Visst är det häftigt bara att röra sig i en vr-miljö men det blir ännu mycket roligare om man kan interagera med den. En grundläggande funktion är att kunna lyfta upp, kasta runt eller stapla objekt i scenen med hjälp av kontrollerna. Till att börja med kan man lägga på rigid body och box collider komponenter på objekten man vill ska påverkas av spelets fysik. Objekten kommer då börja påverkas av gravitationen, faller och kolliderar mot terrängen som har en collider som standard.

För att få med kontrollerna i spelet krävs en del kodning. Det går säkert att hitta något användbart i Asset store. I vilket fall finns här en tutorial:

Sammanfattning

Som synes är det inte så omständligt att komma igång med en vr-scen i Unity. Tekniken gör att man kan få till en riktigt häftig känsla utan någon större ansträngning – speciellt för användare som inte har så mycket erfarenhet av det tidigare. Utmaningen är att använda vr-tekniken utan att det blir hela poängen.

Som grafiker och animatör är självklart de värsta svårigheterna att få ihop kodningen som krävs och jag rekommenderar starkt att bli kompis med någon kompetent programmerare, även om det går att leta upp en del färdiga scripts som man själv kan klura på och redigera.

Det man speciellt behöver tänka på när man jobbar med vr är att leda användarens uppmärksamhet till handlingen och utan stress. Annars är det lätt att användaren råkar titta åt fel håll och missar delar av spelet.

https://docs.unity3d.com/Manual/index.html

https://docs.unity3d.com/Manual/Prefabs.html

https://docs.unity3d.com/Manual/HOWTO-ImportObjectMaya.html

https://docs.unity3d.com/Manual/class-Skybox.html