瀏覽代碼

Merge branch 'dev' into sao

Ludovic Bailly 8 年之前
父節點
當前提交
323cb1b429
共有 100 個文件被更改,包括 36110 次插入6103 次删除
  1. 83 87
      build/three.js
  2. 321 321
      build/three.min.js
  3. 83 87
      build/three.module.js
  4. 1 1
      docs/api/constants/CustomBlendingEquations.html
  5. 8 3
      docs/api/constants/Textures.html
  6. 1 14
      docs/api/helpers/SkeletonHelper.html
  7. 5 1
      docs/api/materials/MeshStandardMaterial.html
  8. 9 9
      docs/manual/introduction/Creating-a-scene.html
  9. 0 8
      docs/manual/introduction/Useful-links.html
  10. 1 1
      docs/manual/introduction/WebGL-compatibility-check.html
  11. 0 2
      docs/scenes/bones-browser.html
  12. 1 1
      examples/files.js
  13. 0 1
      examples/js/Mirror.js
  14. 0 1
      examples/js/WaterShader.js
  15. 346 30
      examples/js/loaders/ColladaLoader2.js
  16. 5 21
      examples/js/loaders/GLTF2Loader.js
  17. 1 3
      examples/js/renderers/CSS2DRenderer.js
  18. 0 2
      examples/js/renderers/CSS3DRenderer.js
  19. 1 1
      examples/js/renderers/Projector.js
  20. 0 1
      examples/js/renderers/RaytracingWorker.js
  21. 1 1
      examples/js/renderers/SVGRenderer.js
  22. 8 0
      examples/models/gltf/CesiumMan/README.md
  23. 0 1
      examples/models/gltf/CesiumMan/README.txt
  24. 二進制
      examples/models/gltf/CesiumMan/glTF-Binary/CesiumMan.glb
  25. 二進制
      examples/models/gltf/CesiumMan/glTF-Binary/Cesium_Man.glb
  26. 2699 0
      examples/models/gltf/CesiumMan/glTF-Embedded/CesiumMan.gltf
  27. 2728 0
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/CesiumMan.gltf
  28. 0 0
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/CesiumMan.jpg
  29. 二進制
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/CesiumMan0.bin
  30. 二進制
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.bin
  31. 0 2111
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.gltf
  32. 2714 0
      examples/models/gltf/CesiumMan/glTF-pbrSpecularGlossiness/CesiumMan.gltf
  33. 0 0
      examples/models/gltf/CesiumMan/glTF-pbrSpecularGlossiness/CesiumMan.jpg
  34. 二進制
      examples/models/gltf/CesiumMan/glTF-pbrSpecularGlossiness/CesiumMan0.bin
  35. 2719 0
      examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan.gltf
  36. 二進制
      examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan.jpg
  37. 二進制
      examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan0.bin
  38. 24 0
      examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan0.vert
  39. 33 0
      examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan1.frag
  40. 2766 0
      examples/models/gltf/CesiumMan/glTF/CesiumMan.gltf
  41. 二進制
      examples/models/gltf/CesiumMan/glTF/CesiumMan.jpg
  42. 二進制
      examples/models/gltf/CesiumMan/glTF/CesiumMan0.bin
  43. 二進制
      examples/models/gltf/CesiumMan/glTF/Cesium_Man.bin
  44. 0 2207
      examples/models/gltf/CesiumMan/glTF/Cesium_Man.gltf
  45. 0 25
      examples/models/gltf/CesiumMan/glTF/Cesium_Man0FS.glsl
  46. 0 22
      examples/models/gltf/CesiumMan/glTF/Cesium_Man0VS.glsl
  47. 二進制
      examples/models/gltf/CesiumMan/screenshot/screenshot.gif
  48. 8 0
      examples/models/gltf/CesiumMilkTruck/README.md
  49. 0 1
      examples/models/gltf/CesiumMilkTruck/README.txt
  50. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-Binary/CesiumMilkTruck.glb
  51. 510 0
      examples/models/gltf/CesiumMilkTruck/glTF-Embedded/CesiumMilkTruck.gltf
  52. 495 462
      examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.gltf
  53. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.png
  54. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck0.bin
  55. 540 0
      examples/models/gltf/CesiumMilkTruck/glTF-pbrSpecularGlossiness/CesiumMilkTruck.gltf
  56. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-pbrSpecularGlossiness/CesiumMilkTruck.png
  57. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-pbrSpecularGlossiness/CesiumMilkTruck0.bin
  58. 564 0
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck.gltf
  59. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck.png
  60. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck0.bin
  61. 9 7
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck0.vert
  62. 32 0
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck1.frag
  63. 8 6
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck2.vert
  64. 31 0
      examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck3.frag
  65. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.bin
  66. 474 619
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.gltf
  67. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.png
  68. 二進制
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0.bin
  69. 0 17
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0FS.glsl
  70. 0 18
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck1FS.glsl
  71. 二進制
      examples/models/gltf/CesiumMilkTruck/screenshot/screenshot.gif
  72. 7 0
      examples/models/gltf/Duck/README.md
  73. 二進制
      examples/models/gltf/Duck/glTF-Binary/Duck.glb
  74. 198 0
      examples/models/gltf/Duck/glTF-Embedded/Duck.gltf
  75. 246 0
      examples/models/gltf/Duck/glTF-MaterialsCommon/Duck.gltf
  76. 二進制
      examples/models/gltf/Duck/glTF-MaterialsCommon/Duck0.bin
  77. 二進制
      examples/models/gltf/Duck/glTF-MaterialsCommon/DuckCM.png
  78. 213 0
      examples/models/gltf/Duck/glTF-pbrSpecularGlossiness/Duck.gltf
  79. 二進制
      examples/models/gltf/Duck/glTF-pbrSpecularGlossiness/Duck0.bin
  80. 二進制
      examples/models/gltf/Duck/glTF-pbrSpecularGlossiness/DuckCM.png
  81. 218 0
      examples/models/gltf/Duck/glTF-techniqueWebGL/Duck.gltf
  82. 二進制
      examples/models/gltf/Duck/glTF-techniqueWebGL/Duck0.bin
  83. 11 11
      examples/models/gltf/Duck/glTF-techniqueWebGL/Duck0.vert
  84. 38 0
      examples/models/gltf/Duck/glTF-techniqueWebGL/Duck1.frag
  85. 二進制
      examples/models/gltf/Duck/glTF-techniqueWebGL/DuckCM.png
  86. 238 0
      examples/models/gltf/Duck/glTF/Duck.gltf
  87. 二進制
      examples/models/gltf/Duck/glTF/Duck0.bin
  88. 二進制
      examples/models/gltf/Duck/glTF/DuckCM.png
  89. 二進制
      examples/models/gltf/Duck/screenshot/screenshot.png
  90. 8 0
      examples/models/gltf/Monster/README.md
  91. 二進制
      examples/models/gltf/Monster/glTF-Binary/Monster.glb
  92. 4410 0
      examples/models/gltf/Monster/glTF-Embedded/Monster.gltf
  93. 4439 0
      examples/models/gltf/Monster/glTF-MaterialsCommon/Monster.gltf
  94. 0 0
      examples/models/gltf/Monster/glTF-MaterialsCommon/Monster.jpg
  95. 二進制
      examples/models/gltf/Monster/glTF-MaterialsCommon/Monster0.bin
  96. 4425 0
      examples/models/gltf/Monster/glTF-pbrSpecularGlossiness/Monster.gltf
  97. 0 0
      examples/models/gltf/Monster/glTF-pbrSpecularGlossiness/Monster.jpg
  98. 二進制
      examples/models/gltf/Monster/glTF-pbrSpecularGlossiness/Monster0.bin
  99. 4430 0
      examples/models/gltf/Monster/glTF-techniqueWebGL/Monster.gltf
  100. 二進制
      examples/models/gltf/Monster/glTF-techniqueWebGL/Monster.jpg

+ 83 - 87
build/three.js

@@ -9244,7 +9244,6 @@
 					_lookTarget.setFromMatrixPosition( light.target.matrixWorld );
 					shadowCamera.lookAt( _lookTarget );
 					shadowCamera.updateMatrixWorld();
-					shadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld );
 
 					// compute shadow matrix
 
@@ -9275,7 +9274,6 @@
 						shadowCamera.up.copy( cubeUps[ face ] );
 						shadowCamera.lookAt( _lookTarget );
 						shadowCamera.updateMatrixWorld();
-						shadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld );
 
 						var vpDimensions = cube2DViewPorts[ face ];
 						_state.viewport( vpDimensions );
@@ -13099,7 +13097,7 @@
 
 		merge: function ( geometry, matrix, materialIndexOffset ) {
 
-			if ( ( geometry && geometry.isGeometry ) === false ) {
+			if ( ! ( geometry && geometry.isGeometry ) ) {
 
 				console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );
 				return;
@@ -13219,7 +13217,7 @@
 
 		mergeMesh: function ( mesh ) {
 
-			if ( ( mesh && mesh.isMesh ) === false ) {
+			if ( ! ( mesh && mesh.isMesh ) ) {
 
 				console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );
 				return;
@@ -15626,9 +15624,9 @@
 
 		isCamera: true,
 
-		copy: function ( source ) {
+		copy: function ( source, recursive ) {
 
-			Object3D.prototype.copy.call( this, source );
+			Object3D.prototype.copy.call( this, source, recursive );
 
 			this.matrixWorldInverse.copy( source.matrixWorldInverse );
 			this.projectionMatrix.copy( source.projectionMatrix );
@@ -15653,6 +15651,14 @@
 
 		}(),
 
+		updateMatrixWorld: function ( force ) {
+
+			Object3D.prototype.updateMatrixWorld.call( this, force );
+
+			this.matrixWorldInverse.getInverse( this.matrixWorld );
+
+		},
+
 		clone: function () {
 
 			return new this.constructor().copy( this );
@@ -15697,9 +15703,9 @@
 
 		isPerspectiveCamera: true,
 
-		copy: function ( source ) {
+		copy: function ( source, recursive ) {
 
-			Camera.prototype.copy.call( this, source );
+			Camera.prototype.copy.call( this, source, recursive );
 
 			this.fov = source.fov;
 			this.zoom = source.zoom;
@@ -15912,9 +15918,9 @@
 
 		isOrthographicCamera: true,
 
-		copy: function ( source ) {
+		copy: function ( source, recursive ) {
 
-			Camera.prototype.copy.call( this, source );
+			Camera.prototype.copy.call( this, source, recursive );
 
 			this.left = source.left;
 			this.right = source.right;
@@ -16345,32 +16351,18 @@
 
 		}
 
-		var type, size;
-
-		function setIndex( index ) {
-
-			if ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) {
-
-				type = gl.UNSIGNED_INT;
-				size = 4;
-
-			} else if ( index.array instanceof Uint16Array ) {
-
-				type = gl.UNSIGNED_SHORT;
-				size = 2;
+		var type, bytesPerElement;
 
-			} else {
+		function setIndex( value ) {
 
-				type = gl.UNSIGNED_BYTE;
-				size = 1;
-
-			}
+			type = value.type;
+			bytesPerElement = value.bytesPerElement;
 
 		}
 
 		function render( start, count ) {
 
-			gl.drawElements( mode, count, type, start * size );
+			gl.drawElements( mode, count, type, start * bytesPerElement );
 
 			infoRender.calls ++;
 			infoRender.vertices += count;
@@ -16390,7 +16382,7 @@
 
 			}
 
-			extension.drawElementsInstancedANGLE( mode, count, type, start * size, geometry.maxInstancedCount );
+			extension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
 
 			infoRender.calls ++;
 			infoRender.vertices += count * geometry.maxInstancedCount;
@@ -20308,13 +20300,15 @@
 
 		this.setViewport = function ( x, y, width, height ) {
 
-			state.viewport( _viewport.set( x, y, width, height ) );
+			_viewport.set( x, y, width, height );
+			state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );
 
 		};
 
 		this.setScissor = function ( x, y, width, height ) {
 
-			state.scissor( _scissor.set( x, y, width, height ) );
+			_scissor.set( x, y, width, height );
+			state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );
 
 		};
 
@@ -20655,12 +20649,15 @@
 
 			}
 
+			var attribute;
 			var renderer = bufferRenderer;
 
 			if ( index !== null ) {
 
+				attribute = attributes.get( index );
+
 				renderer = indexedBufferRenderer;
-				renderer.setIndex( index );
+				renderer.setIndex( attribute );
 
 			}
 
@@ -20670,7 +20667,7 @@
 
 				if ( index !== null ) {
 
-					_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );
+					_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );
 
 				}
 
@@ -20813,11 +20810,11 @@
 						var normalized = geometryAttribute.normalized;
 						var size = geometryAttribute.itemSize;
 
-						var attributeProperties = attributes.get( geometryAttribute );
+						var attribute = attributes.get( geometryAttribute );
 
-						var buffer = attributeProperties.buffer;
-						var type = attributeProperties.type;
-						var bytesPerElement = attributeProperties.bytesPerElement;
+						var buffer = attribute.buffer;
+						var type = attribute.type;
+						var bytesPerElement = attribute.bytesPerElement;
 
 						if ( geometryAttribute.isInterleavedBufferAttribute ) {
 
@@ -20973,8 +20970,6 @@
 
 			if ( camera.parent === null ) camera.updateMatrixWorld();
 
-			camera.matrixWorldInverse.getInverse( camera.matrixWorld );
-
 			_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
 			_frustum.setFromMatrix( _projScreenMatrix );
 
@@ -21145,7 +21140,7 @@
 			state.buffers.depth.setMask( true );
 			state.buffers.color.setMask( true );
 
-			if ( camera.isArrayCamera && camera.enabled ) {
+			if ( camera.isArrayCamera ) {
 
 				_this.setScissorTest( false );
 
@@ -21319,7 +21314,7 @@
 
 				object.onBeforeRender( _this, scene, camera, geometry, material, group );
 
-				if ( camera.isArrayCamera && camera.enabled ) {
+				if ( camera.isArrayCamera ) {
 
 					var cameras = camera.cameras;
 
@@ -21328,14 +21323,13 @@
 						var camera2 = cameras[ j ];
 						var bounds = camera2.bounds;
 
-						_this.setViewport(
-							bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
-							bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
-						);
-						_this.setScissor(
-							bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
-							bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
-						);
+						var x = bounds.x * _width;
+						var y = bounds.y * _height;
+						var width = bounds.z * _width;
+						var height = bounds.w * _height;
+
+						_this.setViewport( x, y, width, height );
+						_this.setScissor( x, y, width, height );
 						_this.setScissorTest( true );
 
 						renderObject( object, scene, camera2, geometry, material, group );
@@ -26411,7 +26405,6 @@
 
 		if ( typeof ( shapes ) === "undefined" ) {
 
-			shapes = [];
 			return;
 
 		}
@@ -26566,8 +26559,6 @@
 
 			}
 
-			reverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)!
-
 		}
 
 
@@ -26611,7 +26602,7 @@
 			// inPt' is the intersection of the two lines parallel to the two
 			//  adjacent edges of inPt at a distance of 1 unit on the left side.
 
-			var v_trans_x, v_trans_y, shrink_by = 1; // resulting translation vector for inPt
+			var v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt
 
 			// good reading for geometry algorithms (here: line-line intersection)
 			// http://geomalgorithms.com/a05-_intersect-1.html
@@ -36002,7 +35993,6 @@
 
 		PerspectiveCamera.call( this );
 
-		this.enabled = false;
 		this.cameras = array || [];
 
 	}
@@ -40541,9 +40531,29 @@
 	 * @author Mugen87 / https://github.com/Mugen87
 	 */
 
+	function getBoneList( object ) {
+
+		var boneList = [];
+
+		if ( object && object.isBone ) {
+
+			boneList.push( object );
+
+		}
+
+		for ( var i = 0; i < object.children.length; i ++ ) {
+
+			boneList.push.apply( boneList, getBoneList( object.children[ i ] ) );
+
+		}
+
+		return boneList;
+
+	}
+
 	function SkeletonHelper( object ) {
 
-		this.bones = this.getBoneList( object );
+		var bones = getBoneList( object );
 
 		var geometry = new BufferGeometry();
 
@@ -40553,9 +40563,9 @@
 		var color1 = new Color( 0, 0, 1 );
 		var color2 = new Color( 0, 1, 0 );
 
-		for ( var i = 0; i < this.bones.length; i ++ ) {
+		for ( var i = 0; i < bones.length; i ++ ) {
 
-			var bone = this.bones[ i ];
+			var bone = bones[ i ];
 
 			if ( bone.parent && bone.parent.isBone ) {
 
@@ -40576,55 +40586,37 @@
 		LineSegments.call( this, geometry, material );
 
 		this.root = object;
+		this.bones = bones;
 
 		this.matrix = object.matrixWorld;
 		this.matrixAutoUpdate = false;
 
-		this.update();
+		this.onBeforeRender();
 
 	}
 
-
 	SkeletonHelper.prototype = Object.create( LineSegments.prototype );
 	SkeletonHelper.prototype.constructor = SkeletonHelper;
 
-	SkeletonHelper.prototype.getBoneList = function( object ) {
-
-		var boneList = [];
-
-		if ( object && object.isBone ) {
-
-			boneList.push( object );
-
-		}
-
-		for ( var i = 0; i < object.children.length; i ++ ) {
-
-			boneList.push.apply( boneList, this.getBoneList( object.children[ i ] ) );
-
-		}
-
-		return boneList;
-
-	};
-
-	SkeletonHelper.prototype.update = function () {
+	SkeletonHelper.prototype.onBeforeRender = function () {
 
 		var vector = new Vector3();
 
 		var boneMatrix = new Matrix4();
 		var matrixWorldInv = new Matrix4();
 
-		return function update() {
+		return function onBeforeRender() {
+
+			var bones = this.bones;
 
 			var geometry = this.geometry;
 			var position = geometry.getAttribute( 'position' );
 
 			matrixWorldInv.getInverse( this.root.matrixWorld );
 
-			for ( var i = 0, j = 0; i < this.bones.length; i ++ ) {
+			for ( var i = 0, j = 0; i < bones.length; i ++ ) {
 
-				var bone = this.bones[ i ];
+				var bone = bones[ i ];
 
 				if ( bone.parent && bone.parent.isBone ) {
 
@@ -41919,9 +41911,7 @@
 
 		attach: function ( child, scene, parent ) {
 
-			var matrixWorldInverse = new Matrix4();
-			matrixWorldInverse.getInverse( parent.matrixWorld );
-			child.applyMatrix( matrixWorldInverse );
+			child.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) );
 
 			scene.remove( child );
 			parent.add( child );
@@ -42184,6 +42174,12 @@
 
 	};
 
+	SkeletonHelper.prototype.update = function () {
+
+		console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );
+		
+	};
+
 	function WireframeHelper( object, hex ) {
 
 		console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );

文件差異過大導致無法顯示
+ 321 - 321
build/three.min.js


+ 83 - 87
build/three.module.js

@@ -9238,7 +9238,6 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 				_lookTarget.setFromMatrixPosition( light.target.matrixWorld );
 				shadowCamera.lookAt( _lookTarget );
 				shadowCamera.updateMatrixWorld();
-				shadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld );
 
 				// compute shadow matrix
 
@@ -9269,7 +9268,6 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
 					shadowCamera.up.copy( cubeUps[ face ] );
 					shadowCamera.lookAt( _lookTarget );
 					shadowCamera.updateMatrixWorld();
-					shadowCamera.matrixWorldInverse.getInverse( shadowCamera.matrixWorld );
 
 					var vpDimensions = cube2DViewPorts[ face ];
 					_state.viewport( vpDimensions );
@@ -13093,7 +13091,7 @@ Object.assign( Geometry.prototype, EventDispatcher.prototype, {
 
 	merge: function ( geometry, matrix, materialIndexOffset ) {
 
-		if ( ( geometry && geometry.isGeometry ) === false ) {
+		if ( ! ( geometry && geometry.isGeometry ) ) {
 
 			console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );
 			return;
@@ -13213,7 +13211,7 @@ Object.assign( Geometry.prototype, EventDispatcher.prototype, {
 
 	mergeMesh: function ( mesh ) {
 
-		if ( ( mesh && mesh.isMesh ) === false ) {
+		if ( ! ( mesh && mesh.isMesh ) ) {
 
 			console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );
 			return;
@@ -15620,9 +15618,9 @@ Camera.prototype = Object.assign( Object.create( Object3D.prototype ), {
 
 	isCamera: true,
 
-	copy: function ( source ) {
+	copy: function ( source, recursive ) {
 
-		Object3D.prototype.copy.call( this, source );
+		Object3D.prototype.copy.call( this, source, recursive );
 
 		this.matrixWorldInverse.copy( source.matrixWorldInverse );
 		this.projectionMatrix.copy( source.projectionMatrix );
@@ -15647,6 +15645,14 @@ Camera.prototype = Object.assign( Object.create( Object3D.prototype ), {
 
 	}(),
 
+	updateMatrixWorld: function ( force ) {
+
+		Object3D.prototype.updateMatrixWorld.call( this, force );
+
+		this.matrixWorldInverse.getInverse( this.matrixWorld );
+
+	},
+
 	clone: function () {
 
 		return new this.constructor().copy( this );
@@ -15691,9 +15697,9 @@ PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ),
 
 	isPerspectiveCamera: true,
 
-	copy: function ( source ) {
+	copy: function ( source, recursive ) {
 
-		Camera.prototype.copy.call( this, source );
+		Camera.prototype.copy.call( this, source, recursive );
 
 		this.fov = source.fov;
 		this.zoom = source.zoom;
@@ -15906,9 +15912,9 @@ OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ),
 
 	isOrthographicCamera: true,
 
-	copy: function ( source ) {
+	copy: function ( source, recursive ) {
 
-		Camera.prototype.copy.call( this, source );
+		Camera.prototype.copy.call( this, source, recursive );
 
 		this.left = source.left;
 		this.right = source.right;
@@ -16339,32 +16345,18 @@ function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) {
 
 	}
 
-	var type, size;
-
-	function setIndex( index ) {
-
-		if ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) {
-
-			type = gl.UNSIGNED_INT;
-			size = 4;
-
-		} else if ( index.array instanceof Uint16Array ) {
-
-			type = gl.UNSIGNED_SHORT;
-			size = 2;
+	var type, bytesPerElement;
 
-		} else {
+	function setIndex( value ) {
 
-			type = gl.UNSIGNED_BYTE;
-			size = 1;
-
-		}
+		type = value.type;
+		bytesPerElement = value.bytesPerElement;
 
 	}
 
 	function render( start, count ) {
 
-		gl.drawElements( mode, count, type, start * size );
+		gl.drawElements( mode, count, type, start * bytesPerElement );
 
 		infoRender.calls ++;
 		infoRender.vertices += count;
@@ -16384,7 +16376,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) {
 
 		}
 
-		extension.drawElementsInstancedANGLE( mode, count, type, start * size, geometry.maxInstancedCount );
+		extension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
 
 		infoRender.calls ++;
 		infoRender.vertices += count * geometry.maxInstancedCount;
@@ -20302,13 +20294,15 @@ function WebGLRenderer( parameters ) {
 
 	this.setViewport = function ( x, y, width, height ) {
 
-		state.viewport( _viewport.set( x, y, width, height ) );
+		_viewport.set( x, y, width, height );
+		state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );
 
 	};
 
 	this.setScissor = function ( x, y, width, height ) {
 
-		state.scissor( _scissor.set( x, y, width, height ) );
+		_scissor.set( x, y, width, height );
+		state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );
 
 	};
 
@@ -20649,12 +20643,15 @@ function WebGLRenderer( parameters ) {
 
 		}
 
+		var attribute;
 		var renderer = bufferRenderer;
 
 		if ( index !== null ) {
 
+			attribute = attributes.get( index );
+
 			renderer = indexedBufferRenderer;
-			renderer.setIndex( index );
+			renderer.setIndex( attribute );
 
 		}
 
@@ -20664,7 +20661,7 @@ function WebGLRenderer( parameters ) {
 
 			if ( index !== null ) {
 
-				_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );
+				_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );
 
 			}
 
@@ -20807,11 +20804,11 @@ function WebGLRenderer( parameters ) {
 					var normalized = geometryAttribute.normalized;
 					var size = geometryAttribute.itemSize;
 
-					var attributeProperties = attributes.get( geometryAttribute );
+					var attribute = attributes.get( geometryAttribute );
 
-					var buffer = attributeProperties.buffer;
-					var type = attributeProperties.type;
-					var bytesPerElement = attributeProperties.bytesPerElement;
+					var buffer = attribute.buffer;
+					var type = attribute.type;
+					var bytesPerElement = attribute.bytesPerElement;
 
 					if ( geometryAttribute.isInterleavedBufferAttribute ) {
 
@@ -20967,8 +20964,6 @@ function WebGLRenderer( parameters ) {
 
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 
-		camera.matrixWorldInverse.getInverse( camera.matrixWorld );
-
 		_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
 		_frustum.setFromMatrix( _projScreenMatrix );
 
@@ -21139,7 +21134,7 @@ function WebGLRenderer( parameters ) {
 		state.buffers.depth.setMask( true );
 		state.buffers.color.setMask( true );
 
-		if ( camera.isArrayCamera && camera.enabled ) {
+		if ( camera.isArrayCamera ) {
 
 			_this.setScissorTest( false );
 
@@ -21313,7 +21308,7 @@ function WebGLRenderer( parameters ) {
 
 			object.onBeforeRender( _this, scene, camera, geometry, material, group );
 
-			if ( camera.isArrayCamera && camera.enabled ) {
+			if ( camera.isArrayCamera ) {
 
 				var cameras = camera.cameras;
 
@@ -21322,14 +21317,13 @@ function WebGLRenderer( parameters ) {
 					var camera2 = cameras[ j ];
 					var bounds = camera2.bounds;
 
-					_this.setViewport(
-						bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
-						bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
-					);
-					_this.setScissor(
-						bounds.x * _width * _pixelRatio, bounds.y * _height * _pixelRatio,
-						bounds.z * _width * _pixelRatio, bounds.w * _height * _pixelRatio
-					);
+					var x = bounds.x * _width;
+					var y = bounds.y * _height;
+					var width = bounds.z * _width;
+					var height = bounds.w * _height;
+
+					_this.setViewport( x, y, width, height );
+					_this.setScissor( x, y, width, height );
 					_this.setScissorTest( true );
 
 					renderObject( object, scene, camera2, geometry, material, group );
@@ -26405,7 +26399,6 @@ function ExtrudeBufferGeometry( shapes, options ) {
 
 	if ( typeof ( shapes ) === "undefined" ) {
 
-		shapes = [];
 		return;
 
 	}
@@ -26560,8 +26553,6 @@ ExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) {
 
 		}
 
-		reverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)!
-
 	}
 
 
@@ -26605,7 +26596,7 @@ ExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) {
 		// inPt' is the intersection of the two lines parallel to the two
 		//  adjacent edges of inPt at a distance of 1 unit on the left side.
 
-		var v_trans_x, v_trans_y, shrink_by = 1; // resulting translation vector for inPt
+		var v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt
 
 		// good reading for geometry algorithms (here: line-line intersection)
 		// http://geomalgorithms.com/a05-_intersect-1.html
@@ -35996,7 +35987,6 @@ function ArrayCamera( array ) {
 
 	PerspectiveCamera.call( this );
 
-	this.enabled = false;
 	this.cameras = array || [];
 
 }
@@ -40535,9 +40525,29 @@ SpotLightHelper.prototype.update = function () {
  * @author Mugen87 / https://github.com/Mugen87
  */
 
+function getBoneList( object ) {
+
+	var boneList = [];
+
+	if ( object && object.isBone ) {
+
+		boneList.push( object );
+
+	}
+
+	for ( var i = 0; i < object.children.length; i ++ ) {
+
+		boneList.push.apply( boneList, getBoneList( object.children[ i ] ) );
+
+	}
+
+	return boneList;
+
+}
+
 function SkeletonHelper( object ) {
 
-	this.bones = this.getBoneList( object );
+	var bones = getBoneList( object );
 
 	var geometry = new BufferGeometry();
 
@@ -40547,9 +40557,9 @@ function SkeletonHelper( object ) {
 	var color1 = new Color( 0, 0, 1 );
 	var color2 = new Color( 0, 1, 0 );
 
-	for ( var i = 0; i < this.bones.length; i ++ ) {
+	for ( var i = 0; i < bones.length; i ++ ) {
 
-		var bone = this.bones[ i ];
+		var bone = bones[ i ];
 
 		if ( bone.parent && bone.parent.isBone ) {
 
@@ -40570,55 +40580,37 @@ function SkeletonHelper( object ) {
 	LineSegments.call( this, geometry, material );
 
 	this.root = object;
+	this.bones = bones;
 
 	this.matrix = object.matrixWorld;
 	this.matrixAutoUpdate = false;
 
-	this.update();
+	this.onBeforeRender();
 
 }
 
-
 SkeletonHelper.prototype = Object.create( LineSegments.prototype );
 SkeletonHelper.prototype.constructor = SkeletonHelper;
 
-SkeletonHelper.prototype.getBoneList = function( object ) {
-
-	var boneList = [];
-
-	if ( object && object.isBone ) {
-
-		boneList.push( object );
-
-	}
-
-	for ( var i = 0; i < object.children.length; i ++ ) {
-
-		boneList.push.apply( boneList, this.getBoneList( object.children[ i ] ) );
-
-	}
-
-	return boneList;
-
-};
-
-SkeletonHelper.prototype.update = function () {
+SkeletonHelper.prototype.onBeforeRender = function () {
 
 	var vector = new Vector3();
 
 	var boneMatrix = new Matrix4();
 	var matrixWorldInv = new Matrix4();
 
-	return function update() {
+	return function onBeforeRender() {
+
+		var bones = this.bones;
 
 		var geometry = this.geometry;
 		var position = geometry.getAttribute( 'position' );
 
 		matrixWorldInv.getInverse( this.root.matrixWorld );
 
-		for ( var i = 0, j = 0; i < this.bones.length; i ++ ) {
+		for ( var i = 0, j = 0; i < bones.length; i ++ ) {
 
-			var bone = this.bones[ i ];
+			var bone = bones[ i ];
 
 			if ( bone.parent && bone.parent.isBone ) {
 
@@ -41913,9 +41905,7 @@ var SceneUtils = {
 
 	attach: function ( child, scene, parent ) {
 
-		var matrixWorldInverse = new Matrix4();
-		matrixWorldInverse.getInverse( parent.matrixWorld );
-		child.applyMatrix( matrixWorldInverse );
+		child.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) );
 
 		scene.remove( child );
 		parent.add( child );
@@ -42178,6 +42168,12 @@ GridHelper.prototype.setColors = function () {
 
 };
 
+SkeletonHelper.prototype.update = function () {
+
+	console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );
+	
+};
+
 function WireframeHelper( object, hex ) {
 
 	console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );

+ 1 - 1
docs/api/constants/CustomBlendingEquations.html

@@ -22,7 +22,7 @@
 		material.blending = THREE.CustomBlending;
 		material.blendEquation = THREE.AddEquation; //default
 		material.blendSrc = THREE.SrcAlphaFactor; //default
-		material.blendDst = THREE.OneMinusDstAlphaFactor; //default
+		material.blendDst = THREE.OneMinusSrcAlphaFactor; //default
 		</code>
 
 		<h2>Blending Equations</h2>

+ 8 - 3
docs/api/constants/Textures.html

@@ -33,9 +33,14 @@
 		[page:Constant CubeReflectionMapping] is the default for a [page:CubeTexture CubeTexture]. <br /><br />
 
 		[page:Constant EquirectangularReflectionMapping] and [page:Constant EquirectangularRefractionMapping]
-		are for use with an equirectangular environment map.<br /><br />
-
-		[page:Constant SphericalReflectionMapping] is for use with a spherical reflection map.<br /><br />
+		are for use with an equirectangular environment map.  Also called a lat-long map, an equirectangular 
+		texture represents a 360-degree view along the horizontal centerline, and a 180-degree view along the 
+		vertical axis, with the top and bottom edges of the image corresponding to the north and south poles 
+		of a mapped sphere.<br /><br />
+
+		[page:Constant SphericalReflectionMapping] is for use with a spherical reflection map such as may be obtained
+		by cropping a photograph of a mirrored ball.  Sphere maps will be rendered "facing" the camera, irrespective
+		of the position of the camera relative to the cubemapped object or surface.<br /><br />
 
 		See the [example:webgl_materials_envmaps materials / envmaps] example.
 		</div>

+ 1 - 14
docs/api/helpers/SkeletonHelper.html

@@ -53,20 +53,7 @@ scene.add( helper );
 		<div>
 		The object passed in the constructor.
 		</div>
-
-		<h2>Methods</h2>
-
-		<h3>[method:Array getBoneList]( object )</h3>
-		<div>
-		getBoneList -- the object used in the constructor.<br /><br />
-
-		This is called automatically to generate a list of bones from the object passed in the constructor.
-		</div>
-
-		<h3>[method:null update]()</h3>
-		<div>
-		Update the helper. Call in the render loop if animating the model.
-		</div>
+		
 
 		<h2>Source</h2>
 

+ 5 - 1
docs/api/materials/MeshStandardMaterial.html

@@ -164,7 +164,11 @@
 		<div>Intensity of the emissive light. Modulates the emissive color. Default is 1.</div>
 
 		<h3>[property:TextureCube envMap]</h3>
-		<div>The environment map. Default is null.</div>
+		<div>The environment map. Default is null.  Note that in order for the material roughness 
+		property to correctly blur out the environment map, the shader must have access to mipmaps 
+		of the env texture.  TextureCubes created with default settings are correctly configured; 
+		if adjusting texture parameters manually, ensure minFilter is set to one of the MipMap options, 
+		and that mip maps have not been otherwise forcibly disabled.</div>
 
 		<h3>[property:Float envMapIntensity]</h3>
 		<div>Scales the effect of the environment map by multiplying its color.</div>

+ 9 - 9
docs/manual/introduction/Creating-a-scene.html

@@ -86,14 +86,14 @@
 
 		<h2>Rendering the scene</h2>
 
-		<div>If you copied the code from above into the HTML file we created earlier, you wouldn't be able to see anything. This is because we're not actually rendering anything yet. For that, we need what's called a <strong>render loop</strong>.</div>
+		<div>If you copied the code from above into the HTML file we created earlier, you wouldn't be able to see anything. This is because we're not actually rendering anything yet. For that, we need what's called a <strong>render or animate loop</strong>.</div>
 
 		<code>
-		function render() {
-			requestAnimationFrame( render );
+		function animate() {
+			requestAnimationFrame( animate );
 			renderer.render( scene, camera );
 		}
-		render();
+		animate();
 		</code>
 
 		<div>This will create a loop that causes the renderer to draw the scene 60 times per second. If you're new to writing games in the browser, you might say "why don't we just  create a <strong>setInterval</strong>? The thing is - we could, but <strong>requestAnimationFrame</strong> has a number of advantages. Perhaps the most important one is that it pauses when the user navigates to another browser tab, hence not wasting their precious processing power and battery life.</div>
@@ -102,14 +102,14 @@
 
 		<div>If you insert all the code above into the file you created before we began, you should see a green box. Let's make it all a little more interesting by rotating it.</div>
 
-		<div>Add the following right above the <strong>renderer.render</strong> call in your <strong>render</strong> function:</div>
+		<div>Add the following right above the <strong>renderer.render</strong> call in your <strong>animate</strong> function:</div>
 
 		<code>
 		cube.rotation.x += 0.1;
 		cube.rotation.y += 0.1;
 		</code>
 
-		<div>This will be run every frame (60 times per second), and give the cube a nice rotation animation. Basically, anything you want to move or change while the app is running has to go through the render loop. You can of course call other functions from there, so that you don't end up with a <strong>render</strong> function that's hundreds of lines.
+		<div>This will be run every frame (60 times per second), and give the cube a nice rotation animation. Basically, anything you want to move or change while the app is running has to go through the animate loop. You can of course call other functions from there, so that you don't end up with a <strong>animate</strong> function that's hundreds of lines.
 		</div>
 
 		<h2>The result</h2>
@@ -143,8 +143,8 @@
 
 					camera.position.z = 5;
 
-					var render = function () {
-						requestAnimationFrame( render );
+					var animate = function () {
+						requestAnimationFrame( animate );
 
 						cube.rotation.x += 0.1;
 						cube.rotation.y += 0.1;
@@ -152,7 +152,7 @@
 						renderer.render(scene, camera);
 					};
 
-					render();
+					animate();
 				&lt;/script&gt;
 			&lt;/body&gt;
 		&lt;/html&gt;

+ 0 - 8
docs/manual/introduction/Useful-links.html

@@ -73,14 +73,6 @@
 
 		</ul>
 
-
-		<h2>More documentation</h2>
-		<ul>
-			<li>
-				[link:http://ushiroad.com/3j/ Three.js walking map] - a graphical breakdown of the structure of a three.js scene.
-			</li>
-		</ul>
-
 		<h2>News and Updates</h2>
 		<ul>
 			<li>

+ 1 - 1
docs/manual/introduction/WebGL-compatibility-check.html

@@ -21,7 +21,7 @@
 
 <code>
 if (Detector.webgl) {
-    init();
+    // Initiate function or other initializations here
     animate();
 } else {
     var warning = Detector.getWebGLErrorMessage();

+ 0 - 2
docs/scenes/bones-browser.html

@@ -253,8 +253,6 @@
 
 				}
 
-				skeletonHelper.update();
-
 				renderer.render( scene, camera );
 
 			}

+ 1 - 1
examples/files.js

@@ -6,6 +6,7 @@ var files = {
 		"webgl_animation_skinning_blending",
 		"webgl_animation_skinning_morph",
 		"webgl_camera",
+		"webgl_camera_array",
 		"webgl_camera_cinematic",
 		"webgl_camera_logarithmicdepthbuffer",
 		"webgl_clipping",
@@ -90,7 +91,6 @@ var files = {
 		"webgl_loader_ctm_materials",
 		"webgl_loader_draco",
 		"webgl_loader_fbx",
-		"webgl_loader_gltf",
 		"webgl_loader_gltf2",
 		"webgl_loader_json_blender",
 		"webgl_loader_json_claraio",

+ 0 - 1
examples/js/Mirror.js

@@ -143,7 +143,6 @@ THREE.Mirror = function ( width, height, options ) {
 
 		mirrorCamera.updateProjectionMatrix();
 		mirrorCamera.updateMatrixWorld();
-		mirrorCamera.matrixWorldInverse.getInverse( mirrorCamera.matrixWorld );
 
 		// Update the texture matrix
 		textureMatrix.set(

+ 0 - 1
examples/js/WaterShader.js

@@ -279,7 +279,6 @@ THREE.Water.prototype.updateTextureMatrix = function () {
 
 	this.mirrorCamera.updateProjectionMatrix();
 	this.mirrorCamera.updateMatrixWorld();
-	this.mirrorCamera.matrixWorldInverse.getInverse( this.mirrorCamera.matrixWorld );
 
 	// Update the texture matrix
 	this.textureMatrix.set(

+ 346 - 30
examples/js/loaders/ColladaLoader2.js

@@ -1,5 +1,6 @@
 /**
  * @author mrdoob / http://mrdoob.com/
+ * @author Mugen87 / https://github.com/Mugen87
  */
 
 THREE.ColladaLoader = function ( manager ) {
@@ -33,7 +34,7 @@ THREE.ColladaLoader.prototype = {
 
 		set convertUpAxis( value ) {
 
-			console.log( 'ColladaLoader.options.convertUpAxis: TODO' );
+			console.log( 'THREE.ColladaLoader.options.convertUpAxis: TODO' );
 
 		}
 
@@ -176,6 +177,284 @@ THREE.ColladaLoader.prototype = {
 
 		}
 
+		// animation
+
+		function parseAnimation( xml ) {
+
+			var data = {
+				sources: {},
+				samplers: {},
+				channels: {}
+			};
+
+			for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
+
+				var child = xml.childNodes[ i ];
+
+				if ( child.nodeType !== 1 ) continue;
+
+				var id;
+
+				switch ( child.nodeName ) {
+
+					case 'source':
+						id = child.getAttribute( 'id' );
+						data.sources[ id ] = parseSource( child );
+						break;
+
+					case 'sampler':
+						id = child.getAttribute( 'id' );
+						data.samplers[ id ] = parseAnimationSampler( child );
+						break;
+
+					case 'channel':
+						id = child.getAttribute( 'target' );
+						data.channels[ id ] = parseAnimationChannel( child );
+						break;
+
+					default:
+						console.log( child );
+
+				}
+
+			}
+
+			library.animations[ xml.getAttribute( 'id' ) ] = data;
+
+		}
+
+		function parseAnimationSampler( xml ) {
+
+			var data = {
+				inputs: {},
+			};
+
+			for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
+
+				var child = xml.childNodes[ i ];
+
+				if ( child.nodeType !== 1 ) continue;
+
+				switch ( child.nodeName ) {
+
+					case 'input':
+						var id = parseId( child.getAttribute( 'source' ) );
+						var semantic = child.getAttribute( 'semantic' );
+						data.inputs[ semantic ] = id;
+						break;
+
+				}
+
+			}
+
+			return data;
+
+		}
+
+		function parseAnimationChannel( xml ) {
+
+			var data = {};
+
+			var target = xml.getAttribute( 'target' );
+
+			// parsing SID Addressing Syntax
+
+			var parts = target.split( '/' );
+
+			var id = parts.shift();
+			var sid = parts.shift();
+
+			// check selection syntax
+
+			var arraySyntax = ( sid.indexOf( '(' ) !== - 1 );
+			var memberSyntax = ( sid.indexOf( '.' ) !== - 1 );
+
+			if ( memberSyntax ) {
+
+				//  member selection access
+
+				parts = sid.split( '.' );
+				sid = parts.shift();
+				data.member = parts.shift();
+
+			} else if ( arraySyntax ) {
+
+				// array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.
+
+				var indices = sid.split( '(' );
+				sid = indices.shift();
+
+				for ( var i = 0; i < indices.length; i ++ ) {
+
+					indices[ i ] = parseInt( indices[ i ].replace( /\)/, '' ) );
+
+				}
+
+				data.indices = indices;
+
+			}
+
+			data.id = id;
+			data.sid = sid;
+
+			data.arraySyntax = arraySyntax;
+			data.memberSyntax = memberSyntax;
+
+			data.sampler = parseId( xml.getAttribute( 'source' ) );
+
+			return data;
+
+		}
+
+		// controller
+
+		function parseController( xml ) {
+
+			var data = {
+				skin: {}
+			};
+
+			for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
+
+				var child = xml.childNodes[ i ];
+
+				if ( child.nodeType !== 1 ) continue;
+
+				switch ( child.nodeName ) {
+
+					case 'skin':
+						var id = parseId( child.getAttribute( 'source' ) );
+						data.skin[ id ] = parseSkin( child );
+						break;
+
+				}
+
+			}
+
+			library.controllers[ xml.getAttribute( 'id' ) ] = data;
+
+		}
+
+		function parseSkin( xml ) {
+
+			var data = {
+				sources: {}
+			}
+
+			for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
+
+				var child = xml.childNodes[ i ];
+
+				if ( child.nodeType !== 1 ) continue;
+
+				switch ( child.nodeName ) {
+
+					case 'bind_shape_matrix':
+						data.bindShapeMatrix = parseFloats( child.textContent );
+						break;
+
+					case 'source':
+						var id = child.getAttribute( 'id' );
+						data.sources[ id ] = parseSource( child );
+						break;
+
+					case 'joints':
+						data.joints = parseJoints( child );
+						break;
+
+					case 'vertex_weights':
+						data.vertexWeights = parseVertexWeights( child );
+						break;
+
+				}
+
+			}
+
+			return data;
+
+		}
+
+		function parseJoints( xml ) {
+
+			var data = {
+				inputs: {}
+			}
+
+			for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
+
+				var child = xml.childNodes[ i ];
+
+				if ( child.nodeType !== 1 ) continue;
+
+				switch ( child.nodeName ) {
+
+					case 'input':
+						var semantic = child.getAttribute( 'semantic' );
+						var id = parseId( child.getAttribute( 'source' ) );
+						data.inputs[ semantic ] = id;
+						break;
+
+				}
+
+			}
+
+			return data;
+
+		}
+
+		function parseVertexWeights( xml ) {
+
+			var data = {
+				inputs: {}
+			}
+
+			for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
+
+				var child = xml.childNodes[ i ];
+
+				if ( child.nodeType !== 1 ) continue;
+
+				switch ( child.nodeName ) {
+
+					case 'input':
+						var semantic = child.getAttribute( 'semantic' );
+						var id = parseId( child.getAttribute( 'source' ) );
+						var offset = parseInt( child.getAttribute( 'offset' ) );
+						data.inputs[ semantic ] = { id: id, offset: offset };
+						break;
+
+					case 'vcount':
+						data.vcount = parseInts( child.textContent );
+						break;
+
+					case 'v':
+						data.v = parseInts( child.textContent );
+						break;
+
+				}
+
+			}
+
+			return data;
+
+		}
+
+		function buildController( data ) {
+
+			// for now, we only return the id of the skin in order to get the corresponding geometry
+
+			var keys = Object.keys( data.skin );
+
+			return { id: keys[ 0 ] };
+
+		}
+
+		function getController( id ) {
+
+			return getBuild( library.controllers[ id ], buildController );
+
+		}
+
 		// image
 
 		function parseImage( xml ) {
@@ -601,7 +880,7 @@ THREE.ColladaLoader.prototype = {
 
 				}
 
-				console.error( 'ColladaLoader: Undefined sampler', textureObject.id );
+				console.error( 'THREE.ColladaLoader: Undefined sampler', textureObject.id );
 
 				return null;
 
@@ -955,7 +1234,7 @@ THREE.ColladaLoader.prototype = {
 				switch ( child.nodeName ) {
 
 					case 'source':
-						data.sources[ id ] = parseGeometrySource( child );
+						data.sources[ id ] = parseSource( child );
 						break;
 
 					case 'vertices':
@@ -964,7 +1243,7 @@ THREE.ColladaLoader.prototype = {
 						break;
 
 					case 'polygons':
-						console.warn( 'ColladaLoader: Unsupported primitive type: ', child.nodeName );
+						console.warn( 'THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName );
 						break;
 
 					case 'lines':
@@ -985,7 +1264,7 @@ THREE.ColladaLoader.prototype = {
 
 		}
 
-		function parseGeometrySource( xml ) {
+		function parseSource( xml ) {
 
 			var data = {
 				array: [],
@@ -1014,9 +1293,6 @@ THREE.ColladaLoader.prototype = {
 						}
 						break;
 
-					default:
-						console.log( child );
-
 				}
 
 			}
@@ -1227,7 +1503,7 @@ THREE.ColladaLoader.prototype = {
 
 				if ( maxcount > 0 ) {
 
-					console.log( 'ColladaLoader: Geometry has faces with more than 4 vertices.' );
+					console.log( 'THREE.ColladaLoader: Geometry has faces with more than 4 vertices.' );
 
 				}
 
@@ -1263,6 +1539,7 @@ THREE.ColladaLoader.prototype = {
 				matrix: new THREE.Matrix4(),
 				nodes: [],
 				instanceCameras: [],
+				instanceControllers: [],
 				instanceLights: [],
 				instanceGeometries: [],
 				instanceNodes: []
@@ -1291,12 +1568,16 @@ THREE.ColladaLoader.prototype = {
 						data.instanceCameras.push( parseId( child.getAttribute( 'url' ) ) );
 						break;
 
+					case 'instance_controller':
+						data.instanceControllers.push( parseNodeInstance( child ) );
+						break;
+
 					case 'instance_light':
 						data.instanceLights.push( parseId( child.getAttribute( 'url' ) ) );
 						break;
 
 					case 'instance_geometry':
-						data.instanceGeometries.push( parseNodeInstanceGeometry( child ) );
+						data.instanceGeometries.push( parseNodeInstance( child ) );
 						break;
 
 					case 'instance_node':
@@ -1345,7 +1626,7 @@ THREE.ColladaLoader.prototype = {
 
 		}
 
-		function parseNodeInstanceGeometry( xml ) {
+		function parseNodeInstance( xml ) {
 
 			var data = {
 				id: parseId( xml.getAttribute( 'url' ) ),
@@ -1356,21 +1637,29 @@ THREE.ColladaLoader.prototype = {
 
 				var child = xml.childNodes[ i ];
 
-				if ( child.nodeName === 'bind_material' ) {
+				switch ( child.nodeName ) {
 
-					var instances = child.getElementsByTagName( 'instance_material' );
+					case 'bind_material':
+						var instances = child.getElementsByTagName( 'instance_material' );
 
-					for ( var j = 0; j < instances.length; j ++ ) {
+						for ( var j = 0; j < instances.length; j ++ ) {
 
-						var instance = instances[ j ];
-						var symbol = instance.getAttribute( 'symbol' );
-						var target = instance.getAttribute( 'target' );
+							var instance = instances[ j ];
+							var symbol = instance.getAttribute( 'symbol' );
+							var target = instance.getAttribute( 'target' );
 
-						data.materials[ symbol ] = parseId( target );
+							data.materials[ symbol ] = parseId( target );
 
-					}
+						}
 
-					break;
+						break;
+
+					case 'skeleton':
+						data.skeleton = parseId( child.textContent );;
+						break;
+
+					default:
+						break;
 
 				}
 
@@ -1387,6 +1676,7 @@ THREE.ColladaLoader.prototype = {
 			var matrix = data.matrix;
 			var nodes = data.nodes;
 			var instanceCameras = data.instanceCameras;
+			var instanceControllers = data.instanceControllers;
 			var instanceLights = data.instanceLights;
 			var instanceGeometries = data.instanceGeometries;
 			var instanceNodes = data.instanceNodes;
@@ -1403,6 +1693,28 @@ THREE.ColladaLoader.prototype = {
 
 			}
 
+			for ( var i = 0, l = instanceControllers.length; i < l; i ++ ) {
+
+				var instance = instanceControllers[ i ];
+				var controller = getController( instance.id );
+				var geometries = getGeometry( controller.id );
+
+				for ( var key in geometries ) {
+
+					var object = geometries[ key ].clone();
+
+					if ( instance.materials[ key ] !== undefined ) {
+
+						object.material = getMaterial( instance.materials[ key ] );
+
+					}
+
+					objects.push( object );
+
+				}
+
+			}
+
 			for ( var i = 0, l = instanceLights.length; i < l; i ++ ) {
 
 				objects.push( getLight( instanceLights[ i ] ).clone() );
@@ -1521,7 +1833,7 @@ THREE.ColladaLoader.prototype = {
 
 		}
 
-		console.time( 'ColladaLoader' );
+		console.time( 'THREE.ColladaLoader' );
 
 		if ( text.length === 0 ) {
 
@@ -1529,18 +1841,18 @@ THREE.ColladaLoader.prototype = {
 
 		}
 
-		console.time( 'ColladaLoader: DOMParser' );
+		console.time( 'THREE.ColladaLoader: DOMParser' );
 
 		var xml = new DOMParser().parseFromString( text, 'application/xml' );
 
-		console.timeEnd( 'ColladaLoader: DOMParser' );
+		console.timeEnd( 'THREE.ColladaLoader: DOMParser' );
 
 		var collada = getElementsByTagName( xml, 'COLLADA' )[ 0 ];
 
 		// metadata
 
 		var version = collada.getAttribute( 'version' );
-		console.log( 'ColladaLoader: File version', version );
+		console.log( 'THREE.ColladaLoader: File version', version );
 
 		var asset = parseAsset( getElementsByTagName( collada, 'asset' )[ 0 ] );
 		var textureLoader = new THREE.TextureLoader( this.manager ).setPath( resourceDirectory );
@@ -1548,6 +1860,8 @@ THREE.ColladaLoader.prototype = {
 		//
 
 		var library = {
+			animations: {},
+			controllers: {},
 			images: {},
 			effects: {},
 			materials: {},
@@ -1558,8 +1872,10 @@ THREE.ColladaLoader.prototype = {
 			visualScenes: {}
 		};
 
-		console.time( 'ColladaLoader: Parse' );
+		console.time( 'THREE.ColladaLoader: Parse' );
 
+		// parseLibrary( collada, 'library_animations', 'animation', parseAnimation );
+		parseLibrary( collada, 'library_controllers', 'controller', parseController );
 		parseLibrary( collada, 'library_images', 'image', parseImage );
 		parseLibrary( collada, 'library_effects', 'effect', parseEffect );
 		parseLibrary( collada, 'library_materials', 'material', parseMaterial );
@@ -1569,20 +1885,20 @@ THREE.ColladaLoader.prototype = {
 		parseLibrary( collada, 'library_nodes', 'node', parseNode );
 		parseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );
 
-		console.timeEnd( 'ColladaLoader: Parse' );
+		console.timeEnd( 'THREE.ColladaLoader: Parse' );
 
-		console.time( 'ColladaLoader: Build' );
+		console.time( 'THREE.ColladaLoader: Build' );
 
+		buildLibrary( library.controllers, buildController );
 		buildLibrary( library.images, buildImage );
 		buildLibrary( library.effects, buildEffect );
 		buildLibrary( library.materials, buildMaterial );
 		buildLibrary( library.cameras, buildCamera );
 		buildLibrary( library.lights, buildLight );
 		buildLibrary( library.geometries, buildGeometry );
-		// buildLibrary( library.nodes, buildNode );
 		buildLibrary( library.visualScenes, buildVisualScene );
 
-		console.timeEnd( 'ColladaLoader: Build' );
+		console.timeEnd( 'THREE.ColladaLoader: Build' );
 
 		// console.log( library );
 
@@ -1596,7 +1912,7 @@ THREE.ColladaLoader.prototype = {
 
 		scene.scale.multiplyScalar( asset.unit );
 
-		console.timeEnd( 'ColladaLoader' );
+		console.timeEnd( 'THREE.ColladaLoader' );
 
 		// console.log( scene );
 

+ 5 - 21
examples/js/loaders/GLTF2Loader.js

@@ -2380,7 +2380,7 @@ THREE.GLTF2Loader = ( function () {
 
 				var _skin = {
 					bindShapeMatrix: bindShapeMatrix,
-					jointNames: skin.jointNames,
+					joints: skin.joints,
 					inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ]
 				};
 
@@ -2665,24 +2665,8 @@ THREE.GLTF2Loader = ( function () {
 								// Replace Mesh with SkinnedMesh in library
 								if ( skinEntry ) {
 
-									var getJointNode = function ( jointId ) {
-
-										var keys = Object.keys( __nodes );
-
-										for ( var i = 0, il = keys.length; i < il; i ++ ) {
-
-											var n = __nodes[ keys[ i ] ];
-
-											if ( n.jointName === jointId ) return n;
-
-										}
-
-										return null;
-
-									};
-
 									var geometry = originalGeometry;
-									var material = originalMaterial;
+									material = originalMaterial;
 									material.skinning = true;
 
 									child = new THREE.SkinnedMesh( geometry, material, false );
@@ -2693,10 +2677,10 @@ THREE.GLTF2Loader = ( function () {
 									var bones = [];
 									var boneInverses = [];
 
-									for ( var i = 0, l = skinEntry.jointNames.length; i < l; i ++ ) {
+									for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) {
 
-										var jointId = skinEntry.jointNames[ i ];
-										var jointNode = getJointNode( jointId );
+										var jointId = skinEntry.joints[ i ];
+										var jointNode = __nodes[ jointId ];
 
 										if ( jointNode ) {
 

+ 1 - 3
examples/js/renderers/CSS2DRenderer.js

@@ -92,9 +92,7 @@ THREE.CSS2DRenderer = function () {
 
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 
-		camera.matrixWorldInverse.getInverse( camera.matrixWorld );
-
-		viewMatrix.copy( camera.matrixWorldInverse.getInverse( camera.matrixWorld ) );
+		viewMatrix.copy( camera.matrixWorldInverse );
 		viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, viewMatrix );
 
 		renderObject( scene, camera );

+ 0 - 2
examples/js/renderers/CSS3DRenderer.js

@@ -277,8 +277,6 @@ THREE.CSS3DRenderer = function () {
 
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 
-		camera.matrixWorldInverse.getInverse( camera.matrixWorld );
-
 		var cameraCSSMatrix = 'translateZ(' + fov + 'px)' +
 			getCameraCSSMatrix( camera.matrixWorldInverse );
 

+ 1 - 1
examples/js/renderers/Projector.js

@@ -403,7 +403,7 @@ THREE.Projector = function () {
 		if ( scene.autoUpdate === true ) scene.updateMatrixWorld();
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 
-		_viewMatrix.copy( camera.matrixWorldInverse.getInverse( camera.matrixWorld ) );
+		_viewMatrix.copy( camera.matrixWorldInverse );
 		_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
 
 		_frustum.setFromMatrix( _viewProjectionMatrix );

+ 0 - 1
examples/js/renderers/RaytracingWorker.js

@@ -514,7 +514,6 @@ THREE.RaytracingRendererWorker = function () {
 
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 
-		camera.matrixWorldInverse.getInverse( camera.matrixWorld );
 		cameraPosition.setFromMatrixPosition( camera.matrixWorld );
 
 		//

+ 1 - 1
examples/js/renderers/SVGRenderer.js

@@ -173,7 +173,7 @@ THREE.SVGRenderer = function () {
 		_this.info.render.vertices = 0;
 		_this.info.render.faces = 0;
 
-		_viewMatrix.copy( camera.matrixWorldInverse.getInverse( camera.matrixWorld ) );
+		_viewMatrix.copy( camera.matrixWorldInverse );
 		_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
 
 		_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );

+ 8 - 0
examples/models/gltf/CesiumMan/README.md

@@ -0,0 +1,8 @@
+# Cesium Man
+## Screenshot
+
+![screenshot](screenshot/screenshot.gif)
+
+## License Information
+
+Donated by Cesium for glTF testing.  Please follow the [Cesium Trademark Terms and Conditions](https://github.com/AnalyticalGraphicsInc/cesium/wiki/CesiumTrademark.pdf).

+ 0 - 1
examples/models/gltf/CesiumMan/README.txt

@@ -1 +0,0 @@
-Donated by Cesium for glTF testing.  Please follow the Cesium Trademark Terms and Conditions: https://github.com/AnalyticalGraphicsInc/cesium/wiki/CesiumTrademark.pdf

二進制
examples/models/gltf/CesiumMan/glTF-Binary/CesiumMan.glb


二進制
examples/models/gltf/CesiumMan/glTF-Binary/Cesium_Man.glb


文件差異過大導致無法顯示
+ 2699 - 0
examples/models/gltf/CesiumMan/glTF-Embedded/CesiumMan.gltf


文件差異過大導致無法顯示
+ 2728 - 0
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/CesiumMan.gltf


+ 0 - 0
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.jpg → examples/models/gltf/CesiumMan/glTF-MaterialsCommon/CesiumMan.jpg


二進制
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/CesiumMan0.bin


二進制
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.bin


+ 0 - 2111
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.gltf

@@ -1,2111 +0,0 @@
-{
-    "accessors": {
-        "IBM_Armature_Cesium_Man-skin": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 0,
-            "componentType": 5126,
-            "count": 19,
-            "type": "MAT4"
-        },
-        "accessor_112": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 448512,
-            "byteStride": 16,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                1,
-                0.98992,
-                0.951076,
-                0.874108
-            ],
-            "min": [
-                0.0100802,
-                0,
-                0,
-                0
-            ],
-            "type": "VEC4"
-        },
-        "accessor_115": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 672768,
-            "byteStride": 16,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                18,
-                18,
-                18,
-                18
-            ],
-            "min": [
-                0,
-                0,
-                0,
-                0
-            ],
-            "type": "VEC4"
-        },
-        "accessor_21": {
-            "bufferView": "bufferView_119",
-            "byteOffset": 0,
-            "byteStride": 0,
-            "componentType": 5123,
-            "count": 14016,
-            "type": "SCALAR"
-        },
-        "accessor_23": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 0,
-            "byteStride": 12,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                0.180954,
-                0.569137,
-                1.50655
-            ],
-            "min": [
-                -0.131,
-                -0.569137,
-                0
-            ],
-            "type": "VEC3"
-        },
-        "accessor_25": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 168192,
-            "byteStride": 12,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                1,
-                0.999981,
-                0.994445
-            ],
-            "min": [
-                -1,
-                -0.999981,
-                -1
-            ],
-            "type": "VEC3"
-        },
-        "accessor_27": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 336384,
-            "byteStride": 8,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                0.990806,
-                0.98803
-            ],
-            "min": [
-                0.0140794,
-                0.00844598
-            ],
-            "type": "VEC2"
-        },
-        "animAccessor_0": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 1216,
-            "componentType": 5126,
-            "count": 49,
-            "type": "SCALAR"
-        },
-        "animAccessor_1": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 1412,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_10": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 7292,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_11": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 7880,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_12": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 8468,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_13": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 9252,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_14": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 9840,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_15": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 10428,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_16": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 11212,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_17": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 11800,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_18": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 12388,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_19": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 13172,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_2": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 2000,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_20": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 13760,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_21": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 14348,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_22": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 15132,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_23": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 15720,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_24": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 16308,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_25": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 17092,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_26": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 17680,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_27": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 18268,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_28": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 19052,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_29": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 19640,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_3": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 2588,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_30": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 20228,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_31": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 21012,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_32": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 21600,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_33": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 22188,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_34": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 22972,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_35": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 23560,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_36": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 24148,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_37": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 24932,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_38": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 25520,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_39": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 26108,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_4": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 3372,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_40": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 26892,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_41": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 27480,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_42": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 28068,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_43": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 28852,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_44": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 29440,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_45": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 30028,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_46": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 30812,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_47": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 31400,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_48": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 31988,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_49": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 32772,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_5": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 3960,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_50": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 33360,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_51": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 33948,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_52": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 34732,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_53": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 35320,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_54": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 35908,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_55": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 36692,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_56": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 37280,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_57": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 37868,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_6": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 4548,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_7": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 5332,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_8": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 5920,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_9": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 6508,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        }
-    },
-    "animations": {
-        "animation_0": {
-            "channels": [
-                {
-                    "sampler": "animation_0_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_0_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_0_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_3",
-                "scale": "animAccessor_1",
-                "translation": "animAccessor_2"
-            },
-            "samplers": {
-                "animation_0_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_0_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_0_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_1": {
-            "channels": [
-                {
-                    "sampler": "animation_1_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_1_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_1_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_6",
-                "scale": "animAccessor_4",
-                "translation": "animAccessor_5"
-            },
-            "samplers": {
-                "animation_1_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_1_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_1_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_10": {
-            "channels": [
-                {
-                    "sampler": "animation_10_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__3_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_10_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__3_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_10_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__3_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_9",
-                "scale": "animAccessor_7",
-                "translation": "animAccessor_8"
-            },
-            "samplers": {
-                "animation_10_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_10_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_10_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_11": {
-            "channels": [
-                {
-                    "sampler": "animation_11_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_11_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_11_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_12",
-                "scale": "animAccessor_10",
-                "translation": "animAccessor_11"
-            },
-            "samplers": {
-                "animation_11_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_11_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_11_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_12": {
-            "channels": [
-                {
-                    "sampler": "animation_12_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_12_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_12_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_15",
-                "scale": "animAccessor_13",
-                "translation": "animAccessor_14"
-            },
-            "samplers": {
-                "animation_12_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_12_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_12_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_13": {
-            "channels": [
-                {
-                    "sampler": "animation_13_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_3",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_13_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_3",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_13_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_3",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_18",
-                "scale": "animAccessor_16",
-                "translation": "animAccessor_17"
-            },
-            "samplers": {
-                "animation_13_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_13_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_13_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_14": {
-            "channels": [
-                {
-                    "sampler": "animation_14_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_5",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_14_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_5",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_14_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_5",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_21",
-                "scale": "animAccessor_19",
-                "translation": "animAccessor_20"
-            },
-            "samplers": {
-                "animation_14_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_14_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_14_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_15": {
-            "channels": [
-                {
-                    "sampler": "animation_15_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_15_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_15_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_24",
-                "scale": "animAccessor_22",
-                "translation": "animAccessor_23"
-            },
-            "samplers": {
-                "animation_15_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_15_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_15_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_16": {
-            "channels": [
-                {
-                    "sampler": "animation_16_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_16_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_16_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_27",
-                "scale": "animAccessor_25",
-                "translation": "animAccessor_26"
-            },
-            "samplers": {
-                "animation_16_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_16_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_16_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_17": {
-            "channels": [
-                {
-                    "sampler": "animation_17_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_3",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_17_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_3",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_17_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_3",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_30",
-                "scale": "animAccessor_28",
-                "translation": "animAccessor_29"
-            },
-            "samplers": {
-                "animation_17_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_17_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_17_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_18": {
-            "channels": [
-                {
-                    "sampler": "animation_18_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_5",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_18_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_5",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_18_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_5",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_33",
-                "scale": "animAccessor_31",
-                "translation": "animAccessor_32"
-            },
-            "samplers": {
-                "animation_18_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_18_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_18_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_2": {
-            "channels": [
-                {
-                    "sampler": "animation_2_scale_sampler",
-                    "target": {
-                        "id": "torso_joint_3",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_2_translation_sampler",
-                    "target": {
-                        "id": "torso_joint_3",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_2_rotation_sampler",
-                    "target": {
-                        "id": "torso_joint_3",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_36",
-                "scale": "animAccessor_34",
-                "translation": "animAccessor_35"
-            },
-            "samplers": {
-                "animation_2_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_2_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_2_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_3": {
-            "channels": [
-                {
-                    "sampler": "animation_3_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_3_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_3_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_39",
-                "scale": "animAccessor_37",
-                "translation": "animAccessor_38"
-            },
-            "samplers": {
-                "animation_3_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_3_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_3_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_4": {
-            "channels": [
-                {
-                    "sampler": "animation_4_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_4_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_4_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_42",
-                "scale": "animAccessor_40",
-                "translation": "animAccessor_41"
-            },
-            "samplers": {
-                "animation_4_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_4_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_4_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_5": {
-            "channels": [
-                {
-                    "sampler": "animation_5_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__4_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_5_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__4_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_5_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__4_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_45",
-                "scale": "animAccessor_43",
-                "translation": "animAccessor_44"
-            },
-            "samplers": {
-                "animation_5_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_5_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_5_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_6": {
-            "channels": [
-                {
-                    "sampler": "animation_6_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__3_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_6_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__3_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_6_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__3_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_48",
-                "scale": "animAccessor_46",
-                "translation": "animAccessor_47"
-            },
-            "samplers": {
-                "animation_6_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_6_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_6_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_7": {
-            "channels": [
-                {
-                    "sampler": "animation_7_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__2_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_7_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__2_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_7_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__2_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_51",
-                "scale": "animAccessor_49",
-                "translation": "animAccessor_50"
-            },
-            "samplers": {
-                "animation_7_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_7_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_7_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_8": {
-            "channels": [
-                {
-                    "sampler": "animation_8_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_8_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_8_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_54",
-                "scale": "animAccessor_52",
-                "translation": "animAccessor_53"
-            },
-            "samplers": {
-                "animation_8_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_8_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_8_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_9": {
-            "channels": [
-                {
-                    "sampler": "animation_9_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__2_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_9_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__2_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_9_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__2_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_57",
-                "scale": "animAccessor_55",
-                "translation": "animAccessor_56"
-            },
-            "samplers": {
-                "animation_9_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_9_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_9_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        }
-    },
-    "asset": {
-        "generator": "collada2gltf@cf6371beb0bdc18ba603378d5e40c966da53d385",
-        "premultipliedAlpha": true,
-        "profile": {
-            "api": "WebGL",
-            "version": "1.0.2"
-        },
-        "version": "1.0"
-    },
-    "bufferViews": {
-        "bufferView_118": {
-            "buffer": "Cesium_Man",
-            "byteLength": 38652,
-            "byteOffset": 0
-        },
-        "bufferView_119": {
-            "buffer": "Cesium_Man",
-            "byteLength": 28032,
-            "byteOffset": 38652,
-            "target": 34963
-        },
-        "bufferView_120": {
-            "buffer": "Cesium_Man",
-            "byteLength": 897024,
-            "byteOffset": 66684,
-            "target": 34962
-        }
-    },
-    "buffers": {
-        "Cesium_Man": {
-            "byteLength": 963708,
-            "type": "arraybuffer",
-            "uri": "Cesium_Man.bin"
-        }
-    },
-    "extensionsUsed": [
-        "KHR_materials_common"
-    ],
-    "images": {
-        "Cesium_Man_jpg": {
-            "name": "Cesium_Man_jpg",
-            "uri": "Cesium_Man.jpg"
-        }
-    },
-    "materials": {
-        "Cesium_Man-effect": {
-            "extensions": {
-                "KHR_materials_common": {
-                    "doubleSided": false,
-                    "jointCount": 19,
-                    "technique": "PHONG",
-                    "transparent": false,
-                    "values": {
-                        "ambient": [
-                            0,
-                            0,
-                            0,
-                            1
-                        ],
-                        "diffuse": "texture_Cesium_Man_jpg",
-                        "emission": [
-                            0,
-                            0,
-                            0,
-                            1
-                        ],
-                        "shininess": 256,
-                        "specular": [
-                            0.1,
-                            0.1,
-                            0.1,
-                            1
-                        ]
-                    }
-                }
-            },
-            "name": "Cesium_Man"
-        }
-    },
-    "meshes": {
-        "Cesium_Man-mesh": {
-            "name": "Cesium_Man",
-            "primitives": [
-                {
-                    "attributes": {
-                        "JOINT": "accessor_115",
-                        "NORMAL": "accessor_25",
-                        "POSITION": "accessor_23",
-                        "TEXCOORD_0": "accessor_27",
-                        "WEIGHT": "accessor_112"
-                    },
-                    "indices": "accessor_21",
-                    "material": "Cesium_Man-effect",
-                    "mode": 4
-                }
-            ]
-        }
-    },
-    "nodes": {
-        "Armature": {
-            "children": [
-                "Skeleton_torso_joint_1"
-            ],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Armature"
-        },
-        "Cesium_Man": {
-            "children": [],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "meshes": [
-                "Cesium_Man-mesh"
-            ],
-            "name": "Cesium_Man",
-            "skeletons": [
-                "Skeleton_torso_joint_1"
-            ],
-            "skin": "Armature_Cesium_Man-skin"
-        },
-        "Skeleton_arm_joint_L__2_": {
-            "children": [],
-            "jointName": "Skeleton_arm_joint_L__2_",
-            "name": "Skeleton_arm_joint_L__2_",
-            "rotation": [
-                -0.00611917,
-                0.0423255,
-                0.0787759,
-                0.995975
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                1.49012e-008,
-                0.187791,
-                5.96046e-008
-            ]
-        },
-        "Skeleton_arm_joint_L__3_": {
-            "children": [
-                "Skeleton_arm_joint_L__2_"
-            ],
-            "jointName": "Skeleton_arm_joint_L__3_",
-            "name": "Skeleton_arm_joint_L__3_",
-            "rotation": [
-                0.0139609,
-                0.129373,
-                0.252206,
-                0.958885
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                1.16415e-010,
-                0.242009,
-                0
-            ]
-        },
-        "Skeleton_arm_joint_L__4_": {
-            "children": [
-                "Skeleton_arm_joint_L__3_"
-            ],
-            "jointName": "Skeleton_arm_joint_L__4_",
-            "name": "Skeleton_arm_joint_L__4_",
-            "rotation": [
-                0.679733,
-                0.689686,
-                -0.226972,
-                -0.103832
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0.0910136,
-                1.41859e-005,
-                -5.80549e-005
-            ]
-        },
-        "Skeleton_arm_joint_R": {
-            "children": [
-                "Skeleton_arm_joint_R__2_"
-            ],
-            "jointName": "Skeleton_arm_joint_R",
-            "name": "Skeleton_arm_joint_R",
-            "rotation": [
-                -0.296443,
-                -0.0315103,
-                0.652255,
-                0.696916
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -0.0909878,
-                6.25998e-005,
-                -6.53267e-005
-            ]
-        },
-        "Skeleton_arm_joint_R__2_": {
-            "children": [
-                "Skeleton_arm_joint_R__3_"
-            ],
-            "jointName": "Skeleton_arm_joint_R__2_",
-            "name": "Skeleton_arm_joint_R__2_",
-            "rotation": [
-                -0.188793,
-                0.915707,
-                -0.167809,
-                -0.312534
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0,
-                0.242008,
-                -5.96046e-008
-            ]
-        },
-        "Skeleton_arm_joint_R__3_": {
-            "children": [],
-            "jointName": "Skeleton_arm_joint_R__3_",
-            "name": "Skeleton_arm_joint_R__3_",
-            "rotation": [
-                0.0586139,
-                -0.263777,
-                -0.0522685,
-                0.961381
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0,
-                0.187792,
-                0
-            ]
-        },
-        "Skeleton_neck_joint_1": {
-            "children": [
-                "Skeleton_neck_joint_2"
-            ],
-            "jointName": "Skeleton_neck_joint_1",
-            "name": "Skeleton_neck_joint_1",
-            "rotation": [
-                0.66063,
-                -8.34443e-005,
-                -7.10926e-005,
-                0.750712
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -8.84756e-009,
-                5.96046e-008,
-                0.0648366
-            ]
-        },
-        "Skeleton_neck_joint_2": {
-            "children": [],
-            "jointName": "Skeleton_neck_joint_2",
-            "name": "Skeleton_neck_joint_2",
-            "rotation": [
-                2.55261e-006,
-                0.99969,
-                -0.0248797,
-                -4.32993e-007
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0,
-                0.0520397,
-                0
-            ]
-        },
-        "Skeleton_torso_joint_1": {
-            "children": [
-                "Skeleton_torso_joint_2",
-                "leg_joint_L_1",
-                "leg_joint_R_1"
-            ],
-            "jointName": "Skeleton_torso_joint_1",
-            "name": "Skeleton_torso_joint_1",
-            "rotation": [
-                0.0267947,
-                0.0267326,
-                0.706561,
-                0.706639
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -3.35276e-008,
-                0.00499989,
-                0.679
-            ]
-        },
-        "Skeleton_torso_joint_2": {
-            "children": [
-                "torso_joint_3"
-            ],
-            "jointName": "Skeleton_torso_joint_2",
-            "name": "Skeleton_torso_joint_2",
-            "rotation": [
-                0.657252,
-                0.000179693,
-                0.00010428,
-                0.753671
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -1.02445e-008,
-                1.49012e-008,
-                0.145417
-            ]
-        },
-        "leg_joint_L_1": {
-            "children": [
-                "leg_joint_L_2"
-            ],
-            "jointName": "leg_joint_L_1",
-            "name": "leg_joint_L_1",
-            "rotation": [
-                0.24757,
-                -0.577568,
-                0.747914,
-                -0.213889
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0.0680367,
-                -0.0285187,
-                -0.0629628
-            ]
-        },
-        "leg_joint_L_2": {
-            "children": [
-                "leg_joint_L_3"
-            ],
-            "jointName": "leg_joint_L_2",
-            "name": "leg_joint_L_2",
-            "rotation": [
-                -0.209028,
-                0.32989,
-                0.0555992,
-                0.918906
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                3.72529e-009,
-                0.266113,
-                1.49012e-008
-            ]
-        },
-        "leg_joint_L_3": {
-            "children": [
-                "leg_joint_L_5"
-            ],
-            "jointName": "leg_joint_L_3",
-            "name": "leg_joint_L_3",
-            "rotation": [
-                -0.84774,
-                0.00425408,
-                0.00949198,
-                0.530311
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -7.45058e-009,
-                0.275824,
-                5.58794e-009
-            ]
-        },
-        "leg_joint_L_5": {
-            "children": [],
-            "jointName": "leg_joint_L_5",
-            "name": "leg_joint_L_5",
-            "rotation": [
-                0.0265735,
-                -0.320144,
-                0.944545,
-                0.0680896
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -0.00234652,
-                -0.0661733,
-                0.0278568
-            ]
-        },
-        "leg_joint_R_1": {
-            "children": [
-                "leg_joint_R_2"
-            ],
-            "jointName": "leg_joint_R_1",
-            "name": "leg_joint_R_1",
-            "rotation": [
-                -0.066427,
-                -0.611501,
-                0.785027,
-                0.0733875
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -0.068042,
-                -0.0285702,
-                -0.0629496
-            ]
-        },
-        "leg_joint_R_2": {
-            "children": [
-                "leg_joint_R_3"
-            ],
-            "jointName": "leg_joint_R_2",
-            "name": "leg_joint_R_2",
-            "rotation": [
-                -0.216291,
-                -0.124306,
-                -0.00157521,
-                0.968382
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0,
-                0.266111,
-                0
-            ]
-        },
-        "leg_joint_R_3": {
-            "children": [
-                "leg_joint_R_5"
-            ],
-            "jointName": "leg_joint_R_3",
-            "name": "leg_joint_R_3",
-            "rotation": [
-                -0.847274,
-                0.029564,
-                0.020868,
-                0.529922
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0,
-                0.275825,
-                -1.11759e-008
-            ]
-        },
-        "leg_joint_R_5": {
-            "children": [],
-            "jointName": "leg_joint_R_5",
-            "name": "leg_joint_R_5",
-            "rotation": [
-                -0.0372644,
-                -0.319313,
-                0.946053,
-                -0.040415
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -0.00145848,
-                -0.0661988,
-                0.0278567
-            ]
-        },
-        "node_21": {
-            "children": [
-                "Armature",
-                "Cesium_Man"
-            ],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                0,
-                -1,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Y_UP_Transform"
-        },
-        "torso_joint_3": {
-            "children": [
-                "Skeleton_neck_joint_1",
-                "Skeleton_arm_joint_L__4_",
-                "Skeleton_arm_joint_R"
-            ],
-            "jointName": "torso_joint_3",
-            "name": "torso_joint_3",
-            "rotation": [
-                -0.622604,
-                -1.67835e-005,
-                3.1824e-006,
-                0.782537
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                4.65661e-010,
-                0.250517,
-                3.72529e-009
-            ]
-        }
-    },
-    "samplers": {
-        "sampler_0": {
-            "magFilter": 9729,
-            "minFilter": 9729,
-            "wrapS": 10497,
-            "wrapT": 10497
-        }
-    },
-    "scene": "defaultScene",
-    "scenes": {
-        "defaultScene": {
-            "nodes": [
-                "node_21"
-            ]
-        }
-    },
-    "skins": {
-        "Armature_Cesium_Man-skin": {
-            "bindShapeMatrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "inverseBindMatrices": "IBM_Armature_Cesium_Man-skin",
-            "jointNames": [
-                "Skeleton_torso_joint_1",
-                "Skeleton_torso_joint_2",
-                "torso_joint_3",
-                "Skeleton_neck_joint_1",
-                "Skeleton_neck_joint_2",
-                "Skeleton_arm_joint_L__4_",
-                "Skeleton_arm_joint_R",
-                "Skeleton_arm_joint_L__3_",
-                "Skeleton_arm_joint_R__2_",
-                "Skeleton_arm_joint_L__2_",
-                "Skeleton_arm_joint_R__3_",
-                "leg_joint_L_1",
-                "leg_joint_R_1",
-                "leg_joint_L_2",
-                "leg_joint_R_2",
-                "leg_joint_L_3",
-                "leg_joint_R_3",
-                "leg_joint_L_5",
-                "leg_joint_R_5"
-            ],
-            "name": "Armature"
-        }
-    },
-    "textures": {
-        "texture_Cesium_Man_jpg": {
-            "format": 6408,
-            "internalFormat": 6408,
-            "sampler": "sampler_0",
-            "source": "Cesium_Man_jpg",
-            "target": 3553,
-            "type": 5121
-        }
-    }
-}

文件差異過大導致無法顯示
+ 2714 - 0
examples/models/gltf/CesiumMan/glTF-pbrSpecularGlossiness/CesiumMan.gltf


+ 0 - 0
examples/models/gltf/CesiumMan/glTF/Cesium_Man.jpg → examples/models/gltf/CesiumMan/glTF-pbrSpecularGlossiness/CesiumMan.jpg


二進制
examples/models/gltf/CesiumMan/glTF-pbrSpecularGlossiness/CesiumMan0.bin


文件差異過大導致無法顯示
+ 2719 - 0
examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan.gltf


二進制
examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan.jpg


二進制
examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan0.bin


+ 24 - 0
examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan0.vert

@@ -0,0 +1,24 @@
+precision highp float;
+uniform mat4 u_modelViewMatrix;
+uniform mat4 u_projectionMatrix;
+uniform mat3 u_normalMatrix;
+uniform mat4 u_jointMatrix[19];
+attribute vec3 a_position;
+varying vec3 v_position;
+attribute vec3 a_normal;
+varying vec3 v_normal;
+attribute vec2 a_texcoord0;
+varying vec2 v_texcoord0;
+attribute vec4 a_joint;
+attribute vec4 a_weight;
+void main(void) {
+    mat4 skinMat = a_weight.x * u_jointMatrix[int(a_joint.x)];
+    skinMat += a_weight.y * u_jointMatrix[int(a_joint.y)];
+    skinMat += a_weight.z * u_jointMatrix[int(a_joint.z)];
+    skinMat += a_weight.w * u_jointMatrix[int(a_joint.w)];
+    vec4 pos = u_modelViewMatrix * skinMat * vec4(a_position,1.0);
+    v_position = pos.xyz;
+    gl_Position = u_projectionMatrix * pos;
+    v_normal = u_normalMatrix * mat3(skinMat) * a_normal;
+    v_texcoord0 = a_texcoord0;
+}

+ 33 - 0
examples/models/gltf/CesiumMan/glTF-techniqueWebGL/CesiumMan1.frag

@@ -0,0 +1,33 @@
+precision highp float;
+uniform vec4 u_ambient;
+uniform sampler2D u_diffuse;
+uniform vec4 u_emission;
+uniform vec4 u_specular;
+uniform float u_shininess;
+uniform float u_transparency;
+varying vec3 v_position;
+varying vec3 v_normal;
+varying vec2 v_texcoord0;
+void main(void) {
+    vec3 normal = normalize(v_normal);
+    vec4 diffuse = texture2D(u_diffuse, v_texcoord0);
+    vec3 diffuseLight = vec3(0.0, 0.0, 0.0);
+    vec3 specular = u_specular.rgb;
+    vec3 specularLight = vec3(0.0, 0.0, 0.0);
+    vec3 emission = u_emission.rgb;
+    vec3 ambient = u_ambient.rgb;
+    vec3 viewDir = -normalize(v_position);
+    vec3 ambientLight = vec3(0.0, 0.0, 0.0);
+    ambientLight += vec3(0.2, 0.2, 0.2);
+    vec3 l = vec3(0.0, 0.0, 1.0);
+    diffuseLight += vec3(1.0, 1.0, 1.0) * max(dot(normal, l), 0.); 
+    vec3 reflectDir = reflect(-l, normal);
+    float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess));
+    specularLight += vec3(1.0, 1.0, 1.0) * specularIntensity;
+    vec3 color = vec3(0.0, 0.0, 0.0);
+    color += diffuse.rgb * diffuseLight;
+    color += specular * specularLight;
+    color += emission;
+    color += ambient * ambientLight;
+    gl_FragColor = vec4(color * diffuse.a * u_transparency, diffuse.a * u_transparency);
+}

+ 2766 - 0
examples/models/gltf/CesiumMan/glTF/CesiumMan.gltf

@@ -0,0 +1,2766 @@
+{
+    "asset": {
+        "generator": "COLLADA2GLTF",
+        "version": "2.0"
+    },
+    "scene": 0,
+    "scenes": [
+        {
+            "nodes": [
+                0
+            ]
+        }
+    ],
+    "nodes": [
+        {
+            "children": [
+                21,
+                1
+            ],
+            "matrix": [
+                1.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                -1.0,
+                0.0,
+                0.0,
+                1.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                1.0
+            ]
+        },
+        {
+            "mesh": 0,
+            "skin": 0
+        },
+        {
+            "children": [
+                11,
+                7,
+                3
+            ],
+            "translation": [
+                -3.352759847530251e-8,
+                0.00499989278614521,
+                0.6789997816085815
+            ],
+            "rotation": [
+                -0.02679471485316753,
+                -0.026732556521892549,
+                -0.7065614461898804,
+                -0.706638753414154
+            ],
+            "scale": [
+                0.9999999403953552,
+                0.9999998211860656,
+                0.9999999403953552
+            ]
+        },
+        {
+            "children": [
+                4
+            ],
+            "translation": [
+                -0.06804201006889343,
+                -0.02857022918760777,
+                -0.06294959783554077
+            ],
+            "rotation": [
+                -0.06642699986696243,
+                -0.6115013957023621,
+                0.7850273251533508,
+                0.073387511074543
+            ],
+            "scale": [
+                0.9999999403953552,
+                1.000000238418579,
+                1.0
+            ]
+        },
+        {
+            "children": [
+                5
+            ],
+            "translation": [
+                0.0,
+                0.2661114931106568,
+                0.0
+            ],
+            "rotation": [
+                0.2162912338972092,
+                0.12430649250745774,
+                0.0015752052422612906,
+                -0.9683818817138672
+            ],
+            "scale": [
+                1.0,
+                0.9999998807907105,
+                1.0
+            ]
+        },
+        {
+            "children": [
+                6
+            ],
+            "translation": [
+                0.0,
+                0.2758249044418335,
+                -1.1175900205273593e-8
+            ],
+            "rotation": [
+                0.8472740650177002,
+                -0.029564039781689645,
+                -0.020868001505732538,
+                -0.5299217700958252
+            ],
+            "scale": [
+                0.9999999403953552,
+                0.9999998807907105,
+                1.0
+            ]
+        },
+        {
+            "translation": [
+                -0.001458480954170227,
+                -0.06619883328676224,
+                0.027856720611453058
+            ],
+            "rotation": [
+                -0.03726436197757721,
+                -0.31931325793266299,
+                0.9460535645484924,
+                -0.040414959192276
+            ],
+            "scale": [
+                1.0,
+                1.0000003576278689,
+                1.0000005960464478
+            ]
+        },
+        {
+            "children": [
+                8
+            ],
+            "translation": [
+                0.06803668290376663,
+                -0.028518669307231904,
+                -0.06296277046203613
+            ],
+            "rotation": [
+                0.2475697100162506,
+                -0.5775680541992188,
+                0.7479144334793091,
+                -0.2138892114162445
+            ],
+            "scale": [
+                1.0,
+                1.000000238418579,
+                1.0000001192092896
+            ]
+        },
+        {
+            "children": [
+                9
+            ],
+            "translation": [
+                3.725289854372704e-9,
+                0.2661128044128418,
+                1.4901200273698124e-8
+            ],
+            "rotation": [
+                0.20902779698371888,
+                -0.32988959550857546,
+                -0.05559924244880676,
+                -0.9189064502716065
+            ],
+            "scale": [
+                1.0,
+                1.0000001192092896,
+                1.0000001192092896
+            ]
+        },
+        {
+            "children": [
+                10
+            ],
+            "translation": [
+                -7.450579708745408e-9,
+                0.2758241891860962,
+                5.5879398885849708e-9
+            ],
+            "rotation": [
+                0.8477396965026856,
+                -0.004254077095538378,
+                -0.009491981938481333,
+                -0.5303107500076294
+            ],
+            "scale": [
+                0.9999998807907105,
+                1.0000001192092896,
+                1.0000001192092896
+            ]
+        },
+        {
+            "translation": [
+                -0.002346522873267532,
+                -0.06617332994937897,
+                0.027856789529323576
+            ],
+            "rotation": [
+                0.026573536917567254,
+                -0.3201442956924439,
+                0.9445450901985169,
+                0.06808964908123017
+            ],
+            "scale": [
+                1.0,
+                1.000000238418579,
+                1.000000238418579
+            ]
+        },
+        {
+            "children": [
+                12
+            ],
+            "translation": [
+                -1.024449947095718e-8,
+                1.4901200273698124e-8,
+                0.14541690051555634
+            ],
+            "rotation": [
+                -0.6572523713111877,
+                -0.00017969288455788046,
+                -0.00010428009409224616,
+                -0.7536706328392029
+            ],
+            "scale": [
+                1.0,
+                1.0,
+                1.0000001192092896
+            ]
+        },
+        {
+            "children": [
+                19,
+                16,
+                13
+            ],
+            "translation": [
+                4.6566100975198307e-10,
+                0.250516802072525,
+                3.725289854372704e-9
+            ],
+            "rotation": [
+                0.6226037740707398,
+                0.00001678345142863691,
+                -0.0000031824047255213374,
+                -0.7825372219085693
+            ],
+            "scale": [
+                1.0,
+                1.0,
+                0.9999999403953552
+            ]
+        },
+        {
+            "children": [
+                14
+            ],
+            "translation": [
+                -0.09098775684833528,
+                0.00006259980000322685,
+                -0.00006532669794978574
+            ],
+            "rotation": [
+                0.2964428961277008,
+                0.031510334461927417,
+                -0.6522551774978638,
+                -0.6969160437583923
+            ],
+            "scale": [
+                1.0000001192092896,
+                0.9999999403953552,
+                1.0000001192092896
+            ]
+        },
+        {
+            "children": [
+                15
+            ],
+            "translation": [
+                0.0,
+                0.24200820922851566,
+                -5.96045985901128e-8
+            ],
+            "rotation": [
+                -0.1887933611869812,
+                0.9157071709632874,
+                -0.16780903935432438,
+                -0.3125341236591339
+            ],
+            "scale": [
+                0.9999999403953552,
+                0.9999999403953552,
+                0.9999998807907105
+            ]
+        },
+        {
+            "translation": [
+                0.0,
+                0.18779200315475465,
+                0.0
+            ],
+            "rotation": [
+                -0.058613914996385577,
+                0.2637767195701599,
+                0.05226854607462883,
+                -0.9613814353942872
+            ],
+            "scale": [
+                1.0,
+                1.0000001192092896,
+                0.9999999403953552
+            ]
+        },
+        {
+            "children": [
+                17
+            ],
+            "translation": [
+                0.0910135880112648,
+                0.000014185899999574758,
+                -0.000058054902183357629
+            ],
+            "rotation": [
+                0.6797328591346741,
+                0.689685583114624,
+                -0.2269716113805771,
+                -0.10383165627717972
+            ],
+            "scale": [
+                1.0000001192092896,
+                1.0000001192092896,
+                1.0
+            ]
+        },
+        {
+            "children": [
+                18
+            ],
+            "translation": [
+                1.1641500263781524e-10,
+                0.2420089989900589,
+                0.0
+            ],
+            "rotation": [
+                -0.013960935175418854,
+                -0.12937255203723908,
+                -0.2522056996822357,
+                -0.9588848352432252
+            ],
+            "scale": [
+                1.0,
+                0.9999999403953552,
+                1.0
+            ]
+        },
+        {
+            "translation": [
+                1.4901200273698124e-8,
+                0.18779149651527408,
+                5.96045985901128e-8
+            ],
+            "rotation": [
+                0.006119169760495424,
+                -0.042325541377067569,
+                -0.07877591997385025,
+                -0.9959746599197388
+            ],
+            "scale": [
+                0.9999998807907105,
+                1.000000238418579,
+                0.9999999403953552
+            ]
+        },
+        {
+            "children": [
+                20
+            ],
+            "translation": [
+                -8.847560017954948e-9,
+                5.96045985901128e-8,
+                0.06483662128448487
+            ],
+            "rotation": [
+                -0.6606296300888062,
+                0.00008344435627805069,
+                0.0000710925814928487,
+                -0.750711977481842
+            ]
+        },
+        {
+            "translation": [
+                0.0,
+                0.0520397387444973,
+                0.0
+            ],
+            "rotation": [
+                0.000002552607384131989,
+                0.9996904730796814,
+                -0.02487966977059841,
+                -4.329927776325349e-7
+            ],
+            "scale": [
+                1.0,
+                1.0000001192092896,
+                1.0
+            ]
+        },
+        {
+            "children": [
+                2
+            ]
+        }
+    ],
+    "meshes": [
+        {
+            "primitives": [
+                {
+                    "attributes": {
+                        "JOINTS_0": 1,
+                        "NORMAL": 2,
+                        "POSITION": 3,
+                        "TEXCOORD_0": 4,
+                        "WEIGHTS_0": 5
+                    },
+                    "indices": 0,
+                    "mode": 4,
+                    "material": 0
+                }
+            ],
+            "name": "Cesium_Man"
+        }
+    ],
+    "animations": [
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 2,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 2,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 2,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 6,
+                    "interpolation": "LINEAR",
+                    "output": 7
+                },
+                {
+                    "input": 6,
+                    "interpolation": "LINEAR",
+                    "output": 8
+                },
+                {
+                    "input": 6,
+                    "interpolation": "LINEAR",
+                    "output": 9
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 11,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 11,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 11,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 10,
+                    "interpolation": "LINEAR",
+                    "output": 11
+                },
+                {
+                    "input": 10,
+                    "interpolation": "LINEAR",
+                    "output": 12
+                },
+                {
+                    "input": 10,
+                    "interpolation": "LINEAR",
+                    "output": 13
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 12,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 12,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 12,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 14,
+                    "interpolation": "LINEAR",
+                    "output": 15
+                },
+                {
+                    "input": 14,
+                    "interpolation": "LINEAR",
+                    "output": 16
+                },
+                {
+                    "input": 14,
+                    "interpolation": "LINEAR",
+                    "output": 17
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 19,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 19,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 19,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 18,
+                    "interpolation": "LINEAR",
+                    "output": 19
+                },
+                {
+                    "input": 18,
+                    "interpolation": "LINEAR",
+                    "output": 20
+                },
+                {
+                    "input": 18,
+                    "interpolation": "LINEAR",
+                    "output": 21
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 20,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 20,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 20,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 22,
+                    "interpolation": "LINEAR",
+                    "output": 23
+                },
+                {
+                    "input": 22,
+                    "interpolation": "LINEAR",
+                    "output": 24
+                },
+                {
+                    "input": 22,
+                    "interpolation": "LINEAR",
+                    "output": 25
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 16,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 16,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 16,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 26,
+                    "interpolation": "LINEAR",
+                    "output": 27
+                },
+                {
+                    "input": 26,
+                    "interpolation": "LINEAR",
+                    "output": 28
+                },
+                {
+                    "input": 26,
+                    "interpolation": "LINEAR",
+                    "output": 29
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 17,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 17,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 17,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 30,
+                    "interpolation": "LINEAR",
+                    "output": 31
+                },
+                {
+                    "input": 30,
+                    "interpolation": "LINEAR",
+                    "output": 32
+                },
+                {
+                    "input": 30,
+                    "interpolation": "LINEAR",
+                    "output": 33
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 18,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 18,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 18,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 34,
+                    "interpolation": "LINEAR",
+                    "output": 35
+                },
+                {
+                    "input": 34,
+                    "interpolation": "LINEAR",
+                    "output": 36
+                },
+                {
+                    "input": 34,
+                    "interpolation": "LINEAR",
+                    "output": 37
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 13,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 13,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 13,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 38,
+                    "interpolation": "LINEAR",
+                    "output": 39
+                },
+                {
+                    "input": 38,
+                    "interpolation": "LINEAR",
+                    "output": 40
+                },
+                {
+                    "input": 38,
+                    "interpolation": "LINEAR",
+                    "output": 41
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 14,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 14,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 14,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 42,
+                    "interpolation": "LINEAR",
+                    "output": 43
+                },
+                {
+                    "input": 42,
+                    "interpolation": "LINEAR",
+                    "output": 44
+                },
+                {
+                    "input": 42,
+                    "interpolation": "LINEAR",
+                    "output": 45
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 15,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 15,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 15,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 46,
+                    "interpolation": "LINEAR",
+                    "output": 47
+                },
+                {
+                    "input": 46,
+                    "interpolation": "LINEAR",
+                    "output": 48
+                },
+                {
+                    "input": 46,
+                    "interpolation": "LINEAR",
+                    "output": 49
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 7,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 7,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 7,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 50,
+                    "interpolation": "LINEAR",
+                    "output": 51
+                },
+                {
+                    "input": 50,
+                    "interpolation": "LINEAR",
+                    "output": 52
+                },
+                {
+                    "input": 50,
+                    "interpolation": "LINEAR",
+                    "output": 53
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 8,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 8,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 8,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 54,
+                    "interpolation": "LINEAR",
+                    "output": 55
+                },
+                {
+                    "input": 54,
+                    "interpolation": "LINEAR",
+                    "output": 56
+                },
+                {
+                    "input": 54,
+                    "interpolation": "LINEAR",
+                    "output": 57
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 9,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 9,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 9,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 58,
+                    "interpolation": "LINEAR",
+                    "output": 59
+                },
+                {
+                    "input": 58,
+                    "interpolation": "LINEAR",
+                    "output": 60
+                },
+                {
+                    "input": 58,
+                    "interpolation": "LINEAR",
+                    "output": 61
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 10,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 10,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 10,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 62,
+                    "interpolation": "LINEAR",
+                    "output": 63
+                },
+                {
+                    "input": 62,
+                    "interpolation": "LINEAR",
+                    "output": 64
+                },
+                {
+                    "input": 62,
+                    "interpolation": "LINEAR",
+                    "output": 65
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 3,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 3,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 3,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 66,
+                    "interpolation": "LINEAR",
+                    "output": 67
+                },
+                {
+                    "input": 66,
+                    "interpolation": "LINEAR",
+                    "output": 68
+                },
+                {
+                    "input": 66,
+                    "interpolation": "LINEAR",
+                    "output": 69
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 4,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 4,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 4,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 70,
+                    "interpolation": "LINEAR",
+                    "output": 71
+                },
+                {
+                    "input": 70,
+                    "interpolation": "LINEAR",
+                    "output": 72
+                },
+                {
+                    "input": 70,
+                    "interpolation": "LINEAR",
+                    "output": 73
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 5,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 5,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 5,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 74,
+                    "interpolation": "LINEAR",
+                    "output": 75
+                },
+                {
+                    "input": 74,
+                    "interpolation": "LINEAR",
+                    "output": 76
+                },
+                {
+                    "input": 74,
+                    "interpolation": "LINEAR",
+                    "output": 77
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 6,
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": 1,
+                    "target": {
+                        "node": 6,
+                        "path": "rotation"
+                    }
+                },
+                {
+                    "sampler": 2,
+                    "target": {
+                        "node": 6,
+                        "path": "scale"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 78,
+                    "interpolation": "LINEAR",
+                    "output": 79
+                },
+                {
+                    "input": 78,
+                    "interpolation": "LINEAR",
+                    "output": 80
+                },
+                {
+                    "input": 78,
+                    "interpolation": "LINEAR",
+                    "output": 81
+                }
+            ]
+        }
+    ],
+    "skins": [
+        {
+            "inverseBindMatrices": 82,
+            "skeleton": 2,
+            "joints": [
+                2,
+                11,
+                12,
+                19,
+                20,
+                16,
+                13,
+                17,
+                14,
+                18,
+                15,
+                7,
+                3,
+                8,
+                4,
+                9,
+                5,
+                10,
+                6
+            ],
+            "name": "Armature"
+        }
+    ],
+    "accessors": [
+        {
+            "bufferView": 0,
+            "byteOffset": 0,
+            "componentType": 5123,
+            "count": 14016,
+            "max": [
+                3272
+            ],
+            "min": [
+                0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 1,
+            "byteOffset": 0,
+            "componentType": 5123,
+            "count": 3273,
+            "max": [
+                18,
+                18,
+                18,
+                18
+            ],
+            "min": [
+                0,
+                0,
+                0,
+                0
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 2,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 3273,
+            "max": [
+                1.0,
+                0.9999808073043824,
+                0.9944446086883544
+            ],
+            "min": [
+                -1.0,
+                -0.9999808073043824,
+                -1.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 2,
+            "byteOffset": 39276,
+            "componentType": 5126,
+            "count": 3273,
+            "max": [
+                0.1809539943933487,
+                0.569136917591095,
+                1.5065499544143677
+            ],
+            "min": [
+                -0.13100001215934754,
+                -0.5691370964050293,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 1,
+            "byteOffset": 26184,
+            "componentType": 5126,
+            "count": 3273,
+            "max": [
+                0.990805983543396,
+                0.9880298972129822
+            ],
+            "min": [
+                0.014079390093684197,
+                0.008445978164672852
+            ],
+            "type": "VEC2"
+        },
+        {
+            "bufferView": 3,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 3273,
+            "max": [
+                1.0,
+                0.989919900894165,
+                0.951076328754425,
+                0.8741077184677124
+            ],
+            "min": [
+                0.010080150328576565,
+                0.0,
+                0.0,
+                0.0
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.386510011831433e-8,
+                -0.02000010944902897,
+                0.7110069990158081
+            ],
+            "min": [
+                -7.101329746461715e-9,
+                -0.030000120401382448,
+                0.6399999856948853
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 1568,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.02314124070107937,
+                -0.006974140647798777,
+                -0.7065909504890442,
+                -0.7031946778297424
+            ],
+            "min": [
+                -0.05146743357181549,
+                -0.034400247037410739,
+                -0.7094300389289856,
+                -0.7066542506217957
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 2940,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000001192092896,
+                1.0000003576278689,
+                1.0000001192092896
+            ],
+            "min": [
+                0.9999998211860656,
+                0.9999998807907105,
+                0.9999997615814208
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 588,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 1176,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0009999829344451428,
+                3.725289943190546e-8,
+                0.1454170048236847
+            ],
+            "min": [
+                0.0009999759495258332,
+                -4.470349779239769e-8,
+                0.14541690051555634
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 784,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.7105135917663574,
+                0.008397356607019902,
+                0.000531485362444073,
+                -0.6789330840110779
+            ],
+            "min": [
+                -0.7337970733642578,
+                -0.011321297846734524,
+                -0.02596380189061165,
+                -0.703567624092102
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 1764,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000003576278689,
+                1.0000004768371585,
+                0.999999701976776
+            ],
+            "min": [
+                1.0,
+                1.0000001192092896,
+                0.9999992847442628
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 392,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 2352,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0,
+                0.25051671266555788,
+                0.0
+            ],
+            "min": [
+                0.0,
+                0.25051671266555788,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.6358352899551392,
+                0.06165437772870064,
+                -0.00338419945910573,
+                -0.7642753720283508
+            ],
+            "min": [
+                0.6224426627159119,
+                -0.1380288153886795,
+                -0.06534028053283692,
+                -0.782635509967804
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 3528,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000001192092896,
+                1.0000007152557374,
+                0.999999701976776
+            ],
+            "min": [
+                0.9999998211860656,
+                1.0000003576278689,
+                0.9999992847442628
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 196,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 588,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.1420399676230774e-8,
+                8.940700269022274e-8,
+                0.064838707447052
+            ],
+            "min": [
+                -1.5832499755674694e-8,
+                2.98022992950564e-8,
+                0.06483834981918335
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 3136,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.6325308680534363,
+                0.024829493835568429,
+                0.04200226813554764,
+                -0.7498575448989868
+            ],
+            "min": [
+                -0.6592774987220764,
+                -0.03641732409596443,
+                -0.03000717982649803,
+                -0.7735550999641419
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 4116,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.000000238418579,
+                0.9999998807907105,
+                1.0
+            ],
+            "min": [
+                0.9999998211860656,
+                0.9999995231628418,
+                0.999999701976776
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 784,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 5292,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                7.450579708745408e-9,
+                0.0520397387444973,
+                0.0
+            ],
+            "min": [
+                7.450579708745408e-9,
+                0.0520397387444973,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 3920,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.04680429771542549,
+                0.9995073676109314,
+                -0.018450811505317689,
+                0.002033286727964878
+            ],
+            "min": [
+                -0.09362706542015076,
+                0.995067298412323,
+                -0.09058911353349686,
+                -0.0025854958221316339
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 4704,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.000000238418579,
+                1.0000001192092896,
+                1.0000004768371585
+            ],
+            "min": [
+                0.999999701976776,
+                0.9999998211860656,
+                1.0000001192092896
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 980,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 5880,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.08800014853477478,
+                0.000014096500308369288,
+                -0.00005573029920924455
+            ],
+            "min": [
+                0.08799994736909867,
+                0.000013977300113765525,
+                -0.00005596880146185868
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 2352,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.7787204384803772,
+                0.6963526606559753,
+                -0.2913321256637573,
+                -0.12775331735610966
+            ],
+            "min": [
+                0.41440603137016299,
+                0.2682091891765595,
+                -0.6041955351829529,
+                -0.508333683013916
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 6468,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000005960464478,
+                1.0000001192092896,
+                1.0000004768371585
+            ],
+            "min": [
+                1.0,
+                0.9999995827674866,
+                1.0000001192092896
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 1176,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 8820,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0,
+                0.24200910329818729,
+                0.0
+            ],
+            "min": [
+                0.0,
+                0.24200910329818729,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 6272,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.005276965908706188,
+                -0.10532382130622864,
+                -0.0563904233276844,
+                -0.9007523059844972
+            ],
+            "min": [
+                -0.08755125105381012,
+                -0.15304648876190186,
+                -0.4198120832443238,
+                -0.989989936351776
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 7056,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.9999999403953552,
+                0.9999998807907105,
+                0.9999998807907105
+            ],
+            "min": [
+                0.9999994039535524,
+                0.9999992847442628,
+                0.9999995231628418
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 1372,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 9996,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -2.98022992950564e-8,
+                0.18779130280017854,
+                0.0
+            ],
+            "min": [
+                -2.98022992950564e-8,
+                0.18779130280017854,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 5488,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.04831664264202118,
+                -0.03682959079742432,
+                0.1515040546655655,
+                -0.9875762462615968
+            ],
+            "min": [
+                -0.01958325318992138,
+                -0.043389420956373218,
+                -0.0806758776307106,
+                -0.9989553689956664
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 9408,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.000000238418579,
+                1.0000009536743165,
+                1.0000005960464478
+            ],
+            "min": [
+                0.999999701976776,
+                1.0000005960464478,
+                1.000000238418579
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 1568,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 7644,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.0879998505115509,
+                0.00006264450348680839,
+                -0.00006240609945962206
+            ],
+            "min": [
+                -0.0880001038312912,
+                0.00006249549915082753,
+                -0.00006282330286921933
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 4704,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.6748494505882263,
+                0.3152157068252564,
+                -0.300369679927826,
+                -0.3483264744281769
+            ],
+            "min": [
+                0.3661315143108368,
+                0.09874838590621948,
+                -0.6449660658836365,
+                -0.8451733589172363
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 8232,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000001192092896,
+                1.0000001192092896,
+                1.0
+            ],
+            "min": [
+                0.9999997615814208,
+                0.9999996423721314,
+                0.999999701976776
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 1764,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 11760,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0,
+                0.24200810492038728,
+                0.0
+            ],
+            "min": [
+                0.0,
+                0.24200810492038728,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 8624,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.003387797623872757,
+                0.9475951790809633,
+                -0.0798693522810936,
+                -0.3012830018997193
+            ],
+            "min": [
+                -0.12710869312286378,
+                0.916045308113098,
+                -0.2270231395959854,
+                -0.3146948218345642
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 12348,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000003576278689,
+                0.9999998807907105,
+                1.0000001192092896
+            ],
+            "min": [
+                0.9999999403953552,
+                0.9999995827674866,
+                0.9999997615814208
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 1960,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 11172,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0,
+                0.187792107462883,
+                0.0
+            ],
+            "min": [
+                0.0,
+                0.187792107462883,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 7840,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.15000686049461366,
+                0.26206517219543459,
+                0.06808223575353623,
+                -0.9487173557281494
+            ],
+            "min": [
+                -0.0010455237934365869,
+                0.25685790181159975,
+                -0.10152826458215714,
+                -0.9656248688697816
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 12936,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000001192092896,
+                1.0000009536743165,
+                1.0
+            ],
+            "min": [
+                0.9999996423721314,
+                1.0000003576278689,
+                0.9999995231628418
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 2352,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 13524,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.06761906296014786,
+                -0.02851865068078041,
+                -0.06296355277299881
+            ],
+            "min": [
+                0.0676189586520195,
+                -0.028518760576844217,
+                -0.06296365708112717
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 7056,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.301033079624176,
+                -0.20796972513198853,
+                0.92630273103714,
+                -0.08994945138692856
+            ],
+            "min": [
+                0.1658332496881485,
+                -0.7997090816497803,
+                0.4959096908569336,
+                -0.3118112981319428
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 10584,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000008344650269,
+                1.0,
+                0.9999999403953552
+            ],
+            "min": [
+                1.0000003576278689,
+                0.9999995231628418,
+                0.9999996423721314
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 2156,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 15288,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -1.4901200273698124e-8,
+                0.26611289381980898,
+                0.0
+            ],
+            "min": [
+                -1.4901200273698124e-8,
+                0.26611289381980898,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 10192,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.8112500905990601,
+                -0.1822210103273392,
+                0.032220568507909778,
+                -0.4743982553482056
+            ],
+            "min": [
+                -0.03036016784608364,
+                -0.3419179916381836,
+                -0.289162427186966,
+                -0.9452491998672484
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 14700,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.9999994039535524,
+                1.000000238418579,
+                1.000000238418579
+            ],
+            "min": [
+                0.9999989867210388,
+                0.9999996423721314,
+                0.9999994039535524
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 2548,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 16464,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0,
+                0.2758241891860962,
+                0.0
+            ],
+            "min": [
+                0.0,
+                0.2758241891860962,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 9408,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.9907974004745485,
+                -0.0014961245469748974,
+                0.02489613927900791,
+                -0.13506969809532166
+            ],
+            "min": [
+                0.8542653918266296,
+                -0.05430477112531662,
+                -0.00011262076441198587,
+                -0.5192484259605408
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 15876,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000005960464478,
+                1.0000004768371585,
+                1.0000004768371585
+            ],
+            "min": [
+                1.000000238418579,
+                1.0,
+                1.0000001192092896
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 2744,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 14112,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.0023464488331228496,
+                -0.06617332249879837,
+                0.02785664983093739
+            ],
+            "min": [
+                -0.002346470952033997,
+                -0.06617333739995957,
+                0.02785659022629261
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 10976,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.02062430046498776,
+                -0.23465925455093385,
+                0.9716955423355104,
+                0.0638260766863823
+            ],
+            "min": [
+                0.003326366888359189,
+                -0.5406339168548584,
+                0.8410344123840332,
+                0.016216862946748738
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 18816,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000001192092896,
+                1.0000009536743165,
+                1.0000005960464478
+            ],
+            "min": [
+                0.9999998211860656,
+                1.000000238418579,
+                0.9999998211860656
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 3136,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 17052,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.06845708936452866,
+                -0.028570100665092469,
+                -0.062949538230896
+            ],
+            "min": [
+                -0.06845712661743164,
+                -0.02857035957276821,
+                -0.06294971704483032
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 11760,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.018168065696954728,
+                -0.18232035636901856,
+                0.9812799096107484,
+                0.117560513317585
+            ],
+            "min": [
+                -0.07457219809293747,
+                -0.902503490447998,
+                0.413051187992096,
+                0.03284534439444542
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 18228,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.000000238418579,
+                1.000000238418579,
+                1.0000003576278689
+            ],
+            "min": [
+                0.9999998211860656,
+                0.9999995827674866,
+                0.9999996423721314
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 3332,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 19404,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -1.1175900205273593e-8,
+                0.2661114931106568,
+                0.0
+            ],
+            "min": [
+                -1.1175900205273593e-8,
+                0.2661114931106568,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 12544,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.8507033586502075,
+                0.14946134388446809,
+                0.04984176158905029,
+                -0.5191445350646973
+            ],
+            "min": [
+                -0.06756377220153809,
+                0.06949601322412491,
+                -0.026268262416124345,
+                -0.9922308921813964
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 17640,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                1.0000005960464478,
+                1.0000003576278689,
+                1.0000005960464478
+            ],
+            "min": [
+                1.0000001192092896,
+                0.9999995231628418,
+                0.9999998211860656
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 2940,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 19992,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.0,
+                0.2758249044418335,
+                0.0
+            ],
+            "min": [
+                0.0,
+                0.2758249044418335,
+                0.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 13328,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.99649316072464,
+                -0.01710231974720955,
+                -0.022676724940538408,
+                -0.07459255307912827
+            ],
+            "min": [
+                0.8792483806610107,
+                -0.04609288275241852,
+                -0.06820148974657059,
+                -0.4750169813632965
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 21756,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.9999995827674866,
+                1.0,
+                1.0000003576278689
+            ],
+            "min": [
+                0.999999225139618,
+                0.9999995231628418,
+                1.0
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 4,
+            "byteOffset": 3528,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                2.0
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 21168,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.0014585109893232585,
+                -0.06619886308908463,
+                0.02785670943558216
+            ],
+            "min": [
+                -0.0014585329918190837,
+                -0.06619889289140701,
+                0.02785668894648552
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 6,
+            "byteOffset": 14112,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                -0.00960757862776518,
+                -0.2635453343391419,
+                0.9620476961135864,
+                0.06995902955532074
+            ],
+            "min": [
+                -0.04577624797821045,
+                -0.4899238646030426,
+                0.8689604997634888,
+                -0.06424159556627274
+            ],
+            "type": "VEC4"
+        },
+        {
+            "bufferView": 5,
+            "byteOffset": 20580,
+            "componentType": 5126,
+            "count": 49,
+            "max": [
+                0.9999996423721314,
+                1.0000003576278689,
+                0.9999998807907105
+            ],
+            "min": [
+                0.9999991655349731,
+                0.9999997615814208,
+                0.9999994039535524
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 7,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 19,
+            "max": [
+                0.780990481376648,
+                0.9918341040611268,
+                0.9992613196372986,
+                0.0,
+                1.0,
+                0.8904604315757752,
+                0.6854007244110107,
+                0.0,
+                0.79917311668396,
+                0.9999359250068665,
+                0.997134804725647,
+                0.0,
+                0.20702040195465089,
+                0.5989438891410828,
+                1.001250982284546,
+                1.0
+            ],
+            "min": [
+                -0.9985063076019288,
+                -0.9971349835395812,
+                -0.9999359250068665,
+                0.0,
+                -1.0,
+                -0.8904621005058289,
+                -0.4517692029476166,
+                0.0,
+                -0.18484599888324736,
+                -0.9853218197822572,
+                -0.997802197933197,
+                0.0,
+                -0.811928927898407,
+                -1.18982994556427,
+                -1.058609962463379,
+                1.0
+            ],
+            "type": "MAT4"
+        }
+    ],
+    "materials": [
+        {
+            "pbrMetallicRoughness": {
+                "baseColorTexture": {
+                    "index": 0
+                }
+            },
+            "emissiveFactor": [
+                0.0,
+                0.0,
+                0.0
+            ]
+        }
+    ],
+    "textures": [
+        {
+            "sampler": 0,
+            "source": 0
+        }
+    ],
+    "images": [
+        {
+            "uri": "CesiumMan.jpg"
+        }
+    ],
+    "samplers": [
+        {
+            "magFilter": 9729,
+            "minFilter": 9986,
+            "wrapS": 10497,
+            "wrapT": 10497
+        }
+    ],
+    "bufferViews": [
+        {
+            "buffer": 0,
+            "byteOffset": 225468,
+            "byteLength": 28032,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 169376,
+            "byteLength": 52368,
+            "byteStride": 8,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 90824,
+            "byteLength": 78552,
+            "byteStride": 12,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 16112,
+            "byteLength": 52368,
+            "byteStride": 16,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 221744,
+            "byteLength": 3724
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 68480,
+            "byteLength": 22344
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 1216,
+            "byteLength": 14896
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 0,
+            "byteLength": 1216
+        }
+    ],
+    "buffers": [
+        {
+            "byteLength": 253500,
+            "uri": "CesiumMan0.bin"
+        }
+    ]
+}

二進制
examples/models/gltf/CesiumMan/glTF/CesiumMan.jpg


二進制
examples/models/gltf/CesiumMan/glTF/CesiumMan0.bin


二進制
examples/models/gltf/CesiumMan/glTF/Cesium_Man.bin


+ 0 - 2207
examples/models/gltf/CesiumMan/glTF/Cesium_Man.gltf

@@ -1,2207 +0,0 @@
-{
-    "accessors": {
-        "IBM_Armature_Cesium_Man-skin": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 0,
-            "componentType": 5126,
-            "count": 19,
-            "type": "MAT4"
-        },
-        "accessor_112": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 448512,
-            "byteStride": 16,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                1,
-                0.9899199604988098,
-                0.9510759711265564,
-                0.8741080164909363
-            ],
-            "min": [
-                0.01008019968867302,
-                0,
-                0,
-                0
-            ],
-            "type": "VEC4"
-        },
-        "accessor_115": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 672768,
-            "byteStride": 16,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                18,
-                18,
-                18,
-                18
-            ],
-            "min": [
-                0,
-                0,
-                0,
-                0
-            ],
-            "type": "VEC4"
-        },
-        "accessor_21": {
-            "bufferView": "bufferView_119",
-            "byteOffset": 0,
-            "byteStride": 0,
-            "componentType": 5123,
-            "count": 14016,
-            "type": "SCALAR"
-        },
-        "accessor_23": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 0,
-            "byteStride": 12,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                0.1809539943933487,
-                0.5691369771957397,
-                1.5065499544143677
-            ],
-            "min": [
-                -0.13100001215934753,
-                -0.5691369771957397,
-                0
-            ],
-            "type": "VEC3"
-        },
-        "accessor_25": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 168192,
-            "byteStride": 12,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                1,
-                0.9999809861183167,
-                0.9944450259208679
-            ],
-            "min": [
-                -1,
-                -0.9999809861183167,
-                -1
-            ],
-            "type": "VEC3"
-        },
-        "accessor_27": {
-            "bufferView": "bufferView_120",
-            "byteOffset": 336384,
-            "byteStride": 8,
-            "componentType": 5126,
-            "count": 14016,
-            "max": [
-                0.990805983543396,
-                0.9880298972129822
-            ],
-            "min": [
-                0.014079400338232517,
-                0.008445978164672852
-            ],
-            "type": "VEC2"
-        },
-        "animAccessor_0": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 1216,
-            "componentType": 5126,
-            "count": 49,
-            "type": "SCALAR"
-        },
-        "animAccessor_1": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 1412,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_10": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 7292,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_11": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 7880,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_12": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 8468,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_13": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 9252,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_14": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 9840,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_15": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 10428,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_16": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 11212,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_17": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 11800,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_18": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 12388,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_19": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 13172,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_2": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 2000,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_20": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 13760,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_21": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 14348,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_22": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 15132,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_23": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 15720,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_24": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 16308,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_25": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 17092,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_26": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 17680,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_27": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 18268,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_28": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 19052,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_29": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 19640,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_3": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 2588,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_30": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 20228,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_31": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 21012,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_32": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 21600,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_33": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 22188,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_34": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 22972,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_35": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 23560,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_36": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 24148,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_37": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 24932,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_38": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 25520,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_39": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 26108,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_4": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 3372,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_40": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 26892,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_41": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 27480,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_42": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 28068,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_43": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 28852,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_44": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 29440,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_45": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 30028,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_46": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 30812,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_47": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 31400,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_48": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 31988,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_49": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 32772,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_5": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 3960,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_50": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 33360,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_51": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 33948,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_52": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 34732,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_53": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 35320,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_54": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 35908,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_55": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 36692,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_56": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 37280,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_57": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 37868,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_6": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 4548,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        },
-        "animAccessor_7": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 5332,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_8": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 5920,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC3"
-        },
-        "animAccessor_9": {
-            "bufferView": "bufferView_118",
-            "byteOffset": 6508,
-            "componentType": 5126,
-            "count": 49,
-            "type": "VEC4"
-        }
-    },
-    "animations": {
-        "animation_0": {
-            "channels": [
-                {
-                    "sampler": "animation_0_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_0_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_0_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_3",
-                "scale": "animAccessor_1",
-                "translation": "animAccessor_2"
-            },
-            "samplers": {
-                "animation_0_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_0_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_0_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_1": {
-            "channels": [
-                {
-                    "sampler": "animation_1_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_1_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_1_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_torso_joint_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_6",
-                "scale": "animAccessor_4",
-                "translation": "animAccessor_5"
-            },
-            "samplers": {
-                "animation_1_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_1_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_1_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_10": {
-            "channels": [
-                {
-                    "sampler": "animation_10_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__3_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_10_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__3_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_10_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__3_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_9",
-                "scale": "animAccessor_7",
-                "translation": "animAccessor_8"
-            },
-            "samplers": {
-                "animation_10_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_10_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_10_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_11": {
-            "channels": [
-                {
-                    "sampler": "animation_11_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_11_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_11_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_12",
-                "scale": "animAccessor_10",
-                "translation": "animAccessor_11"
-            },
-            "samplers": {
-                "animation_11_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_11_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_11_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_12": {
-            "channels": [
-                {
-                    "sampler": "animation_12_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_12_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_12_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_15",
-                "scale": "animAccessor_13",
-                "translation": "animAccessor_14"
-            },
-            "samplers": {
-                "animation_12_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_12_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_12_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_13": {
-            "channels": [
-                {
-                    "sampler": "animation_13_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_3",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_13_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_3",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_13_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_3",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_18",
-                "scale": "animAccessor_16",
-                "translation": "animAccessor_17"
-            },
-            "samplers": {
-                "animation_13_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_13_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_13_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_14": {
-            "channels": [
-                {
-                    "sampler": "animation_14_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_L_5",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_14_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_5",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_14_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_L_5",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_21",
-                "scale": "animAccessor_19",
-                "translation": "animAccessor_20"
-            },
-            "samplers": {
-                "animation_14_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_14_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_14_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_15": {
-            "channels": [
-                {
-                    "sampler": "animation_15_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_15_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_15_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_24",
-                "scale": "animAccessor_22",
-                "translation": "animAccessor_23"
-            },
-            "samplers": {
-                "animation_15_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_15_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_15_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_16": {
-            "channels": [
-                {
-                    "sampler": "animation_16_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_16_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_16_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_27",
-                "scale": "animAccessor_25",
-                "translation": "animAccessor_26"
-            },
-            "samplers": {
-                "animation_16_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_16_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_16_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_17": {
-            "channels": [
-                {
-                    "sampler": "animation_17_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_3",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_17_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_3",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_17_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_3",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_30",
-                "scale": "animAccessor_28",
-                "translation": "animAccessor_29"
-            },
-            "samplers": {
-                "animation_17_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_17_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_17_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_18": {
-            "channels": [
-                {
-                    "sampler": "animation_18_scale_sampler",
-                    "target": {
-                        "id": "leg_joint_R_5",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_18_translation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_5",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_18_rotation_sampler",
-                    "target": {
-                        "id": "leg_joint_R_5",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_33",
-                "scale": "animAccessor_31",
-                "translation": "animAccessor_32"
-            },
-            "samplers": {
-                "animation_18_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_18_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_18_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_2": {
-            "channels": [
-                {
-                    "sampler": "animation_2_scale_sampler",
-                    "target": {
-                        "id": "torso_joint_3",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_2_translation_sampler",
-                    "target": {
-                        "id": "torso_joint_3",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_2_rotation_sampler",
-                    "target": {
-                        "id": "torso_joint_3",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_36",
-                "scale": "animAccessor_34",
-                "translation": "animAccessor_35"
-            },
-            "samplers": {
-                "animation_2_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_2_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_2_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_3": {
-            "channels": [
-                {
-                    "sampler": "animation_3_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_1",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_3_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_1",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_3_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_1",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_39",
-                "scale": "animAccessor_37",
-                "translation": "animAccessor_38"
-            },
-            "samplers": {
-                "animation_3_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_3_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_3_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_4": {
-            "channels": [
-                {
-                    "sampler": "animation_4_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_2",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_4_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_2",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_4_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_neck_joint_2",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_42",
-                "scale": "animAccessor_40",
-                "translation": "animAccessor_41"
-            },
-            "samplers": {
-                "animation_4_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_4_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_4_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_5": {
-            "channels": [
-                {
-                    "sampler": "animation_5_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__4_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_5_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__4_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_5_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__4_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_45",
-                "scale": "animAccessor_43",
-                "translation": "animAccessor_44"
-            },
-            "samplers": {
-                "animation_5_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_5_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_5_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_6": {
-            "channels": [
-                {
-                    "sampler": "animation_6_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__3_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_6_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__3_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_6_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__3_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_48",
-                "scale": "animAccessor_46",
-                "translation": "animAccessor_47"
-            },
-            "samplers": {
-                "animation_6_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_6_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_6_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_7": {
-            "channels": [
-                {
-                    "sampler": "animation_7_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__2_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_7_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__2_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_7_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_L__2_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_51",
-                "scale": "animAccessor_49",
-                "translation": "animAccessor_50"
-            },
-            "samplers": {
-                "animation_7_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_7_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_7_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_8": {
-            "channels": [
-                {
-                    "sampler": "animation_8_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_8_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_8_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_54",
-                "scale": "animAccessor_52",
-                "translation": "animAccessor_53"
-            },
-            "samplers": {
-                "animation_8_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_8_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_8_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        },
-        "animation_9": {
-            "channels": [
-                {
-                    "sampler": "animation_9_scale_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__2_",
-                        "path": "scale"
-                    }
-                },
-                {
-                    "sampler": "animation_9_translation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__2_",
-                        "path": "translation"
-                    }
-                },
-                {
-                    "sampler": "animation_9_rotation_sampler",
-                    "target": {
-                        "id": "Skeleton_arm_joint_R__2_",
-                        "path": "rotation"
-                    }
-                }
-            ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_57",
-                "scale": "animAccessor_55",
-                "translation": "animAccessor_56"
-            },
-            "samplers": {
-                "animation_9_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                },
-                "animation_9_scale_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "scale"
-                },
-                "animation_9_translation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "translation"
-                }
-            }
-        }
-    },
-    "asset": {
-        "generator": "collada2gltf@",
-        "premultipliedAlpha": true,
-        "profile": {
-            "api": "WebGL",
-            "version": "1.0.2"
-        },
-        "version": "1.0"
-    },
-    "bufferViews": {
-        "bufferView_118": {
-            "buffer": "Cesium_Man",
-            "byteLength": 38652,
-            "byteOffset": 0
-        },
-        "bufferView_119": {
-            "buffer": "Cesium_Man",
-            "byteLength": 28032,
-            "byteOffset": 38652,
-            "target": 34963
-        },
-        "bufferView_120": {
-            "buffer": "Cesium_Man",
-            "byteLength": 897024,
-            "byteOffset": 66684,
-            "target": 34962
-        }
-    },
-    "buffers": {
-        "Cesium_Man": {
-            "byteLength": 963708,
-            "type": "arraybuffer",
-            "uri": "Cesium_Man.bin"
-        }
-    },
-    "images": {
-        "Cesium_Man_jpg": {
-            "name": "Cesium_Man_jpg",
-            "uri": "Cesium_Man.jpg"
-        }
-    },
-    "materials": {
-        "Cesium_Man-effect": {
-            "name": "Cesium_Man",
-            "technique": "technique0",
-            "values": {
-                "ambient": [
-                    0,
-                    0,
-                    0,
-                    1
-                ],
-                "diffuse": "texture_Cesium_Man_jpg",
-                "emission": [
-                    0,
-                    0,
-                    0,
-                    1
-                ],
-                "shininess": 256,
-                "specular": [
-                    0.10000000149011612,
-                    0.10000000149011612,
-                    0.10000000149011612,
-                    1
-                ]
-            }
-        }
-    },
-    "meshes": {
-        "Cesium_Man-mesh": {
-            "name": "Cesium_Man",
-            "primitives": [
-                {
-                    "attributes": {
-                        "JOINT": "accessor_115",
-                        "NORMAL": "accessor_25",
-                        "POSITION": "accessor_23",
-                        "TEXCOORD_0": "accessor_27",
-                        "WEIGHT": "accessor_112"
-                    },
-                    "indices": "accessor_21",
-                    "material": "Cesium_Man-effect",
-                    "mode": 4
-                }
-            ]
-        }
-    },
-    "nodes": {
-        "Armature": {
-            "children": [
-                "Skeleton_torso_joint_1"
-            ],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Armature"
-        },
-        "Cesium_Man": {
-            "children": [],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "meshes": [
-                "Cesium_Man-mesh"
-            ],
-            "name": "Cesium_Man",
-            "skeletons": [
-                "Skeleton_torso_joint_1"
-            ],
-            "skin": "Armature_Cesium_Man-skin"
-        },
-        "Skeleton_arm_joint_L__2_": {
-            "children": [],
-            "jointName": "Skeleton_arm_joint_L__2_",
-            "name": "Skeleton_arm_joint_L__2_",
-            "rotation": [
-                -0.006119159981608391,
-                0.04232554882764816,
-                0.07877608388662338,
-                0.995974600315094
-            ],
-            "scale": [
-                1.000000238418579,
-                1.000000238418579,
-                0.9999998211860657
-            ],
-            "translation": [
-                0.000000014901200273698123,
-                0.18779200315475464,
-                0.0000000596045985901128
-            ]
-        },
-        "Skeleton_arm_joint_L__3_": {
-            "children": [
-                "Skeleton_arm_joint_L__2_"
-            ],
-            "jointName": "Skeleton_arm_joint_L__3_",
-            "name": "Skeleton_arm_joint_L__3_",
-            "rotation": [
-                0.013960931450128555,
-                0.12937265634536743,
-                0.2522056996822357,
-                0.9588848352432251
-            ],
-            "scale": [
-                1.0000001192092896,
-                1.0000001192092896,
-                1.0000003576278687
-            ],
-            "translation": [
-                0.00000000011641500263781523,
-                0.2420089989900589,
-                0
-            ]
-        },
-        "Skeleton_arm_joint_L__4_": {
-            "children": [
-                "Skeleton_arm_joint_L__3_"
-            ],
-            "jointName": "Skeleton_arm_joint_L__4_",
-            "name": "Skeleton_arm_joint_L__4_",
-            "rotation": [
-                0.6797326803207397,
-                0.6896856427192688,
-                -0.22697189450263977,
-                -0.10383138060569763
-            ],
-            "scale": [
-                1.0000005960464478,
-                1,
-                1.0000001192092896
-            ],
-            "translation": [
-                0.091013602912426,
-                0.000014185899999574758,
-                -0.000058054902183357626
-            ]
-        },
-        "Skeleton_arm_joint_R": {
-            "children": [
-                "Skeleton_arm_joint_R__2_"
-            ],
-            "jointName": "Skeleton_arm_joint_R",
-            "name": "Skeleton_arm_joint_R",
-            "rotation": [
-                -0.2964428663253784,
-                -0.03151031211018562,
-                0.652255117893219,
-                0.6969161033630371
-            ],
-            "scale": [
-                1,
-                0.9999998807907104,
-                0.9999996423721313
-            ],
-            "translation": [
-                -0.09098780155181885,
-                0.00006259980000322685,
-                -0.00006532669794978574
-            ]
-        },
-        "Skeleton_arm_joint_R__2_": {
-            "children": [
-                "Skeleton_arm_joint_R__3_"
-            ],
-            "jointName": "Skeleton_arm_joint_R__2_",
-            "name": "Skeleton_arm_joint_R__2_",
-            "rotation": [
-                -0.18879348039627075,
-                0.9157071113586426,
-                -0.1678091138601303,
-                -0.3125341236591339
-            ],
-            "scale": [
-                1.0000001192092896,
-                0.9999996423721313,
-                1.0000001192092896
-            ],
-            "translation": [
-                0,
-                0.2420080006122589,
-                -0.0000000596045985901128
-            ]
-        },
-        "Skeleton_arm_joint_R__3_": {
-            "children": [],
-            "jointName": "Skeleton_arm_joint_R__3_",
-            "name": "Skeleton_arm_joint_R__3_",
-            "rotation": [
-                0.05861387029290199,
-                -0.263776570558548,
-                -0.05226854607462883,
-                0.9613814949989319
-            ],
-            "scale": [
-                1.0000003576278687,
-                1.0000001192092896,
-                1.0000001192092896
-            ],
-            "translation": [
-                0,
-                0.18779200315475464,
-                0
-            ]
-        },
-        "Skeleton_neck_joint_1": {
-            "children": [
-                "Skeleton_neck_joint_2"
-            ],
-            "jointName": "Skeleton_neck_joint_1",
-            "name": "Skeleton_neck_joint_1",
-            "rotation": [
-                0.6606296300888062,
-                -0.00008344435627805069,
-                -0.0000710925814928487,
-                0.750711977481842
-            ],
-            "scale": [
-                1,
-                0.9999998211860657,
-                0.9999998807907104
-            ],
-            "translation": [
-                -0.000000008847560017954947,
-                0.0000000596045985901128,
-                0.06483659893274307
-            ]
-        },
-        "Skeleton_neck_joint_2": {
-            "children": [],
-            "jointName": "Skeleton_neck_joint_2",
-            "name": "Skeleton_neck_joint_2",
-            "rotation": [
-                0.000002552607611505664,
-                0.9996904730796814,
-                -0.02487965300679207,
-                -0.00000043299277763253485
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                0,
-                0.052039701491594315,
-                0
-            ]
-        },
-        "Skeleton_torso_joint_1": {
-            "children": [
-                "Skeleton_torso_joint_2",
-                "leg_joint_L_1",
-                "leg_joint_R_1"
-            ],
-            "jointName": "Skeleton_torso_joint_1",
-            "name": "Skeleton_torso_joint_1",
-            "rotation": [
-                0.026794692501425743,
-                0.026732537895441055,
-                0.7065614461898804,
-                0.706638753414154
-            ],
-            "scale": [
-                1,
-                1.0000001192092896,
-                1.0000001192092896
-            ],
-            "translation": [
-                -0.00000003352759847530251,
-                0.004999889992177486,
-                0.6790000200271606
-            ]
-        },
-        "Skeleton_torso_joint_2": {
-            "children": [
-                "torso_joint_3"
-            ],
-            "jointName": "Skeleton_torso_joint_2",
-            "name": "Skeleton_torso_joint_2",
-            "rotation": [
-                0.6572521924972534,
-                0.00017969278269447386,
-                0.00010428006498841569,
-                0.7536706924438477
-            ],
-            "scale": [
-                1.0000001192092896,
-                0.9999995231628418,
-                1.0000005960464478
-            ],
-            "translation": [
-                -0.00000001024449947095718,
-                0.000000014901200273698123,
-                0.1454170048236847
-            ]
-        },
-        "leg_joint_L_1": {
-            "children": [
-                "leg_joint_L_2"
-            ],
-            "jointName": "leg_joint_L_1",
-            "name": "leg_joint_L_1",
-            "rotation": [
-                0.247569739818573,
-                -0.5775678753852844,
-                0.7479144334793091,
-                -0.21388916671276093
-            ],
-            "scale": [
-                0.9999995827674866,
-                1.0000003576278687,
-                1.000000238418579
-            ],
-            "translation": [
-                0.06803669780492783,
-                -0.02851870097219944,
-                -0.06296280026435852
-            ]
-        },
-        "leg_joint_L_2": {
-            "children": [
-                "leg_joint_L_3"
-            ],
-            "jointName": "leg_joint_L_2",
-            "name": "leg_joint_L_2",
-            "rotation": [
-                -0.20902787148952484,
-                0.32988977432250977,
-                0.05559920147061348,
-                0.9189063310623169
-            ],
-            "scale": [
-                0.9999999403953552,
-                0.9999998211860657,
-                0.9999997615814209
-            ],
-            "translation": [
-                0.0000000037252898543727042,
-                0.2661130130290985,
-                0.000000014901200273698123
-            ]
-        },
-        "leg_joint_L_3": {
-            "children": [
-                "leg_joint_L_5"
-            ],
-            "jointName": "leg_joint_L_3",
-            "name": "leg_joint_L_3",
-            "rotation": [
-                -0.847739577293396,
-                0.004254061728715897,
-                0.009491981007158756,
-                0.5303107500076294
-            ],
-            "scale": [
-                1.0000003576278687,
-                1.0000001192092896,
-                1.0000004768371582
-            ],
-            "translation": [
-                -0.0000000074505797087454084,
-                0.27582401037216187,
-                0.00000000558793988858497
-            ]
-        },
-        "leg_joint_L_5": {
-            "children": [],
-            "jointName": "leg_joint_L_5",
-            "name": "leg_joint_L_5",
-            "rotation": [
-                0.0265735425055027,
-                -0.32014429569244385,
-                0.9445450305938721,
-                0.06808965653181076
-            ],
-            "scale": [
-                0.9999997019767761,
-                1.000000238418579,
-                0.9999999403953552
-            ],
-            "translation": [
-                -0.0023465200792998075,
-                -0.06617330014705658,
-                0.027856800705194473
-            ]
-        },
-        "leg_joint_R_1": {
-            "children": [
-                "leg_joint_R_2"
-            ],
-            "jointName": "leg_joint_R_1",
-            "name": "leg_joint_R_1",
-            "rotation": [
-                -0.06642694771289825,
-                -0.6115013360977173,
-                0.785027265548706,
-                0.07338760793209076
-            ],
-            "scale": [
-                0.9999995827674866,
-                0.9999997615814209,
-                1.000000238418579
-            ],
-            "translation": [
-                -0.06804200261831284,
-                -0.028570201247930527,
-                -0.06294959783554077
-            ]
-        },
-        "leg_joint_R_2": {
-            "children": [
-                "leg_joint_R_3"
-            ],
-            "jointName": "leg_joint_R_2",
-            "name": "leg_joint_R_2",
-            "rotation": [
-                -0.21629124879837036,
-                -0.1243065595626831,
-                -0.001575213740579784,
-                0.9683818817138672
-            ],
-            "scale": [
-                1.000000238418579,
-                0.9999996423721313,
-                1.0000001192092896
-            ],
-            "translation": [
-                0,
-                0.26611199975013733,
-                0
-            ]
-        },
-        "leg_joint_R_3": {
-            "children": [
-                "leg_joint_R_5"
-            ],
-            "jointName": "leg_joint_R_3",
-            "name": "leg_joint_R_3",
-            "rotation": [
-                -0.847274124622345,
-                0.02956405282020569,
-                0.020867986604571342,
-                0.5299217104911804
-            ],
-            "scale": [
-                1,
-                1,
-                1.0000001192092896
-            ],
-            "translation": [
-                0,
-                0.27582499384880066,
-                -0.000000011175900205273592
-            ]
-        },
-        "leg_joint_R_5": {
-            "children": [],
-            "jointName": "leg_joint_R_5",
-            "name": "leg_joint_R_5",
-            "rotation": [
-                -0.03726435825228691,
-                -0.3193131983280182,
-                0.9460533857345581,
-                -0.04041508957743645
-            ],
-            "scale": [
-                1,
-                1.0000007152557373,
-                1.000000238418579
-            ],
-            "translation": [
-                -0.0014584800228476524,
-                -0.06619880348443985,
-                0.027856700122356415
-            ]
-        },
-        "node_21": {
-            "children": [
-                "Armature",
-                "Cesium_Man"
-            ],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                0,
-                -1,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Y_UP_Transform"
-        },
-        "torso_joint_3": {
-            "children": [
-                "Skeleton_neck_joint_1",
-                "Skeleton_arm_joint_L__4_",
-                "Skeleton_arm_joint_R"
-            ],
-            "jointName": "torso_joint_3",
-            "name": "torso_joint_3",
-            "rotation": [
-                -0.6226037740707397,
-                -0.000016783453247626312,
-                0.0000031824033612792846,
-                0.7825372219085693
-            ],
-            "scale": [
-                1,
-                0.9999997019767761,
-                0.9999997019767761
-            ],
-            "translation": [
-                0.0000000004656610097519831,
-                0.25051701068878174,
-                0.0000000037252898543727042
-            ]
-        }
-    },
-    "programs": {
-        "program_0": {
-            "attributes": [
-                "a_joint",
-                "a_normal",
-                "a_position",
-                "a_texcoord0",
-                "a_weight"
-            ],
-            "fragmentShader": "Cesium_Man0FS",
-            "vertexShader": "Cesium_Man0VS"
-        }
-    },
-    "samplers": {
-        "sampler_0": {
-            "magFilter": 9729,
-            "minFilter": 9729,
-            "wrapS": 10497,
-            "wrapT": 10497
-        }
-    },
-    "scene": "defaultScene",
-    "scenes": {
-        "defaultScene": {
-            "nodes": [
-                "node_21"
-            ]
-        }
-    },
-    "shaders": {
-        "Cesium_Man0FS": {
-            "type": 35632,
-            "uri": "Cesium_Man0FS.glsl"
-        },
-        "Cesium_Man0VS": {
-            "type": 35633,
-            "uri": "Cesium_Man0VS.glsl"
-        }
-    },
-    "skins": {
-        "Armature_Cesium_Man-skin": {
-            "bindShapeMatrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "inverseBindMatrices": "IBM_Armature_Cesium_Man-skin",
-            "jointNames": [
-                "Skeleton_torso_joint_1",
-                "Skeleton_torso_joint_2",
-                "torso_joint_3",
-                "Skeleton_neck_joint_1",
-                "Skeleton_neck_joint_2",
-                "Skeleton_arm_joint_L__4_",
-                "Skeleton_arm_joint_R",
-                "Skeleton_arm_joint_L__3_",
-                "Skeleton_arm_joint_R__2_",
-                "Skeleton_arm_joint_L__2_",
-                "Skeleton_arm_joint_R__3_",
-                "leg_joint_L_1",
-                "leg_joint_R_1",
-                "leg_joint_L_2",
-                "leg_joint_R_2",
-                "leg_joint_L_3",
-                "leg_joint_R_3",
-                "leg_joint_L_5",
-                "leg_joint_R_5"
-            ],
-            "name": "Armature"
-        }
-    },
-    "techniques": {
-        "technique0": {
-            "attributes": {
-                "a_joint": "joint",
-                "a_normal": "normal",
-                "a_position": "position",
-                "a_texcoord0": "texcoord0",
-                "a_weight": "weight"
-            },
-            "parameters": {
-                "ambient": {
-                    "type": 35666
-                },
-                "diffuse": {
-                    "type": 35678
-                },
-                "emission": {
-                    "type": 35666
-                },
-                "joint": {
-                    "semantic": "JOINT",
-                    "type": 35666
-                },
-                "jointMat": {
-                    "count": 19,
-                    "semantic": "JOINTMATRIX",
-                    "type": 35676
-                },
-                "modelViewMatrix": {
-                    "semantic": "MODELVIEW",
-                    "type": 35676
-                },
-                "normal": {
-                    "semantic": "NORMAL",
-                    "type": 35665
-                },
-                "normalMatrix": {
-                    "semantic": "MODELVIEWINVERSETRANSPOSE",
-                    "type": 35675
-                },
-                "position": {
-                    "semantic": "POSITION",
-                    "type": 35665
-                },
-                "projectionMatrix": {
-                    "semantic": "PROJECTION",
-                    "type": 35676
-                },
-                "shininess": {
-                    "type": 5126
-                },
-                "specular": {
-                    "type": 35666
-                },
-                "texcoord0": {
-                    "semantic": "TEXCOORD_0",
-                    "type": 35664
-                },
-                "weight": {
-                    "semantic": "WEIGHT",
-                    "type": 35666
-                }
-            },
-            "program": "program_0",
-            "states": {
-                "enable": [
-                    2929,
-                    2884
-                ]
-            },
-            "uniforms": {
-                "u_ambient": "ambient",
-                "u_diffuse": "diffuse",
-                "u_emission": "emission",
-                "u_jointMat": "jointMat",
-                "u_modelViewMatrix": "modelViewMatrix",
-                "u_normalMatrix": "normalMatrix",
-                "u_projectionMatrix": "projectionMatrix",
-                "u_shininess": "shininess",
-                "u_specular": "specular"
-            }
-        }
-    },
-    "textures": {
-        "texture_Cesium_Man_jpg": {
-            "format": 6408,
-            "internalFormat": 6408,
-            "sampler": "sampler_0",
-            "source": "Cesium_Man_jpg",
-            "target": 3553,
-            "type": 5121
-        }
-    }
-}

+ 0 - 25
examples/models/gltf/CesiumMan/glTF/Cesium_Man0FS.glsl

@@ -1,25 +0,0 @@
-precision highp float;
-varying vec3 v_normal;
-uniform vec4 u_ambient;
-varying vec2 v_texcoord0;
-uniform sampler2D u_diffuse;
-uniform vec4 u_emission;
-uniform vec4 u_specular;
-uniform float u_shininess;
-void main(void) {
-vec3 normal = normalize(v_normal);
-vec4 color = vec4(0., 0., 0., 0.);
-vec4 diffuse = vec4(0., 0., 0., 1.);
-vec4 emission;
-vec4 ambient;
-vec4 specular;
-ambient = u_ambient;
-diffuse = texture2D(u_diffuse, v_texcoord0);
-emission = u_emission;
-specular = u_specular;
-diffuse.xyz *= max(dot(normal,vec3(0.,0.,1.)), 0.);
-color.xyz += diffuse.xyz;
-color.xyz += emission.xyz;
-color = vec4(color.rgb * diffuse.a, diffuse.a);
-gl_FragColor = color;
-}

+ 0 - 22
examples/models/gltf/CesiumMan/glTF/Cesium_Man0VS.glsl

@@ -1,22 +0,0 @@
-precision highp float;
-attribute vec3 a_position;
-attribute vec3 a_normal;
-varying vec3 v_normal;
-attribute vec4 a_joint;
-attribute vec4 a_weight;
-uniform mat4 u_jointMat[19];
-uniform mat3 u_normalMatrix;
-uniform mat4 u_modelViewMatrix;
-uniform mat4 u_projectionMatrix;
-attribute vec2 a_texcoord0;
-varying vec2 v_texcoord0;
-void main(void) {
-mat4 skinMat = a_weight.x * u_jointMat[int(a_joint.x)];
-skinMat += a_weight.y * u_jointMat[int(a_joint.y)];
-skinMat += a_weight.z * u_jointMat[int(a_joint.z)];
-skinMat += a_weight.w * u_jointMat[int(a_joint.w)];
-vec4 pos = u_modelViewMatrix * skinMat * vec4(a_position,1.0);
-v_normal = u_normalMatrix * mat3(skinMat)* a_normal;
-v_texcoord0 = a_texcoord0;
-gl_Position = u_projectionMatrix * pos;
-}

二進制
examples/models/gltf/CesiumMan/screenshot/screenshot.gif


+ 8 - 0
examples/models/gltf/CesiumMilkTruck/README.md

@@ -0,0 +1,8 @@
+# Cesium Milk Truck
+## Screenshot
+
+![screenshot](screenshot/screenshot.gif)
+
+## License Information
+
+Donated by Cesium for glTF testing.  Please follow the [Cesium Trademark Terms and Conditions](https://github.com/AnalyticalGraphicsInc/cesium/wiki/CesiumTrademark.pdf).

+ 0 - 1
examples/models/gltf/CesiumMilkTruck/README.txt

@@ -1 +0,0 @@
-Donated by Cesium for glTF testing.  Please follow the Cesium Trademark Terms and Conditions: https://github.com/AnalyticalGraphicsInc/cesium/wiki/CesiumTrademark.pdf

二進制
examples/models/gltf/CesiumMilkTruck/glTF-Binary/CesiumMilkTruck.glb


文件差異過大導致無法顯示
+ 510 - 0
examples/models/gltf/CesiumMilkTruck/glTF-Embedded/CesiumMilkTruck.gltf


文件差異過大導致無法顯示
+ 495 - 462
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.gltf


二進制
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.png


二進制
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck0.bin


文件差異過大導致無法顯示
+ 540 - 0
examples/models/gltf/CesiumMilkTruck/glTF-pbrSpecularGlossiness/CesiumMilkTruck.gltf


二進制
examples/models/gltf/CesiumMilkTruck/glTF-pbrSpecularGlossiness/CesiumMilkTruck.png


二進制
examples/models/gltf/CesiumMilkTruck/glTF-pbrSpecularGlossiness/CesiumMilkTruck0.bin


文件差異過大導致無法顯示
+ 564 - 0
examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck.gltf


二進制
examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck.png


二進制
examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck0.bin


+ 9 - 7
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck1VS.glsl → examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck0.vert

@@ -1,15 +1,17 @@
 precision highp float;
+uniform mat4 u_modelViewMatrix;
+uniform mat4 u_projectionMatrix;
+uniform mat3 u_normalMatrix;
 attribute vec3 a_position;
+varying vec3 v_position;
 attribute vec3 a_normal;
 varying vec3 v_normal;
-uniform mat3 u_normalMatrix;
-uniform mat4 u_modelViewMatrix;
-uniform mat4 u_projectionMatrix;
 attribute vec2 a_texcoord0;
 varying vec2 v_texcoord0;
 void main(void) {
-vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);
-v_normal = u_normalMatrix * a_normal;
-v_texcoord0 = a_texcoord0;
-gl_Position = u_projectionMatrix * pos;
+    vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);
+    v_position = pos.xyz;
+    gl_Position = u_projectionMatrix * pos;
+    v_normal = u_normalMatrix * a_normal;
+    v_texcoord0 = a_texcoord0;
 }

+ 32 - 0
examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck1.frag

@@ -0,0 +1,32 @@
+precision highp float;
+uniform sampler2D u_diffuse;
+uniform vec4 u_specular;
+uniform float u_shininess;
+uniform float u_transparency;
+uniform vec3 u_light0Color;
+varying vec3 v_position;
+varying vec3 v_normal;
+varying vec2 v_texcoord0;
+void main(void) {
+    vec3 normal = normalize(v_normal);
+    vec4 diffuse = texture2D(u_diffuse, v_texcoord0);
+    vec3 diffuseLight = vec3(0.0, 0.0, 0.0);
+    vec3 specular = u_specular.rgb;
+    vec3 specularLight = vec3(0.0, 0.0, 0.0);
+    vec3 ambient = diffuse.rgb;
+    vec3 viewDir = -normalize(v_position);
+    vec3 ambientLight = vec3(0.0, 0.0, 0.0);
+    {
+        ambientLight += u_light0Color;
+    }
+    vec3 l = vec3(0.0, 0.0, 1.0);
+    diffuseLight += vec3(1.0, 1.0, 1.0) * max(dot(normal, l), 0.); 
+    vec3 reflectDir = reflect(-l, normal);
+    float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess));
+    specularLight += vec3(1.0, 1.0, 1.0) * specularIntensity;
+    vec3 color = vec3(0.0, 0.0, 0.0);
+    color += diffuse.rgb * diffuseLight;
+    color += specular * specularLight;
+    color += ambient * ambientLight;
+    gl_FragColor = vec4(color * diffuse.a * u_transparency, diffuse.a * u_transparency);
+}

+ 8 - 6
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0VS.glsl → examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck2.vert

@@ -1,12 +1,14 @@
 precision highp float;
+uniform mat4 u_modelViewMatrix;
+uniform mat4 u_projectionMatrix;
+uniform mat3 u_normalMatrix;
 attribute vec3 a_position;
+varying vec3 v_position;
 attribute vec3 a_normal;
 varying vec3 v_normal;
-uniform mat3 u_normalMatrix;
-uniform mat4 u_modelViewMatrix;
-uniform mat4 u_projectionMatrix;
 void main(void) {
-vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);
-v_normal = u_normalMatrix * a_normal;
-gl_Position = u_projectionMatrix * pos;
+    vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);
+    v_position = pos.xyz;
+    gl_Position = u_projectionMatrix * pos;
+    v_normal = u_normalMatrix * a_normal;
 }

+ 31 - 0
examples/models/gltf/CesiumMilkTruck/glTF-techniqueWebGL/CesiumMilkTruck3.frag

@@ -0,0 +1,31 @@
+precision highp float;
+uniform vec4 u_diffuse;
+uniform vec4 u_specular;
+uniform float u_shininess;
+uniform float u_transparency;
+uniform vec3 u_light0Color;
+varying vec3 v_position;
+varying vec3 v_normal;
+void main(void) {
+    vec3 normal = normalize(v_normal);
+    vec4 diffuse = u_diffuse;
+    vec3 diffuseLight = vec3(0.0, 0.0, 0.0);
+    vec3 specular = u_specular.rgb;
+    vec3 specularLight = vec3(0.0, 0.0, 0.0);
+    vec3 ambient = diffuse.rgb;
+    vec3 viewDir = -normalize(v_position);
+    vec3 ambientLight = vec3(0.0, 0.0, 0.0);
+    {
+        ambientLight += u_light0Color;
+    }
+    vec3 l = vec3(0.0, 0.0, 1.0);
+    diffuseLight += vec3(1.0, 1.0, 1.0) * max(dot(normal, l), 0.); 
+    vec3 reflectDir = reflect(-l, normal);
+    float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess));
+    specularLight += vec3(1.0, 1.0, 1.0) * specularIntensity;
+    vec3 color = vec3(0.0, 0.0, 0.0);
+    color += diffuse.rgb * diffuseLight;
+    color += specular * specularLight;
+    color += ambient * ambientLight;
+    gl_FragColor = vec4(color * diffuse.a * u_transparency, diffuse.a * u_transparency);
+}

二進制
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.bin


+ 474 - 619
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.gltf

@@ -1,705 +1,560 @@
 {
-    "accessors": {
-        "accessor_100": {
-            "bufferView": "bufferView_105",
-            "byteOffset": 7032,
-            "byteStride": 12,
+    "asset": {
+        "generator": "COLLADA2GLTF",
+        "version": "2.0"
+    },
+    "scene": 0,
+    "scenes": [
+        {
+            "nodes": [
+                6,
+                1,
+                0
+            ]
+        }
+    ],
+    "nodes": [
+        {},
+        {
+            "mesh": 0,
+            "children": [
+                4,
+                2
+            ]
+        },
+        {
+            "children": [
+                3
+            ],
+            "matrix": [
+                1.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                1.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                1.0,
+                0.0,
+                -1.352329969406128,
+                0.4277220070362091,
+                -2.98022992950564e-8,
+                1.0
+            ]
+        },
+        {
+            "mesh": 1,
+            "rotation": [
+                -0.0,
+                -0.0,
+                0.08848562091588974,
+                -0.9960774779319764
+            ]
+        },
+        {
+            "children": [
+                5
+            ],
+            "matrix": [
+                1.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                1.0,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                1.0,
+                0.0,
+                1.432669997215271,
+                0.4277220070362091,
+                -2.98022992950564e-8,
+                1.0
+            ]
+        },
+        {
+            "mesh": 1,
+            "rotation": [
+                -0.0,
+                -0.0,
+                0.08848562091588974,
+                -0.9960774779319764
+            ]
+        },
+        {}
+    ],
+    "meshes": [
+        {
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 2,
+                        "TEXCOORD_0": 3
+                    },
+                    "indices": 0,
+                    "mode": 4,
+                    "material": 0
+                },
+                {
+                    "attributes": {
+                        "NORMAL": 5,
+                        "POSITION": 6
+                    },
+                    "indices": 4,
+                    "mode": 4,
+                    "material": 1
+                },
+                {
+                    "attributes": {
+                        "NORMAL": 8,
+                        "POSITION": 9
+                    },
+                    "indices": 7,
+                    "mode": 4,
+                    "material": 2
+                }
+            ],
+            "name": "Cesium_Milk_Truck"
+        },
+        {
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 11,
+                        "POSITION": 12,
+                        "TEXCOORD_0": 13
+                    },
+                    "indices": 10,
+                    "mode": 4,
+                    "material": 3
+                }
+            ],
+            "name": "Wheels"
+        }
+    ],
+    "animations": [
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 5,
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 14,
+                    "interpolation": "LINEAR",
+                    "output": 15
+                }
+            ]
+        },
+        {
+            "channels": [
+                {
+                    "sampler": 0,
+                    "target": {
+                        "node": 3,
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "samplers": [
+                {
+                    "input": 16,
+                    "interpolation": "LINEAR",
+                    "output": 17
+                }
+            ]
+        }
+    ],
+    "accessors": [
+        {
+            "bufferView": 0,
+            "byteOffset": 6336,
+            "componentType": 5123,
+            "count": 5232,
+            "max": [
+                1855
+            ],
+            "min": [
+                0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 1,
+            "byteOffset": 25200,
             "componentType": 5126,
-            "count": 586,
+            "count": 1856,
             "max": [
-                0.999039,
-                0.999038,
-                1
+                1.0,
+                1.0,
+                1.0
             ],
             "min": [
-                -0.999038,
-                -0.999038,
-                -1
+                -1.0,
+                -1.0,
+                -1.0
             ],
             "type": "VEC3"
         },
-        "accessor_102": {
-            "bufferView": "bufferView_105",
-            "byteOffset": 14064,
-            "byteStride": 8,
+        {
+            "bufferView": 1,
+            "byteOffset": 47472,
             "componentType": 5126,
-            "count": 586,
+            "count": 1856,
             "max": [
-                0.993657,
-                0.989576
+                2.438000202178955,
+                2.5843698978424078,
+                1.3960000276565552
             ],
             "min": [
-                0.605093,
-                0.00905001
+                -2.4309098720550539,
+                0.2667999863624573,
+                -1.3960000276565552
             ],
-            "type": "VEC2"
+            "type": "VEC3"
         },
-        "accessor_63": {
-            "bufferView": "bufferView_104",
-            "byteOffset": 4608,
-            "byteStride": 0,
-            "componentType": 5123,
-            "count": 5232,
-            "type": "SCALAR"
+        {
+            "bufferView": 2,
+            "byteOffset": 4688,
+            "componentType": 5126,
+            "count": 1856,
+            "max": [
+                0.8964579701423645,
+                0.997245192527771
+            ],
+            "min": [
+                0.002956389915198088,
+                0.015672028064727784
+            ],
+            "type": "VEC2"
         },
-        "accessor_66": {
-            "bufferView": "bufferView_104",
-            "byteOffset": 15072,
-            "byteStride": 0,
+        {
+            "bufferView": 0,
+            "byteOffset": 16800,
             "componentType": 5123,
             "count": 168,
+            "max": [
+                71
+            ],
+            "min": [
+                0
+            ],
             "type": "SCALAR"
         },
-        "accessor_69": {
-            "bufferView": "bufferView_104",
-            "byteOffset": 15408,
-            "byteStride": 0,
-            "componentType": 5123,
-            "count": 864,
-            "type": "SCALAR"
+        {
+            "bufferView": 1,
+            "byteOffset": 69744,
+            "componentType": 5126,
+            "count": 72,
+            "max": [
+                0.9574799537658693,
+                0.28850099444389346,
+                1.0
+            ],
+            "min": [
+                -1.0,
+                0.0,
+                -1.0
+            ],
+            "type": "VEC3"
         },
-        "accessor_71": {
-            "bufferView": "bufferView_105",
-            "byteOffset": 18752,
-            "byteStride": 12,
+        {
+            "bufferView": 1,
+            "byteOffset": 70608,
             "componentType": 5126,
-            "count": 2392,
+            "count": 72,
             "max": [
-                2.438,
-                2.58437,
-                1.396
+                1.6011799573898316,
+                2.3545398712158205,
+                1.3960000276565552
             ],
             "min": [
-                -2.43091,
-                0.2668,
-                -1.396
+                0.2288499921560288,
+                1.631850004196167,
+                -1.3960000276565552
             ],
             "type": "VEC3"
         },
-        "accessor_73": {
-            "bufferView": "bufferView_105",
-            "byteOffset": 47456,
-            "byteStride": 12,
+        {
+            "bufferView": 0,
+            "byteOffset": 4608,
+            "componentType": 5123,
+            "count": 864,
+            "max": [
+                463
+            ],
+            "min": [
+                0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 1,
+            "byteOffset": 14064,
             "componentType": 5126,
-            "count": 2392,
+            "count": 464,
             "max": [
-                1,
-                1,
-                1
+                1.0,
+                1.0,
+                1.0
             ],
             "min": [
-                -1,
-                -1,
-                -1
+                -1.0,
+                -1.0,
+                -1.0
             ],
             "type": "VEC3"
         },
-        "accessor_75": {
-            "bufferView": "bufferView_105",
-            "byteOffset": 76160,
-            "byteStride": 8,
+        {
+            "bufferView": 1,
+            "byteOffset": 19632,
             "componentType": 5126,
-            "count": 2392,
+            "count": 464,
             "max": [
-                0.896458,
-                0.997245
+                1.6226699352264405,
+                2.392000198364258,
+                1.100000023841858
             ],
             "min": [
-                0.00295639,
-                0.015672
+                0.1931999921798706,
+                1.5961999893188477,
+                -1.1100000143051148
             ],
-            "type": "VEC2"
+            "type": "VEC3"
         },
-        "accessor_96": {
-            "bufferView": "bufferView_104",
+        {
+            "bufferView": 0,
             "byteOffset": 0,
-            "byteStride": 0,
             "componentType": 5123,
             "count": 2304,
+            "max": [
+                585
+            ],
+            "min": [
+                0
+            ],
             "type": "SCALAR"
         },
-        "accessor_98": {
-            "bufferView": "bufferView_105",
+        {
+            "bufferView": 1,
             "byteOffset": 0,
-            "byteStride": 12,
             "componentType": 5126,
             "count": 586,
             "max": [
-                0.4278,
-                0.4278,
-                1.058
+                0.9990389943122864,
+                0.9990379810333252,
+                1.0
             ],
             "min": [
-                -0.4278,
-                -0.4278,
-                -1.058
+                -0.9990379810333252,
+                -0.9990379810333252,
+                -1.0
             ],
             "type": "VEC3"
         },
-        "animAccessor_0": {
-            "bufferView": "bufferView_103",
+        {
+            "bufferView": 1,
+            "byteOffset": 7032,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.4277999997138977,
+                0.4277999997138977,
+                1.058000087738037
+            ],
+            "min": [
+                -0.4277999997138977,
+                -0.4277999997138977,
+                -1.058000087738037
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 2,
             "byteOffset": 0,
             "componentType": 5126,
-            "count": 31,
-            "type": "SCALAR"
+            "count": 586,
+            "max": [
+                0.9936569929122924,
+                0.9895756244659424
+            ],
+            "min": [
+                0.6050930023193359,
+                0.00905001163482666
+            ],
+            "type": "VEC2"
         },
-        "animAccessor_1": {
-            "bufferView": "bufferView_103",
+        {
+            "bufferView": 3,
             "byteOffset": 124,
             "componentType": 5126,
             "count": 31,
-            "type": "VEC4"
-        }
-    },
-    "animations": {
-        "animation_0": {
-            "channels": [
-                {
-                    "sampler": "animation_0_rotation_sampler",
-                    "target": {
-                        "id": "Geometry-mesh001Node",
-                        "path": "rotation"
-                    }
-                }
+            "max": [
+                1.25
             ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_1"
-            },
-            "samplers": {
-                "animation_0_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                }
-            }
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
         },
-        "animation_1": {
-            "channels": [
-                {
-                    "sampler": "animation_1_rotation_sampler",
-                    "target": {
-                        "id": "meshInst962Node",
-                        "path": "rotation"
-                    }
-                }
+        {
+            "bufferView": 4,
+            "byteOffset": 496,
+            "componentType": 5126,
+            "count": 31,
+            "max": [
+                -0.0,
+                -0.0,
+                0.9990190863609314,
+                1.0
             ],
-            "parameters": {
-                "TIME": "animAccessor_0",
-                "rotation": "animAccessor_1"
-            },
-            "samplers": {
-                "animation_1_rotation_sampler": {
-                    "input": "TIME",
-                    "interpolation": "LINEAR",
-                    "output": "rotation"
-                }
-            }
-        }
-    },
-    "asset": {
-        "generator": "collada2gltf@ceec062e3d5793f2f249f53cbd843aee382ad40b",
-        "premultipliedAlpha": true,
-        "profile": {
-            "api": "WebGL",
-            "version": "1.0.2"
+            "min": [
+                -0.0,
+                -0.0,
+                0.0,
+                -0.9960774779319764
+            ],
+            "type": "VEC4"
         },
-        "version": 1
-    },
-    "bufferViews": {
-        "bufferView_103": {
-            "buffer": "CesiumMilkTruck",
-            "byteLength": 620,
-            "byteOffset": 0
-        },
-        "bufferView_104": {
-            "buffer": "CesiumMilkTruck",
-            "byteLength": 17136,
-            "byteOffset": 620,
-            "target": 34963
+        {
+            "bufferView": 3,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 31,
+            "max": [
+                1.25
+            ],
+            "min": [
+                0.0
+            ],
+            "type": "SCALAR"
         },
-        "bufferView_105": {
-            "buffer": "CesiumMilkTruck",
-            "byteLength": 95296,
-            "byteOffset": 17756,
-            "target": 34962
-        }
-    },
-    "buffers": {
-        "CesiumMilkTruck": {
-            "byteLength": 113052,
-            "type": "arraybuffer",
-            "uri": "CesiumMilkTruck.bin"
-        }
-    },
-    "images": {
-        "Image0001": {
-            "name": "Image0001",
-            "uri": "CesiumMilkTruck.png"
+        {
+            "bufferView": 4,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 31,
+            "max": [
+                -0.0,
+                -0.0,
+                0.9990190863609314,
+                1.0
+            ],
+            "min": [
+                -0.0,
+                -0.0,
+                0.0,
+                -0.9960774779319764
+            ],
+            "type": "VEC4"
         }
-    },
-    "materials": {
-        "Effect-glass": {
-            "name": "glass",
-            "technique": "technique0",
-            "values": {
-                "diffuse": [
-                    0,
-                    0.0405063,
-                    0.0212407,
-                    1
-                ],
-                "shininess": 256,
-                "specular": [
-                    0.65,
-                    0.65,
-                    0.65,
-                    1
-                ]
+    ],
+    "materials": [
+        {
+            "pbrMetallicRoughness": {
+                "baseColorTexture": {
+                    "index": 0
+                }
             }
         },
-        "Effect-truck": {
-            "name": "truck",
-            "technique": "technique1",
-            "values": {
-                "diffuse": "texture_Image0001",
-                "shininess": 256,
-                "specular": [
-                    0.04,
-                    0.04,
-                    0.04,
-                    1
+        {
+            "pbrMetallicRoughness": {
+                "baseColorFactor": [
+                    0.0,
+                    0.04050629958510399,
+                    0.021240700036287309,
+                    1.0
                 ]
             }
         },
-        "Effect-wheels": {
-            "name": "wheels",
-            "technique": "technique1",
-            "values": {
-                "diffuse": "texture_Image0001",
-                "shininess": 256,
-                "specular": [
-                    0.04,
-                    0.04,
-                    0.04,
-                    1
+        {
+            "pbrMetallicRoughness": {
+                "baseColorFactor": [
+                    0.06400000303983689,
+                    0.06400000303983689,
+                    0.06400000303983689,
+                    1.0
                 ]
             }
         },
-        "Effect-window_trim": {
-            "name": "window_trim",
-            "technique": "technique0",
-            "values": {
-                "diffuse": [
-                    0.064,
-                    0.064,
-                    0.064,
-                    1
-                ],
-                "shininess": 256,
-                "specular": [
-                    0.04,
-                    0.04,
-                    0.04,
-                    1
-                ]
+        {
+            "pbrMetallicRoughness": {
+                "baseColorTexture": {
+                    "index": 1
+                }
             }
         }
-    },
-    "meshes": {
-        "Geometry-mesh001": {
-            "name": "Wheels",
-            "primitives": [
-                {
-                    "attributes": {
-                        "NORMAL": "accessor_100",
-                        "POSITION": "accessor_98",
-                        "TEXCOORD_0": "accessor_102"
-                    },
-                    "indices": "accessor_96",
-                    "material": "Effect-wheels",
-                    "mode": 4
-                }
-            ]
+    ],
+    "textures": [
+        {
+            "sampler": 0,
+            "source": 0
         },
-        "Geometry-mesh002": {
-            "name": "Cesium_Milk_Truck",
-            "primitives": [
-                {
-                    "attributes": {
-                        "NORMAL": "accessor_73",
-                        "POSITION": "accessor_71",
-                        "TEXCOORD_0": "accessor_75"
-                    },
-                    "indices": "accessor_63",
-                    "material": "Effect-truck",
-                    "mode": 4
-                },
-                {
-                    "attributes": {
-                        "NORMAL": "accessor_73",
-                        "POSITION": "accessor_71",
-                        "TEXCOORD_0": "accessor_75"
-                    },
-                    "indices": "accessor_66",
-                    "material": "Effect-glass",
-                    "mode": 4
-                },
-                {
-                    "attributes": {
-                        "NORMAL": "accessor_73",
-                        "POSITION": "accessor_71",
-                        "TEXCOORD_0": "accessor_75"
-                    },
-                    "indices": "accessor_69",
-                    "material": "Effect-window_trim",
-                    "mode": 4
-                }
-            ]
+        {
+            "sampler": 0,
+            "source": 0
         }
-    },
-    "nodes": {
-        "Geometry-mesh001Node": {
-            "children": [],
-            "meshes": [
-                "Geometry-mesh001"
-            ],
-            "name": "Wheels",
-            "rotation": [
-                0,
-                0,
-                -0.0884856,
-                0.996077
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                1.43267,
-                0.427722,
-                -2.98023e-008
-            ]
-        },
-        "Geometry-mesh002Node": {
-            "children": [
-                "Geometry-mesh001Node",
-                "meshInst962Node"
-            ],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "meshes": [
-                "Geometry-mesh002"
-            ],
-            "name": "Cesium_Milk_Truck"
-        },
-        "groupLocator006Node": {
-            "children": [
-                "txtrLocator003Node",
-                "txtrLocator013Node"
-            ],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Texture_Group"
-        },
-        "meshInst962Node": {
-            "children": [],
-            "meshes": [
-                "Geometry-mesh001"
-            ],
-            "name": "Wheels__2_",
-            "rotation": [
-                0,
-                0,
-                -0.0884856,
-                0.996077
-            ],
-            "scale": [
-                1,
-                1,
-                1
-            ],
-            "translation": [
-                -1.35233,
-                0.427722,
-                -2.98023e-008
-            ]
-        },
-        "polyRender006": {
-            "children": [],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Render"
-        },
-        "txtrLocator003Node": {
-            "children": [],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Cesium_Milk_Truck__2___Image___Texture_"
-        },
-        "txtrLocator013Node": {
-            "children": [],
-            "matrix": [
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1,
-                0,
-                0,
-                0,
-                0,
-                1
-            ],
-            "name": "Cesium_Milk_Truck__2___Image___2___Texture_"
-        }
-    },
-    "programs": {
-        "program_0": {
-            "attributes": [
-                "a_normal",
-                "a_position"
-            ],
-            "fragmentShader": "CesiumMilkTruck0FS",
-            "vertexShader": "CesiumMilkTruck0VS"
-        },
-        "program_1": {
-            "attributes": [
-                "a_normal",
-                "a_position",
-                "a_texcoord0"
-            ],
-            "fragmentShader": "CesiumMilkTruck1FS",
-            "vertexShader": "CesiumMilkTruck1VS"
+    ],
+    "images": [
+        {
+            "uri": "CesiumMilkTruck.png"
         }
-    },
-    "samplers": {
-        "sampler_0": {
+    ],
+    "samplers": [
+        {
             "magFilter": 9729,
-            "minFilter": 9987,
+            "minFilter": 9986,
             "wrapS": 10497,
             "wrapT": 10497
         }
-    },
-    "scene": "defaultScene",
-    "scenes": {
-        "defaultScene": {
-            "nodes": [
-                "polyRender006",
-                "Geometry-mesh002Node",
-                "groupLocator006Node"
-            ]
-        }
-    },
-    "shaders": {
-        "CesiumMilkTruck0FS": {
-            "type": 35632,
-            "uri": "CesiumMilkTruck0FS.glsl"
-        },
-        "CesiumMilkTruck0VS": {
-            "type": 35633,
-            "uri": "CesiumMilkTruck0VS.glsl"
-        },
-        "CesiumMilkTruck1FS": {
-            "type": 35632,
-            "uri": "CesiumMilkTruck1FS.glsl"
-        },
-        "CesiumMilkTruck1VS": {
-            "type": 35633,
-            "uri": "CesiumMilkTruck1VS.glsl"
-        }
-    },
-    "skins": {},
-    "techniques": {
-        "technique0": {
-            "attributes": {
-                "a_normal": "normal",
-                "a_position": "position"
-            },
-            "parameters": {
-                "diffuse": {
-                    "type": 35666
-                },
-                "modelViewMatrix": {
-                    "semantic": "MODELVIEW",
-                    "type": 35676
-                },
-                "normal": {
-                    "semantic": "NORMAL",
-                    "type": 35665
-                },
-                "normalMatrix": {
-                    "semantic": "MODELVIEWINVERSETRANSPOSE",
-                    "type": 35675
-                },
-                "position": {
-                    "semantic": "POSITION",
-                    "type": 35665
-                },
-                "projectionMatrix": {
-                    "semantic": "PROJECTION",
-                    "type": 35676
-                },
-                "shininess": {
-                    "type": 5126
-                },
-                "specular": {
-                    "type": 35666
-                }
-            },
-            "program": "program_0",
-            "states": {
-                "enable": [
-                    2929,
-                    2884
-                ]
-            },
-            "uniforms": {
-                "u_diffuse": "diffuse",
-                "u_modelViewMatrix": "modelViewMatrix",
-                "u_normalMatrix": "normalMatrix",
-                "u_projectionMatrix": "projectionMatrix",
-                "u_shininess": "shininess",
-                "u_specular": "specular"
-            }
+    ],
+    "bufferViews": [
+        {
+            "buffer": 0,
+            "byteOffset": 92248,
+            "byteLength": 17136,
+            "target": 34963
         },
-        "technique1": {
-            "attributes": {
-                "a_normal": "normal",
-                "a_position": "position",
-                "a_texcoord0": "texcoord0"
-            },
-            "parameters": {
-                "diffuse": {
-                    "type": 35678
-                },
-                "modelViewMatrix": {
-                    "semantic": "MODELVIEW",
-                    "type": 35676
-                },
-                "normal": {
-                    "semantic": "NORMAL",
-                    "type": 35665
-                },
-                "normalMatrix": {
-                    "semantic": "MODELVIEWINVERSETRANSPOSE",
-                    "type": 35675
-                },
-                "position": {
-                    "semantic": "POSITION",
-                    "type": 35665
-                },
-                "projectionMatrix": {
-                    "semantic": "PROJECTION",
-                    "type": 35676
-                },
-                "shininess": {
-                    "type": 5126
-                },
-                "specular": {
-                    "type": 35666
-                },
-                "texcoord0": {
-                    "semantic": "TEXCOORD_0",
-                    "type": 35664
-                }
-            },
-            "program": "program_1",
-            "states": {
-                "enable": [
-                    2929,
-                    2884
-                ]
-            },
-            "uniforms": {
-                "u_diffuse": "diffuse",
-                "u_modelViewMatrix": "modelViewMatrix",
-                "u_normalMatrix": "normalMatrix",
-                "u_projectionMatrix": "projectionMatrix",
-                "u_shininess": "shininess",
-                "u_specular": "specular"
-            }
+        {
+            "buffer": 0,
+            "byteOffset": 992,
+            "byteLength": 71472,
+            "byteStride": 12,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 72464,
+            "byteLength": 19536,
+            "byteStride": 8,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 92000,
+            "byteLength": 248
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 0,
+            "byteLength": 992
         }
-    },
-    "textures": {
-        "texture_Image0001": {
-            "format": 6408,
-            "internalFormat": 6408,
-            "sampler": "sampler_0",
-            "source": "Image0001",
-            "target": 3553,
-            "type": 5121
+    ],
+    "buffers": [
+        {
+            "byteLength": 109384,
+            "uri": "CesiumMilkTruck0.bin"
         }
-    }
-}
+    ]
+}

二進制
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.png


二進制
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.bin → examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0.bin


+ 0 - 17
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0FS.glsl

@@ -1,17 +0,0 @@
-precision highp float;
-varying vec3 v_normal;
-uniform vec4 u_diffuse;
-uniform vec4 u_specular;
-uniform float u_shininess;
-void main(void) {
-vec3 normal = normalize(v_normal);
-vec4 color = vec4(0., 0., 0., 0.);
-vec4 diffuse = vec4(0., 0., 0., 1.);
-vec4 specular;
-diffuse = u_diffuse;
-specular = u_specular;
-diffuse.xyz *= max(dot(normal,vec3(0.,0.,1.)), 0.);
-color.xyz += diffuse.xyz;
-color = vec4(color.rgb * diffuse.a, diffuse.a);
-gl_FragColor = color;
-}

+ 0 - 18
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck1FS.glsl

@@ -1,18 +0,0 @@
-precision highp float;
-varying vec3 v_normal;
-varying vec2 v_texcoord0;
-uniform sampler2D u_diffuse;
-uniform vec4 u_specular;
-uniform float u_shininess;
-void main(void) {
-vec3 normal = normalize(v_normal);
-vec4 color = vec4(0., 0., 0., 0.);
-vec4 diffuse = vec4(0., 0., 0., 1.);
-vec4 specular;
-diffuse = texture2D(u_diffuse, v_texcoord0);
-specular = u_specular;
-diffuse.xyz *= max(dot(normal,vec3(0.,0.,1.)), 0.);
-color.xyz += diffuse.xyz;
-color = vec4(color.rgb * diffuse.a, diffuse.a);
-gl_FragColor = color;
-}

二進制
examples/models/gltf/CesiumMilkTruck/screenshot/screenshot.gif


+ 7 - 0
examples/models/gltf/duck/README.txt → examples/models/gltf/Duck/README.md

@@ -1,3 +1,10 @@
+# Duck
+## Screenshot
+
+![screenshot](screenshot/screenshot.png)
+
+## License Information
+
 Copyright 2006 Sony Computer Entertainment Inc.
 
 Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:

二進制
examples/models/gltf/duck/glTF/duck.bin → examples/models/gltf/Duck/glTF-Binary/Duck.glb


文件差異過大導致無法顯示
+ 198 - 0
examples/models/gltf/Duck/glTF-Embedded/Duck.gltf


文件差異過大導致無法顯示
+ 246 - 0
examples/models/gltf/Duck/glTF-MaterialsCommon/Duck.gltf


二進制
examples/models/gltf/Duck/glTF-MaterialsCommon/Duck0.bin


二進制
examples/models/gltf/Duck/glTF-MaterialsCommon/DuckCM.png


文件差異過大導致無法顯示
+ 213 - 0
examples/models/gltf/Duck/glTF-pbrSpecularGlossiness/Duck.gltf


二進制
examples/models/gltf/Duck/glTF-pbrSpecularGlossiness/Duck0.bin


二進制
examples/models/gltf/Duck/glTF-pbrSpecularGlossiness/DuckCM.png


文件差異過大導致無法顯示
+ 218 - 0
examples/models/gltf/Duck/glTF-techniqueWebGL/Duck.gltf


二進制
examples/models/gltf/Duck/glTF-techniqueWebGL/Duck0.bin


+ 11 - 11
examples/models/gltf/duck/glTF/duck0VS.glsl → examples/models/gltf/Duck/glTF-techniqueWebGL/Duck0.vert

@@ -1,20 +1,20 @@
 precision highp float;
+uniform mat4 u_modelViewMatrix;
+uniform mat4 u_projectionMatrix;
+uniform mat3 u_normalMatrix;
+uniform mat4 u_light0Transform;
 attribute vec3 a_position;
+varying vec3 v_position;
 attribute vec3 a_normal;
 varying vec3 v_normal;
-uniform mat3 u_normalMatrix;
-uniform mat4 u_modelViewMatrix;
-uniform mat4 u_projectionMatrix;
 attribute vec2 a_texcoord0;
 varying vec2 v_texcoord0;
 varying vec3 v_light0Direction;
-varying vec3 v_position;
-uniform mat4 u_light0Transform;
 void main(void) {
-vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);
-v_normal = u_normalMatrix * a_normal;
-v_texcoord0 = a_texcoord0;
-v_position = pos.xyz;
-v_light0Direction = mat3(u_light0Transform) * vec3(0.,0.,1.);
-gl_Position = u_projectionMatrix * pos;
+    vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);
+    v_position = pos.xyz;
+    gl_Position = u_projectionMatrix * pos;
+    v_normal = u_normalMatrix * a_normal;
+    v_texcoord0 = a_texcoord0;
+    v_light0Direction = mat3(u_light0Transform) * vec3(0., 0., 1.);
 }

+ 38 - 0
examples/models/gltf/Duck/glTF-techniqueWebGL/Duck1.frag

@@ -0,0 +1,38 @@
+precision highp float;
+uniform vec4 u_ambient;
+uniform sampler2D u_diffuse;
+uniform vec4 u_emission;
+uniform vec4 u_specular;
+uniform float u_shininess;
+uniform float u_transparency;
+uniform vec3 u_light0Color;
+varying vec3 v_position;
+varying vec3 v_normal;
+varying vec2 v_texcoord0;
+varying vec3 v_light0Direction;
+void main(void) {
+    vec3 normal = normalize(v_normal);
+    vec4 diffuse = texture2D(u_diffuse, v_texcoord0);
+    vec3 diffuseLight = vec3(0.0, 0.0, 0.0);
+    vec3 specular = u_specular.rgb;
+    vec3 specularLight = vec3(0.0, 0.0, 0.0);
+    vec3 emission = u_emission.rgb;
+    vec3 ambient = u_ambient.rgb;
+    vec3 viewDir = -normalize(v_position);
+    vec3 ambientLight = vec3(0.0, 0.0, 0.0);
+    {
+    vec3 l = normalize(v_light0Direction);
+    float attenuation = 1.0;
+    diffuseLight += u_light0Color * max(dot(normal, l), 0.) * attenuation;
+    vec3 h = normalize(l + viewDir);
+    float specularIntensity = max(0., pow(max(dot(normal, h), 0.), u_shininess)) * attenuation;
+    specularLight += u_light0Color * specularIntensity;
+    }
+    ambientLight += vec3(0.2, 0.2, 0.2);
+    vec3 color = vec3(0.0, 0.0, 0.0);
+    color += diffuse.rgb * diffuseLight;
+    color += specular * specularLight;
+    color += emission;
+    color += ambient * ambientLight;
+    gl_FragColor = vec4(color * diffuse.a * u_transparency, diffuse.a * u_transparency);
+}

二進制
examples/models/gltf/Duck/glTF-techniqueWebGL/DuckCM.png


+ 238 - 0
examples/models/gltf/Duck/glTF/Duck.gltf

@@ -0,0 +1,238 @@
+{
+    "asset": {
+        "generator": "COLLADA2GLTF",
+        "version": "2.0"
+    },
+    "scene": 0,
+    "scenes": [
+        {
+            "nodes": [
+                0
+            ]
+        }
+    ],
+    "nodes": [
+        {
+            "children": [
+                3,
+                2,
+                1
+            ],
+            "matrix": [
+                0.009999999776482582,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                0.009999999776482582,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                0.009999999776482582,
+                0.0,
+                0.0,
+                0.0,
+                0.0,
+                1.0
+            ]
+        },
+        {
+            "matrix": [
+                -0.9546916484832764,
+                0.2181433141231537,
+                -0.2024286538362503,
+                0.0,
+                0.014671952463686468,
+                0.7138853073120117,
+                0.7001089453697205,
+                0.0,
+                0.2972349226474762,
+                0.6654181480407715,
+                -0.6847409009933472,
+                0.0,
+                148.6540069580078,
+                183.6720123291016,
+                -292.1790161132813,
+                1.0
+            ]
+        },
+        {
+            "matrix": [
+                -0.7289686799049377,
+                0.0,
+                -0.6845470666885376,
+                0.0,
+                -0.4252049028873444,
+                0.7836934328079224,
+                0.4527972936630249,
+                0.0,
+                0.5364750623703003,
+                0.6211478114128113,
+                -0.571287989616394,
+                0.0,
+                400.1130065917969,
+                463.2640075683594,
+                -431.0780334472656,
+                1.0
+            ],
+            "camera": 0
+        },
+        {
+            "mesh": 0
+        }
+    ],
+    "cameras": [
+        {
+            "perspective": {
+                "aspectRatio": 1.5,
+                "yfov": 0.6605925559997559,
+                "zfar": 10000.0,
+                "znear": 1.0
+            },
+            "type": "perspective"
+        }
+    ],
+    "meshes": [
+        {
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": 1,
+                        "POSITION": 2,
+                        "TEXCOORD_0": 3
+                    },
+                    "indices": 0,
+                    "mode": 4,
+                    "material": 0
+                }
+            ],
+            "name": "LOD3spShape"
+        }
+    ],
+    "accessors": [
+        {
+            "bufferView": 0,
+            "byteOffset": 0,
+            "componentType": 5123,
+            "count": 12636,
+            "max": [
+                2398
+            ],
+            "min": [
+                0
+            ],
+            "type": "SCALAR"
+        },
+        {
+            "bufferView": 1,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 2399,
+            "max": [
+                0.9995989799499512,
+                0.999580979347229,
+                0.9984359741210938
+            ],
+            "min": [
+                -0.9990839958190918,
+                -1.0,
+                -0.9998319745063782
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 1,
+            "byteOffset": 28788,
+            "componentType": 5126,
+            "count": 2399,
+            "max": [
+                96.17990112304688,
+                163.97000122070313,
+                53.92519760131836
+            ],
+            "min": [
+                -69.29850006103516,
+                9.929369926452637,
+                -61.32819747924805
+            ],
+            "type": "VEC3"
+        },
+        {
+            "bufferView": 2,
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 2399,
+            "max": [
+                0.9833459854125976,
+                0.9800369739532472
+            ],
+            "min": [
+                0.026409000158309938,
+                0.01996302604675293
+            ],
+            "type": "VEC2"
+        }
+    ],
+    "materials": [
+        {
+            "pbrMetallicRoughness": {
+                "baseColorTexture": {
+                    "index": 0
+                }
+            },
+            "emissiveFactor": [
+                0.0,
+                0.0,
+                0.0
+            ]
+        }
+    ],
+    "textures": [
+        {
+            "sampler": 0,
+            "source": 0
+        }
+    ],
+    "images": [
+        {
+            "uri": "DuckCM.png"
+        }
+    ],
+    "samplers": [
+        {
+            "magFilter": 9729,
+            "minFilter": 9986,
+            "wrapS": 10497,
+            "wrapT": 10497
+        }
+    ],
+    "bufferViews": [
+        {
+            "buffer": 0,
+            "byteOffset": 76768,
+            "byteLength": 25272,
+            "target": 34963
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 0,
+            "byteLength": 57576,
+            "byteStride": 12,
+            "target": 34962
+        },
+        {
+            "buffer": 0,
+            "byteOffset": 57576,
+            "byteLength": 19192,
+            "byteStride": 8,
+            "target": 34962
+        }
+    ],
+    "buffers": [
+        {
+            "byteLength": 102040,
+            "uri": "Duck0.bin"
+        }
+    ]
+}

二進制
examples/models/gltf/duck/glTF-MaterialsCommon/duck.bin → examples/models/gltf/Duck/glTF/Duck0.bin


二進制
examples/models/gltf/Duck/glTF/DuckCM.png


二進制
examples/models/gltf/Duck/screenshot/screenshot.png


+ 8 - 0
examples/models/gltf/Monster/README.md

@@ -0,0 +1,8 @@
+# Monster
+## Screenshot
+
+![screenshot](screenshot/screenshot.gif)
+
+## License Information
+
+Model from: http://www.3drt.com/downloads.htm

二進制
examples/models/gltf/Monster/glTF-Binary/Monster.glb


文件差異過大導致無法顯示
+ 4410 - 0
examples/models/gltf/Monster/glTF-Embedded/Monster.gltf


文件差異過大導致無法顯示
+ 4439 - 0
examples/models/gltf/Monster/glTF-MaterialsCommon/Monster.gltf


+ 0 - 0
examples/models/gltf/monster/glTF-MaterialsCommon/monster.jpg → examples/models/gltf/Monster/glTF-MaterialsCommon/Monster.jpg


二進制
examples/models/gltf/Monster/glTF-MaterialsCommon/Monster0.bin


文件差異過大導致無法顯示
+ 4425 - 0
examples/models/gltf/Monster/glTF-pbrSpecularGlossiness/Monster.gltf


+ 0 - 0
examples/models/gltf/monster/glTF/monster.jpg → examples/models/gltf/Monster/glTF-pbrSpecularGlossiness/Monster.jpg


二進制
examples/models/gltf/Monster/glTF-pbrSpecularGlossiness/Monster0.bin


文件差異過大導致無法顯示
+ 4430 - 0
examples/models/gltf/Monster/glTF-techniqueWebGL/Monster.gltf


二進制
examples/models/gltf/Monster/glTF-techniqueWebGL/Monster.jpg


部分文件因文件數量過多而無法顯示