Voxel Ray Casting: příští generace grafiky?
16.11.2009, Petr Štefek, článek
O společnosti id Software nebylo dlouho slyšet a nyní k nám přichází s horkou novinkou v podobě vyvíjeného grafického enginu (respektive způsobu zobrazování) s názevm Voxel Ray Casting. Tento způsob zobrazování je do jisté míry revolučnější než ray tracing, takže si o něm pojďme popovídat blíže.
Kapitoly článku:
Nyní se podívejme na výhody voxel octree v renderování. Hlavní výhoda spočívá v elegantním vyřešení problému s LOD (Level Of Detail) v případě textur nebo geometrie, kdy je vše řešeno jediným algoritmem. Každý uzel octree obsahuje informaci o barvě, takže už nemusíme uvažovat klasické 2D textury jako v případě standardního polygonálního modelu, jelikož octree je de facto textura i geometrie.
Problém se samostatným řešením LODu v případě textur a geometrie tedy lze vyřešit poměrně elegantně, oproti stavu, kdy musí být ukládány textury v různém rozlišení pro použití při různém mipmap levelu. Něco podobného může být dosaženo i v případě voxel octrees s možností volby levelu LODu dynamicky. Pokud se tedy stane, že je velikost voxelu menší než velikost pixelu, pak se paprsková četnost průchodů zastaví právě na této úrovni. Všechno, co je k tomu nutné, je uložit průměr z dat uložených v dceřiné buňce a můžete LOD lehce řídit. Tento princip je, pokud se týka managementu potřebných dat, velmi podobný tzv. “Megatextures”, kdy je pro celé herní prostředí použita jediná “mega” textura a data jsou dohrávána dle potřeby.
Výsledkem jsou téměř neomezené možnosti v oblasti geometrie a také textur. Octree může být tak detailní, jak jen budete chtít a nijak výrazně to neovlivní potřebu paměti a rychlost zobrazení. Jedinou limitací je pouze čas, jaký je ochoten grafik věnovat pro vytváření objektu a samozřejmě také velikost paměti, kterou bude mít počítač k dispozici. Mluvíme samozřejmě o další generaci počítačů, které budou pravděpodobně operovat výhradně na 64-bitových operačních systémech s několikanásobně větší operační paměti a také grafickým subsystémem s mnohem vyšší kapacitou paměti (pravděpodbně by se nejednalo o hardwarový rasterizér).
Tato metoda funguje relativně dobře, ale bohužel není zcela automatická a vyžaduje od programátora další data o tom, které hrany jsou pro daný objekt stěžejní a neměly by být měněny. Další úpravy tedy zvyšují náročnost a snižují časový fond pro vylepšování samotných modelů. Bohužel, lepší to již nebude a pokud vše vyžaduje pouze více času, tak je to poměrně malá daň za velký krok kupředu.
Mnoho vývojářů se problém artefaktů při změně úrovně detailů pokoušelo řešit a výsledkem je něco, co můžeme pojmenovat progresivní síťový model. Princip toho řešení spočívá v tom, že jsou vrcholy rozděleny do dvou skupin na “mateřské” a “dceřiné” vrcholy. Když se level detailů sníží, tak se “dceřiné” vrcholy vykreslí blíže těm rodičovským. Pokud úroveň detailů dosáhne nové celočíselné hodnoty, tak jsou “dceřiné” vrcholy vymazány společně se všemi hranami napojenými na “rodičovské” vrcholy.
Progresivní síťový model
Dalším možným řešením tohoto problému je teselace, kterou jsme si rozebírali po uvedení prvních DirectX 11 kompatibilních grafických karet, které mají teselaci jako podmínku pro spnění specifikace DirectX11. Teselace spočívá ve vytvoření druhotných plošek, které celkově zjemní síťový model, který po té může směle soupeřit s modely s mnohem vyšším počtem polygonů. Teselace nás provází již od dob Radeonů DirectX 9 či dokonce karet Matrox Parhelia. Možnosti zde byly, ale konkrétní výsledky nebyly žádné, neboť teselace neměla podporu právě v rozhraní DirectX.
Teselace jako taková je již pro vývojáře jasně stanoveným standardem, který budou muset v budoucnu vzít na vědomí, pokud chtějí uspěch v tvrdé konkurenci vizuální kvality her. Voxel Octrees je naproti tomu v současné době pouze neprobádaná alternativa. Řešení určitých problémů s LOD je tak řešitelné za pomoci jediného algoritmu, kde pak lze ještě navíc LOD dynamicky měnit.
Problém se samostatným řešením LODu v případě textur a geometrie tedy lze vyřešit poměrně elegantně, oproti stavu, kdy musí být ukládány textury v různém rozlišení pro použití při různém mipmap levelu. Něco podobného může být dosaženo i v případě voxel octrees s možností volby levelu LODu dynamicky. Pokud se tedy stane, že je velikost voxelu menší než velikost pixelu, pak se paprsková četnost průchodů zastaví právě na této úrovni. Všechno, co je k tomu nutné, je uložit průměr z dat uložených v dceřiné buňce a můžete LOD lehce řídit. Tento princip je, pokud se týka managementu potřebných dat, velmi podobný tzv. “Megatextures”, kdy je pro celé herní prostředí použita jediná “mega” textura a data jsou dohrávána dle potřeby.
Výsledkem jsou téměř neomezené možnosti v oblasti geometrie a také textur. Octree může být tak detailní, jak jen budete chtít a nijak výrazně to neovlivní potřebu paměti a rychlost zobrazení. Jedinou limitací je pouze čas, jaký je ochoten grafik věnovat pro vytváření objektu a samozřejmě také velikost paměti, kterou bude mít počítač k dispozici. Mluvíme samozřejmě o další generaci počítačů, které budou pravděpodobně operovat výhradně na 64-bitových operačních systémech s několikanásobně větší operační paměti a také grafickým subsystémem s mnohem vyšší kapacitou paměti (pravděpodbně by se nejednalo o hardwarový rasterizér).
Tato metoda funguje relativně dobře, ale bohužel není zcela automatická a vyžaduje od programátora další data o tom, které hrany jsou pro daný objekt stěžejní a neměly by být měněny. Další úpravy tedy zvyšují náročnost a snižují časový fond pro vylepšování samotných modelů. Bohužel, lepší to již nebude a pokud vše vyžaduje pouze více času, tak je to poměrně malá daň za velký krok kupředu.
Mnoho vývojářů se problém artefaktů při změně úrovně detailů pokoušelo řešit a výsledkem je něco, co můžeme pojmenovat progresivní síťový model. Princip toho řešení spočívá v tom, že jsou vrcholy rozděleny do dvou skupin na “mateřské” a “dceřiné” vrcholy. Když se level detailů sníží, tak se “dceřiné” vrcholy vykreslí blíže těm rodičovským. Pokud úroveň detailů dosáhne nové celočíselné hodnoty, tak jsou “dceřiné” vrcholy vymazány společně se všemi hranami napojenými na “rodičovské” vrcholy.
Progresivní síťový model
Dalším možným řešením tohoto problému je teselace, kterou jsme si rozebírali po uvedení prvních DirectX 11 kompatibilních grafických karet, které mají teselaci jako podmínku pro spnění specifikace DirectX11. Teselace spočívá ve vytvoření druhotných plošek, které celkově zjemní síťový model, který po té může směle soupeřit s modely s mnohem vyšším počtem polygonů. Teselace nás provází již od dob Radeonů DirectX 9 či dokonce karet Matrox Parhelia. Možnosti zde byly, ale konkrétní výsledky nebyly žádné, neboť teselace neměla podporu právě v rozhraní DirectX.
Teselace jako taková je již pro vývojáře jasně stanoveným standardem, který budou muset v budoucnu vzít na vědomí, pokud chtějí uspěch v tvrdé konkurenci vizuální kvality her. Voxel Octrees je naproti tomu v současné době pouze neprobádaná alternativa. Řešení určitých problémů s LOD je tak řešitelné za pomoci jediného algoritmu, kde pak lze ještě navíc LOD dynamicky měnit.