In mensentaal wil de titel zeggen: Het bliksemsnel ray tracen van figuurtjes met een skelet (waarop "huid" zit, nl. de skin) . Net omdat de figuurtjes een skelet hebben (botten en gewrichten) kunnen we dat uitbuiten om het bliksemsnel te doen.
De sleutel om ray tracing snel te maken is het gebruik van versnellingsstructuren (grids, kd-trees, BVHs (Bounding Volume Hierarchies), ...). Voor een statische scene kunnen we de tijd nemen om een efficiƫnte structuur te bereken maar voor een dynamische scene waarbij in principe in elk frame alles kan veranderen is dat niet haalbaar. Het herberekenen van de versnellingsstructuur is het kritische punt bij het ray tracen van dynamische scenes. We moeten een afweging maken tussen enerzijds een efficiente structuur en anderzijds een snelle berekening van de structuur.
Om ons "versnellingsstructuurprobleem" op te lossen laten we de bewegingen van onze karakters uiteenvallen in 2 componenten:
- Coherente beweging: een beweging die alle punten van de scene ondergaan.
- Restbeweging: de beweging van sommige punten lokaal.
De restbeweging wordt behandeld door een fuzzy kd-tree, een kd-tree gebouwd over een fuzzy box. Een fuzzy box is een box groot genoeg zodat alle mogelijk lokale bewegingen erbinnen vallen. Concreet wordt er per bot een kd-tree gebouwd. Het nadeel van deze aanpak is dat we de animatie op voorhand moeten weten om de fuzzy boxes te dimensioneren. Het voordeel is dat we deze kd-tree nooit moeten herberekenen omdat we nu rekening houden met alle mogelijke bewegingen op voorhand. Over de botten worden ook bounding boxes gebouwd waarover op weer een andere kd-tree wordt gebouwd om de absolute beweging in rekening te brengen. Deze kd-tree wordt wel elk frame herberekend, dit is echter geen probleem omdat er maar een beperkt aantal botten zijn.
Om de fuzzy boxes niet te groot te maken kunnen we aan de gewrichten extra voorwaarden opleggen. Bewegingen die dan fysisch niet mogelijk zijn worden ook niet toegelaten in de animatie. Dit leidt tot significante snelheidswinsten.
In de paper wordt een potentieel interessante library gebruikt voor het modelleren van skeletten, de Cal3D library. Deze week eens verder bekijken.
Ook packet ray tracing moet ik eens verder doorspitten, dit is het bundelen van rays in pakketjes en die door de scene te tracen. Volgens de auteurs is dat een voorwaarde voor een high-performance ray tracer.
De auteurs hebben enkel getest met kd-trees. Misschien een interessante piste voor mijn thesis om het ook eens te proberen met grids en BVHs en dan de resultaten te vergelijken.
Geen opmerkingen:
Een reactie posten