PV255 – Herní grafika “IF IT LOOKS LIKE COMPUTER GRAPHICS, IT IS NOT GOOD COMPUTER GRAPHICS.” —JEREMY BIRN Osnova uÚvod uPolygonální sítě uVoxely uTerén u Úvod Úvod uNejen 3D, realistické vykreslení: u2D u2.5D uStylizace 2D / 3D uSiluety uZvýraznění obrysů uCartoon, cell shading, NPR uRučně kreslená grafika u u wolfenstein-3d.png 2.5D – Wolfenstein 3D (1992) Siluety – Limbo (2010) Siluety – Nightsky (2011) Siluety – Hero of Many (2013) Cartoon – Team Fortress II (2007) Cartoon, outlines – Prince of Persia (2008) Cartoon, outlines – Dungeon Defenders (2011) Cartoon – Bastion (2011) Hatching – The Bridge (2013, Unity) Ruční kresba – Inquisitor (2012) Ruční kresba – Machinarium (2009) Ruční kresba – Botanicula (2012) Vykreslování 3D dat uTypy vstupních dat: uGrafická primitiva – parametrické modely uConstructive solid geometry uCAD uPolygonální síť uVoxelová mřížka uVzorkovaná data (CT, MRI, ...) uMrak bodů (point-cloud) uSpecifické struktury u Osnova uÚvod uPolygonální sítě uVytváření uVykreslování uOptimalizace uVoxely uTerén u Polygonální sítě – opakování u„polygon soup“ uneorganizovaná skupina polygonů u u„polygon mesh“ ukolekce bodů, hran a plošek + informace o sousednosti uBod, ploška – normála (vektor kolmý k povrchu) uPloška – orientace (přední, zadní strana) u uMesh + mapy (textury) uBarva uBump-map (hrbolatost) uNormal-map uParalax occusion map uDisplacement-map u... u u u Polygonální síť – tvorba uRuční modelování utéma jiných předmětů (PB009, VV035, VV036) uŘada BP, DP: Tomáš Mádr – Tvorba herního charakteru uSpecifické nástroje uPostavy – MakeHuman, Fuse, Poser, … uTerén – Teragen, uStromy – TreeGenerator, u3D skenování uGeriho hra (1997) uThe Vanishing of Ethan Carter (2014) uProcedurální u3Ds Max, Blender, … uUnity: terén, stromy uCryengine, Unreal Ungine u Polygonální síť – tvorba uPraxe: Herní charakter uTomb Raider (1996) u230 polygonů uTomb Raider III (1998) u300 polygonů uTR – Angel of Darkness (2003) u4 400 polygonů uTR – Legend (2006) u9 800 polygonů uTR – Underworld (2008) u32 000 polygonů uTomb Raider (2013) u42 000 polygonů u Polygonální síť – vykreslování uVšechny polygony + všechny textury je potřeba: 1.nahrát na grafickou kartu 2.zpracovat: utransformovat uspočítat viditelnost upromítnout urasterizovat uspočítat osvětlení, barvy 3.vykreslit u Polygonální síť – vykreslování Grafické karty Frekvence Procesoru MHz Velikost Paměti MB Propustnost Paměti GB/s Zpracování Textur Mtexel/s Passmark RIVA 128 (1997) 100 4 1.6 100 n/a GeForce2 MX 400 (2004) 250 64 2.65 1 000 n/a GeForce4 MX440-SE (2009) 270 128 5.8 1 100 3 Geforce 240 (2009) 500 512 54 17 600 645 Geforce 580 (2010) 772 1 536 192 49 408 4 991 Geforce 780 (2013) 863 3 072 288 165 696 8 030 GTX Titan Z (2014) 837 12 288 672 338 000 8 015 GeForce GTX 980 Ti (2015) 1000 6 144 337 180 224 11 571 Polygonální síť – Optimalizace uPřed modelováním – nemodelujeme to, co není vidět: upohled první vs. třetí osoby ubudovy podél cest umotory u aut, … uPřed vykreslováním – optimalizace na výkon: uLevel of Details uBěhem vykreslování – výkon / vzhled uvyužití textur uteselace uodstřel uPo rasterizaci – optimalizace na vzhled uvyhlazování (antialiasing) uhloubka ostrosti (Depth of Field) u... u Level of Details – opakování u Princip: Čím větší vzdálenost objektu od kamery, tím méně detailů je vidět u Technika: LoD uVíce variant jednoho modelu s různou úrovní detailů uPodle vzdálenosti od kamery se vykresluje příslušná varianta modelu u u u u u u u u uLOD na texturách = MIP mapping u LoD – tvorba uVycházíme vždy z nejvyšší úrovně detailů, postupně model redukujeme: uRučně – „retopologizace“ – sami volíme, co je na modelu důležité, které hrany odstraníme uAutomaticky – algoritmy „mesh reduction“, „mesh decimation“ uVolíme cílový počet polygonů uSnaha o zachování obrysů u3D balíky, MeshLab, ... uAž za běhu uBlending, interpolace uprogressive mesh uAdaptive mesh u u Diskrétní LoD uDiskrétní změna úrovně detailů (1976): uJednodušší varianta: uNa implementaci (přímá podpora v herních prostředích) uNa výpočet uNejnižší LoD – pouze textura u uNevýhoda: „popping“ efekt – viditelné přepínání mezi jednotlivými úrovněmi u uVidea: uhttps://www.youtube.com/watch?v=bNB-9chmRDE uhttps://www.youtube.com/watch?v=ioOKejJYlyc u u Spojité LoD uSnaha vyhnout se popping efektu (1996) u Alpha blending – zobrazení obou úrovní současně u u Spojité LoD uSnaha vyhnout se popping efektu (1996) u Alpha blending – zobrazení obou úrovní současně u Geomorphs – Interpolace mezi dvěma diskrétními LOD u Unreal Engine u u Spojité LoD uProgressive meshes – H. Hoppe (1996) uVýpočet – postupné odebírání jednotlivých hran z nejvyšší úrovně uModel – nejnižší úroveň + posloupnost přidávání hran (vyšší spotřeba paměti) u u u LoD – další varianty uHLOD – hierarchical LOD (2001) uZákladem je hierarchie scény (scene-graph) uVhodné pro scény s velkým počtem objektů u uPohledově závislé LOD (1997) uČím blíže ke kameře, utím více detailů u uSiluety – více detailů uVnitřní části – méně Dělení povrchu (subdivision) uDělení povrchu se zaoblením: uBěžné v 3D modelování uFilm (Jan Pinkava, Geriho hra, 1997) uDělící schémata Catmull-Clark, Doo-Sabin, … u u u Mapování textur – opakování uPrincip: nemodelovat to, co je příliš malé nebo relativně ploché uTechnika: detaily jsou zachyceny pouze texturou, nikoli geometrií: uBarevná textura uSpecular-map, bump-map, normal-map, uMapy se používají při výpočtu stínování u uMísto high-poly modelu se pro vykreslení použije low-poly model + sada textur: uMenší objem dat uRychlejší vykreslení uNení závislé na vzhledu textury u uJe potřeba znát mapování textury na 3D model (UV mapping) u u Tomáš Mádr - high-poly model: 20 000 000 polygonů Tomáš Mádr: low-poly model + normálová mapa: 11 500 polygonů Tomáš Mádr: low-poly model + barevná, odrazivá a normálová mapa: 11 500 polygonů Parallax mapping uRozšíření techniky normal-mapping (2001) uPotřebujeme navíc výškovou mapu uPosun souřadnic textury na základě úhlu pohledu a výškové mapy u u Parallax Occlusion Mapping uPřidává sebe-zastínění, vrhání stínů uVidea: uhttps://www.youtube.com/watch?v=UeF-kCr_vyo uhttps://www.youtube.com/watch?v=gcAsJdo7dME u Shadery – opakování uShader = Program k řízení programovatelných částí GPU: uPixel/fragment shader uVertex shader uGeometry shader uTessellation shader uCompute shader u uTéma jiných přednášek a předmětů u Shadery – historie Fragment Pipeline Vertex Pipeline Texture Units Shader Processor (cuda cores) RIVA 128 (1997) 1 0 1 na GeForce2 (2004) 2 0 4 na GeForce 8500 GT (2007) 8 16 GeForce 240 GT (2009) 32 96 GeForce 580 GTX (2010) 64 512 GeForce 680 GTX (2012) 128 1536 GeForce 780 GTX (2013) 192 2304 GTX TITAN Z (2014) 480 5760 Teselace na GPU uTeselace = dělení roviny uTeselace na GPU – možnost dělit polygony až „na grafice“ uTeselace + posun vrcholů: uVyhlazování modelů – subdivision uÚprava geometrie pomocí map – displacement uAdaptivní úprava v rámci jednoho modelu u uHry: Alien vs. Predator, Metro 2033, Skyrim uVideo: https://youtu.be/-uavLefzDuQ?t=51s u u Vyhlazení pomocí teselace Vyhlazení + displacement mapping pomocí teselace Vyhlazení + displacement mapping pomocí teselace CryEngine: displacemet pomocí teselace Adaptivní teselace Klasická (vlevo) a adaptivní (vpravo) teselace (podle zakřivení) Adaptivní teselace Adaptivní teselace: podle vzdálenosti od kamery (b), podle zakřivení (c) Optimalizace v prostoru obrazu uPost-processing: uVylepšení / změna vizuálního dojmu v prostředí obrazu uDostupné v herních prostředích uTéma jiné přednášky u uAnti-aliasing uMotion blur, camera motion blur uFilmové zrno (grain) uGlow (Bloom), lens flares uMapování barev (noční vidění) uMlha uHloubka ostrosti (DoF) uLens effects (vignetting, chromatic abberations, tilt shift) uNPR – edge detection, u u Osnova uÚvod uPolygonální sítě uVoxely uTerén u Hry využívající voxely uHráč nemůže aktivně měnit voxely: uBlade Runner (1997) ucharaktery, předměty uOutcast (1999) unepoužívá voxely uTerén – vrhání parsku na výškovou mapu uSid Meier's Alpha Centauri (1999) uCommand & Conquer: Red Alert 2 (2000) ujednotky uCrysis (Cryenige, 2007) uterén pomocí kombinace výškové mapy a voxelů u Hry založené na voxelech uHráč může aktivně měnit voxely: uWorms 4 (2005) uVoxelstein (2008) uMinecraft (2009) uSpace Engineers (2013, early access (12. 10. 2015), indie) uCaste Story (2013, early access (12. 10. 2015), indie) u7 Days to Die (2013, early access (12. 10. 2015), indie) uPlanet explorers (2014, early access (12. 10. 2015), indie) uPlanets3 (2014, alpha (12. 10. 2015), indie) uEverquest Next, Landmark (2014-Beta (12. 10. 2015), SOE) uBlockspace (2014, early access (12. 10. 2015)) uStarForge (2014, indie, “mostly negative”) u u Voxely – opakování uVoxel = volume element uSouřadnice v 3D prostoru uDalší informace (barva, materiál, fyzikální vlastnosti, …) u uVykreslení voxelové mřížky uPřevod na iso-plochy – marchnig cubes, ... uPřímé zobrazování – např. vrhání paprsku (ray-casting) u u u Voxely – datové struktury Voxely – datové struktury uOctree (1890): uhierarchické dělení prostoru na osminy uRychlejší výpočet průchodu paprsku uVětší spotřeba paměti u uSparse voxel octree (SVO): uPrincip: Většina voxelů je prázdná uTechnika: Dělí se pouze částečně plné voxely uVarianta LOD uŘešitelné na GPU (2010) u Voxely – techniky ukládání dat uMnožství dat: u 2.6e17 * 2B ~ 500 000 000 TB u uProcedurální generování terénu uUkládáme parametry generátoru, nikoli samotná data uMinecraft: deterministický generátor - celý terén definovaný jedním číslem uPlus ukládání změn u u Osnova uÚvod uPolygonální sítě uVoxely uTerén u Terén – vstupní data uSnímkování reálných dat – Digital Elevation Models (DEM) uČR: ČUZK uSvět: USGS uPřesnost: uHorizontální: metry na pixel uVertikální: centimetry na pixel uUkládá se pouze nadmořská výška v každém bodě u Terén – vstupní data uGenerování uFraktální geometrie uBrownův pohyb uPosun středního bodu (mid-point displacement) uNáhodné poruchy (random faults) u2D Perlinuv šum u uPost-processing – vodní, větrná eroze u uNevýhoda - nelze generovat jeskyně, převisy, … Terén – ukládání uReálná data uTextury uPolygony jsou tvořeny až za běhu uPravidelná trojúhelníková mřížka uNejjednodušší uNejméně efektivní uNepravidelná trojúhelníková síť (TIN) uJe potřeba analýza vstupních dat uEfektivnější - méně polygonů na rovinných částech uDigitální kontury – vrstevnice uLze snadno vytvářet triangle-strip (až za běhu) u uGenerovaná data uParametricky uMinecraft – jediné číslo pro pseudonáhodný generátor u u Terén – vykreslování uPolygonální síť uPatches + LoD uProblém – jak spojovat pláty s různou úrovní detailů u uVoxely uChunks – převedení chunku na polygony uMinecraft – vykreslování krychlí u uHerní prostředí (Unity, Cryengine, Unreal Engine, …) uVlastní optimalizace uSchopnost převést výškovou mapu na vnitřní reprezentaci u u u Terén – vykreslování – „Clip-maps“ uZákladem je DEM, přepočtený na MIP pyramidu uVýsledná výšková mapa: use generuje v reálném čase, podle polohy kamery; uskládá se z různých vrstev MIP textury u u u u u u u u u u 02_clipmaps_01.jpg Terén – vykreslování – „Clip-maps“ uCílem je, aby všechny trojúhelníky zabírali přibližně stejný počet pixelů u 02_clipmaps_02.jpg Terén – vykreslování – ROAM uVarianta spojitého LOD pro terén uBinární strom – trojúhelník se dělí na dva menší uPohled kamery určuje jaká hloubka stromu se použije u uVideo (1:03): https://www.youtube.com/watch?v=PPjWW8uPp3o u u u u u XNA_ROAM.jpg Terén – Převisy, jeskyně, … uProlínání polygonálních sítí (mesh blending) – Unity uKombinace optimalizovaného terénu a dalších objektů uVideo: https://www.youtube.com/watch?v=pv8wjMGGGDM u uKombinace polygonální sítě + voxelové mřížky – CryEngine, Unity: uVideo: https://www.youtube.com/watch?v=PhXIkbaVaj8 u u u u Literatura •Knihy Game Programming Gems •Knihy GPU Gems (2004 … ) •J. D. Foley: Computer Graphics: Principles and Practice. (1990) •Watt – 3D Games:Volume 1: Real-Time Rendering and Software Technology (2000) •D. Luebke: Level of Detail for 3D Graphics, 2002 •… • •T. Mádr: Tvorba herního charakteru, BP •R. Tisovčík: •Generation and Visualization of Terrain in Virtual Environment, BP •Cartography in Virtual Environment, DP u u Literatura uČlánky: uJason Mitchell, Moby Francke, and Dhabih Eng. Illustrative rendering in Team Fortress 2. InProceedings of the 5th international symposium on Non-photorealistic animation and rendering(NPAR '07). ACM, New York, NY, USA, 71-76. 2007. DOI=http://dx.doi.org/10.1145/1274871.1274883