|
@@ -12,35 +12,42 @@
|
|
|
Runtime convertion of BVH Animation to SEA3D Skeleton Animation
|
|
|
</div>
|
|
|
|
|
|
- <script src="../build/three.js"></script>
|
|
|
-
|
|
|
- <script src="js/controls/OrbitControls.js"></script>
|
|
|
-
|
|
|
- <script src="js/postprocessing/EffectComposer.js"></script>
|
|
|
- <script src="js/postprocessing/RenderPass.js"></script>
|
|
|
- <script src="js/postprocessing/ShaderPass.js"></script>
|
|
|
- <script src="js/postprocessing/MaskPass.js"></script>
|
|
|
- <script src="js/shaders/CopyShader.js"></script>
|
|
|
- <script src="js/shaders/ColorCorrectionShader.js"></script>
|
|
|
- <script src="js/shaders/VignetteShader.js"></script>
|
|
|
-
|
|
|
- <script src="js/loaders/sea3d/SEA3D.js"></script>
|
|
|
- <script src="js/loaders/sea3d/SEA3DLZMA.js"></script>
|
|
|
- <script src="js/loaders/sea3d/SEA3DLoader.js"></script>
|
|
|
-
|
|
|
- <script src="js/loaders/BVHLoader.js"></script>
|
|
|
- <script src="js/utils/SkeletonUtils.js"></script>
|
|
|
-
|
|
|
- <script src="js/WebGL.js"></script>
|
|
|
- <script src="js/libs/stats.min.js"></script>
|
|
|
-
|
|
|
- <script>
|
|
|
-
|
|
|
- if ( WEBGL.isWebGLAvailable() === false ) {
|
|
|
-
|
|
|
- document.body.appendChild( WEBGL.getWebGLErrorMessage() );
|
|
|
-
|
|
|
- }
|
|
|
+ <script type="module">
|
|
|
+
|
|
|
+ import {
|
|
|
+ Vector3,
|
|
|
+ Color,
|
|
|
+ Matrix4,
|
|
|
+ Euler,
|
|
|
+ Math,
|
|
|
+ Clock,
|
|
|
+ Group,
|
|
|
+ Object3D,
|
|
|
+ AnimationMixer,
|
|
|
+ SkeletonHelper,
|
|
|
+ PerspectiveCamera,
|
|
|
+ Scene,
|
|
|
+ WebGLRenderer
|
|
|
+ } from "../build/three.module.js";
|
|
|
+
|
|
|
+ import { OrbitControls } from './jsm/controls/OrbitControls.js';
|
|
|
+
|
|
|
+ import { EffectComposer } from './jsm/postprocessing/EffectComposer.js';
|
|
|
+ import { RenderPass } from './jsm/postprocessing/RenderPass.js';
|
|
|
+ import { ShaderPass } from './jsm/postprocessing/ShaderPass.js';
|
|
|
+ import { MaskPass } from './jsm/postprocessing/MaskPass.js';
|
|
|
+ import { CopyShader } from './jsm/shaders/CopyShader.js';
|
|
|
+ import { ColorCorrectionShader } from './jsm/shaders/ColorCorrectionShader.js';
|
|
|
+ import { VignetteShader } from './jsm/shaders/VignetteShader.js';
|
|
|
+
|
|
|
+ import { BVHLoader } from './jsm/loaders/BVHLoader.js';
|
|
|
+
|
|
|
+ import { SEA3D } from './jsm/loaders/sea3d/SEA3DLoader.js';
|
|
|
+ import './jsm/loaders/sea3d/SEA3DLZMA.js'; // sea3d lzma extension
|
|
|
+
|
|
|
+ import { SkeletonUtils } from './jsm/utils/SkeletonUtils.js';
|
|
|
+
|
|
|
+ import Stats from './jsm/libs/stats.module.js';
|
|
|
|
|
|
console.log( "Visit https://github.com/sunag/sea3d to all codes and builds under development." );
|
|
|
|
|
@@ -60,7 +67,7 @@
|
|
|
// SEA3D Loader
|
|
|
//
|
|
|
|
|
|
- loader = new THREE.SEA3D( {
|
|
|
+ loader = new SEA3D( {
|
|
|
|
|
|
autoPlay: true, // Auto play animations
|
|
|
container: scene, // Container to add models
|
|
@@ -77,7 +84,7 @@
|
|
|
camera.position.copy( cam.position );
|
|
|
camera.rotation.copy( cam.rotation );
|
|
|
|
|
|
- new THREE.OrbitControls( camera, renderer.domElement );
|
|
|
+ new OrbitControls( camera, renderer.domElement );
|
|
|
|
|
|
// get meshes
|
|
|
player = loader.getMesh( "Player" );
|
|
@@ -128,49 +135,49 @@
|
|
|
};
|
|
|
|
|
|
// Automatic offset: get offsets when it is in T-Pose
|
|
|
- options.offsets = THREE.SkeletonUtils.getSkeletonOffsets( player, bvhSkeletonHelper, options );
|
|
|
+ options.offsets = SkeletonUtils.getSkeletonOffsets( player, bvhSkeletonHelper, options );
|
|
|
|
|
|
/*
|
|
|
// Manual offsets: compensates the difference in skeletons ( T-Pose )
|
|
|
options.offsets = {
|
|
|
- "lShldr": new THREE.Matrix4().makeRotationFromEuler(
|
|
|
- new THREE.Euler(
|
|
|
+ "lShldr": new Matrix4().makeRotationFromEuler(
|
|
|
+ new Euler(
|
|
|
0,
|
|
|
- THREE.Math.degToRad( - 45 ),
|
|
|
- THREE.Math.degToRad( - 80 )
|
|
|
+ Math.degToRad( - 45 ),
|
|
|
+ Math.degToRad( - 80 )
|
|
|
)
|
|
|
),
|
|
|
- "rShldr": new THREE.Matrix4().makeRotationFromEuler(
|
|
|
- new THREE.Euler(
|
|
|
+ "rShldr": new Matrix4().makeRotationFromEuler(
|
|
|
+ new Euler(
|
|
|
0,
|
|
|
- THREE.Math.degToRad( 45 ),
|
|
|
- THREE.Math.degToRad( 80 )
|
|
|
+ Math.degToRad( 45 ),
|
|
|
+ Math.degToRad( 80 )
|
|
|
)
|
|
|
),
|
|
|
- "lFoot": new THREE.Matrix4().makeRotationFromEuler(
|
|
|
- new THREE.Euler(
|
|
|
+ "lFoot": new Matrix4().makeRotationFromEuler(
|
|
|
+ new Euler(
|
|
|
0,
|
|
|
- THREE.Math.degToRad( 15 ),
|
|
|
+ Math.degToRad( 15 ),
|
|
|
0
|
|
|
)
|
|
|
),
|
|
|
- "rFoot": new THREE.Matrix4().makeRotationFromEuler(
|
|
|
- new THREE.Euler(
|
|
|
+ "rFoot": new Matrix4().makeRotationFromEuler(
|
|
|
+ new Euler(
|
|
|
0,
|
|
|
- THREE.Math.degToRad( 15 ),
|
|
|
+ Math.degToRad( 15 ),
|
|
|
0
|
|
|
)
|
|
|
)
|
|
|
};
|
|
|
*/
|
|
|
|
|
|
- var clip = THREE.SkeletonUtils.retargetClip( player, result.skeleton, result.clip, options );
|
|
|
+ var clip = SkeletonUtils.retargetClip( player, result.skeleton, result.clip, options );
|
|
|
|
|
|
clip.name = "dance";
|
|
|
|
|
|
- clip = THREE.SEA3D.AnimationClip.fromClip( clip );
|
|
|
+ clip = SEA3D.AnimationClip.fromClip( clip );
|
|
|
|
|
|
- player.addAnimation( new THREE.SEA3D.Animation( clip ) );
|
|
|
+ player.addAnimation( new SEA3D.Animation( clip ) );
|
|
|
|
|
|
player.play( "dance" );
|
|
|
|
|
@@ -179,13 +186,13 @@
|
|
|
|
|
|
function loadBVH() {
|
|
|
|
|
|
- var loader = new THREE.BVHLoader();
|
|
|
+ var loader = new BVHLoader();
|
|
|
loader.load( "models/bvh/pirouette.bvh", function ( result ) {
|
|
|
|
|
|
- bvhSkeletonHelper = new THREE.SkeletonHelper( result.skeleton.bones[ 0 ] );
|
|
|
+ bvhSkeletonHelper = new SkeletonHelper( result.skeleton.bones[ 0 ] );
|
|
|
bvhSkeletonHelper.skeleton = result.skeleton; // allow animation mixer to bind to SkeletonHelper directly
|
|
|
|
|
|
- var boneContainer = new THREE.Group();
|
|
|
+ var boneContainer = new Group();
|
|
|
boneContainer.add( result.skeleton.bones[ 0 ] );
|
|
|
boneContainer.position.y = - 100;
|
|
|
|
|
@@ -193,7 +200,7 @@
|
|
|
scene.add( boneContainer );
|
|
|
|
|
|
// play animation
|
|
|
- bvhMixer = new THREE.AnimationMixer( bvhSkeletonHelper );
|
|
|
+ bvhMixer = new AnimationMixer( bvhSkeletonHelper );
|
|
|
bvhMixer.clipAction( result.clip ).setEffectiveWeight( 1.0 ).play();
|
|
|
|
|
|
bvhToSEA3D( result );
|
|
@@ -204,16 +211,16 @@
|
|
|
|
|
|
function init() {
|
|
|
|
|
|
- scene = new THREE.Scene();
|
|
|
- scene.background = new THREE.Color( 0x333333 );
|
|
|
+ scene = new Scene();
|
|
|
+ scene.background = new Color( 0x333333 );
|
|
|
|
|
|
container = document.createElement( 'div' );
|
|
|
document.body.appendChild( container );
|
|
|
|
|
|
- camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 20000 );
|
|
|
+ camera = new PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 20000 );
|
|
|
camera.position.set( 1000, - 300, 1000 );
|
|
|
|
|
|
- renderer = new THREE.WebGLRenderer();
|
|
|
+ renderer = new WebGLRenderer();
|
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
container.appendChild( renderer.domElement );
|
|
@@ -223,20 +230,20 @@
|
|
|
|
|
|
// post-processing
|
|
|
|
|
|
- composer = new THREE.EffectComposer( renderer );
|
|
|
+ composer = new EffectComposer( renderer );
|
|
|
|
|
|
- var renderPass = new THREE.RenderPass( scene, camera );
|
|
|
- var copyPass = new THREE.ShaderPass( THREE.CopyShader );
|
|
|
+ var renderPass = new RenderPass( scene, camera );
|
|
|
+ var copyPass = new ShaderPass( CopyShader );
|
|
|
composer.addPass( renderPass );
|
|
|
|
|
|
var vh = 1.4, vl = 1.2;
|
|
|
|
|
|
- var colorCorrectionPass = new THREE.ShaderPass( THREE.ColorCorrectionShader );
|
|
|
- colorCorrectionPass.uniforms[ "powRGB" ].value = new THREE.Vector3( vh, vh, vh );
|
|
|
- colorCorrectionPass.uniforms[ "mulRGB" ].value = new THREE.Vector3( vl, vl, vl );
|
|
|
+ var colorCorrectionPass = new ShaderPass( ColorCorrectionShader );
|
|
|
+ colorCorrectionPass.uniforms[ "powRGB" ].value = new Vector3( vh, vh, vh );
|
|
|
+ colorCorrectionPass.uniforms[ "mulRGB" ].value = new Vector3( vl, vl, vl );
|
|
|
composer.addPass( colorCorrectionPass );
|
|
|
|
|
|
- var vignettePass = new THREE.ShaderPass( THREE.VignetteShader );
|
|
|
+ var vignettePass = new ShaderPass( VignetteShader );
|
|
|
vignettePass.uniforms[ "darkness" ].value = 1.0;
|
|
|
composer.addPass( vignettePass );
|
|
|
|
|
@@ -260,7 +267,7 @@
|
|
|
|
|
|
//
|
|
|
|
|
|
- var clock = new THREE.Clock();
|
|
|
+ var clock = new Clock();
|
|
|
|
|
|
function animate() {
|
|
|
|
|
@@ -269,7 +276,7 @@
|
|
|
requestAnimationFrame( animate );
|
|
|
|
|
|
// Update SEA3D Animations
|
|
|
- THREE.SEA3D.AnimationHandler.update( delta );
|
|
|
+ SEA3D.AnimationHandler.update( delta );
|
|
|
|
|
|
if ( bvhMixer ) bvhMixer.update( delta );
|
|
|
|