Základy 3D grafiky

Website: Moodle ZČU
Kurs: KPV/DPVR Digitální podnik a virtuální realita
Buch: Základy 3D grafiky
Gedruckt von: Gast
Datum: Donnerstag, 22. Oktober 2026, 09:05

1. Úvod

Základním stavebním kamenem VR, budeme-li ji vnímat jako vtažení a obklopení 3D umělým prostorem, je právě 3D prostor. Takový 3D prostor může být i uměleckým dílem se vsím, co k němu patří. 

Podívejte se na technologické demo k novému Unreal Enginu, který představuje high-end:


Pozn.: Je třeba podotknout, že virtuální svět této kvality vyžaduje náročný vývoj.

Následující kapitola vysvětlí, jak 3D prostor vzniká. Na jeho zobrazení nebude zatím potřeba žádných speciálních pomůcek. Zatím si vystačíme jen s průměrně rychlým počítačem. Nechceme se příliš zmiňovat o složité matematice, která za vším stojí. Spíše se zaměříme na metody, prostředky a akce nezbytné k vykreslení 3D scén. 

Při zobrazování trojrozměrných objektů stojíme před obtížným úkolem, a sice, jak vykreslit ve dvojrozměrném obraze objekty, které jsou ve skutečnosti trojrozměrné. Pozorovatel musí získat dojem, jakoby scénu sám viděl nebo si prohlížel její fotografii. Při zobrazování se používá více postupů. Některé kladou důraz na rychlost zobrazované scény a schopnosti zobrazit ji v reálném čase. To je např. prostředí v konstruktérské aplikaci. Další postupy pak spíše kladou důraz na špičkovou fotorealistickou kvalitu výsledného obrazu. To je příklad finálního výpočtu pohledu v konstruktérském programu nebo finálního střihu 3D animovaného filmu. V praxi se tyto techniky mohou kombinovat a je možné se setkat s oběma i v rámci jednoho systému.

Tzv. "Standardní zobrazovací řetězec" patří mezi ty techniky, kde primární je rychlost a kvalita je přitom v mnoha aplikacích dostatečná. Používají ji mnohé CAD programy, hry, letecké simulátory a mnoho VR aplikací. Tato technika je využívána v grafických standardech Direct3D nebo OpenGL (viz. dále) a je podporována výrobci grafických karet. Pokud vyžadujeme od výsledného obrazu maximální možnou kvalitu, je lepší používat metody jako je ray-tracing (sledování paprsku) nebo radiosity (vyzařovací metoda) nebo jejich kombinaci. Tyto techniky se používají zejména pokud máme možnost si obrazy nebo film předem připravit a nevyžaduje od nich interaktivitu. Tyto techniky se používají ve strojírenství, stavebnictví, návrháři, ve filmovém průmyslu atd.


Použité zdroje:

Hlavním zdrojem, který byl využit při sestavování těchto kapitol je kniha Jiří Žára, Bedřich Beneš, Jiří Sochor, Petr Felkel, Moderní počítačová grafika (2. vydání), Computer Press, 2005, ISBN 80-251-0454-0. Je dostupná online v knihovně ČVUT na adrese: https://dcgi.fel.cvut.cz/cgg/ModerniPocitacovaGrafika/


2. Realističnost a rychlost 3D grafiky

Pokud se zamyslíme nad tím, co je hlavním cílem 3D grafiky? 

Pokud se bavíme o finálním obraze na monitoru, jde o to převést 3D scénu na 2D plochu monitoru. Pokud se bavíme o 3D vjemu, který je typicky tvořen dvěma obrazy. Je potřeba tento proces zopakovat 2x, tj. pro každé oko.

Tento proces je shodný jako proces fotografování, popř. pořízení rentgenového snímku - jak je vidět na Obr. 1.


Obr.1 Projekce

Pokud se podíváme na samotné zobrazování, lze na něj pohlížet z mnoha pohledů. My si zavedeme rozdělení s důrazem na:

1) rychlost (viz. Obr. 1)

  • jedná se například o 3D strojírenské software
  • zobrazují standardní zobrazovací řetězce
  • dochází k výpočtu scény, tzv. renderingu v reálném čase - cca 30 snímků/sec


Obr.2 Zobrazování s důrazem na rychlost

2) realističnost (viz. Obr. 2)

  • typicky filmy, popř. počítačové hry
  • např. využití metody sledování paprsku - raytracingu (nebo radiosity)


Obr.3 Zobrazování s důrazem na realističnost

3. Rendering

Je důležité si definovat pojem rendering - to znamená generování fotorealistického nebo nefotorealistického obrázku z daných abstraktních dat. Tato data mohou obsahovat např.:

- popis geometrie objektů

- textury 

- světla

- ořezání scény atp.

Podívejte se na video, které ukazuje kroky, díky kterým je generován jeden snímek v počítačové hře:



Podrobněji bude rendering pomocí grafické pipeline (neboli standardního zobrazovacího řetězce) probrán dále v samostatné kapitole.

Většinu těchto výpočtů vykonává grafický čip (GPU). Některé kroky pak může vykonávat i CPU (procesor). Pokud GPU danou operaci "neumí" je úkol převeden na CPU, což může vést k nižší rychlosti renderování.


4. Rendering - funkcionalita

Rendering se snaží na základě (často) fyzikální vlastností skutečného světa vytvořit snímky z dat virtuálních. Tento proces zahrnuje celou řadu algoritmů, které je možné rozdělit do několika skupin:

- Shading - výpočet barvy a světlosti na základě osvícení

- Texture Mapping - mapování 2D obrázků (textur) na plochy 3D objektů

- Bump Mapping - simulace nerovného povrchu ploch 3D objektů

- Fogging - výpočet (simulace), jak světlo proniká přes atmosféru vzduchem

- Shadows (Shadowing) - výpočet stínů

- Soft shadows - výpočet měkkých stínů (zákryty, uvažování poloprůhledných objektů)

- Reflection - odrazy (zrcadla, leštěné povrchy)

5. Rendering - Techniky

Při výpočtu scény je možné využívat různé techniky (algoritmy) pro výpočet finální scény. V současné době jsou relevantní dvě základní techniky pro výpočet 3D scény:


- Rasterizace

- Metoda sledování paprsku (raytracing)


Metoda rasterizace

Tato metoda převádí geometrické objekty na pixely bez uvažování jejich barev, tj. barev daných materiálem a nasvícením, které je nutné dodat pomocí tzv. Shadingu (viz dále). Metoda rasterizace je extrémně rychlá v porovnání např. s raytraingem, proto se používá v mnoha grafických enginech. Obr.1. ukazuje, jak jsou trojúhelníky 2D (popř. 3D) objektu rasetrizovány.


Obr. 1 Rasterizace trojúhelníků

V základu metoda neuvažuje žádné přidané optické efekty (odrazy, lesklé plochy atp.). Je však možné tyto efekty pomocí různých dalších algoritmů dopočítávat.


Raytracing


Metoda raytracingu lépe simuluje fyzikální vlastnosti světla. Finální generovaný obraz pomocí metody sledování paprsku je počítán tak, že skrz rovinu "obrazovky" je (směrem od pozice očí) vysílán paprsek (vektor). Tento paprsek "naráží" na první 3D objekt. Z tohoto objektu je paprsek (typicky však další paprsky) dále odrážen. V tento okamžik může narazit na jiný objekt nebo světelný zdroj. Na základě trajektorie (a na ní nasbíraných dat) a vlastností materiálu povrchu je pak určena barva pixelu na obrazovce - viz Obr. 2.



Obr. 2 Metoda raytracingu

Porovnání

Rasterizace se využívá všude tam, kde cílíme na výpočet v reálném čase. Výsledky metody raytracing jsou mnohem realističtější, avšak je to "zaplaceno" vysokým výpočetním výkonem. Od konce roku 2018 již je možné používat i metody raytraing v reálném čase pro běžné "domácí" účely, a sice díky architektuře RTX od NVidia. Novodobé grafické karty již raytraing v reálném čase svedou, je to samozřejmě vykoupeno nutností vysokého výkonu. 


Zdroje:

Tyto kapitoly jsou dobře zpracovány ve Wikipedii, která v tomto případě byla využita jako zdroj.


https://en.wikipedia.org/wiki/Rasterisation

https://en.wikipedia.org/wiki/Ray_tracing_(graphics)

6. Raytracing - ukázky

Podívejme se na video, které ukazuje možnosti RTX architektury, která umožňuje raytracing v reálném čase:


7. Vykreslovací smyčka

Každá grafická aplikace běží v nějaké nekonečné smyčce. Ta nejzákladnější a nejjednodušší smyčka (loop) vypadá asi nějak takto:


Obr. 1 Vykreslovací smyčka

Po spuštění apliace a načtení všech zdrojů (resources) se kód hry dostává do nekonečné smyčky Update – Draw. Je to naprosto triviální smyčka, v které aplikace zůstává po celou dobu až do okamžiku, kdy ve hře nějakým příkazem Stop, tuto smyčku opustíme a aplikaci ukončíme.

Ve fázi Update se zjišťuje interakce uživatele, tedy například zda byla stisknuta nějaká klávesa, či pohnuto myší. Pokud ano, pak (typicky) u všech objektů, které tvoří 3D scénu, musí být přepočtena jejich nová pozice (transformace). Ve fázi Draw je pak tato nově zkomponovaná scéna odeslána k zobrazení na monitor. Pokud ve fázi Update žádná interakce hráče nebyla zjištěna, kompozice scény se nemění, žádná transformace se počítat nemusí a je hned zavolána procedura Draw, která opět odešle, tentokrát ale nezměněnou, scénu k zobrazení na monitoru.

Nyní si všimněte jedné věci. Pokud nebyla žádná interakce a transformace objektů ve scéně tak nemusela být počítána, snímková frekvence (počet průchodů smyčkou) musí být jiná (vyšší), než kdyby interakce byla a transformace objektů se tak musela počítat. Je to samozřejmě tím, že procesor při výpočtu transformace objektů trávil ve fázi Update delší dobu (musel něco počítat) a průchod smyčkou tak zdržel. Existuje celá řada přístupů - smyček, které berou v potaz i časování, nebo omezení snímkové frekvence.


Fáze Draw

Druhou částí smyčky je fáze Draw, kde má být scéna nebo objekty scény vykresleny na obrazovce monitoru.

Samotné vykreslování scény není prováděno přímo na obrazovku počítače, ale jsou k tomu zapotřebí nějací "pomocníci". V první řadě je to grafická karta, která jako jediná umí komunikovat s monitorem počítače a softwarový prostředek 3D API (Application Programming Interface). Důvod vzniku 3D API je poměrně prostý. Když vývojář vytváří 3D aplikaci, nikdy neví, kdo si jeho hru zakoupí a jakou grafickou kartu ve svém počítači onen uživatel používá. Grafické karty mohou být od různých výrobců a mohou tak používat pro vykreslení scény rozdílné příkazy a kódy. Proto bylo nutné vytvořit mezi samotnou aplikací a grafickou kartou ještě univerzální rozhraní, které by (kromě jiného) na svém vstupu od aplikace převzalo příkazy na vykreslení scény a podle druhu grafické karty by pak tyto příkazy převedlo do jazyka, kterému daná grafická karta rozumí a scénu nakonec zobrazí.

Pokud se zde budeme bavit o operačním systému Windows, v kterém hrajete hry asi nejčastěji, pak jeho „domácím“ 3D rozhraním je DirectX (resp. Direct3D). Druhým používaným grafickým API je na Unixu vzniknuvší OpenGL.


8. Shadery

Nežli si shrneme, jak vypadá tzv. standardní vykreslovací řetězec, tj. typický proces, který zajistí vykreslení 3D scény, definujme pojem shader.

Shader je počítačový program sloužící k řízení jednotlivých částí programovatelného grafického řetězce grafické karty (přesněji GPU). K tvorbě takových programů slouží specializované programovací jazyky tzv. shader jazyky (například jazyk GLSL pro OpenGL, Cg od společnosti NVIDIA nebo HLSL od společnosti Microsoft určený pro API DirectX, Xbox a Xbox 360). Shadery se rozdělují na několik základních typů podle toho, pro kterou jednotku grafického řetězce jsou určeny. V současnosti patří mezi nejdůležitější vertex, pixel a geometry shader. S příchodem posledních generací grafických karet a nových verzí grafických rozhraní (DirectX a OpenGL) se rovněž začínají rychle prosazovat shadery pro realizaci tzv. teselace.

Vertex shader

Program, který se provede na každém vrcholu (vertexu) vstupní geometrie scény. Mezi nejčastější operace patří transformace vrcholu (násobení pohledovou a "world" maticí). Pomocí transformací lze však dosáhnout i různých grafických efektů — např. simulace pohybu vodní hladiny. Vždy do programu vstoupí jeden vrchol, je upraven a zase vystoupí, nelze tedy vrcholy přidávat či odebírat.

Podívejte se např. jak je možné "hrát" si s Vertex (a Fragment - viz dále) shadery v Unity - https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html

Geometry shader

Geometry shader na rozdíl od vertex shaderu umožňuje přidávat nebo odebírat vrcholy a tím ovlivňovat výslednou geometrii. Geometry shader lze využít například pro generování jednoduché vegetace (trávy) na povrchu nějakého objektu či k doplnění detailů existujícího modelu (např. vytvoření ostnů na modelu dinosaura) v reálném čase.

Na následujícím videu je vidět, jak lze po aplikaci geometry shaderu modifikovat geometrii 3D objektů:


Pixel (fragment) shader

Pixel shader je prováděn na každém pixelu rasterizované scény — pracuje tedy s jejím 2D obrazem. Mezi nejčastější operace patří aplikace textur případně další modifikace barvy pixelu.

Pixel shader je ukázán také ve výše uvedeném odkazu - https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html

Teselace

S příchodem Direct3D 11 a OpenGL 3.2 byl vykreslovací řetězec (3D pipeline) rozšířen o nové stupně realizující teselaci. Jedná se o hardwarovou podporu vykreslování opakujících se vzorů.

Typicky je tak možné díky teselaci výrazně zjemnit trojúhelníkovou síť modelu a získat tak realističtější obraz (např. pomocí matematické aproximace nových vrcholů nebo tzv. displacement maps). Velmi zajímavé video vysvětluje principy, výhody i limity:



Dva z těchto celkem tří stupňů jsou programovatelné. Názvy příslušných shaderů se u jednotlivých rozhraní liší. Pro Direct3D jsou to Hull-shader a Domain-shader, pro OpenGL potom Tessellation control shader (TC) a Tessellation evaluation shader (TE). Tyto shadery umožňují měnit geometrii objektů (podobně jako geometry shader). Díky podpoře teselace zakotvené přímo v hardware (GPU) je možné do scény přidat velmi velké množství detailů (a to tam kde jsou potřeba např. dle vzdálenosti od kamery).


9. VIDEO: Ukázky různých shaderů

Podívejte se, jak vypadá využití různých shaderů (resp. kombinací vertex, geometry a pixel shaderů) v populární hře Minecraft:



A ještě obrázek:

Revamped Shader Comparison : Optifine

Obr. 1 Shadery ve hře Minecraft (Zdroj: https://www.reddit.com/r/Optifine/comments/fa1c3m/revamped_shader_comparison/)

10. Programovatelná 3D pipeline

Nyní si vše podstatné shrneme:

V rámci vykreslení scény (renderingu) se bavíme o tzv.  programovatelné 3D pipeline, popř. také o tzv. standardním zobrazovacím řetězci. Praktická ukázka vykreslení snímku byla vidět v kapitole Rendering.

V rámci pipeline je možné některé části plně naprogramovat, některé konfigurovat a jiné jsou plně ovládány hardwarem, což je vidět na následujícím obrázku:



Obr. 1 Programovatelná grafická pipeline

- na vstupu do vykreslovacího řetězce jdou data, která reprezentují scénu, tj. participující 3D modely - tyto jsou typicky reprezovány pomocí trojúhelníkové sítě (viz další kapitola). Načež je geometrie objektu přizpůsobena orientaci kamery.

- dále je provedena teselace (pokud je žádána), tj. zjemnění trojúhelníkové sítě 3D objektů

- pak jsou spuštěny geometrické shadery, tj. přidání nových "prvků" do geometrie, popř. manipulace se stávající geometrií

- scéna je pak transformována do okna obrazovky. Je zde "počítáno" s tím, že hledáme výsledný 2D obraz a vypočítá se i tzv. Z-Buffer - to znamená vzdálenost dílčích vertexů, plošek a 3D objektů od roviny projekce (obrazovky) - a sice směrem "dozadu".

- před aplikací osvětlení a textur je pak provedeno ořezání objektů, které nebudou ve scéně vidět (tj. Culling)

- Dále jsou aplikovány textury, které již pracují s osvětlením scény (texel - je pixel s aplikovanou barvou od textury a osvětlení)

- Na konci jsou aplikovány různé celoobrazovkové efekty - např. Antialiasing (viz dále)

Výstupem je tedy rastrový obrázek, který se vykresluje do tzv. Back-Bufferu. Snímky jsou obvykle počítány "dopředu". V okamžiku, kdy se jeden snímek na obrazovce objeví, následující se vypočítává nebo je již vypočítán.

11. 3D model - drátěný model

Mnoho objektů v trojrozměrném objektu má charakter tělesa, které zaujímá určitý objem. Díky své jednoduchosti je trojúhelník typickým stavebním kamenem těles. Na rozdíl od mnohoúhelníků je vždy konvexní a jeho vrcholy leží v rovině. Zobrazování trojúhelníků navíc podporuje většina grafických karet a pro vyplňování existují rychlé algoritmy.


Obr. 1 Model konvičky pomocí trojúhelníků (Zdroj: https://techterms.com/definition/wireframe)

Častokrát je vidět i reprezentace pomocí čtyřúhelníků (popř. obecně mnohoúhelníků). Každý čtyřúhelník je však stejně při výpočtu rozdělen na dva trojúhelníky.

Aproximace povrchu

V případě složitějších těles, který zahrnují kulové plochy nebo křivky jsou tyto také nakonec reprezentovány pomocí trojúhelníkové sítě. Je potřeba si rozmyslet s jakou jemností budeme dané těleso (plochu) nahrazovat. Podívejme se na obrázek Obr.2 , kde vidíme nahrazení koule čtyřúhelníky (každý = dva trojúhelníky) - Zde byly čtyřúhelníky zvoleny kvůli přehlednosti. 


Obr. 2 Nahrazení koule množinou čtyřúhelníků

Vidíme, že v případě koule je téměř nutné použít jemnější rozlišení. Koule vlevo nahoře je rozdělena na 32 čtyřúhelníků po jejím obvodu. Je vidět, že pro aplikace, kde nevyžadujeme vysokou přesnost zobrazení nebo těleso bude v porovnání s ostatními objekty malé, je 16 čtyřúhelníků ještě v pořádku. 8 čtyřúhelníků po obvodu (viz Obr. 3) již vypadá jako herní kostka a 4 segmentová koule kouli již vůbec nepřipomíná.


Obr. 3 Aproximace koule osmi segmentu po obvodu

12. 3D model - terminologie

Na 3D modelu definujeme 3 základní pojmy. Kvůli budoucí práci v grafických programech je vhodné se přidržet anglické terminologie:

Face (ploška) - je polygon na 3D modelu

Edge (roh) - každý "čárový segment" na 3D modelu. Jedná se o průnik dvou plošek

Vertex - bod v prostoru, který je definovaný souřadnicemi. Jedná se o průnik dvou rohů. 



Obr. 1 Face, edge a vertex

Součet plošek a vertexů se musí rovnat počtu rohů + 2. Tato závislost se nazývá Eulerův teorém.

F + V = E + 2

Ukažme si to na příkladu



Obr. 2 Ukázkové těleso

, kde je vidět, že:

Faces + Vertices = Edges + 2

5 + 6 = 9 + 2

Zdroj:

https://www.ck12.org/geometry/solid-figures/lesson/Polyhedrons-BSC-GEOM/

13. Datová reprezentace modelu

Ukažme si nyní jednu z mnoha možností, jak 3D těleso uložit datově. V této kapitole se zaměříme na to, jak uložit základní geometrii.

Jedna z často používaných metod je využití dvou tabulek (matic):

- Tabulka vrcholů

- Tabulka spojnic vrcholů (plošek)

Podívejme se na obrázek:


Obr. 1 Datová reprezentace vrcholů krychle 

Ukážeme si, jak tyto dvě tabulky budou vypadat pro jednoduchý model kvádru. Nejprve si ukažme tabulku vrcholů, která obsahuje vždy indexové číslo vrcholu a k němu pak jeho souřadnice v prostoru:



Podívejte se na další obrázek:


Obr. 2 Trojúhelníkové plošky

Druhá tabulka, kterou potřebujeme pro datovou reprezentaci je tabulka plošek (faces). Ta určuje, který vrchol s kterým se má spojit, aby vznikly trojúhelníky (na obrázku vidíme graficky plošky 2,3 a 4 z této tabulky):



Můžete porovnat s autentickým souborem ve formátu ASCII Scene, v němž je datově uložen kvádr z příkladu. Výpis tohoto souboru je na konci této kapitoly.

Samozřejmě existuje celá řada dalších možností datové reprezentace, jako je například pomocí vrcholů a normál:


Obr. 3 Reprezentace pomocí vrcholů a normál 

Výpis souboru Kostka.ase:

*3DSMAX_ASCIIEXPORT	200
*COMMENT "AsciiExport Version  2,00 - Thu Jan 27 17:09:46 2011"
*SCENE {
	*SCENE_FILENAME ""
	*SCENE_FIRSTFRAME 0
	*SCENE_LASTFRAME 100
	*SCENE_FRAMESPEED 30
	*SCENE_TICKSPERFRAME 160
	*SCENE_BACKGROUND_STATIC 0.0000	0.0000	0.0000
	*SCENE_AMBIENT_STATIC 0.0000	0.0000	0.0000
}
*GEOMOBJECT {
	*NODE_NAME "Box01"
	*NODE_TM {
		*NODE_NAME "Box01"
		*INHERIT_POS 0 0 0
		*INHERIT_ROT 0 0 0
		*INHERIT_SCL 0 0 0
		*TM_ROW0 1.0000	0.0000	0.0000
		*TM_ROW1 0.0000	1.0000	0.0000
		*TM_ROW2 0.0000	0.0000	1.0000
		*TM_ROW3 10.0000	15.0000	0.0000
		*TM_POS 10.0000	15.0000	0.0000
		*TM_ROTAXIS 0.0000	0.0000	0.0000
		*TM_ROTANGLE 0.0000
		*TM_SCALE 1.0000	1.0000	1.0000
		*TM_SCALEAXIS 0.0000	0.0000	0.0000
		*TM_SCALEAXISANG 0.0000
	}
	*MESH {
		*TIMEVALUE 0
		*MESH_NUMVERTEX 8
		*MESH_NUMFACES 12
		*MESH_VERTEX_LIST {
			*MESH_VERTEX    0	0.0000	0.0000	0.0000
			*MESH_VERTEX    1	20.0000	0.0000	0.0000
			*MESH_VERTEX    2	0.0000	30.0000	0.0000
			*MESH_VERTEX    3	20.0000	30.0000	0.0000
			*MESH_VERTEX    4	0.0000	0.0000	50.0000
			*MESH_VERTEX    5	20.0000	0.0000	50.0000
			*MESH_VERTEX    6	0.0000	30.0000	50.0000
			*MESH_VERTEX    7	20.0000	30.0000	50.0000
		}
		*MESH_FACE_LIST {
			*MESH_FACE    0:    A:    0 B:    2 C:    3 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 2 	*MESH_MTLID 1
			*MESH_FACE    1:    A:    3 B:    1 C:    0 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 2 	*MESH_MTLID 1
			*MESH_FACE    2:    A:    4 B:    5 C:    7 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 3 	*MESH_MTLID 0
			*MESH_FACE    3:    A:    7 B:    6 C:    4 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 3 	*MESH_MTLID 0
			*MESH_FACE    4:    A:    0 B:    1 C:    5 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 4 	*MESH_MTLID 4
			*MESH_FACE    5:    A:    5 B:    4 C:    0 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 4 	*MESH_MTLID 4
			*MESH_FACE    6:    A:    1 B:    3 C:    7 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 5 	*MESH_MTLID 3
			*MESH_FACE    7:    A:    7 B:    5 C:    1 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 5 	*MESH_MTLID 3
			*MESH_FACE    8:    A:    3 B:    2 C:    6 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 6 	*MESH_MTLID 5
			*MESH_FACE    9:    A:    6 B:    7 C:    3 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 6 	*MESH_MTLID 5
			*MESH_FACE   10:    A:    2 B:    0 C:    4 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 7 	*MESH_MTLID 2
			*MESH_FACE   11:    A:    4 B:    6 C:    2 AB:    1 BC:    1 CA:    0	 *MESH_SMOOTHING 7 	*MESH_MTLID 2
		}
	}
	*PROP_MOTIONBLUR 0
	*PROP_CASTSHADOW 1
	*PROP_RECVSHADOW 1
}