Ik ben reeds een tijdje bezig aan een game engine maar loop nu toch tegen een performance issue aan!
Alle objecten zijn opgeslagen in een scenegraph, deze graph bepaalt alleen de relatie tot andere objecten. Daarnaast zijn sommige nodes 'cullable' (geometry, lights), deze nodes worden in een spatial tree (octree) geknald.
In de octree staan dus op dit moment lichten en geometry. De tree houdt zelf bij wanneer hij moet resizen (joinen en splitten). Op de update gaatie de tree door en bepaalt welke objecten zichtbaar zijn en niet.
Vervolgens gaat de tree kijken welke lights welke geometry intersecten.
Dit doe ik door de tree door te zoeken, naar lichten.
Als ik een licht vind moet ik de bijbehorende geometry vinden.
Ik doe dit als volgt:
-check light against all objects in same node.
- check light against all parents of node
- check light against all children of node
Op deze manier vind ik alle mogelijke geometry.
Op een intersect met geometry kijk ik of light en geometry visible zijn.
Zo ja kijk ik of het licht al in de ´affectinglights´ van de geometry staat. Zo niet dan add ik hem
Bij invisibility verwijder ik hem uiteraard!
Nu lijkt dit goed, maar ik heb het idee dat dit traag is!
Zijn er misschien ervaringsdeskundigen op dit gebied die uit kunnen leggen hoe dew proffesionals )dynamic) lights en (dynamic) geometry aan elkaar koppelen?!
Opzich werkt het dus wat ik toepas, alleen is het verschrikkelijk traag door de vele checks tegenover geometry.
Alle objecten zijn opgeslagen in een scenegraph, deze graph bepaalt alleen de relatie tot andere objecten. Daarnaast zijn sommige nodes 'cullable' (geometry, lights), deze nodes worden in een spatial tree (octree) geknald.
In de octree staan dus op dit moment lichten en geometry. De tree houdt zelf bij wanneer hij moet resizen (joinen en splitten). Op de update gaatie de tree door en bepaalt welke objecten zichtbaar zijn en niet.
Vervolgens gaat de tree kijken welke lights welke geometry intersecten.
Dit doe ik door de tree door te zoeken, naar lichten.
Als ik een licht vind moet ik de bijbehorende geometry vinden.
Ik doe dit als volgt:
-check light against all objects in same node.
- check light against all parents of node
- check light against all children of node
Op deze manier vind ik alle mogelijke geometry.
Op een intersect met geometry kijk ik of light en geometry visible zijn.
Zo ja kijk ik of het licht al in de ´affectinglights´ van de geometry staat. Zo niet dan add ik hem
Bij invisibility verwijder ik hem uiteraard!
Nu lijkt dit goed, maar ik heb het idee dat dit traag is!
Zijn er misschien ervaringsdeskundigen op dit gebied die uit kunnen leggen hoe dew proffesionals )dynamic) lights en (dynamic) geometry aan elkaar koppelen?!
Opzich werkt het dus wat ik toepas, alleen is het verschrikkelijk traag door de vele checks tegenover geometry.