|
|
|
|
|
Please take note! For mod developers working with Unreal Tournament 2003, this documentation is meant to be a starting point for your own explorations into UT2003, not a definitive guide. There will be differences between the documentation here and the product in your hands, and you may have to figure out quite a bit for yourself. Check out the Unreal Tournament 2003 page in the Unreal Powered area for links to community sites if you're having problems. UDN is a licensee support site, and cannot provide technical support or game-specific assistance to end users.
|
|
|
|
SkeletalBlending |
|
|
|
|
|
Licensees can log in.
Interested in the Unreal engine? Check out the licensing page.
Questions about UDN itself? Contact the UDN Staff.
|
|
|
|
|
|
|
|
|
Last updated by Erik de Neve (EpicGames). Original author was Erik de Neve (EpicGames).
- Crude Skeletal Blending Notes
- Caveat
- Some notes on UW's skeletal blending
- Animation script commands
- Channel-based animation blending
- AnimEnd- and other notifications:
- Console commands for special rendering modes
This doc is woefully lacking. More is coming.
Multiple animation channels/stages are used to blend into the animation track. Each channel can have its own UMeshAnimation (formerly UAnimation) object linked to it at runtime.
Limitation: for networking purposes, the base channel still works as usual. Additional blended channels are not automatically replicated.
Blending works fine for client-side animations, any special network requirements for blended animation are meant to be implemented at a higher level (e.g. through replicated function calls.)
Play/Loop/Tweenanim calls have optional channel parameters (default to 0)
LinkSkelAnim works the same as it was, but now takes a channel to link to. The UMeshAnimation (formerly UAnimation) linked to a mesh instance is no longer saved with the actor, but set explicitly at runtime - if not, it is retrieved from the mesh's defaultanimation as usual.
LinkSkelAnim( MeshAnimation Anim, int Channel );
AnimBlendParams() is called before a PlayAnim to control blending as follows:
AnimBlendParams( int Channel, float BlendAlpha, float InTime, float OutTime, optional name BoneName );
- BlendAlpha: how much to blend into the base animation ( 0-1 ) ( Higher channels blend in after lower channels, so order is important.)
- InTime: ease-in time to ramp up to full BlendAlpha ( 0-1, a fraction of total animation sequence time)
- OutTime: reserved (not currently implemented)
- BoneName: name of the start bone from which the blending is to take effect, down the hierarchy.
GetAnimParams is used to retrieve the animFrame and AnimRate from a channel as it is active:
GetAnimParams( int Channel, out name OutSegName, out float OutAnimFrame, out float OutAnimRate );
AnimEnd event calls can be traced to the guilty channel because they now contain the channel as a parameter:
event AnimEnd( int Channel )
{
// some action
}
Also note that blending channels are not symmetrical - the end effect is order-dependent, applied from low to higher numbers.
When notification functions have been called ( the ones linked to animations using the "#exec anim notify " commands in script ), you can obtain the guilty channel with:
int GetNotifyChannel();
Notifications can be switched off (0) for the currently active AnimStage with:
EnableChannelNotify ( int Switch );
Minor feature:
#exec anim notify lines now should accept FRAME=xx parameters as optional alternative to TIME=xx .
- rend blend
- This toggles the rendering of normals on meshes, for skeletal meshes, they are colored with the number of influences (green =1, red=2, pink=3, light blue=4, white for 5+ )
- rend bone
- Toggles the rendering of bones (prevents rendering the regular mesh), where each bone's origin shows the local coordinate system with a small axis system, X,Y,Z = red,green,blue. Also, a purple 'root' line is drawn from the mesh's local space origin to the the 0th/root bone.
|
|