TecnoFreak: Blend Tree Animation System[1.2 Blendmasks]

A place to show off your latest screenshots and for people to comment on them. Only start a new thread here if you have some nice images to show off!
Post Reply
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

I might be able to help....

Which version of the editor are you using?
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Thx,

I tryed with the very last release. (1.1.3645) with the correction from mono2k
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

If you are making changes to the source then i would suggest you get the latest from sourceforge (the latest has mono2k changes).

Have you got TecnoFreakViewport.dll in the folder you are running the app from?
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

yes I have all the dll novaumas listed above.

With the release version i got the following error message (translated from french) : Unable to load TecnofreakViewportOgre.dll This application could not start because the configuration of the application is incorrect. Reinstall the application could resolve the problem (exception hresult : 0x800736B1)
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

hmmmm, i am not entirely sure but there are a couple of things i would look at if its complaining about TechnoFreakViewportOgre.dll

Firstly does it create an Ogre.log? if it does then Ogre is falling over somewhere and you should be able to narrow it down by looking at the log.

If it does not create an Ogre.log then it is having a problem loading TechnoFreakViewportOgre.dll and its dependenices and as its an externall C++ lib it makes it a bit harder to track the problem, but here is quick check list
1) Make sure you have all the DLL's needed, as per novaumas list
2) Make sure those DLL's are the same ones used to compile TechnoFreakViewportOgre project
3) Make sure you comment out the example plugin in "nodes.plugins.txt" with a # or delete all the lines
4) Ummm... ask novaumas as i have run out of ideas! ALthough please post your solution if you find one as it will help others!
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

There is no Ogre.log produced.

I have tested every thing you told me but it still refuse to launch. Same error.

I have checked again my version of .net framework and it's the 3.5 sp1.

thx very much for the help, may be novaumas will know.
mono2k
Gnoblar
Posts: 19
Joined: Mon Mar 15, 2010 8:02 am

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by mono2k »

Image

This is my (working) setup. OgreMain.dll comes from Ogre distribution, not MOgre. You have to remove MOgre from viewport.plugin.txt also.
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

Anyone know how to use the plugin system??

1) I assume you create an editor plugin, as per the example. I cant actually get the example to work at the moment...

2) You must implement the plugin node(s) in the runtime. This is not so obvious, I guess you create a new node class and inherit from Node and register the Node in the Node factory. However do you need to any extra stuff to the XML parser, at a first look it seems like it has been taken care of?

@novaumas
It would be really nice if you document this side your tool. I think it is a really powerfull tool and it would be really cool if the community could contribute back to it by adding more nodes :).


PS As i have been looking through the code, its a very well thought out and tidy design/code, just needs a few comments! :wink:
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Does the precompiled version works or everyone have recompiled the projet in order to make it work?

@ novaumas : The exception 0x800736B1 tells you something? a runtime version problem may be?
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

The pre-compiled version works for me;

XP (32 bit) - Runs fine
VISTA (32 bit) - runs fine, although it does not always let me create a new project (Todo with .net permissions on VISTA)
VISTA (64 bit) - needs a bit of .net command line action but it works fine after that, although with the same VISTA problem mentioned above

By the way i am using .Net version 2.0 SP2 on all those machines.... (I think!)
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

problem resolved : i had to install the following http://www.microsoft.com/downloads/deta ... laylang=en security update.

thx all for the help ;)
User avatar
AWM Mars
Halfling
Posts: 56
Joined: Mon Apr 19, 2010 9:28 pm
Location: Wiltshire, England
x 1
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by AWM Mars »

This is really great, even idiots like me can apply animations lol.. great work, great tool. :)
Politeness is priceless when recieved, cost nothing to own or give, yet some cannot afford.
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Hello,

I got a little problem with the trigger system.

battle_swords_attack_1 use this animinfo :

Code: Select all

<animation_infos>
	<animation_info>
		<name>battle_swords_attack_1</name>
		<loop>false</loop>
		<trigger_info_list>
			<trigger_info>
				<name>attack_fire</name>
				<time>0.25</time>
				<time_type>absolute</time_type>
			</trigger_info>
			<trigger_info>
				<name>attack_end</name>
				<time>0.5</time>
				<time_type>absolute</time_type>
			</trigger_info>
		</trigger_info_list>
	</animation_info>
</animation_infos>
when i switch from idle (select_animation = 0) to aim (select_animation=2 + select_aim_or_attack=1 + select_aim_anim=2) the trigger attack_fire (from battle_swords_attack_1 which is not activated) is shot.
If this behavior is normal, can someone explain me why?

And for another schema the trigger called twice (the first one at frame N and the other at frame N+1)
Attachments
tfschema.jpg
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Ok it seem that i found a bug.

if you connect two animation to a random selector node and those nodes have triggers the two triggers are shot instead of the currently played only.
User avatar
novaumas
Greenskin
Posts: 107
Joined: Mon Jan 21, 2008 9:44 am
Location: Barcelona
x 4
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by novaumas »

For some reason I'm not receiving email notifications on this threads updates in a consistant way, sorry for taking a while... I don't frequent the forums as much.

@AWM Mars: I'm happy that you're enjoying it :D

@nec: Security update solved the issue..? I never would've guessed :? Glad you were able to figure that one out :)

On the trigger being fired... That's doesn't seem the intended behaviour and from a quick look at your diagram. The way it works for triggers is that they are only evaluated for animations when these are evaluated, and that should only happen when they have a non zero weight, so for some reason the tree traversal is arriving to the battle_swords_attack_1 animation and updating it.

It might be a bug, maybe something wrong in the transition node. Let's see if we can figure out the problem, some questions I can come up with.

Is it 100% reproducible with this setup?

Does it also happen when you have the attack and idle animations directly connected to the second select node in the hierarchy? Does it also happen when they are directly connected to the root select node?

Are you setting the parameters values through code in your application, or are you seeing this problem in the editor ( or is the problem on both )?

@al2950: Had to dig a little in the code to remember all this stuff :)

From here to the end of the post, editor plugins system overview ( more or less )

Basically, there are two types of plugins for the editor. Node plugins, and Viewport plugins.

Writing node plugins is a consequence of having extended the animation system with custom nodes and wanting to register them so that they can be created via the user interface.

Node plugins implement the editor side structures necessary to create the nodes, load and save them to xml for the editor to use, and also the xml that the runtime consumes.

The ExamplePlugin project shows what it can basically do.

I guess that the example plugin doesn't work off the bat because the example nodes aren't implemented in the runtime.

Each node plugin must have at least one class deriving from TecnoFreak.v2.TecnoFreakPlugin.Plugin.
It's basically a factory class that associates the name of each node to a class that builds it.

Then, for each node you need to create a node class deriving from PluginNode and a builder class deriving from PluginNodeBuilder.

The ExampleNode shows the minimal structure of a simple node.
RuntimeName is the name of the node exactly as registered in the animation system runtime factory.
It also shows how to add ports. The names of the ports should match the ones in the runtime node, or it won't be able to properly recreate the connections when recreating the data.
Also, currently the runtime only supports one animation/numeric output port per node.

ExampleNodeAdvanced shows how to create more complex nodes with a bit more user interaction. It shows:
Custom node actions via right click menu ( it is be possible to create new editor windows responding to events, so the possibility for cool stuff is there )
Save and load custom data for the editor and the runtime. No user interaction should be allowed when loading or saving data in WriteCustomXmlData, ReadCustomXmlData or WriteRuntimeXmlData. It is ok to have user interaction in the NodeBuilders ( as shown in the ExampleNodeAdvancedBuilder ), as they're only used when the user manually decides to instantiate a new node.

The names of the created dlls and plugin classes should be added to nodes.plugins.txt. It should look something like this, for as many dlls and plugins implemented ( the order of the elements doesn't really matter ):
dll ANodePluginDll.dll
plugin Full.Namespace.Of.Plugin.Class.ClassName
plugin Full.Namespace.Of.Plugin.Class.SomeOtherClassName
dll AnotheNodePluginDll.dll

For the curious, the code that loads that file and uses the node plugins to instantiate new nodes is in NodeFactory.cs.

Viewport plugins are an effort to externalise all rendering to window and interaction with the animation system runtime. Implementations exist for Ogre and Mogre.
I don't know if anyone will be wanting to write a viewport plugin anytime soon ( can be done for example, to connect it to their own game engine or use a 3d engine different than Ogre ) but they should take a look at TecnoFreakViewport PlatfomrImplementation.cs class and implement something similar for their own engine.
The current code will leave the important bits of the implementation to c++ code imeplemented in TecnoFreakViewportOgre.dll.

Also... and while I'm documenting stuff ( although unrelated )... don't use the synch port on animation nodes unless absolutely necessary. It's rather hacky and it might get removed someday ( not soon, but someday )

If there's something specific that I'm not covering and that you someone is interested in, just let me know and I'll answer in a new post ( this one is already too long :D )
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Ok it seem i solved my problems by transforming those initial schemas into the schemas of the next post (split because of limiation of attachments)

The problem of A was that when i apply the following settings :

- select_animation = 2
- select_attack_anim = 1 (i just saw it should be set to 0 for now but i doubt it was the problem)

Attack_1 and Attack_2 trigger their event but only one of the two is running at a time (if i well undrstood this node)

In the C case i set the following values

- select_animation = 2
- select_aim_or_attack = 1
- select_aim_anim = 2

So the aim branch is activated but i received event from the battle_sword_attack_1 which must be caused by the fact that the time_in and time_out values are not null then the attack branch is active for 0.2 sec.
Attachments
C.png
A.png
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Are my explanations clear enough?
Attachments
D.png
B.png
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

And i will finish with some tiny and big improvements which can be done to the tool

- possibility to export the runtime schema in a directory of our choice under the name of our choice.
- assets in tfproj should be relative to tfproj path.
- I don't understand what use has the AnimationView
- Adding animation to the canvas is painfull may be the AnimationView could be replaced by a palette from which we drag could drag and drop the animation nodes.
- Possibility to move the canvas with the mouse by picking the background with middle button clicked.
- possibility to name the transition node input pin
- possibility to give a name to nodes, except for those that already has one. (animation node, parameter node)
- remove the schema from the project explorer unless you can add many schema, otherwise it should be a project setting.
- possibility to record predefined settings and bind it to a button (to apply a full state by clicking a single button)

Code: Select all

Button A : select_anim="2" + select_anim_attack="0"
Button B : select_anim="1" + walk_weight="0.5"
Button C : ...
then we could easily check transition between complex settings.

Ok Ok !! i stop here ;) i know you desn't have time to do this.
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

Thanks novaumas :D

I think i am up to speed in the editor side of things but i am still pondering the runtime side of things. I should probably just go and experiment my self intead of asking question all the time but i thought i would let you/the community know what i want to do;

My first plan is to create a simple node like random select but for a set of Idle animations which it will play randomly with a variable time between the idle animations.

My second plan is add a Skeleton Mask node. For this i want to create a simple node in the editor (one input, one ouput) but change the viewport plugin so you can select a set of bones that that Mask Node controls.

I should say i have not really put much time into this yet but looking over the runtime code for RandomSelect Node i do have a few questions:

1) I am unsure what the UpdateID in sharedData relates to?
2) I did have another question, but i think i worked it out as was typing the question!

I have a few other questions but i really think i should try and work it out myself!
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

I think i found a bug which in some cases can shoot an event twice

line 127 of AnimationTriggerSystem.cpp

Code: Select all

...
   if ( nextRelativeTime < currentTrigger->getRelativeTime() )
...
must be replaced by

Code: Select all

...
   if ( nextRelativeTime <= currentTrigger->getRelativeTime() )
...
the bug occurs if the nextRelativetime is equal to the trigger time.
User avatar
novaumas
Greenskin
Posts: 107
Joined: Mon Jan 21, 2008 9:44 am
Location: Barcelona
x 4
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by novaumas »

@al2950:
Those seem like useful nodes, specially the skeleton mask node would be a very nice addition :D although it might require some extra work if you want all the nice UI stuff.

UpdateId is the number of current update of the animation graph. It's incremented each time update() is called on the animation system.
The Random select node checks the value to see if it was traversed the last update or not. In case not, it will select a random animation branch from its list.

@nec:
Nice catch with the bug, thanks!

I also took the chance to change the equal_range to a lower_bound, so the loop now looks like this:

Code: Select all

for ( TriggerContainer::const_iterator cit = m_triggers.lower_bound( currentRelativeTime ); cit != m_triggers.end(); ++cit )
On the suggestions for editor improvements, I'll comment on some of them :)
- possibility to export the runtime schema in a directory of our choice under the name of our choice.
Should be relatively straightforward to add. It'd be nicer even if the export path was a project setting.
- assets in tfproj should be relative to tfproj path.
I seem to recall that you can manually edit the .tfproj and use relative paths there and it'll work. It's been a long time since I wrote that stuff, so I might be wrong.
- I don't understand what use has the AnimationView
It no longer has any purpose. It just lists all animations. It's what's left of when the animation tree runtime was written in c#.
- Adding animation to the canvas is painfull may be the AnimationView could be replaced by a palette from which we drag could drag and drop the animation nodes.
Of all the issues you point out, this is the one I feel strongest about. It currently sucks to have to add animations through the right click menu...
- possibility to name the transition node input pin
The exporter uses the port names to create connections, and they must match between runtime and editor. So, to do this it would be necessary to keep the port name as it is, but use another port property for the ports ( Example "humanReadableName" or similar ) that can be edited and that it's only used for display. To do it properly would need some changes to TFControls ( Port classes and renderer class ) as well as Diagram controller to allow the renaming, and the DiagramIO to save and restore user specified names. It's not too complex, but it's not a change I'm eager to make. The time involved/gain ratio is low for this one in my opinion.
- possibility to give a name to nodes, except for those that already has one. (animation node, parameter node)
Node names aren't used at all by the runtime so adding this wouldn't have any foreseeable secondary effects. It'd also be easy to do. I'm wondering if there's a specific reason why you want to rename the nodes.
- possibility to record predefined settings and bind it to a button (to apply a full state by clicking a single button)
This would be a cool feature indeed. I once had a similar idea but it involved creating a time sequence and placing keys in there for each parameter ( and select interpolation methods ), so you could have complex sequences that you could replay to use as test cases. In my dream word, it would allow to move anywhere in the sequence and check the blending and time values of any animation, as well as the weight of any node in the tree.

It's always great to hear about improvement ideas, it means that there is some interest :D
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Hi novaumas,

I got some new ideas for your editor.

1 - A node that interpolate between 3 animations :

Code: Select all

[ -1] Anim A
  |
  | blend between A and B
  |
[ 0 ] Anim B
  |
  | blend between B and C
  |
[ +1] Anim C
2 - A Node that use the ogre animation masking ability to compose a brand new animation from those in input :

Code: Select all

              +--------+
 anim 1 -------|        |
 anim 2 -------|Compound|-----
 anim 3 -------|        |
              +--------+
This node need an external window in which all bones are listed as a tree. For each entry we can select the anim we want

Code: Select all

Bone1 : 1
  Bone2 : 2
  Bone3 : 2
Bone4 : 1
  Bone5 : 3
  Bone6 : 3
Bone7 : 1
3 - There is a major problem with the Select node that can be easily solved. You can't tweak the transition time between two specific entry of the node. If i set 0.2 sec fade in and 0.2 sec fade out then all anim will autoblend with these times. You can fix this by adding a transition matrix grid.

This node

Code: Select all

              +--------+
 anim 1 -------|        |
 anim 2 -------| Select |-----
 anim 3 -------|        |
              +--------+
Give this grid

Code: Select all

 +----------+----------+----------+----------+
|          | anim 1   | anim 2   | anim 3   |
 +----------+----------+----------+----------+
| anim 1   |    X     |    0.1   |   0.3    |
 +----------+----------+----------+----------+
| anim 2   |    0.1   |    X     |   0.0    |
 +----------+----------+----------+----------+
| anim 3   |    0.2   |    0.2   |    X     |
 +----------+----------+----------+----------+
Do you think the math nodes are really usefull? Don't yo think is the logic that should moulate the properties values.

Bye ;)
User avatar
nec
Gremlin
Posts: 175
Joined: Fri Sep 29, 2006 5:56 pm
Location: Rosny Sous Bois, France
x 11
Contact:

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by nec »

Ok, this is the second time a met the same tiny problem so i submit it to you in case you want to fix it.

At low frame rate some animation seems to stop and here is the reason why.

First thing to know : the animation system is processed before calls to properties setValue.

Consider the following node.

Code: Select all

                  +--------+
    param  -------|>       |
    anim 1 -------| Select |-----
    anim 2 -------|        |
                  +--------+
Anim A and B are not looping animation.

Code: Select all

    0.0    0.1    0.2    0.3    0.4    0.5    0.6    0.7    0.8    0.9    1.0    1.1    1.2    1.3
     v             v             v             v             v             v             v
     |             |             |             |             |             |             |
1    A-------------+-------------C             |             E--+----------|-------------
     |             |\            |             |             | /           |             |
     |             | \           |             |             |/            |             |
2    |             B--+----------|-------------|-------------D-.-.-.-.-.-.-F-.-.-.-.-.-.-|
     |             |             |             |             |             |             |
     |             |             |             |             |             |             |
     |             |             |             |             |             |             |
Here is the sequence :

A - I set the param to engage the anim 1
B - I set the param to engage the anim 2 (transition begins)
C - The transition ends then the anim 1 is disabled the anim 2 still run.
D - The anim 2 ends
E - in reaction to the D event the anim 1 starts (the anim 2 stay alive in its last frame pose because it is not looped and has to be blended with anim1)
F - Here is the problem :
1 - the animation system see that the blend is ended so it disable the anim 2
2 - my game behavior need to reactivate the anim 2 and do it (so i override the disable state)

At next frame the animation system will see no changes and so don't reset the anim 2. The anim 2 stay in pose of its last frame forever. (-.-.-.-.-.-.-)

May be a simple solution would be :

if an animation receive an explicit request of activation AND is already active AND its time cursor is over 1 (relative time) then restart it.
al2950
OGRE Expert User
OGRE Expert User
Posts: 1227
Joined: Thu Dec 11, 2008 7:56 pm
Location: Bristol, UK
x 157

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by al2950 »

Hi all

I meant to do this a while ago, but when i took some time off work I fell ill..... Typical!!

Anyway, I managed to find some time this weekend to finish off my skeleton mask additions to this Animation tree system. I have never done C# before and certainly not mixing managed and un-managed code together, which by the way is a nightmare! Also I wrote the C++ stuff with a high fever so probably needs another look at. Performance is a worry for me, so I will be having another look at that area, having said that there is no noticeable differences when using blend masks. There are a few features still missing but below and the ones that are completed.

I am just polishing some stuff off, then I will release a patch, OR i will give novaumas the patch directly so he can update SVN.
@novaumas Can you PM if you are still around!

Anyway the features and some screen shots :D

Features Done
  • Added proper Skeleton visuals
  • Added skel mask nodes to runtime and editor. These mask nodes have several operators including 'multiply', 'add', and 'subtract'
  • Bones can now be selected from the viewport and given a value. Right click and draw box around the bones you want
  • Bones are coloured when a mask node is selected. The colour represents the different mask values the skeleton has
Features TODO
  • Add ability to change skeleton scale
  • Added custom value option when setting mask value
  • Add table view of skeleton mask
  • Fix win vista/7 permissions issue
  • Tidy projects up and remove MOgre projects
Adding new skeleton mask node
Adding new skeleton mask node
Setting mask value in viewport
Setting mask value in viewport
Shoot and walk animation working perfectly with each other using mask nodes :)
Shoot and walk animation working perfectly with each other using mask nodes :)
mono2k
Gnoblar
Posts: 19
Joined: Mon Mar 15, 2010 8:02 am

Re: TecnoFreak: Blend Tree Animation System[Open Sourced Edi

Post by mono2k »

looks great! :D
Post Reply