DX9 How much bones is supported for hardware skinning?

Started by
5 comments, last by hflong325 11 years, 1 month ago
Hi,
I don't know why but there is number 35 in my mind. Maybe I read somewhere in the past that 35 is the limit of bones which my mesh (in X-file) can have. Could anybody confirm that it is true? Or maybe I have some code example where there was constant variable set to max number 35 and that is why this number is in my mind...I don't remember. I am asking because I am at the beginning of definition bone hierarchy in Blender for my mesh and I would like to know what maximum number may I use, for example to simulate finger movements I need at least 10 bones, so if there is really 35 bones support from DirectX I cannot waste 10 bones for fingers, I will use just 2 bones for thumbs and 2 for the rest of fingers.
Advertisement
It depends on how you implement your shader.
Somewhere from 64-128 per sub-mesh should defiantly be possible.

I think there is a max of 256 vertex shader constants that you can set with ver. 3.0

So you can have 256 / 4 = 64 = number of 4x4 matrices

You could try to do/attach hands separately as you might later have different pixel shaders for skin and for clothing...

EDIT: I cant google concrete answer:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb172963%28v=vs.85%29.aspx

...

2. Equal to D3DCAPS9.MaxVertexShaderConst (at least 256 for vs_3_0).

...

I don't know what they mean by "at least", is that a guarantee minimum and can be more then this?

I think there is a max of 256 vertex shader constants that you can set with ver. 3.0

So you can have 256 / 4 = 64 = number of 4x4 matrices

You could try to do/attach hands separately as you might later have different pixel shaders for skin and for clothing...

EDIT: I cant google concrete answer:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb172963%28v=vs.85%29.aspx

...

2. Equal to D3DCAPS9.MaxVertexShaderConst (at least 256 for vs_3_0).

...

I don't know what they mean by "at least", is that a guarantee minimum and can be more then this?

It's a guaranteed minimum and it can be more than this but in practice it won't be, even on DX10+ class hardware. You'll also need to knock off a few for storing your MVP, any lighting or other constants, etc.

However, you only need a 4x3 (or 3x4 depending on your preference) matrix for skinning, so you get to have ~80 bones; a little bit better.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

I don't know what they mean by "at least", is that a guarantee minimum and can be more then this?

Yes.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

you are getting 35 from tiny.x, its made up of the biped rig :)

:)

I use 80 bones per submesh.Every bone uses 2 constants,the first float4 is a quaternion for rotation,the second is translation(xyz) and scale(w).

This topic is closed to new replies.

Advertisement