我正在使用three.js r73。我正在查看其中一个示例examples / webgl_skinning_simple.html。它的工作正常。
示例中使用的模型位于examples / models / skinned / simple /中。在此目录中是示例导入的.js文件以及用于创建它的.blend文件。
我遇到的问题是,如果我在混合器中加载混合文件然后导出它,我就得不到可用的JSON。只需加载混合文件,然后导出(启用Bones和Skinning复选框并在导出器中将Skeletal动画设置为“Rest”),就会导致JSON导出为空动画数组:
{
"normals": [-0.301492,-0.301492,-0.904508,-0.301492,-0.301492,0.904508,0.301492,-0.301492,0.904508,0.301492,-0.301492,-0.904508,0,0.707083,-0.707083,0,0.707083,0.707083,0.577349,0.577349,0.577349,0.577349,0.577349,-0.577349,-0.577349,0.577349,-0.577349,-0.577349,0.577349,0.577349,0.707083,0,-0.707083,0.707083,0,0.707083,0.577349,-0.577349,-0.577349,-0.577349,-0.577349,-0.577349,-0.707083,0,0.707083,-0.707083,0,-0.707083,-0.577349,-0.577349,0.577349,0.577349,-0.577349,0.577349],
"animations": [],
"faces": [33,0,1,2,3,0,1,2,3,33,4,5,11,10,4,5,6,7,33,1,5,6,2,1,5,5,2,33,6,7,15,14,5,4,8,9,33,4,0,3,7,4,0,3,4,33,8,10,11,9,10,7,6,11,33,5,1,9,11,5,1,11,6,33,0,4,10,8,0,4,7,10,33,0,8,18,16,0,10,12,13,33,12,14,15,13,14,9,8,15,33,7,3,13,15,4,3,15,8,33,2,6,14,12,2,5,9,14,33,2,12,22,20,2,14,16,17,33,17,16,18,19,16,13,12,17,33,9,1,17,19,11,1,16,17,33,8,9,19,18,10,11,17,12,33,1,0,16,17,1,0,13,16,33,21,20,22,23,12,17,16,13,33,13,3,21,23,15,3,12,13,33,12,13,23,22,14,15,13,16,33,3,2,20,21,3,2,17,12,33,4,7,6,5,4,4,5,5],
"skinIndices": [],
"uvs": [],
"name": "Cube.001Geometry",
"skinWeights": [],
"influencesPerVertex": 2,
"metadata": {
"version": 3,
"type": "Geometry",
"vertices": 24,
"normals": 18,
"generator": "io_three",
"uvs": 0,
"faces": 22,
"bones": 0
},
"bones": [],
"vertices": [1.51034,-1,-1,1.51034,-1,1,-0.489661,-1,1,-0.489661,-1,-1,1.51034,1,-1,1.51034,1,1,-0.489662,1,1,-0.489661,1,-1,3.23233,-1,-0.999999,3.23233,-1,1,3.23233,1,-0.999999,3.23233,1,1,-1.98848,-1,1,-1.98848,-1,-1,-1.98848,1,0.999999,-1.98848,1,-1,1.51034,-5.70811,-1,1.51034,-5.70811,1,3.23233,-5.70811,-0.999999,3.23233,-5.70811,1,-0.489661,-5.62708,1,-0.48966,-5.62708,-1,-1.98848,-5.62708,1,-1.98848,-5.62708,-1]
}
这似乎是因为网格不是电枢的父级。这样做(在对象模式中选择网格,选择骨架,然后按Ctrl-P,然后选择“使用自动权重”),然后重新导出结果,出现错误:“骨架不是有效的网格对象”。一些谷歌搜索告诉我,这是导出器最近构建的一个怪癖,并且在导出之前取消选择除网格之外的所有内容会产生包含动画的JSON导出:
{
"normals": [-0.282418,-0.67925,-0.677358,-0.424085,0.174688,0.888607,0.240852,-0.608905,0.75576,0.405591,0.077914,-0.910703,0.069918,0.400647,-0.913541,-0.036134,0.917844,0.395215,0.568163,0.804376,0.173559,0.567186,0.16834,-0.806177,-0.031129,0.496384,0.867519,0.089602,0.873012,-0.479324,-0.559404,0.786401,-0.26191,-0.563891,0.265114,0.782098,0.704337,-0.381054,-0.598895,0.698752,0.390973,0.599048,0.58092,-0.798425,-0.158238,-0.574175,-0.803095,-0.159154,-0.705985,-0.311563,0.635975,-0.695151,0.3202,-0.643574,-0.581011,-0.774102,0.25132,0.574023,-0.778802,0.252846,-0.584796,-0.155614,0.796106,0.568834,-0.157781,0.807154,0.587298,-0.247291,-0.770623,-0.566118,-0.251869,-0.784875],
"animations": [{
"length": 0.416667,
"name": "ArmatureAction",
"hierarchy": [{
"keys": [{
"scl": [1,1,1],
"time": 0,
"pos": [-1.24994,0.43791,0.191651],
"rot": [0.232637,0,0,0.972564]
},{
"time": 0.208333,
"pos": [-1.24994,0.43791,0.191651],
"rot": [-0.289459,0.009033,-0.000455,0.957148]
},{
"scl": [1,1,1],
"time": 0.416667,
"pos": [-1.24994,0.43791,0.191651],
"rot": [0.232637,0,0,0.972564]
}],
"parent": -1
},{
"keys": [{
"scl": [1,1,1],
"time": 0,
"pos": [2.49995,0.280193,0.066556],
"rot": [-0.2896,0,-0,0.957148]
},{
"time": 0.208333,
"pos": [2.49995,0.280193,0.066556],
"rot": [0.232524,-0.007256,0.000365,0.972564]
},{
"scl": [1,1,1],
"time": 0.416667,
"pos": [2.49995,0.280193,0.066556],
"rot": [-0.2896,0,-0,0.957148]
}],
"parent": 0
}],
"fps": 24
}],
"faces": [33,0,1,2,3,0,1,2,3,33,4,5,11,10,4,5,6,7,33,1,5,6,2,1,5,8,2,33,6,7,15,14,8,9,10,11,33,4,0,3,7,4,0,3,9,33,8,10,11,9,12,7,6,13,33,5,1,9,11,5,1,13,6,33,0,4,10,8,0,4,7,12,33,0,8,18,16,0,12,14,15,33,12,14,15,13,16,11,10,17,33,7,3,13,15,9,3,17,10,33,2,6,14,12,2,8,11,16,33,2,12,22,20,2,16,18,19,33,17,16,18,19,20,15,14,21,33,9,1,17,19,13,1,20,21,33,8,9,19,18,12,13,21,14,33,1,0,16,17,1,0,15,20,33,21,20,22,23,22,19,18,23,33,13,3,21,23,17,3,22,23,33,12,13,23,22,16,17,23,18,33,3,2,20,21,3,2,19,22,33,4,7,6,5,4,9,8,5],
"skinIndices": [0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
"uvs": [],
"name": "Cube.001Geometry.1",
"skinWeights": [0,0,0,0,0,0,0,0,0,0.868939,0,0.875994,0,0.905899,0,0.88856,0,0,0,0,0,0.977301,0,0.979217,0,0,0,0,0,0.983883,0,0.974775,0,0.997457,0,0.99792,0,0.999279,0,0.999454,0,0.998395,0,0.997626,0,0.999572,0,0.999166],
"influencesPerVertex": 2,
"metadata": {
"version": 3,
"type": "Geometry",
"vertices": 24,
"normals": 24,
"generator": "io_three",
"uvs": 0,
"faces": 22,
"bones": 2
},
"bones": [{
"name": "leg.R",
"rotq": [0,0,0,1],
"parent": -1,
"pos": [-1.24994,0.43791,0.191651]
},{
"name": "leg.L",
"rotq": [0,0,0,1],
"parent": -1,
"pos": [2.49995,0.280193,0.066556]
}],
"vertices": [1.51034,-1.30307,-0.208094,1.51034,-0.322326,1.4784,-0.489661,-1.16521,0.323416,-0.489661,-0.368492,-1.43828,1.51034,0.444001,-1.14105,1.51034,1.29464,0.533973,-0.489662,0.650854,1.09887,-0.489661,1.34573,-0.683916,3.23233,-1.37654,-0.111386,3.23233,-0.267782,1.55314,3.23233,0.287986,-1.22015,3.23233,1.39675,0.444382,-1.98848,-1.21015,0.261836,-1.98848,-0.305127,-1.52168,-1.98848,0.573374,1.16685,-1.98848,1.47784,-0.616943,1.51034,-5.29493,2.49869,1.51034,-4.18617,4.16322,3.23233,-5.29493,2.49869,3.23233,-4.18617,4.16322,-0.489661,-5.33639,-1.83196,-0.48966,-4.43137,-3.61548,-1.98848,-5.33639,-1.83196,-1.98848,-4.43137,-3.61548]
}
不幸的是,当在示例中使用此文件时,它会在three.min.js的第538行引发错误:“TypeError:l is undefined”。
我真正想要的是一个示例或文档,或者说明如何从blender导出并导入到three.js中的方法。我能够找到的大部分信息已经过时,涉及r69和早期的出口商,甚至官方的three.js示例和文档也不一致:文档涵盖THREE.AnimationHandler()
,似乎已被弃用,以及示例使用THREE.AnimationMixer()
。
要明确我特别要求提供信息/文档/示例/任何涉及动画的具体内容。从blender导出非动画对象并将它们导入three.js工作正常。
更新:“TypeError:l is undefined”错误是由于在导出期间需要检查Face Materials
(不是“材料”)复选框。执行此操作并重新导出导致JSON文件的结果,该文件加载了不同的错误:“Loader.createMaterial:Unsupported colorAmbient”。这似乎与r73问题#7368相同。删除colorAmbient声明允许加载JSON而不会出错,但结果仍然无法正确呈现。所以我仍然在寻找正确的仪式来将一个搅拌机动画导出到three.js。
更新
为了跟进我自己的问题,步骤似乎是:
这里的主要问题似乎是任何与骨骼没有关联的顶点组都会导致问题:动画仍然会以三个.js呈现,它只会被提升。
其他问题是当前的导出器要求您在导出之前没有选择骨架(并且导出过程以某种方式使选择错综复杂,因此最好每次手动重新选择网格);并且您必须手动编辑导出结果,因为导出器不会生成正确的输出。
如果有人更深入地了解这个主题,请加入。因为虽然我解决了这个具体的问题 - 从一个官方的例子中得到最简单的玩具问题 - 我仍觉得我可以使用关于这个过程的真实参考。导出使用Rigify装备创建的动画的清单是理想的,但在游戏的这个阶段,我不相信甚至可能。