Sign in to follow this  
Followers 0
Gen.Kenobi

Animation Pipeline

443 posts in this topic

OKay guys.

I really want to get some info about how it's done, because I want to do something in that field :)

-> How this work, and what we should know.

-> Rigs. Rigs. Rigs. There must have been some rigs already. I just can't seen to find them. (Hopefully they could be Blender format compatible :P - Rigging is a pain)

-> Random Questions:

--- A that soldier is holding a sword or a spear. I would animate it with the sword, or the empty or the coordinate where the prop would go?

--- Is it possible to make integration with the animation of 2 different objects? I mean... A fisherman in a boat. Can I make the boat be floating in the water and the fisherman inside it trying to balance himself? Or I would need to rig the boat and animate it separatly from the guy, since he would go where "propped"? And If i do a new rig, I guess i'm gonna need to update the skeletons.xml, right?

I'm kinda unsure about it. About the whole process of animation and how it actually works whithin the engine.

Thanks everyone.

Share this post


Link to post
Share on other sites

I'd be happy to help, but I fear my advise would be outdated and it is 3ds max specific, not blender. The blender guys could help you I think. All the old 3d max animation, rigs, and original files are in the SVN art repository.

for your questions... if you create a sword, you put it's origin at the handle of the sword. When you define what prop point the sword is attached to in the actor.xml file - the game engine will do that for you. You don't animate the sword, it simply moves with the actor's hand.

for your boat and fisherman... I would create two seperate rigs. One that animates the boat. The boat would include a prop point that would be the bottom of the foot location of the fisherman. The fisherman and his movements would be his own animation that shares the same skeleton as all the rest of the humanoid characters in the game. This would allow you to perhaps use that fishing animation by a guy who isn't on a ship, and maybe on shore.

There isn't anything super fancy about the skeletons.xml file. I think one of it's main purposes is to allow cross compatability of .dae files and different software packages and their unique rigs. For example, a standard named rig out of XSI software can be common with a rig out of 3ds max (biped).

The heierachical bone structure between animals could be shared by the skeletons as well. For example, a goat and a deer could have the same skeleton because they would likely have the same number of bones and joints. Elephants and camels would be different because they have unique bones for things like an extra long neck or a trunk. Boat rowing skeletons could be shared across all boats. Siege units, and chariots could each be common... etc. Alas I fear I'm not explaining myself well... let me know if I can provide more guidance.

Share this post


Link to post
Share on other sites

Thanks for the answers Jason. I just received a word from Kimball and looks like that there's not a Blender rig around. I'll need to get my hands dirt them - the Blender's rigify add-on shouldn't be a probleman. :P

I also noticed that the head is separated from the body model (working on dude.obj right now)... How would I animate it them? Would I need to rig the head separatly?

So all I need to do is to animate the hand and the object will follow it, right? - That may be something study... abstract animation FTW :D

About the boat... I understand it...but it would be quite hard to make something seamless, and looks like it's integrated betwen different objects. Something that I'll have to look into. Maybe i can dump them in the same scene and export them separatly... That could work... hmm...

I'm atm rigging a generic male mesh, dude.obj. Once I'm done, I'll upload the rigg, and the probleman is solved ;)

Share this post


Link to post
Share on other sites

Here it is! :)

My first rig ever :P - Actually, It would be unfair calling it mine, since I just used Blender's add-on.

rig-0ad.png

It is still a little bit rusty and unpolished in some areas, but I guess I'll be figuring out, as I learn more - the model didn't help much, anyways :P

Here you go! (I hosted it in my server, I would reccomend uploading to somewhere more accesible ;) )

http://www.ds3d.revora.net/0ad/daniels_blender_male_rig.blend

PS: The Mozin Nagant is not included :P

Share this post


Link to post
Share on other sites

I think it shouldn't be to difficult to import a .dae into blender. I know that there is some issues getting the .dae animations into blender... but does that mean that the file doesn't open at all? Or, can it at least load up even if none of the animations work? These things I don't know.

If you import a .dae head from the game, you should be able to snap him to the position of blender's head bone. We seperated the head from the body because the body uses the alpha channel in it's map for player color, while the head uses the alpha channel in it's map for random object (hair) color. The game engine can only use the alpha for one thing at a time.

Anyway... Once you import a head, snap and attach it to the head bone. When you animate the head bone the imported head should follow. I'm using 3ds max terminology, but I'm sure Blender has something similar.

About the boat, it isn't as difficult as you think to sync them. Just ensure that the number of animation frames in both the boat animation and the fisherman animation are the same. Also ensure that the animation speed defined in the actor file are the same. If those 2 factors are identical they should be sync'd. You should be able to work with them both in the same scene in blender. The only trick is to select what you want to export when it is time to export to .dae and then "export selected" to separate them from each other into different .dae files. At least that is how I would do it in max.

Your blender rig looks pretty good, but something is going on with the hands there... perhaps the hand bones are rolled over or twisted and it is distorting the wrists?

When your creating a rig, note when you import a .dae file from the game. It should come into blender with some dummy objects that are being used as nodes to define prop points. These nodes are linked to the skeleton, but are not exported with the mesh/skin so they aren't rendered in the game.

Share this post


Link to post
Share on other sites

Hmm... I see. Thanks for the imput Jason! :)

I'll take another look into the Rig, maybe I'll re-rig it. I also noticed that the hands are out of place, as well the elbows aren't working properly, must have been something that I deleted (since the model doesn't has actual fingers). ;)

Share this post


Link to post
Share on other sites

If you want to use an animation from Blender with the existing biped meshes (mostly from 3ds Max), which I think would be a good thing to support, you'll have to be very careful to ensure the skeletons match correctly - same bone hierarchy, same bone sizes, etc, and then set up skeletons.xml to map the new Blender bone names onto the old 3ds Max bone names so the game knows they're the same. (Importing one of the existing biped mesh .dae files should give the right skeleton shape, which could be used as a template; I presume it's not usable directly since it won't have all the movement constraints and IK etc that are necessary for creating animations.)

Share this post


Link to post
Share on other sites

Agreed. If you could make a blender version of the default humanoid then any animations make in blender would be able to be applied to the existing .dae models and vice versa - any existing animations of humanoids could be applied to new blender humanoid models.

Share this post


Link to post
Share on other sites

Hmm... I'm not very good with codding, but I'll give it a try.

Anyways... I was wondering. Is it possible to animate the nodes for the prop points? I meant, an animation something like that, but with a spear would be cool as iddle:

:)

BTW, I just made a simple fisherman paddling animation (I think it'll be used of RotE mod) Now I need try to get it ingame. (I'll update the thread with the video once it's done)

EDIT:

My first animation ever :)

Share this post


Link to post
Share on other sites

I think it may be possible to animate the prop point nodes. I've never tried it. Only one way to find out though :)

Nice work with your first ever animation!

This shouldn't require any coding, what do you think you need to code?

Share this post


Link to post
Share on other sites

My first animation ever :)

Looks great Gen.Kenobi!

I see you're animating the fisherman for RotE :)

Share this post


Link to post
Share on other sites

Or a Venetian gondola! ;D

BTW: there are also a bazillion unused animation files in the Art SVN. Maybe Wijit can give some insight on how to use these or modify these.

Share this post


Link to post
Share on other sites
I think it may be possible to animate the prop point nodes.

It's not - the only thing you can animate is bones. (The .psa animation files store position and orientation for every bone every frame, and pretty much no other data. The .pmd mesh files store each prop point's position/orientation relative to some bone as a single static value, so that can't be animated.)

Share this post


Link to post
Share on other sites
It's not - the only thing you can animate is bones.

There you have it! I haven't really had a need in the past to do such an animation, so I don't think you'll find baton twirling to be frequent motion ;)

there are also a bazillion unused animation files in the Art SVN. Maybe Wijit can give some insight on how to use these or modify these.

Yes, there are numerous motion capture files in the repository. I forget the format, but I believe some of them could work with blender (though most were intended for max and it's Character Studio software). These aren't perfect, but they provide some great fluid animations. I used many of them with slight alterations (to get them to repeat and loop properly, shorten to one action per animation, etc...).

Share this post


Link to post
Share on other sites

This shouldn't require any coding, what do you think you need to code?

I don't know. I'm not very confortable messing around the skeletons.xml file :P (Still need to figure out what to do.) Any help would be really appreciated. :)

It's not - the only thing you can animate is bones. (The .psa animation files store position and orientation for every bone every frame, and pretty much no other data. The .pmd mesh files store each prop point's position/orientation relative to some bone as a single static value, so that can't be animated

Is there a reason for that limitation? With COLLADA now, shouldn't we try to let things be animated without the need for bones/rigs? I remember whem Modding C&C Generals, just the name you give to the object within the model - Like a Turret - it would move and act like a turret. If the game is to be mod friendly not all animations should be required to work with bones.

Animating the prop-poins could really look interesting. I would even say that they are quite a priority. Let's say... what about a guy holding a riffle. Where his hand would be holding it, wouldn't be the place where the trigger is. (Remember the Musketeeer in AOEIII?) It's up to you guys, but for me it really should be taken in consideration.

Unless there's a way to animate the prop itself (rigged) and just use the node as a relative position. Of course this would require much more tweaking and work to make it look right :)

Or a Venetian gondola! ;D

Hehehehe. I actually used the Gondolas as reference videos for the animation. ;)

Now a design question - I guess that you go for you Michael. How are we planning to man the sieges? Semi realistic, like EE II and AOE III. Or realisticaly like Total War?

Share this post


Link to post
Share on other sites
Is there a reason for that limitation?

It's a natural way to do the technical design and it keeps things simple - animations are specified entirely by the bone positions/orientations and we don't need anything extra in the file formats or the engine code. If you want to animate a prop independently of the skin, you can add a new bone into the skeleton and attach the prop to that and animate the new bone - that might not be perfectly convenient but at least it's possible.

(Making things more convenient seems a very hard problem, since it's unclear what would be a good design from the perspectives of engine programmer and tool programmer and artists. Hacking extra features incrementally onto our current design would probably not give a good result, but I don't know what would.)

Share this post


Link to post
Share on other sites

I don't know. I'm not very confortable messing around the skeletons.xml file :P (Still need to figure out what to do.) Any help would be really appreciated. :)

It is hard for me to give you instructions because I don't know enough about blender to see what your seeing. I guess I could install it and try my theories myself, but I'm a total noob with the software. It would be worth a start though perhaps. Could you point me to a download of the same verion of the software you are using?

Also, here this might be worth take a look at. This is the basic structure of the dude:

http://trac.wildfiregames.com/wiki/ArtDesignDocument#Tools

The portion of the file you would be looking at is:


1 <skeletons>
2 <standard_skeleton title="Standard biped" id="biped">
3 <bone name="root">
4 <bone name="pelvis">
5 <bone name="spine">
6 <bone name="spine1">
7 <bone name="neck">
8 <bone name="head">
9 <bone name="DUMMY_headnub"/> <!-- kept for binary compatibility with PSA files -->
10 <bone name="l_clavicle">
11 <bone name="l_upperarm">
12 <bone name="l_forearm">
13 <bone name="l_hand">
14 <bone name="DUMMY_l_finger0">
15 <bone name="DUMMY_l_finger0nub"/>
16 </bone>
17 </bone>
18 </bone>
19 </bone>
20 </bone>
21 <bone name="r_clavicle">
22 <bone name="r_upperarm">
23 <bone name="r_forearm">
24 <bone name="r_hand">
25 <bone name="DUMMY_r_finger0">
26 <bone name="DUMMY_r_finger0nub"/>
27 </bone>
28 </bone>
29 </bone>
30 </bone>
31 </bone>
32 </bone>
33 </bone>
34 </bone>
35 <bone name="l_thigh">
36 <bone name="l_calf">
37 <bone name="l_foot">
38 <bone name="DUMMY_l_toe0">
39 <bone name="DUMMY_l_toe0nub"/>
40 </bone>
41 </bone>
42 </bone>
43 </bone>
44 <bone name="r_thigh">
45 <bone name="r_calf">
46 <bone name="r_foot">
47 <bone name="DUMMY_r_toe0">
48 <bone name="DUMMY_r_toe0nub"/>
49 </bone>
50 </bone>
51 </bone>
52 </bone>
53 </bone>
54 </bone>
55 </bone>
56 </standard_skeleton>
57
58 <!--
59
60 The <skeleton>s must specify all the bones that may influence vertexes of
61 skinned meshes. The <bone name> is the name of the bone in the relevant
62 modelling/animation program. The <identifier> name is used to determine
63 whether this <skeleton> applies to the data found in a given model file.
64
65 <target> must be the name of a bone in the standard_skeleton identified by
66 <skeleton target>.
67
68 The hierarchy of bones is mostly irrelevant (though it makes sense to match
69 the structure used by the modelling program) - the only effect is that
70 the default <target> (i.e. when none is specified for a given bone) is
71 inherited from the parent node in this hierarchy.
72
73 -->
74
75 <skeleton title="3ds Max biped" target="biped">
76 <identifier>
77 <root>Bip01</root>
78 </identifier>
79
80 <bone name="Bip01">
81 <target>root</target>
82
83 <bone name="Bip01_Pelvis">
84 <target>pelvis</target>
85
86 <bone name="Bip01_Spine">
87 <target>spine</target>
88
89 <bone name="Bip01_Spine1">
90 <target>spine1</target>
91
92 <bone name="Bip01_Neck">
93 <target>neck</target>
94
95 <bone name="Bip01_Head">
96 <target>head</target>
97
98 <bone name="Bip01_HeadNub"/>
99
100 <bone name="Bip01_L_Clavicle">
101 <target>l_clavicle</target>
102
103 <bone name="Bip01_L_UpperArm">
104 <target>l_upperarm</target>
105
106 <bone name="Bip01_L_Forearm">
107 <target>l_forearm</target>
108
109 <bone name="Bip01_L_Hand">
110 <target>l_hand</target>
111
112 <bone name="Bip01_L_Finger0">
113
114 <bone name="Bip01_L_Finger0Nub"/>
115
116 </bone>
117 </bone>
118 </bone>
119 </bone>
120 </bone>
121
122 <bone name="Bip01_R_Clavicle">
123 <target>r_clavicle</target>
124
125 <bone name="Bip01_R_UpperArm">
126 <target>r_upperarm</target>
127
128 <bone name="Bip01_R_Forearm">
129 <target>r_forearm</target>
130
131 <bone name="Bip01_R_Hand">
132 <target>r_hand</target>
133
134 <bone name="Bip01_R_Finger0">
135
136 <bone name="Bip01_R_Finger0Nub"/>
137
138 </bone>
139 </bone>
140 </bone>
141 </bone>
142 </bone>
143 </bone>
144 </bone>
145 </bone>
146
147 <bone name="Bip01_L_Thigh">
148 <target>l_thigh</target>
149
150 <bone name="Bip01_L_Calf">
151 <target>l_calf</target>
152
153 <bone name="Bip01_L_Foot">
154 <target>l_foot</target>
155
156 <bone name="Bip01_L_Toe0">
157
158 <bone name="Bip01_L_Toe0Nub"/>
159
160 </bone>
161 </bone>
162 </bone>
163 </bone>
164
165 <bone name="Bip01_R_Thigh">
166 <target>r_thigh</target>
167
168 <bone name="Bip01_R_Calf">
169 <target>r_calf</target>
170
171 <bone name="Bip01_R_Foot">
172 <target>r_foot</target>
173
174 <bone name="Bip01_R_Toe0">
175
176 <bone name="Bip01_R_Toe0Nub"/>
177
178 </bone>
179 </bone>
180 </bone>
181 </bone>
182 </bone>
183 </bone>
184 </bone>
185 </skeleton>
186
187 <skeleton title="XSI biped" target="biped">
188 <identifier>
189 <root>Biped_GlobalSRT</root>
190 </identifier>
191
192 <bone name="Biped_GlobalSRT">
193 <target>root</target>
194
195 <bone name="Biped_Spine01">
196 <target>pelvis</target>
197
198 <bone name="Biped_Spine02">
199 <target>spine</target>
200
201 <bone name="Biped_Spine03">
202 <target>spine1</target>
203 </bone>
204 </bone>
205 </bone>
206 <bone name="Biped_Lshoulder">
207 <target>l_clavicle</target>
208 </bone>
209 <bone name="Biped_Lbicept">
210 <target>l_upperarm</target>
211
212 <bone name="Biped_Lforearm">
213 <target>l_forearm</target>
214 </bone>
215 </bone>
216 <bone name="Biped_Rshoulder">
217 <target>r_clavicle</target>
218 </bone>
219 <bone name="Biped_Rbicept">
220 <target>r_upperarm</target>
221
222 <bone name="Biped_Rforearm">
223 <target>r_forearm</target>
224 </bone>
225 </bone>
226 <bone name="Biped_neck">
227 <target>neck</target>
228
229 <bone name="Biped_head">
230 <target>head</target>
231 </bone>
232 </bone>
233 <bone name="Biped_Lthigh">
234 <target>l_thigh</target>
235
236 <bone name="Biped_Lshin">
237 <target>l_calf</target>
238 </bone>
239 </bone>
240 <bone name="Biped_Rthigh">
241 <target>r_thigh</target>
242
243 <bone name="Biped_Rshin">
244 <target>r_calf</target>
245 </bone>
246 </bone>
247 <bone name="Biped_Lhand">
248 <target>l_hand</target>
249 <bone name="Biped_Lfingers"/>
250 </bone>
251 <bone name="Biped_Lfoot">
252 <target>l_foot</target>
253 <bone name="Biped_Ltoe"/>
254 </bone>
255 <bone name="Biped_Rhand">
256 <target>r_hand</target>
257 <bone name="Biped_Rfingers"/>
258 </bone>
259 <bone name="Biped_Rfoot">
260 <target>r_foot</target>
261 <bone name="Biped_Rtoe"/>
262 </bone>
263 </bone>
264 </skeleton>

So... if you notice in the code above, there are 3 sections (Philip please correct me if I'm wrong here). Rows 1-56 is defining the standard biped. That is a generic biped that the game engine uses.

Rows 75-185 is the 3ds Max version of the biped. It is saying for example... in row 100 & 101 that 3dsmax bone named: Bip01_L_Clavicle equals l_clavicle on the generic biped (see row 10).

Rows 187-264 is the XSI version of the biped. It is saying for example... in rows 206 & 207 that XSI bone named: Biped_Lshoulder equals l_clavicle on the generic biped (see row 10).

Sooooo, what I foresee for Blender is a similar variant that is like the 3ds max and XSI versions that will need to be created. It would have the same number type, size, constraints, etc... of bones (this can hopefully be achieved by importing an existing .dae file) - however you can rename the bones as Blender requires (maybe it doesn't care?). Once the changes are made you need to make a bit of code to tell the game engine what the new bone names equals on the generic biped.

Hopefully that is somewhat sensible... let me know if you need some clarification.

Is there a reason for that limitation? With COLLADA now, shouldn't we try to let things be animated without the need for bones/rigs? I remember whem Modding C&C Generals, just the name you give to the object within the model - Like a Turret - it would move and act like a turret. If the game is to be mod friendly not all animations should be required to work with bones.

In the past we had requested programming to support vertex animations. I'm not sure what the status of that is or ever will be, but that would accomplish the same thing. In the short term, for an immediate solution, we have the ability to create as simple one bone animation/rig that would effectively do what you want to do. It just isn't something as easy for the artist as exporting an unboned vertex based animation.

Share this post


Link to post
Share on other sites

So yeah. Today I started to work on a new rig for the ships. Specially for the Trirremes, as it's a very old request of the players :)

I managed to get almost everything alright, but, for some reason, I ran into some problemans, that i'm unable to identify, nor to correct them. I tried all the possible ways that I know that it could be happening, but I was unsucessful.

I know. A picture is worth a thousand words.

pUyIc.png

I'm also attaching the .blend file. Maybe someone can give me a light here.

rig-trirreme.zip

Share this post


Link to post
Share on other sites

Similar to Michael's suggestion. Perhaps remove the hull of the ship (temporarily) while to get your rig set up. Once the oars look right, move the hull back into position.

Share this post


Link to post
Share on other sites

So yeah. Today I started to work on a new rig for the ships. Specially for the Trirremes, as it's a very old request of the players :)

I managed to get almost everything alright, but, for some reason, I ran into some problemans, that i'm unable to identify, nor to correct them. I tried all the possible ways that I know that it could be happening, but I was unsucessful.

I wasn't expecting anyone else to start working on the rowing animations so soon. I already have most of the 0 A.D. rowing ship hulls rigged in Blender to the skeleton structures below:

	<standard_skeleton title="Ship One Row" id="shiponerow">
<bone name="one_row_main">
<bone name="right_top_row"></bone>
<bone name="left_top_row"></bone>
</bone>
</standard_skeleton>

<skeleton title="Ship One Row" target="shiponerow">
<identifier>
<root>shiponerow</root>
</identifier>
<bone name="one_row_main"><target>one_row_main</target>
<bone name="right_top_row"><target>right_top_row</target></bone>
<bone name="left_top_row"><target>left_top_row</target></bone>
</bone>
</skeleton>

<standard_skeleton title="Ship Two Row" id="shiptworow">
<bone name="two_row_main">
<bone name="right_top_row"></bone>
<bone name="right_bottom_row"></bone>
<bone name="left_top_row"></bone>
<bone name="left_bottom_row"></bone>
</bone>
</standard_skeleton>

<skeleton title="Ship Two Row" target="shiptworow">
<identifier>
<root>shiptworow</root>
</identifier>
<bone name="two_row_main"><target>two_row_main</target>
<bone name="right_top_row"><target>right_top_row</target></bone>
<bone name="right_bottom_row"><target>right_bottom_row</target></bone>
<bone name="left_top_row"><target>left_top_row</target></bone>
<bone name="left_bottom_row"><target>left_bottom_row</target></bone>
</bone>
</skeleton>

<standard_skeleton title="Ship Three Row" id="shipthreerow">
<bone name="three_row_main">
<bone name="right_top_row"></bone>
<bone name="right_middle_row"></bone>
<bone name="right_bottom_row"></bone>
<bone name="left_top_row"></bone>
<bone name="left_middle_row"></bone>
<bone name="left_bottom_row"></bone>
</bone>
</standard_skeleton>

<skeleton title="Ship Three Row" target="shipthreerow">
<identifier>
<root>shipthreerow</root>
</identifier>
<bone name="three_row_main"><target>three_row_main</target>
<bone name="right_top_row"><target>right_top_row</target></bone>
<bone name="right_middle_row"><target>right_middle_row</target></bone>
<bone name="right_bottom_row"><target>right_bottom_row</target></bone>
<bone name="left_top_row"><target>left_top_row</target></bone>
<bone name="left_middle_row"><target>left_middle_row</target></bone>
<bone name="left_bottom_row"><target>left_bottom_row</target></bone>
</bone>
</skeleton>

A few weeks ago Mythos and I talked about ship animations and decided to create turn animations alongside the forward/backward movement animations. The reason I haven't committed anything yet is because a large number of the ships will need changes to the mesh to allow them to 'row' properly using bone animations. Some models also need to be shifted back to origin, which then also requires edits to the prop meshes.

Regarding your mesh bug, you just need to remove the offending vertices from the bone weight - you don't need to put the row in a separate mesh or anything like that ;)

I'll try to get some of the ships rowing in-game this weekend and then I'll email you the blend files for you to take a closer look at. You can then work on the new Roman ship rowing animations using the already defined skeleton structures or even redo some of my animations if you want.

Share this post


Link to post
Share on other sites

That sounds great! I'm not very good at rigging, so yours will really be better tham mine.

Just one thing, I don't know if my WFG email is working well... Can someone send me a test mail? :)

Share this post


Link to post
Share on other sites

That sounds great! I'm not very good at rigging, so yours will really be better tham mine.

From your Blender file it looks like you're very knowledgeable about rigging. Any idea if 0 A.D. supports animation constraints like those you've used in your animation? We may need them.

Despite the vertex bug, could you email me or post here a version of your ship rig with a simple rowing animation (even just on 1 side)? I'd like to see how your rig setup would animate ;)

Just one thing, I don't know if my WFG email is working well... Can someone send me a test mail? :)

Sent you a test email :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0