Horde3D

Next-Generation Graphics Engine
It is currently 27.04.2024, 09:48

All times are UTC + 1 hour




Post new topic Reply to topic  [ 49 posts ]  Go to page Previous  1, 2, 3, 4
Author Message
PostPosted: 18.01.2009, 23:39 
Offline
Engine Developer

Joined: 10.09.2006, 15:52
Posts: 1217
@philippec:
It is only now that I noticed and checked your second patch (with the renderable children). It's quite clever what you are doing there. We would definitely integrate your patch but since the system is probably about to change (spatial graph) the problem has to be solved in a different way. Anyway, thanks a lot for your efforts! Also thanks for the idea with the animation updates. I think the cleanest solution would be to expose an API function which checks if an object is visible (or was visible in the previous frame) so that the user can just not call the animation update functions.

philippec wrote:
I unfortunately just started a new job so I don't know how much time I will have so I thought I's pass that idea around.

Honestly, I hope you will still have some time to contribute ideas since they seem to be quite good :)


Top
 Profile  
Reply with quote  
PostPosted: 21.01.2009, 00:12 
Offline
Engine Developer

Joined: 10.09.2006, 15:52
Posts: 1217
swiftcoder wrote:
Volker wrote:
Thanks for this patch. Without looking at the details of you modification, does it make a difference in performance? Doing a quick test on my notebook I couldn't figure out that well. The knight sample seems to be a bit faster (~5fps). The chicago sample with software skinning enabled may be about ~0.5fps faster. With hardware skinning it doesn't make any difference (most likely because this is limited by my GF7700). No difference for the terrain sample as well. But I guess I don't have the right setup for testing the possible improvements of this patch.
Ja, it slightly hampers testing when none of us even have the possibility of being CPU bound :wink:

For everyone who is GPU-limited and wants to do some scene graph profiling (e.g. in Chicago): Comment out the glDrawRangeElements in Renderer::drawModels. This will stop the GPU from drawing the mesh polygons. Please note that this trick is not appropriate if you want to profile the GPU state changes of Horde since the actual hardware/driver state changes happen usually when a drawing function is called.


Top
 Profile  
Reply with quote  
PostPosted: 21.01.2009, 15:19 
Offline

Joined: 22.11.2007, 17:05
Posts: 707
Location: Boston, MA
marciano wrote:
For everyone who is GPU-limited and wants to do some scene graph profiling (e.g. in Chicago): Comment out the glDrawRangeElements in Renderer::drawModels. This will stop the GPU from drawing the mesh polygons. Please note that this trick is not appropriate if you want to profile the GPU state changes of Horde since the actual hardware/driver state changes happen usually when a drawing function is called.
In 2-3 weeks, I should be solidly CPU bound! Just budgeting for an Athalon X2 desktop with a Radeon 4830 HD ;)

_________________
Tristam MacDonald - [swiftcoding]


Top
 Profile  
Reply with quote  
PostPosted: 28.01.2009, 22:55 
Offline
Engine Developer

Joined: 10.09.2006, 15:52
Posts: 1217
We have a new function checkNodeVisibility which returns if a node is visible (or its computed LOD level if requested). This seems to work all fine and I tried to optimize the Chicago sample to only update model animations if a character is visible.

Unfortunately the performance was worse compared to simply animating all characters. I found the reason for this quite quickly. A character is moved, after that the checkNodeVisibility function is called. Since the character model is dirty, a scene node update needs to be done which transforms the model and all its children (the skeleton). If the character is visible, the animation is applied and a second scene node update needs to be done. This second scene node update is slower than just applying the animation. Since there is just a single animation in Chicgao, the engine uses the fast animation path. I guess the results would be better for more complex animations, where the time spent for animation is higher than the time required for the scene graph update.

This phenomenon is a general problem of the scene graph (I would say of scene graphs in general, not just ours). The question is if it can be overcome in some non-hackish way. We would need a way to determine if a scene branch update is really required. I did not yet do any deeper reflection about that issue but if anyone has a clever idea it would be very helpful.


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 49 posts ]  Go to page Previous  1, 2, 3, 4

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 35 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group