Davy v počítačové grafice Jakub Fintora
Feb 24, 2016
Davy v počítačové grafice
Jakub Fintora
Úvod
• Dav– Častý fenomén• Vizualizace simulací (evakuace, nepokoje,…)• Zábavní průmysl
– Částicový systém– Animované nebo statické částice– Rychlost vs. Rozmanitost
Reprezentace částice
• Vertex buffer – Pozice– Normála– UV souřadnice– Údaje pro skeletální animace
• Index buffer – spojení vrcholů do sítě
Skeletální animace
• Dynamika částice• Skeleton - hierarchie• Kloub• Klíčové snímky• BVH – Biovision Hierarchy
Zdroj: http://doc.gold.ac.uk/~mas02mg/IntroToAV/lectures/skeleton.png
MakeHuman
• makehuman.org• Otevřený kód (Python + C)• Parametrické modelování• Princip– Jedna základní trojúhelníková síť– Změny v podobě vektorů posunů konkrétních
vrcholů základní trojúhelníkové sítě• Export – OBJ, COLLADA
Zdroj: http://makehuman.org/sites/mhnew.jwp.se/files/mhlogo3.png
Navržené řešení
• Použití dat exportovaných z MakeHuman• Převedení dat ze souborů do datových
struktur přístupných grafickou kartou• Generování davu• Vykreslování davu• Implementace: SPA framework + DirectX
Vykreslování davu
• Shadery• Geometry instancing• Řešení skeletálních animací– Přečtení pohybových dat na základě adres z vertex bufferu– Složení dílčích transformačních matic kloubů– Vytvoření výsledné transformační matice, vynásobením
dílčích matic vahami a sečtením• Umístění ve scéně• Zobrazení s odlišnými barvami pleti
Převedení do datových struktur
• Výsledkem je:– Vertex buffer– Index buffer– Hierarchie a proporce kostry– Textura s pohybovými daty– Pole sémantických údajů
Souvislost datových struktur
Generování davu
• Druhý vertex buffer (instance buffer)• Náhodně vygenerované atributy– Startovní klíčový snímek– Rozestupy– Odstín pleti
Výsledky• Nejnáročnější částí
– skládání transformací vertexů.– pokles rychlosti v průměru o 80%
• Desynchronizace animací– počet různých startovních snímků animace = počet všech klíčových
snímků.• Odstíny barvy pleti
– Počet možných kombinací -2678 – Podle pravidla:
• d = 15% - 20% rozsahu jednoho barevného kanálu • r = náhodné číslo v rozsahu jednoho barevného kanálu• b = r – d• g = (r + b)/2
Vykreslený dav
Závěr
• Data z projektu MakeHuman jsou vhodná• Je třeba využít HW akcelerace– Geometry instancing
• Výpočetně nejnáročnější částí – skeletální animace