In mijn prog worden te renderen object opgeslagen in een boom-structuur waarbij elk object een willekeurig aantal child-objecten kan hebben. De uiteindelijke lokatie in het 3D-veld van een object is relatief van de lokatie van het parent-object, mits aanwezig.
Objecten kunnen verschillende 'draw-typen' hebben dat bepaalt hoe het object gerenderd wordt, oa:
• Sprite - sprite of billboard dat altijd recht naar de camera kijkt. Een sprite kan een alpha-mask hebben, maar geen alpha-transparantie.
• Particle - een sprite, maar dan mèt mogelijkheid voor een texture met alpha-transparantie
• Mesh - een model/mesh met evt. een apart materiaal en texture voor elke face, evt. een willekeurig aan faces met alpha-transparantie
Renderen is natuurlijk mogelijk door de lijst met objecten door te lopen (nadat frustum culling is toegepast) en bij elk object de lijst met diens child-objecten, en diens child-objecten etc...
Het probleem is alleen dat het van belang is dat alle objecten/faces ZONDER alpha-transparantie eerst worden gerenderd ivm. de Z-buffer.
Op deze manier zou de lijst dus elk frame twee keer doorgewandeld moeten worden.
Het wordt nog erger als sommige faces meerdere keren moeten worden gerenderd voor multi-pass texturing.
Heeft iemand een idee om mijn lijst-gebeuren te optimaliseren? Hoe wordt dit gedaan in bv. een game-engine?
Een aantal ideeën die ik had:
• Bij alle mesh-object de mesh opdelen in twee delen: faces mèt en zonder alpha-transp. En deze als vertexarrays gebruiken
• Frustum-culling maakt de lijst natuurlijk al een stuk kleiner
Dank!
Objecten kunnen verschillende 'draw-typen' hebben dat bepaalt hoe het object gerenderd wordt, oa:
• Sprite - sprite of billboard dat altijd recht naar de camera kijkt. Een sprite kan een alpha-mask hebben, maar geen alpha-transparantie.
• Particle - een sprite, maar dan mèt mogelijkheid voor een texture met alpha-transparantie
• Mesh - een model/mesh met evt. een apart materiaal en texture voor elke face, evt. een willekeurig aan faces met alpha-transparantie
Renderen is natuurlijk mogelijk door de lijst met objecten door te lopen (nadat frustum culling is toegepast) en bij elk object de lijst met diens child-objecten, en diens child-objecten etc...
Het probleem is alleen dat het van belang is dat alle objecten/faces ZONDER alpha-transparantie eerst worden gerenderd ivm. de Z-buffer.
Op deze manier zou de lijst dus elk frame twee keer doorgewandeld moeten worden.
Het wordt nog erger als sommige faces meerdere keren moeten worden gerenderd voor multi-pass texturing.
Heeft iemand een idee om mijn lijst-gebeuren te optimaliseren? Hoe wordt dit gedaan in bv. een game-engine?
Een aantal ideeën die ik had:
• Bij alle mesh-object de mesh opdelen in twee delen: faces mèt en zonder alpha-transp. En deze als vertexarrays gebruiken
• Frustum-culling maakt de lijst natuurlijk al een stuk kleiner
Dank!