mrdoob / three.js

JavaScript 3D Library.
https://threejs.org/
MIT License
103.05k stars 35.41k forks source link

Should skinning examples show skinning? #24005

Closed greggman closed 1 year ago

greggman commented 2 years ago

I noticed none of skinning examples actually show skinning. At best maybe the stomach of the stormtrooper in this example shows skinning. The rest might be using the skinning code but the models don't "skin". They're a collection of solid parts that would look exactly same without skinning code.

A good example that makes this clear is this example:

https://threejs.org/examples/webgpu_skinning_points.html

You can see, no points are being weight blending by multiple vertices. That's not "skinning"

The same is true for all of these examples: https://threejs.org/examples/webgpu_skinning_instancing.html, https://threejs.org/examples/webgpu_skinning.html, https://threejs.org/examples/webgl_animation_skinning_morph.html, https://threejs.org/examples/webgl_animation_skinning_additive_blending.html

Even this one, https://threejs.org/examples/webgl_animation_skinning_blending.html, it's hard to see any actual "skinning". It's possible there's some skinning in the black parts of the joints but given the armor is stiff this example shows no actual skinning.

If it's not clear what I mean. This is skinning (computing vertex positions by summing the weighted influence of multiple matrices)

skinning-lines skinning-solid

This is not skinning (moving independent meshes)

not-skinning-lines not-skinning-solid

All of the three.js "skinning" examples are not skinning or at least not good examples of skinning. Note: It's possible the examples are going through the skinning code. It's even possible they're using weights but if so the weights are all set such that there's only one matrix influencing each vertex which is not really a good demonstration of skinning.

Would it be ok to replace the example models with something else? A quick search, all of these CC-BY models are much better examples of skinning.

https://sketchfab.com/3d-models/tyrannosaurus-rex-20-512712b314404760a860389ebd0ce78a

https://sketchfab.com/3d-models/white-pointer-8e429052939a4677861d0d550a0e27cd

https://sketchfab.com/3d-models/hummingbird-flying-4e6d591f6e50493aa5e31355084fc4e8

https://sketchfab.com/3d-models/ramsey-fb31d1eeeb90425394d0a708bd5e4552

https://sketchfab.com/3d-models/elephant-animation-idle-a8e7e10f005f4baab0a2f5079d759fcd

https://sketchfab.com/3d-models/icy-dragon-2db9268227b943e6a41e88390f2875a6

https://sketchfab.com/3d-models/low-poly-fox-by-pixelmannen-animated-371dea88d7e04a76af5763f2a36866bc

https://sketchfab.com/3d-models/fox-rigged-ee7d17f164724896b4f2c417a5153163

https://sketchfab.com/3d-models/tiger-51ed5186afb04487ae6adb51f8ffd09b

https://sketchfab.com/3d-models/animated-dog-shiba-inu-9abfce885a834399b2c3ccaed51cd474

I'd be happy to replace the current models with some of these.

Mugen87 commented 2 years ago

The project used the term skinning as an alternative for skeletal animation which is not entirely correct. Skinning is something that happens during skeletal animation. Wiki says:

Each bone in the skeleton is associated with some portion of the character's visual representation in a process called skinning

However, all mentioned examples fulfill this definition since they use SkinnedMesh and thus a skeletal in combination with skin indices and weights. Hence, I see no need to update the examples with different models.

mrdoob commented 2 years ago

There's a model on mixamo that could be a nice replacement.

Screen Shot 2022-05-11 at 5 30 45 PM
greggman commented 1 year ago

Showing skinning examples that don't actually show any skinning about the same as showing texturing example with 1x1 pixel textures or loading a gLTF with a single triangle. Yes, technically a 1x1 pixel texture would still be showing texturing but it's not an illustrative example of texturing. Nor would loading a 1 triangle gLTF show off loading gLTF files.

In the same way, showing skinning with only 1 influence per vertex is not really showing skinning. It doesn't really matter that it happens to go through the right code path.

I'd be happy to replace the model that that's there with this model above. Would that change be accepted?

mrdoob commented 1 year ago

Yes! That'd be great 🙏

WestLangley commented 1 year ago

I noticed none of skinning examples actually show skinning. You can see, no points are being weight blending by multiple vertices. That's not "skinning"

Well, that is not true.

Samba

greggman commented 1 year ago

Oh, you're right. That's about as good as a 2x2 pixel texture used to show off texturing