Horde3D

Next-Generation Graphics Engine
It is currently 30.11.2024, 07:41

All times are UTC + 1 hour




Post new topic Reply to topic  [ 3 posts ] 
Author Message
PostPosted: 03.02.2007, 12:59 
Offline

Joined: 29.01.2007, 14:11
Posts: 5
Hi Nicolas-

One of our engineers is going to be looking at the animation system this week and I noticed it only supports only single channel animation. As far as I can tell (from my brief debugging session) the converter parses the multiple animations correctly but then either discards the additional channels or merges them into one for the creation of the exported anim file.

Can you confirm for me how far you got with supporting multiple animation timelines in a single file? and possible suggestions about how we may like to develop this into the engine.

At the end of the day, it would be nice to have for a single model:

Anim 1: operating on bones a + b
Anim 2: operating on bones c + d

or alternatively, using a variable weighting system:

Anim 1: operation on bones a + b
Anim 2: operating on bones b + c

The converter would then create two animations files for the mesh, and we can control the timeline for each animation independently.

ie:

Horde3D::setNodeParam( model, SceneNodeParams::AnimTime, animResource, weight, t );

I would be interested to hear your thoughts on how much of this is already implemented, and how you would go about completing this requirement - and the interface you would prefer to see the engine use for such functionality.

I also plan on modifying Horde to use forward shading in the next couple of days. Would you be interested in maintaining a branch of horde that uses the alternative lighting model or perhaps having a method of turning it on or off. Unfortunately, as you indicated, this change will mean re-writing all the shaders and will result in a fundamentally different render pipeline.

Again, any hints you can give about how we can go about doing this or info that will save me many hours of pulling apart your code would be much appreciated.

Many thanks-

_________________
cameron
sandbox software


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 03.02.2007, 16:26 
Offline
Engine Developer

Joined: 10.09.2006, 15:52
Posts: 1217
Hello Cameron,

animation blending and mixing is what I am currently working on. We are still discussing (I have a reasearcher helping me who has written a thesis about that topic) what is the best way to go. I plan to finish the feature this month since we would like to use it in our CeBit project which will be shown in mid-March. To support blending I have done some changes to the interface which sacrifies a bit of abstraction in favor of more flexibility. Parameters for scene nodes are no more set by a single function for all node types but instead every node type has its own function like

Horde3D::setModelParam( ModelNodeParams::List param, float value )

This improves the usability since the params enum only contains parameters valid for the current node type and has on the other hand the advantage that I can add some special functions like setModelBlendWeight without breaking the philosophy of the interface.

Concerning the forward shading. Recently I had a nice idea of a fully configurable rendering pipeline where you can freely mix forward and deferred rendering. At the moment this is just an idea but I am pretty excited about that and I will think about it in more detail when the animation system is done. If the idea works out it would be really simple to add all kinds of post-processing effects to Horde.

The difference between forward and deferred rendering isn't that enormous. The code for doing the lighting doesn't change much, actually it is just deferred to another shader and applied as a post-processing step.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: 19.02.2007, 22:38 
Offline
Engine Developer

Joined: 10.09.2006, 15:52
Posts: 1217
The new animation blending system is close to being finished now, so I can tell more about how it will work. We have added two new functions for the animation/blending.

Code:
bool setupModelAnimStage( uint node, uint stage, uint res, const char *mask );
bool setModelAnimParams( uint node, uint stage, float time, float weight );


You have an (virtually arbitrary) number of stages (= animation channels) for each model. With the first function you put an animation on a stage and define a mask. The mask determines which joints are influenced by the animation. The mask can contain several joints. For each joint in the mask, the influence state of all of its successors in the skeleton hierachy is always inverted. This makes the mask very powerful and gives you easily much control for animation mixing.

The second function sets the current animation time and the weight of the stage. With this function it is possible to fade or blend between animations. The last thing to know is that the animations in the lower stages get priority if the sum of the weights is more than one.

We still have to test the system in practice for our project but I think that it should work out quite nice.

Any comments are welcome! :)


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 6 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