Animating B3D without vertex manipulation...how?

Blitz3D Forums/Blitz3D Programming/Animating B3D without vertex manipulation...how?

OrcSlayer(Posted 2006) [#1]
In a thread I started a little while back I explained my current method of animation: A skeleton file which has only bone information is loaded, then the pieces of the model are loaded in and parented to the bones of the skeleton (which is the animated mesh, the other pieces are loaded as normal unanimated meshes). This is great since it stops the very slow B3D vertex manipulation from happening, BUT...it results in very high surface counts so fast it kills performance anyway.

But, someone told me that it is possible to animate a .b3d file without vertex manipulation by attaching the individual pieces of the mesh to bones, without rigging them or something to that effect. This would result in a single mesh file being loaded (easier), with only 1 surface (if using a single texture for all the pieces), which animates basically the way I described above (tomb raider style).

I tried to explain this to my artist, but he's clueless about how to go about it. So, my first question, is it true this can be done as I was told earlier, and second, how would I go about explaining the process to my artist?


Danny(Posted 2006) [#2]
I don't believe you can have a b3d file with 'individual pieces of mesh' without having 'individual' (ie. 'multiple') surfaces if you don't want to use bones in that character. These individual pieces are normally defined by the weight-maps. Not by seperate pieces of geometry.

Normally you'd model a character using 1 single surface and thus 1 single texture map. The character's body parts are controlled by the model's weight-maps which in turn are driven by individual bones in the skeleton. I don't believe it's possible to link/parent bones from one mesh to another mesh's weightmaps. You can only control that WITHIN the b3d file.

This does not require per-vertex animation. And since it's 1 single surface (per character) you don't have the 'very high surface count'. Besides the obvious poly-count, the less bones/weightmaps you have, the faster a character deforms to the animated bones.

If you want to apply the animation of a single skeleton onto another character, then you can either apply the bone position & rotation from the animated skeleton to the skinned character (meaning you can apply different sections of animated skeleton to different characters) -OR- parent the bones of the skinned character to the animated skeleton, so that the skeleton drives the character (but this way you can use your skeleton on only ONE other character - unless all characters must move exactly the same at all times, which I'll doubt).

Not sure if I'm actually answering your question here but .... that's my 2 cents :)

d.


OrcSlayer(Posted 2006) [#3]
Hmmm, well you seem to have a good deal of expertise in this area. I think you may have slightly misunderstood the question, but I believe you still answered it. I was hoping it was possible to have multiple pieces of geometry within the .b3d file, but still sharing the same surface...and then attach them to the bones without setting weight-maps or whatnot. I guess I misunderstood what the guy was saying...

It seems my greatest problems with the "normal" method come with humanoid characters, which have at least 1k polygons and many bones. However, I've now got it set up where in my game there will only be one animated human character (all other human models are static corpses), and the others will be alien "critters." That way I suppose as long as the human character is kept within a reasonable polycount and fairly few bones it will not cause a problem.

However, I want to be able to have a decent number of said critters on screen at once. There will be four uniqiue types, but regardless each one will have a single texture/surface and few animations. Basically I'm looking at zerg/tyranid type creatures so they have fairly rigid joints, which is why "tomb raider" style animation would have been so useful here (no need for bone deformation). However, I can't seem to do that without extensive surface counts by using multiple meshes per character.

Since I can't do that, I suppose the key to success will be keeping the meshes very low polycount, make extensive use of texturing to make them look as best we can, and keep bone count to a minimum. Correct?

It just won't be fun if they can't swarm the player in decent sized groups...and the chaingun just won't serve much purpose against a couple of drones.


slenkar(Posted 2006) [#4]
to sum it up, you need a single surface entity system, that can put different parts of the texture on different meshes?

Just to ask, how many bones do you have per character?


t3K|Mac(Posted 2006) [#5]
i often read "extensive surface counts" - can anyone define that? what is "extensive"? 5? 50? 500?


OrcSlayer(Posted 2006) [#6]
Slunkar: Well, with the system my artist and I had worked out there were 13 body parts, each a seperate mesh:
Head
Torso
Abdomen
Left Thigh and Right Thigh
Left Calf and Right Calf (includes feet)
Left Shoulder and Right Shoulder (includes upper arm)
Left Forearm and Right Forearm
Left Hand and Right Hand

Each one parented to one of the bones of the base skeleton. Thus, 13 bones.

The problem is, some people told me that it would be even slower to create a single surface system for this method than just using a single mesh with normal bone animation (and blitz does that pretty slow). Besides the fact that I have no idea how to create a single surface system...

Anyway, at 13 surfaces per character, I was having a serious problem...with very few characters. I narrowed it down to the surface counts being the sole problem. I suppose I'll have to stick with one surface per character, and just use very low poly and bone counts. Otherwise the alien critters wouldn't be any fun since they have to swarm to be...well...fun to fight.

However, since I now have only one animated human, character I suppose I can have my artist put a bit more detail into him.


Ricky Smith(Posted 2006) [#7]
There is also the possibility of implementing a LOD system using animated 2d sprites for models that are a certain distance from the player and only using the 3d models when up close ....

Creating 2d animation from 3d models ( 12mb .wmv )


slenkar(Posted 2006) [#8]
if you create a lot of characters you may only have 13 surfaces altogether.
I created 22 characters and I used a brush to change one of the characters' materials (surface) and all the characters changed. Which suggests they were using the same surface.

Did you use copyentity to reproduce body parts?


BIG BUG(Posted 2006) [#9]
Which suggests they were using the same surface.


It looks that way in Blitzbasic, but behind the scene it's handled like several surfaces, so there is no gain in speed.


Stevie G(Posted 2006) [#10]
Sorry .. O/T ... @ Ricky, curious to know how you managed to get a 7 min video into 12mb? What do you use for this?


Ricky Smith(Posted 2006) [#11]
http://www.techsmith.com/camtasia.asp

I use version 2.0. Very good compression when exporting as wmv. Has a lot of other good export formats too including swf. A little pricey but well worth it.


Danny(Posted 2006) [#12]
I see what you're saying Orcslayer, and err... dunno really (so much for my 'expertise' :)

13 bones for a human made of 1k polys is indeed a bare minimum, you can't save more than that.

A single surface system might indeed be the answer, and although I haven't got much experience with them, the amount of time to manually tweak vertices seems (in particle engines & grass systems, etc) to be worth the effort and keeping FPS up - as opposed to this hellish surface count problem with Blitz (or dx7 or whereever the problem lies). But combining a SS system with bones and animation, don't ask me. Not there yet ;)

You should check out what the GrumpyOldMan did, not sure if you can still download his demo, but 200 characters marching with massive FPS counts is pretty impressive. Check this thread:
http://www.blitzbasic.com/Community/posts.php?topic=62559

d.


OrcSlayer(Posted 2006) [#13]
I saw that...haven't seen anything in the way of updates for a long while though. Maybe I'll send him an email and see if it could be usable for what I'm doing.

I'll try an expirement with AMT Singlemesh system too, but I'm trying to keep my use of DLL's to a bare minimum.


Danny(Posted 2007) [#14]
Hi OrcSlayer,

This might be long ago, but did you have any positive results with the AMT SingleMesh system? There's very little explenation on their website. I'm considering it - as opposed to starting from scratch.. Any info would be most welcome..

Cheers,
Danny.


Vertigo(Posted 2007) [#15]
Anyone else have any thoughts on the best practical way to have a single surface mesh animating from rotational pivots rather than vertex deformation? For maybe say 200 + characters on screen at any point in time, each having a unique texture map?


b32(Posted 2007) [#16]
How about giving each vertex a single bone with a weight of 1.0 ?