Procedurell Terräng med LOD i OpenGL 4

Relevanta dokument
Procedurell grottgenerator och eld i GLSL. Marcus Widegren

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

Procedurell renderingsmotor i Javascript och HTML5

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Procedurell 3D-eld på grafikkortet

TNM022 Proceduella Bilder Rendering av proceduell päls i realtid

Grafiska pipelinens funktion

The Procedural Arctic

Omtentamen. TNM077 3D-datorgrafik och animering kl 8-12 Inga hjälpmedel. (samt även TNM008 3D-datorgrafik och VR)

Grafiska pipelinen. Edvin Fischer

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR)

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Procedurell stad. Projekt i kursen TNM022 Procedurella metoder för bilder. Tobias Heldring, tobhe

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

Projekt i TNM084, Procedurella bilder

Geometry shaders! och Tesselation shaders!

Geometry shaders! och Tesselation shaders!

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

VISUELLA FÖRHÅLLANDEN

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

Koordinatsystem och Navigation

Stokastisk geometri. Lennart Råde. Chalmers Tekniska Högskola och Göteborgs Universitet

HAND TRACKING MED DJUPKAMERA

Inledande kurs i matematik, avsnitt P.2. Linjens ekvation kan vi skriva som. Varje icke-lodrät linje i planet kan skrivas i formen.

Rastrering och displayalgoritmer. Gustav Taxén

Bildbehandling i frekvensdomänen

Undersökande arbetssätt i matematik 1 och 2

Föreläsning 9 10: Bildkvalitet (PSF och MTF)

Kort introduktion till POV-Ray, del 1

Realtidsalgoritmer för ljusets spridning och absorption mot partiklar i luften P E T E R L Ö N N Q U I S T

Bézierkurvor och parametriska objektrepresentationer

Designing a Shading System. David Larsson

Tentamen TNM061 3D-grafik och animering för MT2 och DAV1

Simulering och rendering av gräs och vind i realtid

Exempel på hur man kan bygga enkla former i Illustrator

Profilmanual, internt

Känguru 2012 Junior sivu 1 / 8 (gymnasiet åk 1) i samarbete med Jan-Anders Salenius vid Brändö gymnasiet

Parabeln och vad man kan ha den till

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard

Blandningsfunktionerna är indelade i grupper och genomgången följer denna gruppering i Photoshop. Funktionen hittar du överst i lagerpanelen.

C-UPPSATS. Revitalizing classic art using real-time game technology

bilder för användning

Uppgift 4 Människor i miljö

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

1. Det står KANGAROO på mitt paraply. Du kan se det på bilden. Vilken av följande bilder visar också mitt paraply? A: B: C: D: E:

Teknik för avancerade datorspel!

2: E TOOT Bokstäverna O och T har en lodrät symmetriaxel, men inte R, B och L. Därför kommer endast ordet TOOT kunna skrivas på detta sätt.

Kurvlängd och geometri på en sfärisk yta

Steg 1 Klipp ut de figurer du behöver! Steg 2 Bygg din rymdraket! Matematikuppgift 1

A comparison study between OpenGL 4.3, OpenGL ES 3.0 and WebGL 1.0 With focus on rendering pipeline and texture handling

Trepoängsproblem. Kängurutävlingen 2011 Cadet. 1 Vilket av följande uttryck har störst värde? 1 A: B: C: D: E: 2011

PROCEDURELL GENERERING AV VOLYMETRISK TERRÄNG PÅ OLIKA BERÄKNINGSENHETER

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation

UPPGIFT 1 ÖVERSÄTTNING

Teknik för avancerade datorspel!

Perfekt skärpa i Photoshop

Avdelning 1, trepoängsproblem

Laboration - Shaders

Observera också att det inte går att både se kanten på fönstret och det där ute tydligt samtidigt.

Här är ett väldigt bra tidpunkt att spara scenen. Jag har valt att bygga ett litet pyramidtorn.

Introduktion till Terragen 3 TNM084 Lab4 2013

Avdelning 1, trepoängsproblem

? A: -1 B: 1 C: 19 D: 36 E: 38 Belarus A: ROOT B: BOOM C: BOOT D: LOOT E: TOOT A: 1,5 B: 1,8 C: 2 D: 2,4 E: Vilket tal bör ersätta

ARKITEKTPROVET 2013 DAG 1. 1: LINJE & VECK [ENKELHET, UNDERSÖKNING] [1H]

design & layout Distansskolan 1

INVERKAN AV UPPLÖSNING OCH RENDERINGS PRECISION PÅ VOLYMETRISK ELD I REALTID

HALFTONE SHADER APP HEMSIDA: Skapad av: John Tolunay

1.1 Verktygslådan översikt

Trepoängsproblem. Kängurutävlingen 2019 Cadet. 1 Vilket moln innehåller endast jämna tal? A B C D E

Inledning. Kapitel Bakgrund. 1.2 Syfte

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Avdelning 1, trepoängsproblem

Uppgifter till praktiska tentan, del A. (7 / 27)

Optisk bänk En Virtuell Applet Laboration

2. 1 L ä n g d, o m k r e t s o c h a r e a

Namn: Hundradelar. 4 tiondelar 0, 4 17 tiondelar 1, tiondelar 298 hundradelar. Hundradelar. 98 hundradelar 875 hundradelar

Ljussätt med studioljus. Tobias Fischer

FORMER, MÖNSTER OCH TESSELERINGAR

Färgtyper. Färg. Skriva ut. Använda färg. Pappershantering. Underhåll. Felsökning. Administration. Index

Ljusets böjning & interferens

MMA127 Differential och integralkalkyl II

= A: 0 B: 1 C: 2013 D: 2014 E: 4028

Färglära. Ljus är en blandning av färger som tillsammans upplevs som vitt. Färg är reflektion av ljus. I ett mörkt rum inga färger.

Version 1 Mosaikplattor

Geometrisk optik. Laboration

Matematik CD för TB = 5 +

Tron Style OpenGL ES 2.0 Shaders för ios Möjligheten att implementera ett Bloomfilter på ett ios-device

Känguru 2016 Student gymnasieserien

Avdelning 1, trepoängsproblem

Generering av L-system fraktaler med Processing.js

Bildmosaik. Bilddatabaser, TNM025. Anna Flisberg Linne a Mellblom. linme882. Linko pings Universitet

I rastergrafikens barndom...gjorde man grafik genom att skriva i ett videominne. Operationer på buffert och pixlar. Idag... Varför grafikkort?

Fler uppgifter på andragradsfunktioner

Grundredigering i Photoshop Elements

Matematik CD för TB. x + 2y 6 = 0. Figur 1:

Texturerade 3D-modeller

4-4 Parallellogrammer Namn:..

Grundredigering i Photoshop Elements. Innehåll. Lennart Elg Grundredigering i Elements Version 2, uppdaterad

Transkript:

Procedurell Terräng med LOD i OpenGL 4 TNM084: Proceduella metoder för bilder ITN, Linköpings universitet Lucas Correia, lucco863@student.liu.se

Bakgrund Terräng är ett tydligt exempel där procedurella metoder lämpar sig väl att användas. En procedurellt generad terräng har ett flertal föredelar jämfört med explicit definierad terräng. En procedurellt generad terräng behöver inte vara repetitiv och kan vara detaljrik både på långt och nära håll. Terrängen kan på effektivt sätt representeras som en nivåyta, där höjden är en funktion av x- och y-koordinaten. Med denna representation kan man inte ha terräng med grottor eller överhäng, men bortsätt i från det är det en flexibel och enkel representation. Nivåytan kan skapas explicit utifrån en textur där intensiteten representerar terrängens altitud. Här kommer istället en procedurellt med hjälp av noise-funktioner. Antalet trianglar i modellen blir snabbt en flaskhals när man eftersträvar en detaljrik terräng, där små höjdskillnader. För att mitigera effekten kan man använda sig av så kallad LOD (level of detail) där man adaptivt låter detaljrikedomen bestämmas och har fler trianglar på nära håll och färre vid plana ytor långt bort. Metod Implementation Projektet är i skrivet i C++ och använder sig av grafikbiblioteket OpenGL, version 4. Fönsterhanetering och inmatning ifrån mus och tangentbord sköts med GLFW, Sony vectormath library används för vektormatematik och GLEW för att underlätta hanteringen av ny funktionalitet i OpenGL. Förutom ett enkelt huvudprogram har klasser för shader-hantering och en kamera implementerats. Geometri och LOD Geometrin är i huvudprogrammet enkelt uppbygd av ett rutnät av tvådimensionella punkter med x- och y-koordinat. Dessa skickas till shadern där generingen av nivåytan sker i grafikhårdvaran. För att generera geometrin och på samma gång få LOD används en metod som kallas för tesselering. Tesselering innebär att trianglarna i modellen förfinas delas upp i flera mindre trianglar. I OpenGL 4 har tesselering implementerats som en del av pipeline:n, som visas i figuren nedan.

Figur 1: Renderingsprocessen i OpenGL 4: programmerbara steg har markerats med en svart kant. De gröna tesselerings-stegen är nya i OpenGL 4. Implemenationen bygger på metoden i [1], och beskrivs här kortfattat. I Tesselation Control bestäms vilken nivå primitiven ska tesseleras till. Själva tesseleringen sköts av OpenGL och de nya hörnpunkternas position bestäms i Tesselation Evaluation. Genom att låta tesselerings-nivån bero på en parameter kan man enkelt införa LOD till geometrin. Den enklaste parametern är avståndet till kameran, vilket redan det är ett effektivt sätt att kontrollera hur många trianglar som genereras. Ett bättre sätt är att att låta triangelns pixelstorlek på skärmen avgöra vilken nivå som krävs för att få en detaljrik värld. Genom att sätta nivån till noll kan primitiver utanför skärmen också ignoreras, vilket ytterligare leder till en snabbare rendering. Wireframe-rendering För att kunna se hur tesseleringen genomfördes användes en effektiv wireframe-rendering med hjälp av shaders. Metoden[3][4] är ett effektivt sätt att i ett pass rendera trianglarnas kanter genom att beräkna avståndet till triangelns kanter i geometry-shadern och låta dessa värden interpoleras till fragment-shadern. Två avstånd används, dels ett till de ursprungliga primitiverna och ett till de nya, tesselerade, trianglarna. Höjdfunktion För att beskriva terrängens höjd används en fraktalsumma. Summan är uppbyggd av "flow noise" i två dimensioner, skrivet av Stefan Gustavson. Negativa och låga värden är dämpade med hjälp av en smoothstep-funktion, vilket ger upphov till plana ytor och höga berg.

Normaler För att kunna använda en enkel belysningsmodel, där ytor vända mot solen är ljusa, behöver ytan ha definierade normaler. Normaler har inkluderats på två sätt, dels approximerade numeriska och dels analytiska. De approximerade beräknas genom att sampla höjdfunktionen fyra gånger, vilket gör dem väldigt beräkningstunga. De analytiska använder sig av gradienten som fås från flow-funktionen. Färg Terrängen är indelad i fyra zoner baserat på höjden, vilket ger den grundläggande färgen (vit, brun, grå, vit). Lite noise läggs på höjd-värdet för att inte få raka övergångar. Smoothstep används för att få mjuka övergångar mellan zoonerna. Den gråa zoonen har lite skarpa stenliknande detaljer. Dessa använder sig av funktionen aastep[2] för att få alias-fria övergångar oavsett betrakningsavstånd. För att få lite mer variation i utseendet läggs det på summa av noisefunktioner med ökande frekvenser. Slutligen används en enkel diffus belysningsmodell för att ljussätta ytan. Atmosfär För att få ett bättre utseende på bakgrunden gjordes en enkel atmosfär. Detta görs genom att rita ut en rektangel som täcker hela skärmen bakom terrängen. I fragmentshadern kan sedan rektangeln programmeras till att likna en himmel. Atmosfären är uppbyggd av två lager: en stjärnhimmel, och en klarblå dagshimmel. Stjärnhimmeln består av en svart bakgrund och högfrekvent simplex noise som är trösklat med ett högt värde, vilket resulterar i små vita stjärnliknande fläckar. Dagshimmeln består av en vertikal gradient från vitt via blått till vitt igen. Den blå nyansen bestäms av vilket vädersträck man tittar i. Animerade moln skapades genom att låta en mjukt trösklad fraktalsumma av simplex noise adderas till färgen. De två lagren alterneras slutligen med hjälp av en tidsvariabel. Resultat Nedan visas några bilder ifrån programmet.

Diskussion Att använda sig av tesselerings-shaders för att rendera terräng med LOD visade sig vara ett effektivt och bra sätt att hanskas med stora och detaljrika miljöer. Den största påverkan kommer i från höjdfunktionen, dels för att den är relativt komplex och dels därför att den används så många gånger. Den används i tesselation control för att bestämma tesseleringsnivå, i tesselation evaluation för att bestämma hörnpunkternas position och i fragment shadern för ljusberäkningen. Däför behövdes antalet oktaver i fraktalsumman hållas relativt lågt. Tio oktaver användes i slutversionen, vilket gav ett gott resultat med rimlig bildfrekvens. Normalerna visade sig vara mer komplicerade än först väntat. Det första försöket med approximerade normaler var för bekräkningstungt och de analytiska begränsade möjligheterna till att kombinera olika sorters noise i höjdfunktionen. I slutändan var normalerna fel i vissa regioner, då höjden begränsas av en smoothstep-funktion medan gradienten inte gör det. Det visuella intrycket skadas dock inte så mycket, utan det kan istället tyckas se ut som om bergen skuggar visa plana ytor. Atmosfären var inte fokus för projektet och kunde ha gjorts bättre. Exempelvis hade jag velat ha med en animerad sol och mer variation i färgerna. Referenser 1. GPU Tessellation, Antionio Ramires and Bruno Oliveira 2. Procedural Textures in GLSL, Stefan Gustavson 3. Triangle Tessellation with OpenGL 4.0, http://prideout.net/blog/?p=48 4. Single-pass wireframe rendering, Bærentzen, Nielsen med flera. 5. Realtime Procedural Terrain Generation, Jacob Olsen. 6. Texturing & Modeling: A Procedural Approach, Ebert Musgrave med flera.