Blender 2.79a (64bits) with GPU Hardware Skinning patch

Hi,

Here below you will find a blender 2.79a (64bits) with the GPU Hardware Skinning patch from Moguri’s thesis (Mitchell Stokes) https://github.com/Moguri/blender/commits/thesis

Blender-2.79a-64bits-GPU-Hardware-Skinning: https://mega.nz/#!41simAaI!iUgnyBzVx…3Tq8mukaSLClJw
Version 2.0 with more bones availables (1024 uniforms until 64 bones, 4096 until 128 bones):
https://mega.nz/#!1wdAGZqI!bmHsuJvCmodk3cRsLsSbDsQoTbJefS6DE8CF_WkVTNM

NOTE: You have to set the following settings:

  1. In render panel:
  • Always GLSL
  • Always Vertex Array as Storage type
  1. In Armature panel:
  • Select BGE GPU as Deform

WARNING:
You have as maximum 128 bones per character (I think that more than enough for current state of art) but this is the maximum fixed by blender sofware.
Additionally, you will have a graphics card maximum. I mean, you have:

  • A matrix with bones movement with a (4 x 4) dimension = 16 uniform components per bone
  • N bones per character.

Then you use the maximum: 128 bones * 16 components = 2048. If you have a more or less recent NVIDIA card you will have 4096 components available, if you have a less recent or low card or ATI card you will have 1024. (For example, my Nvidia 940m has 1024 only)

Then if you have 1024 component you will have as maximum 64 bones but you would spend all the uniforms (you need them for other things too). Internally, BGE is configured to reserve half of all uniform.

After all this story :-), I summaryze:

If you want that the GPU hardware Skinning works in almost “all” the hardware then use 32 bones or less per character.
Anyway, Internally is coded to use skinning by software if the graphics card doesn’t have enough uniform availables.

can we pass a table of bones as 1 uniform?

is there a CList or something equivalent in a GPU?

now that things have changed a bit, would this be better redone by a compute shader?

was reading this - https://turanszkij.wordpress.com/2017/09/09/skinning-in-compute-shader/

Hi, this sounds cool. I tested with a few models from blendswap, but it’s hard to find a model rigged and animated with less than 32 bones where we can see well the performance difference. Do you have a good test file for GPU skinning? Anyway, thanks very much for your work and shared build! I’ll retry later to find good models.

Hi,I’m going to increase the number of mínimum bones removing the reserve of half uniforms. I will upload later.

here test my guy.i get a framerate of thirty.look at the vertex count.

Attachments

guy.blend (3.55 MB)

My computer is hewlett packard computer
with a amd E1-2500 APU with Radeon™HD graphics 1.40Gz processor.

@lostscience/lordloki: wow, indeed, with this model the performances difference is impressive between CPU and GPU, that’s amazing

EDIT: Maybe this could be used to rig some vegetation. I’d maybe try some day.

thankyou but we should try it out on enemies added with the add object actuator.

78 characters, 10 bones each, 3 millions triangles, 37 fps with a nvidia 940m

Attachments


I tested four of mine and the framerate stayed at thirty.

with 36 animated man models I get a framerate 28.

This build has not reserved the half of uniforms for BGE. Then if the graphics card has 1024 uniforms you could accelerate until 64 bones, if the graphics card has 4096 uniforms you could until 128 bones. Anyway que you will have to leave some uniforms free.
New link: https://mega.nz/#!1wdAGZqI!bmHsuJvCmodk3cRsLsSbDsQoTbJefS6DE8CF_WkVTNM

Do you know how to install this on Upbge 0.2.3?
Is there any download as an addon?

This is not an addon and it can not pass to upbge without a high sources modification.

Anyway, GPU hardware skinning will be implemented in next upbge 0.2.5. You will have to wait a bit (3-4 months max)

1 Like

all of the links don’t work!

1 Like

this is literally ancient history. ask around the current upbge builds threads or join the upbge discord. lordloki hangs out there and is still working on upbge.

2 Likes

Here is a working link: https://mega.nz/file/JxsDzb4a#wOqJyTO9aRDfaziI3_VUL17aAxcvP20u2lmm-CrwU2U

This build has blender 2.79a + GPU Hardware Skinning patch + Joystick hotpluggin

1 Like

thanks btw is there any possible way to have GPU Hardware Skinning on upbge 0.3.0 ???

I was thinking about this

we could add a little note to the vertex shader

//this is where we want to insert uniforms

and another note just before the final output of the vertex

//this is where we would offset the model

and then finally, editing the gpu module to save the shader vert and frag source as a text

material.frag
material.vert

the dev can then do
string1 =material.frag
string2 = material.vert
uniforms = “uniform data”

string2.replace("//this is where we want to insert uniforms
",uniforms,1)

and then we can compile the shader sources → replace the material with the new copy