简要说明:如何使用Three.js和BVH-motion捕获文件动态动画JSON字符模型?如下所示:动画未烘焙到JSON文件中,而是使用BVHLoader.js从BVH文件加载和解析
我得到了加载BVH文件,将其数据附加到skeletonHelper,提取骨骼位置,根据它们的位置动画一些框(用于测试目标)和加载(希望?)装配的JSON模型。 请在此处查看演示:https://www.patrik-huebner.com/repo/JSON-BVH/
在此处查看动画的GIF:https://www.patrik-huebner.com/repo/JSON-BVH/demo.gif(遗憾的是,我无法发布图片)
我对这个主题做了相当广泛的研究,虽然有很多有用的提示[1]关于使用Three.js导出器和动画烘焙将网格从Blender导出到JSON的stackoverflow,我不是能够弄清楚如何
a)设置JSON文件/装配模型/它的骨架/骨骼,以便我可以动态地为它设置动画(我使用了blendswap.com/blends/view/21948中的一个装配好的低多边形) 。有任何推荐的设置吗?为了能够加载文件我必须检查"导出场景" -option我不太确定为什么这是必要的。
b)将BVH数据映射到JSON模型
如果您有任何我可以使用的建议和/或代码示例 - 或至少我可以研究的一些资源或关键字,我将非常感激!
使用提供的BVHLoader.js我可以加载动画并将其附加到skeletonHelper
var loader = new THREE.BVHLoader();
loader.load( "models/pirouette.bvh", function( result ) {
skeletonHelper = new THREE.SkeletonHelper( result.skeleton.bones[0] );
skeletonHelper.skeleton = result.skeleton; // allow animation mixer to bind to SkeletonHelper directly
boneContainer = new THREE.Group();
boneContainer.add( result.skeleton.bones[ 0 ] );
scene.add( skeletonHelper );
scene.add( boneContainer );
mixer = new THREE.AnimationMixer( skeletonHelper );
mixer.clipAction( result.clip ).setEffectiveWeight( 1.0 ).play();
} );
虽然我很确定这不是它的完成方式:我可以访问skeletonHelper的Vector3数据并根据这些位置动画一些测试多维数据集(比较上面的代码示例和我的提供GIF动画)
for (var i = 0; i < skeletonHelper.bones.length; i++) {
var myPos = skeletonHelper.bones[i].getWorldPosition();
cubeGroup.children[i].position.x = myPos.x;
cubeGroup.children[i].position.y = myPos.y;
cubeGroup.children[i].position.z = myPos.z;
}
最后,我加载JSON文件并使用THREE.ObjectLoader将其添加到场景中(因为THREE.JSONLoader不接受我导出的模型)
// Load the rigged JSON-file based on this character http://www.blendswap.com/blends/view/21948
// converted to JSON with the Three.json-export-plugin
var loader = new THREE.ObjectLoader();
var s = 50;
loader.load(
"models/lowPoly-rigged.json",
function ( obj ) {
var material = new THREE.MeshLambertMaterial({color: 0xff0000});
scene.add( obj );
obj.position.y = 0;
obj.children[0].material = material;
obj.scale.set(s,s,s);
},
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
},
function ( xhr ) {
console.error( 'An error happened' );
}
);
但现在:如何使用加载的BVH数据为模型设置动画。我是否必须将JSON模型中的骨骼数量与BVH相匹配?我是否可以向模型提供一些数据并让它发生?#34;神奇地&#34;?我已经看到一些在线演示动态加载BVH文件并将数据传递给模型[2]
[1]东西我做了研究(遗憾的是,我无法发布更多链接)没有帮助,对我想要达到的目标并不十分具体:
[2]一些能够处理BVH文件并可以将这些动画附加到模型的资源:
再次,非常感谢任何输入!