【问题标题】:Three.js export SkinnedMesh with position三.js导出带位置的SkinnedMesh
【发布时间】:2021-01-24 00:42:56
【问题描述】:

我正在尝试使用 https://github.com/mrdoob/three.js/blob/master/examples/jsm/exporters/OBJExporter.js 从 Three.js 场景中导出模型

有些网格是基础网格,有些是 SkinnedMesh,所以我编辑了第 250 行

if ( child instanceof Mesh ) {

到

if ( child instanceof Mesh || child instanceof SkinnedMesh ) {

我可以看到导出文件中的所有网格,但蒙皮网格位于原点,位置和方向错误。 如何编辑导出器以使 SkinnedMeshes 也正确,为什么会发生这种情况?

编辑: 我尝试使用答案中提出的 STL 导出器,但它仍然无法导出姿势,因为它检查了三个属性:

if(typeof object.obj.geometry.attributes.skinIndex !== 'undefined' && typeof object.obj.geometry.attributes.skinWeight !== 'undefined' && typeof object.obj.skeleton !== 'undefined')

除了“object.obj.skeleton”之外都是未定义的。 我可以在 SkinnedMesh 对象中看到的属性是“instanceIndex”、“normal”、“position”和“uv”

编辑 2:

抱歉,我误读了输出日志。有一些网格具有相当的属性,这意味着实际名称是“skinWeight0”和“skinIndex0”。 我尝试将名称更改为代码中的名称,并且可以成功打印这些数组,但是导出的模型完全一团糟:

【问题讨论】:

    标签: javascript three.js mesh 3d-model


    【解决方案1】:

    发生这种情况是因为蒙皮网格的转换不仅取决于Object3D.position、Object3D.rotation 和Object3D.scale 及其在对象层次结构中的位置。它还取决于它的骨架。

    到目前为止,您所做的更改不足以尊重骨架信息。如果要确保导出实际反映蒙皮网格的变换和形状,则需要类似于此 PR 中的类似代码:

    https://github.com/mrdoob/three.js/pull/16942

    所以这个想法是在计算顶点的最终位置(将在 OBJ 文件中定义)时实际考虑骨骼变换。

    【讨论】:

    • 嗯,即使有了这个脚本,模型仍然是 T posed.. 我会添加一些日志来看看发生了什么,如果条件它不会进入“applyBones”
    • 我已使用从该脚本获得的信息更新了问题
    • 使用r122,STLExporter 应该正确处理SkinnedMesh,参见github.com/mrdoob/three.js/pull/20494。
    猜你喜欢
    • 2013-02-12
    • 2016-02-27
    • 2013-07-02
    • 2018-07-03
    • 2012-07-29
    • 1970-01-01
    • 2017-03-15
    • 2017-08-07
    • 2015-05-03
    相关资源
    最近更新 更多