每个网格绑定的 glTF 皮肤,并通过关节名称进行去重,会破坏 RecursiveSkeletons 和共享皮肤模型
说明
在调查#4611(其前提证明是错误的:一个被剥去的网状节点的变形已经被忽视了,参见这里的收尾评论)时,我发现了Glb皮肤绑定方式的三个真正的缺陷. 所有这三种方法都通过在NulgraphicsDevice'上运行实际的 " GlbParser " +渲染器加以核实,并按皮肤网格和骨骼比较顶点遮蔽器(node.world Transform * skinstance.matrices[一])相对于从源文件中独立计算的glTF光谱值(`联合World Transform[一] *逆BindMatrix[一])。
资产 GlTF 皮肤 引擎 皮肤 皮肤 皮肤 唵(引)|(二合引)贺. · 赫罗诺斯 [递归轴 (https://ZGitHub.khronos.org/glTF-Assets/model/ReursiveSkeletons) · 84 · 84 · **1 ** · 84 · **83 ** · · GlTF-Asset-Generator [动画 Skin 11](https://GitHub.com/KhronosGroup/glTF-Asset-Generator/blob/master/Output/Positive/Animation Skin/README.md]) | 2 | **1 ** | 1 **** **1 **** QQ动画 Skin 05 + 第2个节点上的翻译 (下方文件) QQ 1 | 1 | 1 | 2 ** 1 ** | ^ 动画 Skin 00/02/05/07, BrainStem (59个网点,1个皮肤) ^ ^ + + + + + 0 →
- 皮肤被储存在共享的 " Mesh " 上,因此,由多个不同皮肤的节点重复使用的网状皮肤会得到所有皮肤的最后一块皮肤。
这是在#5680所报道的建筑问题( " Mesh.skin " 防止在一网块上瞬间出现几块皮肤)。 当地关于影响有限的评估并不坚持:它打破了克罗诺斯样本资产,是一种回归,见下文。
linkSkins' inglb-parser.js' does mesh.skin = skins [gltfNode.skin]' 对于每个提到网状的节点,最后节点获胜. GlbContainerResource.intianterender Entity'然后用'meshInstance.mesh.skin'而不是"节点"的皮肤来创建皮肤实例。 递归骨骼有被84个节点所引用的1个网格,每个节点都有自己的皮肤:84个网格中每个网格都最终共享一个"皮肤"绑定为皮肤83,因此所有触角片段都倒入了上个骨架部分.
这是从#3350(v1.45.2, July 2021):在它之前,证据确凿的实体'将每个节点的skins[gltfNode.skin]'传递到皮肤实例缓存;#3350取而代之的是meshInstance.mesh.skin'并增加了linkSkins'。 遗留的模型路径( " GlbContainerResource.create Model " )仍然面向每个节点的 " skins[gltfNode.skin] " ,并正确绑定了所有84个。 Mesh. initBoneAabbs'还从the.skin.boneNames'中标出骨头AABB的大小,因此,皮肤共用的网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网状网
- `创建皮肤' 仅通过联合名称来去除皮肤*
“ glbSkins” 缓存( 添加于 # 2912) 键在 ` boneNames. join (' #)' 上 。 两个同名的glTF皮肤变成了一个引擎 “皮肤” , 上面有第一个皮肤的反相绑定基质, 所以不同的 IBM 被悄悄地扔下。 骨解也取名("rootBone.findByName"),因此有两根骨架可以表示: . . . . . . .
内容来源: playcanvas/engine