소스 검색

Upgrade glTF Loader to v1.0

Tony Parisi 9 년 전
부모
커밋
5bfe40375e
48개의 변경된 파일12540개의 추가작업 그리고 2598개의 파일을 삭제
  1. 317 307
      examples/js/loaders/gltf/glTF-parser.js
  2. 13 13
      examples/js/loaders/gltf/glTFAnimation.js
  3. 1466 1103
      examples/js/loaders/gltf/glTFLoader.js
  4. 185 106
      examples/js/loaders/gltf/glTFLoaderUtils.js
  5. 145 0
      examples/js/loaders/gltf/glTFShaders.js
  6. 204 0
      examples/js/loaders/gltf/gltfUtilities.js
  7. 1 0
      examples/models/gltf/CesiumMan/README.txt
  8. BIN
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.bin
  9. 2111 0
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.gltf
  10. BIN
      examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.jpg
  11. BIN
      examples/models/gltf/CesiumMan/glTF/Cesium_Man.bin
  12. 2207 0
      examples/models/gltf/CesiumMan/glTF/Cesium_Man.gltf
  13. BIN
      examples/models/gltf/CesiumMan/glTF/Cesium_Man.jpg
  14. 25 0
      examples/models/gltf/CesiumMan/glTF/Cesium_Man0FS.glsl
  15. 22 0
      examples/models/gltf/CesiumMan/glTF/Cesium_Man0VS.glsl
  16. 1 0
      examples/models/gltf/CesiumMilkTruck/README.txt
  17. BIN
      examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.bin
  18. 610 0
      examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.gltf
  19. BIN
      examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.png
  20. BIN
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.bin
  21. 705 0
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.gltf
  22. BIN
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.png
  23. 17 0
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0FS.glsl
  24. 12 0
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0VS.glsl
  25. 18 0
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck1FS.glsl
  26. 15 0
      examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck1VS.glsl
  27. 7 13
      examples/models/gltf/duck/README.txt
  28. BIN
      examples/models/gltf/duck/duck.bin
  29. 0 122
      examples/models/gltf/duck/duck.dae
  30. BIN
      examples/models/gltf/duck/glTF-MaterialsCommon/duck.bin
  31. 291 0
      examples/models/gltf/duck/glTF-MaterialsCommon/duck.gltf
  32. 0 0
      examples/models/gltf/duck/glTF-MaterialsCommon/duckCM.png
  33. BIN
      examples/models/gltf/duck/glTF/duck.bin
  34. 119 154
      examples/models/gltf/duck/glTF/duck.gltf
  35. 14 13
      examples/models/gltf/duck/glTF/duck0FS.glsl
  36. 6 4
      examples/models/gltf/duck/glTF/duck0VS.glsl
  37. BIN
      examples/models/gltf/duck/glTF/duckCM.png
  38. BIN
      examples/models/gltf/monster/glTF-MaterialsCommon/monster.bin
  39. 3319 0
      examples/models/gltf/monster/glTF-MaterialsCommon/monster.gltf
  40. 0 0
      examples/models/gltf/monster/glTF-MaterialsCommon/monster.jpg
  41. BIN
      examples/models/gltf/monster/glTF/monster.bin
  42. 635 670
      examples/models/gltf/monster/glTF/monster.gltf
  43. BIN
      examples/models/gltf/monster/glTF/monster.jpg
  44. 5 3
      examples/models/gltf/monster/glTF/monster0FS.glsl
  45. 2 4
      examples/models/gltf/monster/glTF/monster0VS.glsl
  46. BIN
      examples/models/gltf/monster/monster.bin
  47. 0 64
      examples/models/gltf/monster/monster.dae
  48. 68 22
      examples/webgl_loader_gltf.html

+ 317 - 307
examples/js/loaders/gltf/glTF-parser.js

@@ -22,364 +22,374 @@
 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /*
-    The Abstract Loader has two modes:
-        #1: [static] load all the JSON at once [as of now]
-        #2: [stream] stream and parse JSON progressively [not yet supported]
+	The Abstract Loader has two modes:
+		#1: [static] load all the JSON at once [as of now]
+		#2: [stream] stream and parse JSON progressively [not yet supported]
 
-    Whatever is the mechanism used to parse the JSON (#1 or #2),
-    The loader starts by resolving the paths to binaries and referenced json files (by replace the value of the path property with an absolute path if it was relative).
+	Whatever is the mechanism used to parse the JSON (#1 or #2),
+	The loader starts by resolving the paths to binaries and referenced json files (by replace the value of the path property with an absolute path if it was relative).
 
-    In case #1: it is guaranteed to call the concrete loader implementation methods in a order that solves the dependencies between the entries.
-    only the nodes requires an extra pass to set up the hirerarchy.
-    In case #2: the concrete implementation will have to solve the dependencies. no order is guaranteed.
+	In case #1: it is guaranteed to call the concrete loader implementation methods in a order that solves the dependencies between the entries.
+	only the nodes requires an extra pass to set up the hirerarchy.
+	In case #2: the concrete implementation will have to solve the dependencies. no order is guaranteed.
 
-    When case #1 is used the followed dependency order is:
+	When case #1 is used the followed dependency order is:
 
-    scenes -> nodes -> meshes -> materials -> techniques -> shaders
-                    -> buffers
-                    -> cameras
-                    -> lights
+	scenes -> nodes -> meshes -> materials -> techniques -> shaders
+					-> buffers
+					-> cameras
+					-> lights
 
-    The readers starts with the leafs, i.e:
-        shaders, techniques, materials, meshes, buffers, cameras, lights, nodes, scenes
+	The readers starts with the leafs, i.e:
+		shaders, techniques, materials, meshes, buffers, cameras, lights, nodes, scenes
 
-    For each called handle method called the client should return true if the next handle can be call right after returning,
-    or false if a callback on client side will notify the loader that the next handle method can be called.
+	For each called handle method called the client should return true if the next handle can be call right after returning,
+	or false if a callback on client side will notify the loader that the next handle method can be called.
 
 */
 var global = window;
 (function (root, factory) {
 	if (typeof exports === 'object') {
-        // Node. Does not work with strict CommonJS, but
-        // only CommonJS-like enviroments that support module.exports,
-        // like Node.
+		// Node. Does not work with strict CommonJS, but
+		// only CommonJS-like enviroments that support module.exports,
+		// like Node.
 		factory(module.exports);
 	} else if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
+		// AMD. Register as an anonymous module.
 		define([], function () {
 			return factory(root);
 		});
 	} else {
-        // Browser globals
+		// Browser globals
 		factory(root);
 	}
 }(this, function (root) {
 	"use strict";
 
-	var categoriesDepsOrder = [ "buffers", "bufferViews", "images",  "videos", "samplers", "textures", "shaders", "programs", "techniques", "materials", "accessors", "meshes", "cameras", "lights", "skins", "nodes", "scenes", "animations" ];
+	var categoriesDepsOrder = ["extensions", "buffers", "bufferViews", "images",  "videos", "samplers", "textures", "shaders", "programs", "techniques", "materials", "accessors", "meshes", "cameras", "lights", "skins", "nodes", "animations", "scenes"];
 
 	var glTFParser = Object.create(Object.prototype, {
 
-        _rootDescription: { value: null, writable: true },
+		_rootDescription: { value: null, writable: true },
 
-        rootDescription: {
-            set: function(value) {
-	this._rootDescription = value;
-            },
-            get: function() {
-	return this._rootDescription;
-            }
-        },
-
-        baseURL: { value: null, writable: true },
+		rootDescription: {
+			set: function(value) {
+				this._rootDescription = value;
+			},
+			get: function() {
+				return this._rootDescription;
+			}
+		},
 
-        //detect absolute path following the same protocol than window.location
-        _isAbsolutePath: {
-            value: function(path) {
-	var isAbsolutePathRegExp = new RegExp("^" + window.location.protocol, "i");
+		baseURL: { value: null, writable: true },
 
-	return path.match(isAbsolutePathRegExp) ? true : false;
-            }
-        },
+		//detect absolute path following the same protocol than window.location
+		_isAbsolutePath: {
+			value: function(path) {
+				var isAbsolutePathRegExp = new RegExp("^"+window.location.protocol, "i");
 
-        resolvePathIfNeeded: {
-            value: function(path) {
-	if (this._isAbsolutePath(path)) {
-		return path;
-	}
+				return path.match(isAbsolutePathRegExp) ? true : false;
+			}
+		},
 
-	return this.baseURL + path;
-            }
-        },
-
-        _resolvePathsForCategories: {
-            value: function(categories) {
-	categories.forEach( function(category) {
-		var descriptions = this.json[category];
-		if (descriptions) {
-			var descriptionKeys = Object.keys(descriptions);
-			descriptionKeys.forEach( function(descriptionKey) {
-				var description = descriptions[descriptionKey];
-				description.path = this.resolvePathIfNeeded(description.path);
-			}, this);
-		}
-	}, this);
-            }
-        },
-
-        _json: {
-            value: null,
-            writable: true
-        },
-
-        json: {
-            enumerable: true,
-            get: function() {
-	return this._json;
-            },
-            set: function(value) {
-	if (this._json !== value) {
-		this._json = value;
-		this._resolvePathsForCategories([ "buffers", "shaders", "images", "videos" ]);
-	}
-            }
-        },
-
-        _path: {
-            value: null,
-            writable: true
-        },
-
-        getEntryDescription: {
-            value: function (entryID, entryType) {
-	var entries = null;
-
-	var category = entryType;
-	entries = this.rootDescription[category];
-	if (!entries) {
-		console.log("ERROR:CANNOT find expected category named:" + category);
-		return null;
-	}
+		resolvePathIfNeeded: {
+			value: function(path) {
+				if (this._isAbsolutePath(path)) {
+					return path;
+				}
 
-	return entries ? entries[entryID] : null;
-            }
-        },
+				var isDataUriRegex = /^data:/;
+				if (isDataUriRegex.test(path)) {
+					return path;
+				}
+				
+				return this.baseURL + path;
+			}
+		},
+
+		_resolvePathsForCategories: {
+			value: function(categories) {
+				categories.forEach( function(category) {
+					var descriptions = this.json[category];
+					if (descriptions) {
+						var descriptionKeys = Object.keys(descriptions);
+						descriptionKeys.forEach( function(descriptionKey) {
+							var description = descriptions[descriptionKey];
+							description.uri = this.resolvePathIfNeeded(description.uri);
+						}, this);
+					}
+				}, this);
+			}
+		},
+
+		_json: {
+			value: null,
+			writable: true
+		},
+
+		json: {
+			enumerable: true,
+			get: function() {
+				return this._json;
+			},
+			set: function(value) {
+				if (this._json !== value) {
+					this._json = value;
+					this._resolvePathsForCategories(["buffers", "shaders", "images", "videos"]);
+				}
+			}
+		},
+
+		_path: {
+			value: null,
+			writable: true
+		},
+
+		getEntryDescription: {
+			value: function (entryID, entryType) {
+				var entries = null;
+
+				var category = entryType;
+				entries = this.rootDescription[category];
+				if (!entries) {
+					console.log("ERROR:CANNOT find expected category named:"+category);
+					return null;
+				}
 
-        _stepToNextCategory: {
-            value: function() {
-	this._state.categoryIndex = this.getNextCategoryIndex(this._state.categoryIndex + 1);
-	if (this._state.categoryIndex !== -1) {
-		this._state.categoryState.index = 0;
-		return true;
-	}
+				return entries ? entries[entryID] : null;
+			}
+		},
+
+		_stepToNextCategory: {
+			value: function() {
+				this._state.categoryIndex = this.getNextCategoryIndex(this._state.categoryIndex + 1);
+				if (this._state.categoryIndex !== -1) {
+					this._state.categoryState.index = 0;
+					return true;
+				}
 
-	return false;
-            }
-        },
-
-        _stepToNextDescription: {
-            enumerable: false,
-            value: function() {
-	var categoryState = this._state.categoryState;
-	var keys = categoryState.keys;
-	if (!keys) {
-		console.log("INCONSISTENCY ERROR");
-		return false;
-	}
+				return false;
+			}
+		},
+
+		_stepToNextDescription: {
+			enumerable: false,
+			value: function() {
+				var categoryState = this._state.categoryState;
+				var keys = categoryState.keys;
+				if (!keys) {
+					console.log("INCONSISTENCY ERROR");
+					return false;
+				}
 
-	categoryState.index ++;
-	categoryState.keys = null;
-	if (categoryState.index >= keys.length) {
-		return this._stepToNextCategory();
-	}
-	return false;
-            }
-        },
-
-        hasCategory: {
-            value: function(category) {
-	return this.rootDescription[category] ? true : false;
-            }
-        },
-
-        _handleState: {
-            value: function() {
-
-	var methodForType = {
-                    "buffers" : this.handleBuffer,
-                    "bufferViews" : this.handleBufferView,
-                    "shaders" : this.handleShader,
-                    "programs" : this.handleProgram,
-                    "techniques" : this.handleTechnique,
-                    "materials" : this.handleMaterial,
-                    "meshes" : this.handleMesh,
-                    "cameras" : this.handleCamera,
-                    "lights" : this.handleLight,
-                    "nodes" : this.handleNode,
-                    "scenes" : this.handleScene,
-                    "images" : this.handleImage,
-                    "animations" : this.handleAnimation,
-                    "accessors" : this.handleAccessor,
-                    "skins" : this.handleSkin,
-                    "samplers" : this.handleSampler,
-                    "textures" : this.handleTexture,
-                    "videos" : this.handleVideo
-
-                };
-
-	var success = true;
-	while (this._state.categoryIndex !== -1) {
-		var category = categoriesDepsOrder[this._state.categoryIndex];
-		var categoryState = this._state.categoryState;
-		var keys = categoryState.keys;
-		if (!keys) {
-			categoryState.keys = keys = Object.keys(this.rootDescription[category]);
-			if (keys) {
-				if (keys.length == 0) {
-					this._stepToNextDescription();
-					continue;
+				categoryState.index++;
+				categoryState.keys = null;
+				if (categoryState.index >= keys.length) {
+					return this._stepToNextCategory();
 				}
+				return false;
 			}
-		}
+		},
 
-		var type = category;
-		var entryID = keys[categoryState.index];
-		var description = this.getEntryDescription(entryID, type);
-		if (!description) {
-			if (this.handleError) {
-				this.handleError("INCONSISTENCY ERROR: no description found for entry " + entryID);
-				success = false;
-				break;
+		hasCategory: {
+			value: function(category) {
+				return this.rootDescription[category] ? true : false;
 			}
-		} else {
+		},
+
+		_handleState: {
+			value: function() {
+
+				var methodForType = {
+					"buffers" : this.handleBuffer,
+					"bufferViews" : this.handleBufferView,
+					"shaders" : this.handleShader,
+					"programs" : this.handleProgram,
+					"techniques" : this.handleTechnique,
+					"materials" : this.handleMaterial,
+					"meshes" : this.handleMesh,
+					"cameras" : this.handleCamera,
+					"lights" : this.handleLight,
+					"nodes" : this.handleNode,
+					"scenes" : this.handleScene,
+					"images" : this.handleImage,
+					"animations" : this.handleAnimation,
+					"accessors" : this.handleAccessor,
+					"skins" : this.handleSkin,
+					"samplers" : this.handleSampler,
+					"textures" : this.handleTexture,
+					"videos" : this.handleVideo,
+					"extensions" : this.handleExtension,
+
+				};
+
+				var success = true;
+				while (this._state.categoryIndex !== -1) {
+					var category = categoriesDepsOrder[this._state.categoryIndex];
+					var categoryState = this._state.categoryState;
+					var keys = categoryState.keys;
+					if (!keys) {
+						categoryState.keys = keys = Object.keys(this.rootDescription[category]);
+						if (keys) {
+							if (keys.length == 0) {
+								this._stepToNextDescription();
+								continue;
+							}
+						}
+					}
+
+					var type = category;
+					var entryID = keys[categoryState.index];
+					var description = this.getEntryDescription(entryID, type);
+					if (!description) {
+						if (this.handleError) {
+							this.handleError("INCONSISTENCY ERROR: no description found for entry "+entryID);
+							success = false;
+							break;
+						}
+					} else {
+
+						if (methodForType[type]) {
+							if (methodForType[type].call(this, entryID, description, this._state.userInfo) === false) {
+								success = false;
+								break;
+							}
+						}
+
+						this._stepToNextDescription();
+					}
+				}
 
-			if (methodForType[type]) {
-				if (methodForType[type].call(this, entryID, description, this._state.userInfo) === false) {
-					success = false;
-					break;
+				if (this.handleLoadCompleted) {
+					this.handleLoadCompleted(success);
 				}
-			}
 
-			this._stepToNextDescription();
-		}
-	}
+			}
+		},
+
+		_loadJSONIfNeeded: {
+			enumerable: true,
+			value: function(callback) {
+				var self = this;
+				//FIXME: handle error
+				if (!this._json)  {
+					var jsonPath = this._path;
+					var i = jsonPath.lastIndexOf("/");
+					this.baseURL = (i !== 0) ? jsonPath.substring(0, i + 1) : '';
+					var jsonfile = new XMLHttpRequest();
+					jsonfile.open("GET", jsonPath, true);
+					jsonfile.onreadystatechange = function() {
+						if (jsonfile.readyState == 4) {
+							if (jsonfile.status == 200) {
+								self.json = JSON.parse(jsonfile.responseText);
+								if (callback) {
+									callback(self.json);
+								}
+							}
+						}
+					};
+					jsonfile.send(null);
+			   } else {
+					if (callback) {
+						callback(this.json);
+					}
+				}
+			}
+		},
+
+		/* load JSON and assign it as description to the reader */
+		_buildLoader: {
+			value: function(callback) {
+				var self = this;
+				function JSONReady(json) {
+					self.rootDescription = json;
+					if (callback)
+						callback(this);
+				}
 
-	if (this.handleLoadCompleted) {
-		this.handleLoadCompleted(success);
-	}
+				this._loadJSONIfNeeded(JSONReady);
+			}
+		},
+
+		_state: { value: null, writable: true },
+
+		_getEntryType: {
+			value: function(entryID) {
+				var rootKeys = categoriesDepsOrder;
+				for (var i = 0 ;  i < rootKeys.length ; i++) {
+					var rootValues = this.rootDescription[rootKeys[i]];
+					if (rootValues) {
+						return rootKeys[i];
+					}
+				}
+				return null;
+			}
+		},
+
+		getNextCategoryIndex: {
+			value: function(currentIndex) {
+				for (var i = currentIndex ; i < categoriesDepsOrder.length ; i++) {
+					if (this.hasCategory(categoriesDepsOrder[i])) {
+						return i;
+					}
+				}
 
-            }
-        },
-
-        _loadJSONIfNeeded: {
-            enumerable: true,
-            value: function(callback) {
-	var self = this;
-                //FIXME: handle error
-	if (!this._json) {
-		var jsonPath = this._path;
-		var i = jsonPath.lastIndexOf("/");
-		this.baseURL = (i !== 0) ? jsonPath.substring(0, i + 1) : '';
-		var jsonfile = new XMLHttpRequest();
-		jsonfile.open("GET", jsonPath, true);
-		jsonfile.addEventListener( 'load', function ( event ) {
-			self.json = JSON.parse(jsonfile.responseText);
-			if (callback) {
-				callback(self.json);
+				return -1;
 			}
-		}, false );
-		jsonfile.send(null);
-	} else {
-		if (callback) {
-			callback(this.json);
-		}
-	}
-            }
-        },
-
-        /* load JSON and assign it as description to the reader */
-        _buildLoader: {
-            value: function(callback) {
-	var self = this;
-	function JSONReady(json) {
-		self.rootDescription = json;
-		if (callback)
-                        callback(this);
-	}
+		},
+
+		load: {
+			enumerable: true,
+			value: function(userInfo, options) {
+				var self = this;
+				this._buildLoader(function loaderReady(reader) {
+					var startCategory = self.getNextCategoryIndex.call(self,0);
+					if (startCategory !== -1) {
+						self._state = { "userInfo" : userInfo,
+										"options" : options,
+										"categoryIndex" : startCategory,
+										"categoryState" : { "index" : "0" } };
+						self._handleState();
+					}
+				});
+			}
+		},
 
-	this._loadJSONIfNeeded(JSONReady);
-            }
-        },
+		initWithPath: {
+			value: function(path) {
+				this._path = path;
+				this._json = null;
+				return this;
+			}
+		},
 
-        _state: { value: null, writable: true },
+		//this is meant to be global and common for all instances
+		_knownURLs: { writable: true, value: {} },
 
-        _getEntryType: {
-            value: function(entryID) {
-	var rootKeys = categoriesDepsOrder;
-	for (var i = 0 ; i < rootKeys.length ; i ++) {
-		var rootValues = this.rootDescription[rootKeys[i]];
-		if (rootValues) {
-			return rootKeys[i];
-		}
-	}
-	return null;
-            }
-        },
-
-        getNextCategoryIndex: {
-            value: function(currentIndex) {
-	for (var i = currentIndex ; i < categoriesDepsOrder.length ; i ++) {
-		if (this.hasCategory(categoriesDepsOrder[i])) {
-			return i;
+		//to be invoked by subclass, so that ids can be ensured to not overlap
+		loaderContext: {
+			value: function() {
+				if (typeof this._knownURLs[this._path] === "undefined") {
+					this._knownURLs[this._path] = Object.keys(this._knownURLs).length;
+				}
+				return "__" + this._knownURLs[this._path];
+			}
+		},
+
+		initWithJSON: {
+			value: function(json, baseURL) {
+				this.json = json;
+				this.baseURL = baseURL;
+				if (!baseURL) {
+					console.log("WARNING: no base URL passed to Reader:initWithJSON");
+				}
+				return this;
+			}
 		}
-	}
 
-	return -1;
-            }
-        },
-
-        load: {
-            enumerable: true,
-            value: function(userInfo, options) {
-	var self = this;
-	this._buildLoader(function loaderReady(reader) {
-		var startCategory = self.getNextCategoryIndex.call(self, 0);
-		if (startCategory !== -1) {
-			self._state = { "userInfo" : userInfo,
-                                        "options" : options,
-                                        "categoryIndex" : startCategory,
-                                        "categoryState" : { "index" : "0" } };
-			self._handleState();
-		}
 	});
-            }
-        },
-
-        initWithPath: {
-            value: function(path) {
-	this._path = path;
-	this._json = null;
-	return this;
-            }
-        },
-
-        //this is meant to be global and common for all instances
-        _knownURLs: { writable: true, value: {} },
-
-        //to be invoked by subclass, so that ids can be ensured to not overlap
-        loaderContext: {
-            value: function() {
-	if (typeof this._knownURLs[this._path] === "undefined") {
-		this._knownURLs[this._path] = Object.keys(this._knownURLs).length;
-	}
-	return "__" + this._knownURLs[this._path];
-            }
-        },
-
-        initWithJSON: {
-            value: function(json, baseURL) {
-	this.json = json;
-	this.baseURL = baseURL;
-	if (!baseURL) {
-		console.log("WARNING: no base URL passed to Reader:initWithJSON");
-	}
-	return this;
-            }
-        }
-
-    });
 
-	if (root) {
+	if(root) {
 		root.glTFParser = glTFParser;
 	}
 

+ 13 - 13
examples/js/loaders/gltf/glTFAnimation.js

@@ -24,7 +24,7 @@ THREE.glTFAnimator = ( function () {
 
 		update : function()
 		{
-			for (i = 0; i < animators.length; i ++)
+			for (i = 0; i < animators.length; i++)
 			{
 				animators[i].update();
 			}
@@ -45,18 +45,18 @@ THREE.glTFAnimation = function(interps)
 	{
 		this.createInterpolators(interps);
 	}
-};
+}
 
 THREE.glTFAnimation.prototype.createInterpolators = function(interps)
 {
 	var i, len = interps.length;
-	for (i = 0; i < len; i ++)
+	for (i = 0; i < len; i++)
 	{
 		var interp = new THREE.glTFInterpolator(interps[i]);
 		this.interps.push(interp);
 		this.duration = Math.max(this.duration, interp.duration);
 	}
-};
+}
 
 // Start/stop
 THREE.glTFAnimation.prototype.play = function()
@@ -67,13 +67,13 @@ THREE.glTFAnimation.prototype.play = function()
 	this.startTime = Date.now();
 	this.running = true;
 	THREE.glTFAnimator.add(this);
-};
+}
 
 THREE.glTFAnimation.prototype.stop = function()
 {
 	this.running = false;
 	THREE.glTFAnimator.remove(this);
-};
+}
 
 // Update - drive key frame evaluation
 THREE.glTFAnimation.prototype.update = function()
@@ -90,7 +90,7 @@ THREE.glTFAnimation.prototype.update = function()
 	{
 		this.running = false;
 		var i, len = this.interps.length;
-		for (i = 0; i < len; i ++)
+		for (i = 0; i < len; i++)
 		{
 			this.interps[i].interp(this.duration);
 		}
@@ -100,12 +100,12 @@ THREE.glTFAnimation.prototype.update = function()
 	else
 	{
 		var i, len = this.interps.length;
-		for (i = 0; i < len; i ++)
+		for (i = 0; i < len; i++)
 		{
 			this.interps[i].interp(t);
 		}
 	}
-};
+}
 
 //Interpolator class
 //Construction/initialization
@@ -147,7 +147,7 @@ THREE.glTFInterpolator = function(param)
 	this.quat1 = new THREE.Quaternion;
 	this.quat2 = new THREE.Quaternion;
 	this.quat3 = new THREE.Quaternion;
-};
+}
 
 //Interpolation and tweening methods
 THREE.glTFInterpolator.prototype.interp = function(t)
@@ -202,7 +202,7 @@ THREE.glTFInterpolator.prototype.interp = function(t)
 	}
 	else
 	{
-		for (i = 0; i < this.count - 1; i ++)
+		for (i = 0; i < this.count - 1; i++)
 		{
 			var key1 = this.keys[i];
 			var key2 = this.keys[i + 1];
@@ -238,7 +238,7 @@ THREE.glTFInterpolator.prototype.interp = function(t)
 	{
 		this.copyValue(this.target);
 	}
-};
+}
 
 THREE.glTFInterpolator.prototype.copyValue = function(target) {
 	
@@ -248,4 +248,4 @@ THREE.glTFInterpolator.prototype.copyValue = function(target) {
 	else {
 		target.copy(this.vec3);
 	}		
-};
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1466 - 1103
examples/js/loaders/gltf/glTFLoader.js


+ 185 - 106
examples/js/loaders/gltf/glTFLoaderUtils.js

@@ -26,8 +26,8 @@ THREE.GLTFLoaderUtils = Object.create(Object, {
         value: function() {
 	        this._streams = {};
 	        this._streamsStatus = {};
-	this._resources = {};
-	this._resourcesStatus = {};
+            this._resources = {};
+            this._resourcesStatus = {};
         }
     },
 
@@ -35,60 +35,119 @@ THREE.GLTFLoaderUtils = Object.create(Object, {
     _containsResource: {
         enumerable: false,
         value: function(resourceID) {
-	return this._resources[resourceID] ? true : false;
+            return this._resources[resourceID] ? true : false;
         }
     },
 
     _storeResource: {
         enumerable: false,
         value: function(resourceID, resource) {
-	if (!resourceID) {
-		console.log("ERROR: entry does not contain id, cannot store");
-		return;
-	}
+            if (!resourceID) {
+                console.log("ERROR: entry does not contain id, cannot store");
+                return;
+            }
 
-	if (this._containsResource[resourceID]) {
-		console.log("WARNING: resource:" + resourceID + " is already stored, overriding");
-	}
+            if (this._containsResource[resourceID]) {
+                console.log("WARNING: resource:"+resourceID+" is already stored, overriding");
+            }
 
-	this._resources[resourceID] = resource;
+           this._resources[resourceID] = resource;
         }
     },
 
     _getResource: {
         enumerable: false,
         value: function(resourceID) {
-	return this._resources[resourceID];
+            return this._resources[resourceID];
         }
     },
 
     _loadStream: {
         value: function(path, type, delegate) {
-	var self = this;
 
-	if (!type) {
-		delegate.handleError(THREE.GLTFLoaderUtils.INVALID_TYPE, null);
-		return;
-	}
 
-	if (!path) {
-		delegate.handleError(THREE.GLTFLoaderUtils.INVALID_PATH);
-		return;
-	}
 
-	var xhr = new XMLHttpRequest();
-	xhr.open('GET', path, true);
-	xhr.responseType = (type === this.ARRAY_BUFFER) ? "arraybuffer" : "text";
+            var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
+
+            function decodeDataUriText(isBase64, data) {
+                var result = decodeURIComponent(data);
+                if (isBase64) {
+                    return atob(result);
+                }
+                return result;
+            }
+
+            function decodeDataUriArrayBuffer(isBase64, data) {
+                var byteString = decodeDataUriText(isBase64, data);
+                var buffer = new ArrayBuffer(byteString.length);
+                var view = new Uint8Array(buffer);
+                for (var i = 0; i < byteString.length; i++) {
+                    view[i] = byteString.charCodeAt(i);
+                }
+                return buffer;
+            }
+
+            function decodeDataUri(dataUriRegexResult, responseType) {
+                responseType = typeof responseType !== 'undefined' ? responseType : '';
+                var mimeType = dataUriRegexResult[1];
+                var isBase64 = !!dataUriRegexResult[2];
+                var data = dataUriRegexResult[3];
+
+                switch (responseType) {
+                case '':
+                case 'text':
+                    return decodeDataUriText(isBase64, data);
+                case 'ArrayBuffer':
+                    return decodeDataUriArrayBuffer(isBase64, data);
+                case 'blob':
+                    var buffer = decodeDataUriArrayBuffer(isBase64, data);
+                    return new Blob([buffer], {
+                        type : mimeType
+                    });
+                case 'document':
+                    var parser = new DOMParser();
+                    return parser.parseFromString(decodeDataUriText(isBase64, data), mimeType);
+                case 'json':
+                    return JSON.parse(decodeDataUriText(isBase64, data));
+                default:
+                    throw 'Unhandled responseType: ' + responseType;
+                }
+            }
+
+            var dataUriRegexResult = dataUriRegex.exec(path);
+            if (dataUriRegexResult !== null) {
+                delegate.streamAvailable(path, decodeDataUri(dataUriRegexResult, type));
+                return;
+            }
+
+            var self = this;
+
+            if (!type) {
+                delegate.handleError(THREE.GLTFLoaderUtils.INVALID_TYPE, null);
+                return;
+            }
+
+            if (!path) {
+                delegate.handleError(THREE.GLTFLoaderUtils.INVALID_PATH);
+                return;
+            }
+
+            var xhr = new XMLHttpRequest();
+            xhr.open('GET', path, true);
+            xhr.responseType = (type === this.ARRAY_BUFFER) ? "arraybuffer" : "text";
 
             //if this is not specified, 1 "big blob" scenes fails to load.
-	xhr.setRequestHeader("If-Modified-Since", "Sat, 01 Jan 1970 00:00:00 GMT");
-	xhr.addEventListener( 'load', function ( event ) {
-		delegate.streamAvailable(path, xhr.response);
-	}, false );
-	xhr.addEventListener( 'error', function ( event ) {
-		delegate.handleError(THREE.GLTFLoaderUtils.XMLHTTPREQUEST_STATUS_ERROR, xhr.status);
-	}, false );
-	xhr.send(null);
+            xhr.setRequestHeader("If-Modified-Since", "Sat, 01 Jan 1970 00:00:00 GMT");
+            xhr.onload = function(e) {
+                if ((xhr.status == 200) || (xhr.status == 206)) {
+
+                    delegate.streamAvailable(path, xhr.response);
+
+                } else {
+                    delegate.handleError(THREE.GLTFLoaderUtils.XMLHTTPREQUEST_STATUS_ERROR, this.status);
+                }
+            };
+            xhr.send(null);
         }
     },
 
@@ -97,89 +156,109 @@ THREE.GLTFLoaderUtils = Object.create(Object, {
 
     _handleRequest: {
         value: function(request) {
-	var resourceStatus = this._resourcesStatus[request.id];
-	if (resourceStatus)
+            var resourceStatus = this._resourcesStatus[request.id];
+            if (resourceStatus)
             {
-		this._resourcesStatus[request.id] ++;
-	}
+            	this._resourcesStatus[request.id]++;
+            }
             else
-	{
-		this._resourcesStatus[request.id] = 1;
-	}
+            {
+            	this._resourcesStatus[request.id] = 1;
+            }
             
-	var streamStatus = this._streamsStatus[request.path];
-	if (streamStatus && streamStatus.status === "loading" )
+            var streamStatus = this._streamsStatus[request.uri];
+            if (streamStatus && streamStatus.status === "loading" )
             {
-		streamStatus.requests.push(request);
-		return;
-	}
+            	streamStatus.requests.push(request);
+                return;
+            }
             
-	this._streamsStatus[request.path] = { status : "loading", requests : [ request ] };
+            this._streamsStatus[request.uri] = { status : "loading", requests : [request] };
     		
-	var self = this;
-	var processResourceDelegate = {};
-
-	processResourceDelegate.streamAvailable = function(path, res_) {
-		var streamStatus = self._streamsStatus[path];
-		var requests = streamStatus.requests;
-		requests.forEach( function(req_) {
-			var subArray = res_.slice(req_.range[0], req_.range[1]);
-			var convertedResource = req_.delegate.convert(subArray, req_.ctx);
-			self._storeResource(req_.id, convertedResource);
-			req_.delegate.resourceAvailable(convertedResource, req_.ctx);
-			-- self._resourcesStatus[req_.id];
-
-		}, this);
+            var self = this;
+            var processResourceDelegate = {};
+
+            processResourceDelegate.streamAvailable = function(path, res_) {
+            	var streamStatus = self._streamsStatus[path];
+            	var requests = streamStatus.requests;
+                requests.forEach( function(req_) {
+                    var subArray = res_.slice(req_.range[0], req_.range[1]);
+                    var convertedResource = req_.delegate.convert(subArray, req_.ctx);
+                    self._storeResource(req_.id, convertedResource);
+                    req_.delegate.resourceAvailable(convertedResource, req_.ctx);
+                    --self._resourcesStatus[req_.id];
+
+                }, this);
             	
-		delete self._streamsStatus[path];
+                delete self._streamsStatus[path];
 
-	};
+            };
 
-	processResourceDelegate.handleError = function(errorCode, info) {
-		request.delegate.handleError(errorCode, info);
-	};
+            processResourceDelegate.handleError = function(errorCode, info) {
+                request.delegate.handleError(errorCode, info);
+            }
 
-	this._loadStream(request.path, request.type, processResourceDelegate);
+            this._loadStream(request.uri, request.type, processResourceDelegate);
         }
     },
 
 
     _elementSizeForGLType: {
-        value: function(glType) {
-	switch (glType) {
-		case WebGLRenderingContext.FLOAT :
-			return Float32Array.BYTES_PER_ELEMENT;
-		case WebGLRenderingContext.UNSIGNED_BYTE :
-			return Uint8Array.BYTES_PER_ELEMENT;
-		case WebGLRenderingContext.UNSIGNED_SHORT :
-			return Uint16Array.BYTES_PER_ELEMENT;
-		case WebGLRenderingContext.FLOAT_VEC2 :
-			return Float32Array.BYTES_PER_ELEMENT * 2;
-		case WebGLRenderingContext.FLOAT_VEC3 :
-			return Float32Array.BYTES_PER_ELEMENT * 3;
-		case WebGLRenderingContext.FLOAT_VEC4 :
-			return Float32Array.BYTES_PER_ELEMENT * 4;
-		case WebGLRenderingContext.FLOAT_MAT3 :
-			return Float32Array.BYTES_PER_ELEMENT * 9;
-		case WebGLRenderingContext.FLOAT_MAT4 :
-			return Float32Array.BYTES_PER_ELEMENT * 16;
-		default:
-			return null;
-	}
+        value: function(componentType, type) {
+    	
+    		var nElements = 0;
+    		switch(type) {    		
+	            case "SCALAR" :
+	                nElements = 1;
+	                break;
+	            case "VEC2" :
+	                nElements = 2;
+	                break;
+	            case "VEC3" :
+	                nElements = 3;
+	                break;
+	            case "VEC4" :
+	                nElements = 4;
+	                break;
+	            case "MAT2" :
+	                nElements = 4;
+	                break;
+	            case "MAT3" :
+	                nElements = 9;
+	                break;
+	            case "MAT4" :
+	                nElements = 16;
+	                break;
+	            default :
+	            	debugger;
+	            	break;
+    		}
+    		
+            switch (componentType) {
+                case WebGLRenderingContext.FLOAT :
+                    return Float32Array.BYTES_PER_ELEMENT * nElements;
+                case WebGLRenderingContext.UNSIGNED_BYTE :
+                    return Uint8Array.BYTES_PER_ELEMENT * nElements;
+                case WebGLRenderingContext.UNSIGNED_SHORT :
+                    return Uint16Array.BYTES_PER_ELEMENT * nElements;
+                default :
+                	debugger;
+                    return null;
+            }
         }
     },
 
     _handleWrappedBufferViewResourceLoading: {
         value: function(wrappedBufferView, delegate, ctx) {
-	var bufferView = wrappedBufferView.bufferView;
-	var buffer = bufferView.buffer;
-	var byteOffset = wrappedBufferView.byteOffset + bufferView.description.byteOffset;
-	var range = [ byteOffset, (this._elementSizeForGLType(wrappedBufferView.type) * wrappedBufferView.count) + byteOffset ];
+            var bufferView = wrappedBufferView.bufferView;
+            var buffer = bufferView.buffer;
+            var byteOffset = wrappedBufferView.byteOffset + bufferView.description.byteOffset;
+            var range = [byteOffset , (this._elementSizeForGLType(wrappedBufferView.componentType, wrappedBufferView.type) * wrappedBufferView.count) + byteOffset];
 
-	this._handleRequest({ "id" : wrappedBufferView.id,
+            this._handleRequest({   "id" : wrappedBufferView.id,
                                     "range" : range,
                                     "type" : buffer.description.type,
-                                    "path" : buffer.description.path,
+                                    "uri" : buffer.description.uri,
                                     "delegate" : delegate,
                                     "ctx" : ctx }, null);
         }
@@ -189,14 +268,14 @@ THREE.GLTFLoaderUtils = Object.create(Object, {
     	
             value: function(wrappedBufferView, delegate, ctx) {
 
-	var savedBuffer = this._getResource(wrappedBufferView.id);
-	if (savedBuffer) {
-		return savedBuffer;
-	} else {
-		this._handleWrappedBufferViewResourceLoading(wrappedBufferView, delegate, ctx);
-	}
+            var savedBuffer = this._getResource(wrappedBufferView.id);
+            if (false) { // savedBuffer) {
+                return savedBuffer;
+            } else {
+                this._handleWrappedBufferViewResourceLoading(wrappedBufferView, delegate, ctx);
+            }
 
-	return null;
+            return null;
         }
     },
 
@@ -204,17 +283,17 @@ THREE.GLTFLoaderUtils = Object.create(Object, {
     	
         value: function(request, delegate, ctx) {
 
-	request.delegate = delegate;
-	request.ctx = ctx;
+    		request.delegate = delegate;
+    		request.ctx = ctx;
 
-	this._handleRequest({ "id" : request.id,
-                "path" : request.path,
-                "range" : [ 0 ],
+            this._handleRequest({   "id" : request.id,
+                "uri" : request.uri,
+                "range" : [0],
                 "type" : "text",
                 "delegate" : delegate,
                 "ctx" : ctx }, null);
     	
-	return null;
-}
+            return null;
+	    }
 	},    
 });

+ 145 - 0
examples/js/loaders/gltf/glTFShaders.js

@@ -0,0 +1,145 @@
+/**
+ * @author Tony Parisi / http://www.tonyparisi.com/
+ */
+
+THREE.glTFShaders = ( function () {
+
+	var shaders = [];
+
+	return	{
+		add : function(shader) {
+			shaders.push(shader);
+		},
+
+		remove: function(shader) {
+
+			var i = shaders.indexOf(shader);
+
+			if ( i !== -1 ) {
+				shaders.splice( i, 1 );
+			}
+		},
+
+		removeAll: function(shader) {
+
+			// probably want to clean up the shaders, too, but not for now
+			shaders = [];
+		},
+
+		bindShaderParameters: function(scene) {
+			for (i = 0; i < shaders.length; i++)
+			{
+				shaders[i].bindParameters(scene);
+			}
+		},
+
+		update : function(scene, camera) {
+			for (i = 0; i < shaders.length; i++)
+			{
+				shaders[i].update(scene, camera);
+			}
+		},
+	};
+})();
+
+// Construction/initialization
+THREE.glTFShader = function(material, params, object, scene) {
+	this.material = material;
+	this.parameters = params.technique.parameters;
+	this.uniforms = params.technique.uniforms;
+	this.joints = params.joints;
+	this.object = object;
+	this.semantics = {};
+	this.m4 = new THREE.Matrix4;
+}
+
+
+// bindParameters - connect the uniform values to their source parameters
+THREE.glTFShader.prototype.bindParameters = function(scene) {
+
+	function findObject(o, p) { 
+		if (o.glTFID == param.node) {
+			p.sourceObject = o;
+		}
+	}
+
+	for (var uniform in this.uniforms) {
+		var pname = this.uniforms[uniform];
+		var param = this.parameters[pname];
+		if (param.semantic) {
+
+			var p = { 
+				semantic : param.semantic,
+				uniform: this.material.uniforms[uniform] 
+			};
+
+			if (param.node) {
+				scene.traverse(function(o) { findObject(o, p)});
+			}
+			else {
+				p.sourceObject = this.object;
+			}			
+
+			this.semantics[pname] = p;
+
+		}
+	}
+
+}
+
+// Update - update all the uniform values
+THREE.glTFShader.prototype.update = function(scene, camera) {
+
+	// update scene graph
+
+	scene.updateMatrixWorld();
+
+	// update camera matrices and frustum
+	camera.updateMatrixWorld();
+	camera.matrixWorldInverse.getInverse( camera.matrixWorld );
+
+	for (var sname in this.semantics) {
+		var semantic = this.semantics[sname];
+        if (semantic) {
+	        switch (semantic.semantic) {
+	            case "MODELVIEW" :
+	            	var m4 = semantic.uniform.value;
+	            	m4.multiplyMatrices(camera.matrixWorldInverse, 
+	            		semantic.sourceObject.matrixWorld);
+	                break;
+
+	            case "MODELVIEWINVERSETRANSPOSE" :
+	            	var m3 = semantic.uniform.value;
+	            	this.m4.multiplyMatrices(camera.matrixWorldInverse, 
+	            		semantic.sourceObject.matrixWorld);
+					m3.getNormalMatrix(this.m4);
+	                break;
+
+	            case "PROJECTION" :
+	            	var m4 = semantic.uniform.value;
+	            	m4.copy(camera.projectionMatrix);            		
+	                break;
+
+	            case "JOINTMATRIX" :
+	            
+	            	var m4v = semantic.uniform.value;
+					for (var mi = 0; mi < m4v.length; mi++) {
+						// So it goes like this:
+						// SkinnedMesh world matrix is already baked into MODELVIEW;
+						// ransform joints to local space,
+						// then transform using joint's inverse
+						m4v[mi].getInverse(semantic.sourceObject.matrixWorld).
+							multiply(this.joints[mi].matrixWorld).
+							multiply(this.object.skeleton.boneInverses[mi]);
+					}
+	            
+	                //console.log("Joint:", semantic)
+	                break;
+
+	            default :
+	                throw new Error("Unhandled shader semantic" + semantic);
+	                break;
+	        }
+        }
+	}
+}

+ 204 - 0
examples/js/loaders/gltf/gltfUtilities.js

@@ -0,0 +1,204 @@
+/**
+gltfUtilities
+@license
+The MIT License (MIT)
+Copyright (c) 2014 Analytical Graphics, Inc.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+(function(root, factory) {
+    "use strict";
+    /*global define*/
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define([], factory);
+    } else {
+        // Browser globals
+        root.gltfUtilities = factory();
+    }
+}(this, function() {
+    "use strict";
+
+    /**
+     * Given a URL, determine whether that URL is considered cross-origin to the current page.
+     */
+    var isCrossOriginUrl = function(url) {
+        var location = window.location;
+        var a = document.createElement('a');
+
+        a.href = url;
+
+        // host includes both hostname and port if the port is not standard
+        return location.protocol !== a.protocol || location.host !== a.host;
+    };
+
+    var isDataUriRegex = /^data:/;
+
+    /**
+     * Asynchronously loads the given image URL.  Attempts to load cross-origin images using CORS.
+     *
+     * @param {String} url The source of the image.
+     * @param {Function} success A function that will be called with an Image object
+     *                           once the image has loaded successfully.
+     * @param {Function} [error] A function that will be called if the request fails.
+     *
+     * @see <a href='http://www.w3.org/TR/cors/'>Cross-Origin Resource Sharing</a>
+     */
+    var loadImage = function(url, success, error) {
+        var image = new Image();
+
+        image.onload = function() {
+            success(image);
+        };
+
+        if (typeof error !== 'undefined') {
+            image.onerror = error;
+        }
+
+        var crossOrigin;
+        if (isDataUriRegex.test(url)) {
+            crossOrigin = false;
+        } else {
+            crossOrigin = isCrossOriginUrl(url);
+        }
+
+        if (crossOrigin) {
+            image.crossOrigin = '';
+        }
+
+        image.src = url;
+    };
+
+    var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
+
+    function decodeDataUriText(isBase64, data) {
+        var result = decodeURIComponent(data);
+        if (isBase64) {
+            return atob(result);
+        }
+        return result;
+    }
+
+    function decodeDataUriArrayBuffer(isBase64, data) {
+        var byteString = decodeDataUriText(isBase64, data);
+        var buffer = new ArrayBuffer(byteString.length);
+        var view = new Uint8Array(buffer);
+        for (var i = 0; i < byteString.length; i++) {
+            view[i] = byteString.charCodeAt(i);
+        }
+        return buffer;
+    }
+
+    function decodeDataUri(dataUriRegexResult, responseType) {
+        responseType = typeof responseType !== 'undefined' ? responseType : '';
+        var mimeType = dataUriRegexResult[1];
+        var isBase64 = !!dataUriRegexResult[2];
+        var data = dataUriRegexResult[3];
+
+        switch (responseType) {
+        case '':
+        case 'text':
+            return decodeDataUriText(isBase64, data);
+        case 'arraybuffer':
+            return decodeDataUriArrayBuffer(isBase64, data);
+        case 'blob':
+            var buffer = decodeDataUriArrayBuffer(isBase64, data);
+            return new Blob([buffer], {
+                type : mimeType
+            });
+        case 'document':
+            var parser = new DOMParser();
+            return parser.parseFromString(decodeDataUriText(isBase64, data), mimeType);
+        case 'json':
+            return JSON.parse(decodeDataUriText(isBase64, data));
+        default:
+            throw 'Unhandled responseType: ' + responseType;
+        }
+    }
+
+    var loadWithXhr = function(url, responseType, success, error) {
+        var dataUriRegexResult = dataUriRegex.exec(url);
+        if (dataUriRegexResult !== null) {
+            success(decodeDataUri(dataUriRegexResult, responseType));
+            return;
+        }
+
+        var xhr = new XMLHttpRequest();
+        xhr.open('GET', url, true);
+
+        if (typeof responseType !== 'undefined') {
+            xhr.responseType = responseType;
+        }
+
+        xhr.onload = function(e) {
+            if (xhr.status === 200) {
+                success(xhr.response);
+            } else {
+                error(xhr);
+            }
+        };
+
+        xhr.onerror = function(e) {
+            error(xhr);
+        };
+
+        xhr.send();
+    };
+
+    /**
+     * Asynchronously loads the given URL as raw binary data.  The data is loaded
+     * using XMLHttpRequest, which means that in order to make requests to another origin,
+     * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.
+     *
+     * @param {String} url The URL of the binary data.
+     * @param {Function} success A function that will be called with an ArrayBuffer object
+     *                           once the data has loaded successfully.
+     * @param {Function} [error] A function that will be called with the XMLHttpRequest object
+     *                           if the request fails.
+     *
+     * @see <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest</a>
+     * @see <a href='http://www.w3.org/TR/cors/'>Cross-Origin Resource Sharing</a>
+     */
+    var loadArrayBuffer = function(url, success, error) {
+        loadWithXhr(url, 'arraybuffer', success, error);
+    };
+
+    /**
+     * Asynchronously loads the given URL as text.  The data is loaded
+     * using XMLHttpRequest, which means that in order to make requests to another origin,
+     * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.
+     *
+     * @param {String} url The URL to request.
+     * @param {Function} success A function that will be called with a String
+     *                           once the data has loaded successfully.
+     * @param {Function} [error] A function that will be called with the XMLHttpRequest object
+     *                           if the request fails.
+     *
+     * @see <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest</a>
+     * @see <a href='http://www.w3.org/TR/cors/'>Cross-Origin Resource Sharing</a>
+     */
+    var loadText = function(url, success, error) {
+        return loadWithXhr(url, undefined, success, error);
+    };
+
+    return {
+        loadImage : loadImage,
+        loadArrayBuffer : loadArrayBuffer,
+        loadText : loadText
+    };
+}));
+
+

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

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

BIN
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.bin


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

@@ -0,0 +1,2111 @@
+{
+    "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
+        }
+    }
+}

BIN
examples/models/gltf/CesiumMan/glTF-MaterialsCommon/Cesium_Man.jpg


BIN
examples/models/gltf/CesiumMan/glTF/Cesium_Man.bin


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

@@ -0,0 +1,2207 @@
+{
+    "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
+        }
+    }
+}

BIN
examples/models/gltf/CesiumMan/glTF/Cesium_Man.jpg


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

@@ -0,0 +1,25 @@
+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;
+}

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

@@ -0,0 +1,22 @@
+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;
+}

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

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

BIN
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.bin


+ 610 - 0
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.gltf

@@ -0,0 +1,610 @@
+{
+    "accessors": {
+        "accessor_100": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 7032,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.999039,
+                0.999038,
+                1
+            ],
+            "min": [
+                -0.999038,
+                -0.999038,
+                -1
+            ],
+            "type": "VEC3"
+        },
+        "accessor_102": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 14064,
+            "byteStride": 8,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.993657,
+                0.989576
+            ],
+            "min": [
+                0.605093,
+                0.00905001
+            ],
+            "type": "VEC2"
+        },
+        "accessor_63": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 4608,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 5232,
+            "type": "SCALAR"
+        },
+        "accessor_66": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 15072,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 168,
+            "type": "SCALAR"
+        },
+        "accessor_69": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 15408,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 864,
+            "type": "SCALAR"
+        },
+        "accessor_71": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 18752,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2392,
+            "max": [
+                2.438,
+                2.58437,
+                1.396
+            ],
+            "min": [
+                -2.43091,
+                0.2668,
+                -1.396
+            ],
+            "type": "VEC3"
+        },
+        "accessor_73": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 47456,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2392,
+            "max": [
+                1,
+                1,
+                1
+            ],
+            "min": [
+                -1,
+                -1,
+                -1
+            ],
+            "type": "VEC3"
+        },
+        "accessor_75": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 76160,
+            "byteStride": 8,
+            "componentType": 5126,
+            "count": 2392,
+            "max": [
+                0.896458,
+                0.997245
+            ],
+            "min": [
+                0.00295639,
+                0.015672
+            ],
+            "type": "VEC2"
+        },
+        "accessor_96": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 0,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 2304,
+            "type": "SCALAR"
+        },
+        "accessor_98": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 0,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.4278,
+                0.4278,
+                1.058
+            ],
+            "min": [
+                -0.4278,
+                -0.4278,
+                -1.058
+            ],
+            "type": "VEC3"
+        },
+        "animAccessor_0": {
+            "bufferView": "bufferView_103",
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 31,
+            "type": "SCALAR"
+        },
+        "animAccessor_1": {
+            "bufferView": "bufferView_103",
+            "byteOffset": 124,
+            "componentType": 5126,
+            "count": 31,
+            "type": "VEC4"
+        }
+    },
+    "animations": {
+        "animation_0": {
+            "channels": [
+                {
+                    "sampler": "animation_0_rotation_sampler",
+                    "target": {
+                        "id": "Geometry-mesh001Node",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_1"
+            },
+            "samplers": {
+                "animation_0_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                }
+            }
+        },
+        "animation_1": {
+            "channels": [
+                {
+                    "sampler": "animation_1_rotation_sampler",
+                    "target": {
+                        "id": "meshInst962Node",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_1"
+            },
+            "samplers": {
+                "animation_1_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                }
+            }
+        }
+    },
+    "asset": {
+        "generator": "collada2gltf@cf6371beb0bdc18ba603378d5e40c966da53d385",
+        "premultipliedAlpha": true,
+        "profile": {
+            "api": "WebGL",
+            "version": "1.0.2"
+        },
+        "version": "1.0"
+    },
+    "bufferViews": {
+        "bufferView_103": {
+            "buffer": "CesiumMilkTruck",
+            "byteLength": 620,
+            "byteOffset": 0
+        },
+        "bufferView_104": {
+            "buffer": "CesiumMilkTruck",
+            "byteLength": 17136,
+            "byteOffset": 620,
+            "target": 34963
+        },
+        "bufferView_105": {
+            "buffer": "CesiumMilkTruck",
+            "byteLength": 95296,
+            "byteOffset": 17756,
+            "target": 34962
+        }
+    },
+    "buffers": {
+        "CesiumMilkTruck": {
+            "byteLength": 113052,
+            "type": "arraybuffer",
+            "uri": "CesiumMilkTruck.bin"
+        }
+    },
+    "extensions": {
+        "KHR_materials_common": {
+            "lights": {
+                "Light-polyRender006": {
+                    "ambient": {
+                        "color": [
+                            0,
+                            0,
+                            0
+                        ]
+                    },
+                    "name": "Render",
+                    "type": "ambient"
+                }
+            }
+        }
+    },
+    "extensionsUsed": [
+        "KHR_materials_common"
+    ],
+    "images": {
+        "Image0001": {
+            "name": "Image0001",
+            "uri": "CesiumMilkTruck.png"
+        }
+    },
+    "materials": {
+        "Effect-glass": {
+            "extensions": {
+                "KHR_materials_common": {
+                    "doubleSided": false,
+                    "jointCount": 0,
+                    "technique": "PHONG",
+                    "transparent": false,
+                    "values": {
+                        "diffuse": [
+                            0,
+                            0.0405063,
+                            0.0212407,
+                            1
+                        ],
+                        "shininess": 256,
+                        "specular": [
+                            0.65,
+                            0.65,
+                            0.65,
+                            1
+                        ]
+                    }
+                }
+            },
+            "name": "glass"
+        },
+        "Effect-truck": {
+            "extensions": {
+                "KHR_materials_common": {
+                    "doubleSided": false,
+                    "jointCount": 0,
+                    "technique": "PHONG",
+                    "transparent": false,
+                    "values": {
+                        "diffuse": "texture_Image0001",
+                        "shininess": 256,
+                        "specular": [
+                            0.04,
+                            0.04,
+                            0.04,
+                            1
+                        ]
+                    }
+                }
+            },
+            "name": "truck"
+        },
+        "Effect-wheels": {
+            "extensions": {
+                "KHR_materials_common": {
+                    "doubleSided": false,
+                    "jointCount": 0,
+                    "technique": "PHONG",
+                    "transparent": false,
+                    "values": {
+                        "diffuse": "texture_Image0001",
+                        "shininess": 256,
+                        "specular": [
+                            0.04,
+                            0.04,
+                            0.04,
+                            1
+                        ]
+                    }
+                }
+            },
+            "name": "wheels"
+        },
+        "Effect-window_trim": {
+            "extensions": {
+                "KHR_materials_common": {
+                    "doubleSided": false,
+                    "jointCount": 0,
+                    "technique": "PHONG",
+                    "transparent": false,
+                    "values": {
+                        "diffuse": [
+                            0.064,
+                            0.064,
+                            0.064,
+                            1
+                        ],
+                        "shininess": 256,
+                        "specular": [
+                            0.04,
+                            0.04,
+                            0.04,
+                            1
+                        ]
+                    }
+                }
+            },
+            "name": "window_trim"
+        }
+    },
+    "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
+                }
+            ]
+        },
+        "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
+                }
+            ]
+        }
+    },
+    "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": [],
+            "extensions": {
+                "KHR_materials_common": {
+                    "light": "Light-polyRender006"
+                }
+            },
+            "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_"
+        }
+    },
+    "samplers": {
+        "sampler_0": {
+            "magFilter": 9729,
+            "minFilter": 9987,
+            "wrapS": 10497,
+            "wrapT": 10497
+        }
+    },
+    "scene": "defaultScene",
+    "scenes": {
+        "defaultScene": {
+            "nodes": [
+                "polyRender006",
+                "Geometry-mesh002Node",
+                "groupLocator006Node"
+            ]
+        }
+    },
+    "skins": {},
+    "textures": {
+        "texture_Image0001": {
+            "format": 6408,
+            "internalFormat": 6408,
+            "sampler": "sampler_0",
+            "source": "Image0001",
+            "target": 3553,
+            "type": 5121
+        }
+    }
+}

BIN
examples/models/gltf/CesiumMilkTruck/glTF-MaterialsCommon/CesiumMilkTruck.png


BIN
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.bin


+ 705 - 0
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.gltf

@@ -0,0 +1,705 @@
+{
+    "accessors": {
+        "accessor_100": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 7032,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.999039,
+                0.999038,
+                1
+            ],
+            "min": [
+                -0.999038,
+                -0.999038,
+                -1
+            ],
+            "type": "VEC3"
+        },
+        "accessor_102": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 14064,
+            "byteStride": 8,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.993657,
+                0.989576
+            ],
+            "min": [
+                0.605093,
+                0.00905001
+            ],
+            "type": "VEC2"
+        },
+        "accessor_63": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 4608,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 5232,
+            "type": "SCALAR"
+        },
+        "accessor_66": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 15072,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 168,
+            "type": "SCALAR"
+        },
+        "accessor_69": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 15408,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 864,
+            "type": "SCALAR"
+        },
+        "accessor_71": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 18752,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2392,
+            "max": [
+                2.438,
+                2.58437,
+                1.396
+            ],
+            "min": [
+                -2.43091,
+                0.2668,
+                -1.396
+            ],
+            "type": "VEC3"
+        },
+        "accessor_73": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 47456,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2392,
+            "max": [
+                1,
+                1,
+                1
+            ],
+            "min": [
+                -1,
+                -1,
+                -1
+            ],
+            "type": "VEC3"
+        },
+        "accessor_75": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 76160,
+            "byteStride": 8,
+            "componentType": 5126,
+            "count": 2392,
+            "max": [
+                0.896458,
+                0.997245
+            ],
+            "min": [
+                0.00295639,
+                0.015672
+            ],
+            "type": "VEC2"
+        },
+        "accessor_96": {
+            "bufferView": "bufferView_104",
+            "byteOffset": 0,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 2304,
+            "type": "SCALAR"
+        },
+        "accessor_98": {
+            "bufferView": "bufferView_105",
+            "byteOffset": 0,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 586,
+            "max": [
+                0.4278,
+                0.4278,
+                1.058
+            ],
+            "min": [
+                -0.4278,
+                -0.4278,
+                -1.058
+            ],
+            "type": "VEC3"
+        },
+        "animAccessor_0": {
+            "bufferView": "bufferView_103",
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 31,
+            "type": "SCALAR"
+        },
+        "animAccessor_1": {
+            "bufferView": "bufferView_103",
+            "byteOffset": 124,
+            "componentType": 5126,
+            "count": 31,
+            "type": "VEC4"
+        }
+    },
+    "animations": {
+        "animation_0": {
+            "channels": [
+                {
+                    "sampler": "animation_0_rotation_sampler",
+                    "target": {
+                        "id": "Geometry-mesh001Node",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_1"
+            },
+            "samplers": {
+                "animation_0_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                }
+            }
+        },
+        "animation_1": {
+            "channels": [
+                {
+                    "sampler": "animation_1_rotation_sampler",
+                    "target": {
+                        "id": "meshInst962Node",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "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"
+        },
+        "version": 1
+    },
+    "bufferViews": {
+        "bufferView_103": {
+            "buffer": "CesiumMilkTruck",
+            "byteLength": 620,
+            "byteOffset": 0
+        },
+        "bufferView_104": {
+            "buffer": "CesiumMilkTruck",
+            "byteLength": 17136,
+            "byteOffset": 620,
+            "target": 34963
+        },
+        "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"
+        }
+    },
+    "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
+                ]
+            }
+        },
+        "Effect-truck": {
+            "name": "truck",
+            "technique": "technique1",
+            "values": {
+                "diffuse": "texture_Image0001",
+                "shininess": 256,
+                "specular": [
+                    0.04,
+                    0.04,
+                    0.04,
+                    1
+                ]
+            }
+        },
+        "Effect-wheels": {
+            "name": "wheels",
+            "technique": "technique1",
+            "values": {
+                "diffuse": "texture_Image0001",
+                "shininess": 256,
+                "specular": [
+                    0.04,
+                    0.04,
+                    0.04,
+                    1
+                ]
+            }
+        },
+        "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
+                ]
+            }
+        }
+    },
+    "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
+                }
+            ]
+        },
+        "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
+                }
+            ]
+        }
+    },
+    "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"
+        }
+    },
+    "samplers": {
+        "sampler_0": {
+            "magFilter": 9729,
+            "minFilter": 9987,
+            "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"
+            }
+        },
+        "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"
+            }
+        }
+    },
+    "textures": {
+        "texture_Image0001": {
+            "format": 6408,
+            "internalFormat": 6408,
+            "sampler": "sampler_0",
+            "source": "Image0001",
+            "target": 3553,
+            "type": 5121
+        }
+    }
+}

BIN
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck.png


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

@@ -0,0 +1,17 @@
+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;
+}

+ 12 - 0
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck0VS.glsl

@@ -0,0 +1,12 @@
+precision highp float;
+attribute vec3 a_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;
+}

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

@@ -0,0 +1,18 @@
+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;
+}

+ 15 - 0
examples/models/gltf/CesiumMilkTruck/glTF/CesiumMilkTruck1VS.glsl

@@ -0,0 +1,15 @@
+precision highp float;
+attribute vec3 a_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;
+}

+ 7 - 13
examples/models/gltf/duck/README.txt

@@ -1,13 +1,7 @@
----UPDATED 2/21/2007

-Scaled down the duck to a more reasonable size, removed physics scene, removed extra "dummy" transforms and pivot points, added camera and light.

----

-

-This model is a typical bathtub rubber duck.  It uses a single texture.

-

-One version uses a polylist the other is triangles only.

-

-The model has been stripped of all <extra> tags and should be COLLADA 1.4.1 compliant.

-

-For additional information post messages on www.collada.org or mail [email protected]

-

-These models are Copyright 2006 Sony Computer Entertainment Inc. and are distributed under the terms of the SCEA Shared Source License, available at http://research.scea.com/scea_shared_source_license.html
+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:
+
+http://research.scea.com/scea_shared_source_license.html
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

BIN
examples/models/gltf/duck/duck.bin


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 122
examples/models/gltf/duck/duck.dae


BIN
examples/models/gltf/duck/glTF-MaterialsCommon/duck.bin


+ 291 - 0
examples/models/gltf/duck/glTF-MaterialsCommon/duck.gltf

@@ -0,0 +1,291 @@
+{
+    "accessors": {
+        "accessor_21": {
+            "bufferView": "bufferView_29",
+            "byteOffset": 0,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 12636,
+            "type": "SCALAR"
+        },
+        "accessor_23": {
+            "bufferView": "bufferView_30",
+            "byteOffset": 0,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2399,
+            "max": [
+                0.961799,
+                1.6397,
+                0.539252
+            ],
+            "min": [
+                -0.692985,
+                0.0992937,
+                -0.613282
+            ],
+            "type": "VEC3"
+        },
+        "accessor_25": {
+            "bufferView": "bufferView_30",
+            "byteOffset": 28788,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2399,
+            "max": [
+                0.999599,
+                0.999581,
+                0.998436
+            ],
+            "min": [
+                -0.999084,
+                -1,
+                -0.999832
+            ],
+            "type": "VEC3"
+        },
+        "accessor_27": {
+            "bufferView": "bufferView_30",
+            "byteOffset": 57576,
+            "byteStride": 8,
+            "componentType": 5126,
+            "count": 2399,
+            "max": [
+                0.983346,
+                0.980037
+            ],
+            "min": [
+                0.026409,
+                0.019963
+            ],
+            "type": "VEC2"
+        }
+    },
+    "animations": {},
+    "asset": {
+        "generator": "collada2gltf@cf6371beb0bdc18ba603378d5e40c966da53d385",
+        "premultipliedAlpha": true,
+        "profile": {
+            "api": "WebGL",
+            "version": "1.0.2"
+        },
+        "version": "1.0"
+    },
+    "bufferViews": {
+        "bufferView_29": {
+            "buffer": "duck",
+            "byteLength": 25272,
+            "byteOffset": 0,
+            "target": 34963
+        },
+        "bufferView_30": {
+            "buffer": "duck",
+            "byteLength": 76768,
+            "byteOffset": 25272,
+            "target": 34962
+        }
+    },
+    "buffers": {
+        "duck": {
+            "byteLength": 102040,
+            "type": "arraybuffer",
+            "uri": "duck.bin"
+        }
+    },
+    "cameras": {
+        "cameraShape1": {
+            "name": "cameraShape1",
+            "perspective": {
+                "aspect_ratio": 1.5,
+                "yfov": 0.660593,
+                "zfar": 100,
+                "znear": 0.01
+            },
+            "type": "perspective"
+        }
+    },
+    "extensions": {
+        "KHR_materials_common": {
+            "lights": {
+                "directionalLightShape1-lib": {
+                    "directional": {
+                        "color": [
+                            1,
+                            1,
+                            1
+                        ]
+                    },
+                    "name": "directionalLightShape1",
+                    "type": "directional"
+                }
+            }
+        }
+    },
+    "extensionsUsed": [
+        "KHR_materials_common"
+    ],
+    "images": {
+        "file2": {
+            "name": "file2",
+            "uri": "duckCM.png"
+        }
+    },
+    "materials": {
+        "blinn3-fx": {
+            "extensions": {
+                "KHR_materials_common": {
+                    "doubleSided": false,
+                    "jointCount": 0,
+                    "technique": "BLINN",
+                    "transparent": false,
+                    "values": {
+                        "ambient": [
+                            0,
+                            0,
+                            0,
+                            1
+                        ],
+                        "diffuse": "texture_file2",
+                        "emission": [
+                            0,
+                            0,
+                            0,
+                            1
+                        ],
+                        "shininess": 38.4,
+                        "specular": [
+                            0,
+                            0,
+                            0,
+                            1
+                        ]
+                    }
+                }
+            },
+            "name": "blinn3"
+        }
+    },
+    "meshes": {
+        "LOD3spShape-lib": {
+            "name": "LOD3spShape",
+            "primitives": [
+                {
+                    "attributes": {
+                        "NORMAL": "accessor_25",
+                        "POSITION": "accessor_23",
+                        "TEXCOORD_0": "accessor_27"
+                    },
+                    "indices": "accessor_21",
+                    "material": "blinn3-fx",
+                    "mode": 4
+                }
+            ]
+        }
+    },
+    "nodes": {
+        "LOD3sp": {
+            "children": [],
+            "matrix": [
+                1,
+                0,
+                0,
+                0,
+                0,
+                1,
+                0,
+                0,
+                0,
+                0,
+                1,
+                0,
+                0,
+                0,
+                0,
+                1
+            ],
+            "meshes": [
+                "LOD3spShape-lib"
+            ],
+            "name": "LOD3sp"
+        },
+        "camera1": {
+            "camera": "cameraShape1",
+            "children": [],
+            "matrix": [
+                -0.728969,
+                0,
+                -0.684547,
+                0,
+                -0.425205,
+                0.783693,
+                0.452797,
+                0,
+                0.536475,
+                0.621148,
+                -0.571288,
+                0,
+                4.00113,
+                4.63264,
+                -4.31078,
+                1
+            ],
+            "name": "camera1"
+        },
+        "directionalLight1": {
+            "children": [],
+            "extensions": {
+                "KHR_materials_common": {
+                    "light": "directionalLightShape1-lib"
+                }
+            },
+            "matrix": [
+                -0.954692,
+                0.218143,
+                -0.202429,
+                0,
+                0.014672,
+                0.713885,
+                0.700109,
+                0,
+                0.297235,
+                0.665418,
+                -0.684741,
+                0,
+                1.48654,
+                1.83672,
+                -2.92179,
+                1
+            ],
+            "name": "directionalLight1"
+        }
+    },
+    "samplers": {
+        "sampler_0": {
+            "magFilter": 9729,
+            "minFilter": 9987,
+            "wrapS": 10497,
+            "wrapT": 10497
+        }
+    },
+    "scene": "defaultScene",
+    "scenes": {
+        "defaultScene": {
+            "nodes": [
+                "LOD3sp",
+                "camera1",
+                "directionalLight1"
+            ]
+        }
+    },
+    "skins": {},
+    "textures": {
+        "texture_file2": {
+            "format": 6408,
+            "internalFormat": 6408,
+            "sampler": "sampler_0",
+            "source": "file2",
+            "target": 3553,
+            "type": 5121
+        }
+    }
+}

+ 0 - 0
examples/models/gltf/duck/duckCM.png → examples/models/gltf/duck/glTF-MaterialsCommon/duckCM.png


BIN
examples/models/gltf/duck/glTF/duck.bin


+ 119 - 154
examples/models/gltf/duck/duck.json → examples/models/gltf/duck/glTF/duck.gltf

@@ -1,26 +1,36 @@
 {
     "accessors": {
-        "attribute_23": {
+        "accessor_21": {
             "bufferView": "bufferView_29",
             "byteOffset": 0,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 12636,
+            "type": "SCALAR"
+        },
+        "accessor_23": {
+            "bufferView": "bufferView_30",
+            "byteOffset": 0,
             "byteStride": 12,
+            "componentType": 5126,
             "count": 2399,
             "max": [
-                96.1799,
-                163.97,
-                53.9252
+                0.961799,
+                1.6397,
+                0.539252
             ],
             "min": [
-                -69.2985,
-                9.92937,
-                -61.3282
+                -0.692985,
+                0.0992937,
+                -0.613282
             ],
-            "type": 35665
+            "type": "VEC3"
         },
-        "attribute_25": {
-            "bufferView": "bufferView_29",
+        "accessor_25": {
+            "bufferView": "bufferView_30",
             "byteOffset": 28788,
             "byteStride": 12,
+            "componentType": 5126,
             "count": 2399,
             "max": [
                 0.999599,
@@ -32,12 +42,13 @@
                 -1,
                 -0.999832
             ],
-            "type": 35665
+            "type": "VEC3"
         },
-        "attribute_27": {
-            "bufferView": "bufferView_29",
+        "accessor_27": {
+            "bufferView": "bufferView_30",
             "byteOffset": 57576,
             "byteStride": 8,
+            "componentType": 5126,
             "count": 2399,
             "max": [
                 0.983346,
@@ -47,101 +58,84 @@
                 0.026409,
                 0.019963
             ],
-            "type": 35664
-        },
-        "indices_21": {
-            "bufferView": "bufferView_30",
-            "byteOffset": 0,
-            "count": 12636,
-            "type": 5123
+            "type": "VEC2"
         }
     },
     "animations": {},
     "asset": {
-        "generator": "collada2gltf@75061f683116dc0ffdad48f33c226e933132e98c"
+        "generator": "collada2gltf@ceec062e3d5793f2f249f53cbd843aee382ad40b",
+        "premultipliedAlpha": true,
+        "profile": {
+            "api": "WebGL",
+            "version": "1.0.2"
+        },
+        "version": 1
     },
     "bufferViews": {
         "bufferView_29": {
-            "buffer": "duck",
-            "byteLength": 76768,
-            "byteOffset": 0,
-            "target": 34962
-        },
-        "bufferView_30": {
             "buffer": "duck",
             "byteLength": 25272,
-            "byteOffset": 76768,
+            "byteOffset": 0,
             "target": 34963
         },
-        "bufferView_31": {
+        "bufferView_30": {
             "buffer": "duck",
-            "byteLength": 0,
-            "byteOffset": 102040
+            "byteLength": 76768,
+            "byteOffset": 25272,
+            "target": 34962
         }
     },
     "buffers": {
         "duck": {
             "byteLength": 102040,
-            "path": "duck.bin",
-            "type": "arraybuffer"
+            "type": "arraybuffer",
+            "uri": "duck.bin"
         }
     },
     "cameras": {
-        "camera_0": {
+        "cameraShape1": {
+            "name": "cameraShape1",
             "perspective": {
                 "aspect_ratio": 1.5,
-                "yfov": 37.8492,
-                "zfar": 10000,
-                "znear": 1
+                "yfov": 0.660593,
+                "zfar": 100,
+                "znear": 0.01
             },
             "type": "perspective"
         }
     },
     "images": {
-        "image_0": {
-            "path": "duckCM.png"
-        }
-    },
-    "lights": {
-        "directionalLightShape1-lib": {
-            "directional": {
-                "color": [
-                    1,
-                    1,
-                    1
-                ]
-            },
-            "type": "directional"
+        "file2": {
+            "name": "file2",
+            "uri": "duckCM.png"
         }
     },
     "materials": {
         "blinn3-fx": {
-            "instanceTechnique": {
-                "technique": "technique1",
-                "values": {
-                    "ambient": [
-                        0,
-                        0,
-                        0,
-                        1
-                    ],
-                    "diffuse": "texture_image_0",
-                    "emission": [
-                        0,
-                        0,
-                        0,
-                        1
-                    ],
-                    "shininess": 38.4,
-                    "specular": [
-                        0,
-                        0,
-                        0,
-                        1
-                    ]
-                }
-            },
-            "name": "blinn3"
+            "name": "blinn3",
+            "technique": "technique0",
+            "values": {
+                "ambient": [
+                    0,
+                    0,
+                    0,
+                    1
+                ],
+                "diffuse": "texture_file2",
+                "emission": [
+                    0,
+                    0,
+                    0,
+                    1
+                ],
+                "shininess": 38.4,
+                "specular": [
+                    0,
+                    0,
+                    0,
+                    1
+                ]
+            }
         }
     },
     "meshes": {
@@ -150,13 +144,13 @@
             "primitives": [
                 {
                     "attributes": {
-                        "NORMAL": "attribute_25",
-                        "POSITION": "attribute_23",
-                        "TEXCOORD_0": "attribute_27"
+                        "NORMAL": "accessor_25",
+                        "POSITION": "accessor_23",
+                        "TEXCOORD_0": "accessor_27"
                     },
-                    "indices": "indices_21",
+                    "indices": "accessor_21",
                     "material": "blinn3-fx",
-                    "primitive": 4
+                    "mode": 4
                 }
             ]
         }
@@ -188,7 +182,7 @@
             "name": "LOD3sp"
         },
         "camera1": {
-            "camera": "camera_0",
+            "camera": "cameraShape1",
             "children": [],
             "matrix": [
                 -0.728969,
@@ -203,22 +197,21 @@
                 0.621148,
                 -0.571288,
                 0,
-                400.113,
-                463.264,
-                -431.078,
+                4.00113,
+                4.63264,
+                -4.31078,
                 1
             ],
             "name": "camera1"
         },
         "directionalLight1": {
             "children": [],
-            "light": "directionalLightShape1-lib",
             "matrix": [
                 -0.954692,
                 0.218143,
-                -0.202428,
+                -0.202429,
                 0,
-                0.0146721,
+                0.014672,
                 0.713885,
                 0.700109,
                 0,
@@ -226,15 +219,14 @@
                 0.665418,
                 -0.684741,
                 0,
-                148.654,
-                183.672,
-                -292.179,
+                1.48654,
+                1.83672,
+                -2.92179,
                 1
             ],
             "name": "directionalLight1"
         }
     },
-    "profile": "WebGL 1.0.2",
     "programs": {
         "program_0": {
             "attributes": [
@@ -266,15 +258,22 @@
     },
     "shaders": {
         "duck0FS": {
-            "path": "duck0FS.glsl"
+            "type": 35632,
+            "uri": "duck0FS.glsl"
         },
         "duck0VS": {
-            "path": "duck0VS.glsl"
+            "type": 35633,
+            "uri": "duck0VS.glsl"
         }
     },
     "skins": {},
     "techniques": {
-        "technique1": {
+        "technique0": {
+            "attributes": {
+                "a_normal": "normal",
+                "a_position": "position",
+                "a_texcoord0": "texcoord0"
+            },
             "parameters": {
                 "ambient": {
                     "type": 35666
@@ -294,7 +293,8 @@
                     ]
                 },
                 "light0Transform": {
-                    "source": "directionalLight1",
+                    "node": "directionalLight1",
+                    "semantic": "MODELVIEW",
                     "type": 35676
                 },
                 "modelViewMatrix": {
@@ -328,70 +328,35 @@
                     "type": 35664
                 }
             },
-            "pass": "defaultPass",
-            "passes": {
-                "defaultPass": {
-                    "details": {
-                        "commonProfile": {
-                            "extras": {
-                                "doubleSided": false
-                            },
-                            "lightingModel": "Blinn",
-                            "parameters": [
-                                "ambient",
-                                "diffuse",
-                                "emission",
-                                "light0Color",
-                                "light0Transform",
-                                "modelViewMatrix",
-                                "normalMatrix",
-                                "projectionMatrix",
-                                "shininess",
-                                "specular"
-                            ],
-                            "texcoordBindings": {
-                                "diffuse": "TEXCOORD_0"
-                            }
-                        },
-                        "type": "COLLADA-1.4.1/commonProfile"
-                    },
-                    "instanceProgram": {
-                        "attributes": {
-                            "a_normal": "normal",
-                            "a_position": "position",
-                            "a_texcoord0": "texcoord0"
-                        },
-                        "program": "program_0",
-                        "uniforms": {
-                            "u_ambient": "ambient",
-                            "u_diffuse": "diffuse",
-                            "u_emission": "emission",
-                            "u_light0Color": "light0Color",
-                            "u_light0Transform": "light0Transform",
-                            "u_modelViewMatrix": "modelViewMatrix",
-                            "u_normalMatrix": "normalMatrix",
-                            "u_projectionMatrix": "projectionMatrix",
-                            "u_shininess": "shininess",
-                            "u_specular": "specular"
-                        }
-                    },
-                    "states": {
-                        "blendEnable": 0,
-                        "cullFaceEnable": 1,
-                        "depthMask": 1,
-                        "depthTestEnable": 1
-                    }
-                }
+            "program": "program_0",
+            "states": {
+                "enable": [
+                    2929,
+                    2884
+                ]
+            },
+            "uniforms": {
+                "u_ambient": "ambient",
+                "u_diffuse": "diffuse",
+                "u_emission": "emission",
+                "u_light0Color": "light0Color",
+                "u_light0Transform": "light0Transform",
+                "u_modelViewMatrix": "modelViewMatrix",
+                "u_normalMatrix": "normalMatrix",
+                "u_projectionMatrix": "projectionMatrix",
+                "u_shininess": "shininess",
+                "u_specular": "specular"
             }
         }
     },
     "textures": {
-        "texture_image_0": {
+        "texture_file2": {
             "format": 6408,
             "internalFormat": 6408,
             "sampler": "sampler_0",
-            "source": "image_0",
-            "target": 3553
+            "source": "file2",
+            "target": 3553,
+            "type": 5121
         }
     }
 }

+ 14 - 13
examples/models/gltf/duck/duck0FS.glsl → examples/models/gltf/duck/glTF/duck0FS.glsl

@@ -1,13 +1,14 @@
 precision highp float;
 varying vec3 v_normal;
-uniform vec3 u_light0Color;
-varying vec3 v_light0Direction;
-uniform float u_shininess;
 uniform vec4 u_ambient;
 varying vec2 v_texcoord0;
 uniform sampler2D u_diffuse;
 uniform vec4 u_emission;
 uniform vec4 u_specular;
+uniform float u_shininess;
+varying vec3 v_light0Direction;
+varying vec3 v_position;
+uniform vec3 u_light0Color;
 void main(void) {
 vec3 normal = normalize(v_normal);
 vec4 color = vec4(0., 0., 0., 0.);
@@ -16,21 +17,21 @@ vec3 diffuseLight = vec3(0., 0., 0.);
 vec4 emission;
 vec4 ambient;
 vec4 specular;
+ambient = u_ambient;
+diffuse = texture2D(u_diffuse, v_texcoord0);
+emission = u_emission;
+specular = u_specular;
 vec3 specularLight = vec3(0., 0., 0.);
 {
-float diffuseIntensity;
-float specularIntensity;
+float specularIntensity = 0.;
+float attenuation = 1.0;
 vec3 l = normalize(v_light0Direction);
-vec3 h = normalize(l+vec3(0.,0.,1.));
-diffuseIntensity = max(dot(normal,l), 0.);
-specularIntensity = pow(max(0.0,dot(normal,h)),u_shininess);
+vec3 viewDir = -normalize(v_position);
+vec3 h = normalize(l+viewDir);
+specularIntensity = max(0., pow(max(dot(normal,h), 0.) , u_shininess)) * attenuation;
 specularLight += u_light0Color * specularIntensity;
-diffuseLight += u_light0Color * diffuseIntensity;
+diffuseLight += u_light0Color * max(dot(normal,l), 0.) * attenuation;
 }
-ambient = u_ambient;
-diffuse = texture2D(u_diffuse, v_texcoord0);
-emission = u_emission;
-specular = u_specular;
 specular.xyz *= specularLight;
 color.xyz += specular.xyz;
 diffuse.xyz *= diffuseLight;

+ 6 - 4
examples/models/gltf/duck/duck0VS.glsl → examples/models/gltf/duck/glTF/duck0VS.glsl

@@ -5,14 +5,16 @@ varying vec3 v_normal;
 uniform mat3 u_normalMatrix;
 uniform mat4 u_modelViewMatrix;
 uniform mat4 u_projectionMatrix;
-uniform mat4 u_light0Transform;
-varying vec3 v_light0Direction;
 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 = normalize(u_normalMatrix * a_normal);
-v_light0Direction = normalize(mat3(u_light0Transform) * vec3(0.,0.,1.));
+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;
 }

BIN
examples/models/gltf/duck/glTF/duckCM.png


BIN
examples/models/gltf/monster/glTF-MaterialsCommon/monster.bin


+ 3319 - 0
examples/models/gltf/monster/glTF-MaterialsCommon/monster.gltf

@@ -0,0 +1,3319 @@
+{
+    "accessors": {
+        "IBM_Armature_monster-skin": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 0,
+            "componentType": 5126,
+            "count": 32,
+            "type": "MAT4"
+        },
+        "accessor_164": {
+            "bufferView": "bufferView_172",
+            "byteOffset": 84864,
+            "byteStride": 16,
+            "componentType": 5126,
+            "count": 2652,
+            "max": [
+                1,
+                0.999998,
+                0.999738,
+                0.992702
+            ],
+            "min": [
+                2e-006,
+                0,
+                0,
+                0
+            ],
+            "type": "VEC4"
+        },
+        "accessor_167": {
+            "bufferView": "bufferView_172",
+            "byteOffset": 127296,
+            "byteStride": 16,
+            "componentType": 5126,
+            "count": 2652,
+            "max": [
+                30,
+                30,
+                29,
+                24
+            ],
+            "min": [
+                0,
+                0,
+                0,
+                0
+            ],
+            "type": "VEC4"
+        },
+        "accessor_21": {
+            "bufferView": "bufferView_171",
+            "byteOffset": 0,
+            "byteStride": 0,
+            "componentType": 5123,
+            "count": 2652,
+            "type": "SCALAR"
+        },
+        "accessor_23": {
+            "bufferView": "bufferView_172",
+            "byteOffset": 0,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2652,
+            "max": [
+                7.3131,
+                25.4149,
+                33.4361
+            ],
+            "min": [
+                -15.4507,
+                -33.2212,
+                -1.28042
+            ],
+            "type": "VEC3"
+        },
+        "accessor_25": {
+            "bufferView": "bufferView_172",
+            "byteOffset": 31824,
+            "byteStride": 12,
+            "componentType": 5126,
+            "count": 2652,
+            "max": [
+                0.998876,
+                0.999882,
+                0.999816
+            ],
+            "min": [
+                -0.998876,
+                -0.998031,
+                -0.999827
+            ],
+            "type": "VEC3"
+        },
+        "accessor_27": {
+            "bufferView": "bufferView_172",
+            "byteOffset": 63648,
+            "byteStride": 8,
+            "componentType": 5126,
+            "count": 2652,
+            "max": [
+                1.00961,
+                0.991641
+            ],
+            "min": [
+                0.00508594,
+                -0.07435
+            ],
+            "type": "VEC2"
+        },
+        "animAccessor_0": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 2048,
+            "componentType": 5126,
+            "count": 101,
+            "type": "SCALAR"
+        },
+        "animAccessor_1": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 2452,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_10": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 14572,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_11": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 15784,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_12": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 16996,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_13": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 18612,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_14": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 19824,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_15": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 21036,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_16": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 22652,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_17": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 23864,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_18": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 25076,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_19": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 26692,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_2": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 3664,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_20": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 27904,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_21": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 29116,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_22": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 30732,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_23": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 31944,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_24": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 33156,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_25": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 34772,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_26": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 35984,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_27": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 37196,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_28": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 38812,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_29": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 40024,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_3": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 4876,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_30": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 41236,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_31": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 42852,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_32": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 44064,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_33": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 45276,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_34": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 46892,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_35": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 48104,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_36": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 49316,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_37": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 50932,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_38": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 52144,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_39": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 53356,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_4": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 6492,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_40": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 54972,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_41": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 56184,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_42": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 57396,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_43": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 59012,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_44": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 60224,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_45": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 61436,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_46": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 63052,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_47": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 64264,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_48": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 65476,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_49": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 67092,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_5": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 7704,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_50": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 68304,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_51": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 69516,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_52": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 71132,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_53": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 72344,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_54": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 73556,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_55": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 75172,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_56": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 76384,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_57": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 77596,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_58": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 79212,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_59": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 80424,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_6": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 8916,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_60": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 81636,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_61": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 83252,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_62": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 84464,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_63": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 85676,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_64": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 87292,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_65": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 88504,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_66": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 89716,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_67": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 91332,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_68": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 92544,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_69": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 93756,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_7": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 10532,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_70": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 95372,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_71": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 96584,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_72": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 97796,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_73": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 99412,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_74": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 100624,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_75": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 101836,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_76": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 103452,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_77": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 104664,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_78": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 105876,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_79": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 107492,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_8": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 11744,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_80": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 108704,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_81": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 109916,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_82": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 111532,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_83": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 112744,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_84": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 113956,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_85": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 115572,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_86": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 116784,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_87": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 117996,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_88": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 119612,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_89": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 120824,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_9": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 12956,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_90": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 122036,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_91": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 123652,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_92": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 124864,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_93": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 126076,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        },
+        "animAccessor_94": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 127692,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_95": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 128904,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC3"
+        },
+        "animAccessor_96": {
+            "bufferView": "bufferView_170",
+            "byteOffset": 130116,
+            "componentType": 5126,
+            "count": 101,
+            "type": "VEC4"
+        }
+    },
+    "animations": {
+        "animation_0": {
+            "channels": [
+                {
+                    "sampler": "animation_0_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Pelvis",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_0_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Pelvis",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_0_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Pelvis",
+                        "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": "Bip01_Spine",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_1_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Spine",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_1_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Spine",
+                        "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": "Bip01_L_Finger0",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_10_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Finger0",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_10_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Finger0",
+                        "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": "Bip01_L_Finger0Nub",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_11_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Finger0Nub",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_11_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Finger0Nub",
+                        "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": "Bip01_R_Clavicle",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_12_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Clavicle",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_12_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Clavicle",
+                        "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": "Bip01_R_UpperArm",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_13_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_UpperArm",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_13_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_UpperArm",
+                        "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": "Bip01_R_Forearm",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_14_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Forearm",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_14_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Forearm",
+                        "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": "Bip01_R_Hand",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_15_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Hand",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_15_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Hand",
+                        "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": "Bip01_R_Finger0",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_16_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Finger0",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_16_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Finger0",
+                        "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": "Bip01_R_Finger0Nub",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_17_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Finger0Nub",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_17_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Finger0Nub",
+                        "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": "Bip01_R_Thigh",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_18_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Thigh",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_18_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Thigh",
+                        "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_19": {
+            "channels": [
+                {
+                    "sampler": "animation_19_scale_sampler",
+                    "target": {
+                        "id": "Bip01_R_Calf",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_19_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Calf",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_19_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Calf",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_36",
+                "scale": "animAccessor_34",
+                "translation": "animAccessor_35"
+            },
+            "samplers": {
+                "animation_19_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_19_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_19_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_2": {
+            "channels": [
+                {
+                    "sampler": "animation_2_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Spine1",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_2_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Spine1",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_2_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Spine1",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_39",
+                "scale": "animAccessor_37",
+                "translation": "animAccessor_38"
+            },
+            "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_20": {
+            "channels": [
+                {
+                    "sampler": "animation_20_scale_sampler",
+                    "target": {
+                        "id": "Bip01_R_Foot",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_20_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Foot",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_20_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Foot",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_42",
+                "scale": "animAccessor_40",
+                "translation": "animAccessor_41"
+            },
+            "samplers": {
+                "animation_20_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_20_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_20_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_21": {
+            "channels": [
+                {
+                    "sampler": "animation_21_scale_sampler",
+                    "target": {
+                        "id": "Bip01_R_Toe0",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_21_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Toe0",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_21_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Toe0",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_45",
+                "scale": "animAccessor_43",
+                "translation": "animAccessor_44"
+            },
+            "samplers": {
+                "animation_21_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_21_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_21_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_22": {
+            "channels": [
+                {
+                    "sampler": "animation_22_scale_sampler",
+                    "target": {
+                        "id": "Bip01_R_Toe0Nub",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_22_translation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Toe0Nub",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_22_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_R_Toe0Nub",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_48",
+                "scale": "animAccessor_46",
+                "translation": "animAccessor_47"
+            },
+            "samplers": {
+                "animation_22_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_22_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_22_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_23": {
+            "channels": [
+                {
+                    "sampler": "animation_23_scale_sampler",
+                    "target": {
+                        "id": "Bip01_L_Thigh",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_23_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Thigh",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_23_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Thigh",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_51",
+                "scale": "animAccessor_49",
+                "translation": "animAccessor_50"
+            },
+            "samplers": {
+                "animation_23_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_23_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_23_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_24": {
+            "channels": [
+                {
+                    "sampler": "animation_24_scale_sampler",
+                    "target": {
+                        "id": "Bip01_L_Calf",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_24_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Calf",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_24_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Calf",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_54",
+                "scale": "animAccessor_52",
+                "translation": "animAccessor_53"
+            },
+            "samplers": {
+                "animation_24_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_24_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_24_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_25": {
+            "channels": [
+                {
+                    "sampler": "animation_25_scale_sampler",
+                    "target": {
+                        "id": "Bip01_L_Foot",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_25_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Foot",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_25_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Foot",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_57",
+                "scale": "animAccessor_55",
+                "translation": "animAccessor_56"
+            },
+            "samplers": {
+                "animation_25_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_25_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_25_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_26": {
+            "channels": [
+                {
+                    "sampler": "animation_26_scale_sampler",
+                    "target": {
+                        "id": "Bip01_L_Toe0",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_26_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Toe0",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_26_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Toe0",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_60",
+                "scale": "animAccessor_58",
+                "translation": "animAccessor_59"
+            },
+            "samplers": {
+                "animation_26_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_26_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_26_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_27": {
+            "channels": [
+                {
+                    "sampler": "animation_27_scale_sampler",
+                    "target": {
+                        "id": "Bip01_L_Toe0Nub",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_27_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Toe0Nub",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_27_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Toe0Nub",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_63",
+                "scale": "animAccessor_61",
+                "translation": "animAccessor_62"
+            },
+            "samplers": {
+                "animation_27_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_27_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_27_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_28": {
+            "channels": [
+                {
+                    "sampler": "animation_28_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Tail",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_28_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Tail",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_28_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Tail",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_66",
+                "scale": "animAccessor_64",
+                "translation": "animAccessor_65"
+            },
+            "samplers": {
+                "animation_28_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_28_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_28_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_29": {
+            "channels": [
+                {
+                    "sampler": "animation_29_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Tail1",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_29_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Tail1",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_29_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Tail1",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_69",
+                "scale": "animAccessor_67",
+                "translation": "animAccessor_68"
+            },
+            "samplers": {
+                "animation_29_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_29_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_29_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_3": {
+            "channels": [
+                {
+                    "sampler": "animation_3_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Neck",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_3_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Neck",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_3_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Neck",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_72",
+                "scale": "animAccessor_70",
+                "translation": "animAccessor_71"
+            },
+            "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_30": {
+            "channels": [
+                {
+                    "sampler": "animation_30_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Tail2",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_30_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Tail2",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_30_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Tail2",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_75",
+                "scale": "animAccessor_73",
+                "translation": "animAccessor_74"
+            },
+            "samplers": {
+                "animation_30_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_30_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_30_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_31": {
+            "channels": [
+                {
+                    "sampler": "animation_31_scale_sampler",
+                    "target": {
+                        "id": "Bip01_TailNub",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_31_translation_sampler",
+                    "target": {
+                        "id": "Bip01_TailNub",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_31_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_TailNub",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_78",
+                "scale": "animAccessor_76",
+                "translation": "animAccessor_77"
+            },
+            "samplers": {
+                "animation_31_rotation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "rotation"
+                },
+                "animation_31_scale_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "scale"
+                },
+                "animation_31_translation_sampler": {
+                    "input": "TIME",
+                    "interpolation": "LINEAR",
+                    "output": "translation"
+                }
+            }
+        },
+        "animation_4": {
+            "channels": [
+                {
+                    "sampler": "animation_4_scale_sampler",
+                    "target": {
+                        "id": "Bip01_Head",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_4_translation_sampler",
+                    "target": {
+                        "id": "Bip01_Head",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_4_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_Head",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_81",
+                "scale": "animAccessor_79",
+                "translation": "animAccessor_80"
+            },
+            "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": "Bip01_HeadNub",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_5_translation_sampler",
+                    "target": {
+                        "id": "Bip01_HeadNub",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_5_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_HeadNub",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_84",
+                "scale": "animAccessor_82",
+                "translation": "animAccessor_83"
+            },
+            "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": "Bip01_L_Clavicle",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_6_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Clavicle",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_6_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Clavicle",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_87",
+                "scale": "animAccessor_85",
+                "translation": "animAccessor_86"
+            },
+            "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": "Bip01_L_UpperArm",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_7_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_UpperArm",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_7_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_UpperArm",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_90",
+                "scale": "animAccessor_88",
+                "translation": "animAccessor_89"
+            },
+            "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": "Bip01_L_Forearm",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_8_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Forearm",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_8_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Forearm",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_93",
+                "scale": "animAccessor_91",
+                "translation": "animAccessor_92"
+            },
+            "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": "Bip01_L_Hand",
+                        "path": "scale"
+                    }
+                },
+                {
+                    "sampler": "animation_9_translation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Hand",
+                        "path": "translation"
+                    }
+                },
+                {
+                    "sampler": "animation_9_rotation_sampler",
+                    "target": {
+                        "id": "Bip01_L_Hand",
+                        "path": "rotation"
+                    }
+                }
+            ],
+            "parameters": {
+                "TIME": "animAccessor_0",
+                "rotation": "animAccessor_96",
+                "scale": "animAccessor_94",
+                "translation": "animAccessor_95"
+            },
+            "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_170": {
+            "buffer": "monster",
+            "byteLength": 131732,
+            "byteOffset": 0
+        },
+        "bufferView_171": {
+            "buffer": "monster",
+            "byteLength": 5304,
+            "byteOffset": 131732,
+            "target": 34963
+        },
+        "bufferView_172": {
+            "buffer": "monster",
+            "byteLength": 169728,
+            "byteOffset": 137036,
+            "target": 34962
+        }
+    },
+    "buffers": {
+        "monster": {
+            "byteLength": 306764,
+            "type": "arraybuffer",
+            "uri": "monster.bin"
+        }
+    },
+    "extensionsUsed": [
+        "KHR_materials_common"
+    ],
+    "images": {
+        "monster_jpg": {
+            "name": "monster_jpg",
+            "uri": "monster.jpg"
+        }
+    },
+    "materials": {
+        "monster-effect": {
+            "extensions": {
+                "KHR_materials_common": {
+                    "doubleSided": false,
+                    "jointCount": 32,
+                    "technique": "BLINN",
+                    "transparent": false,
+                    "values": {
+                        "ambient": [
+                            0,
+                            0,
+                            0,
+                            1
+                        ],
+                        "diffuse": "texture_monster_jpg",
+                        "emission": [
+                            0,
+                            0,
+                            0,
+                            1
+                        ],
+                        "shininess": 50,
+                        "specular": [
+                            0.1,
+                            0.1,
+                            0.1,
+                            1
+                        ]
+                    }
+                }
+            },
+            "name": "monster"
+        }
+    },
+    "meshes": {
+        "monster-mesh": {
+            "name": "monster",
+            "primitives": [
+                {
+                    "attributes": {
+                        "JOINT": "accessor_167",
+                        "NORMAL": "accessor_25",
+                        "POSITION": "accessor_23",
+                        "TEXCOORD_0": "accessor_27",
+                        "WEIGHT": "accessor_164"
+                    },
+                    "indices": "accessor_21",
+                    "material": "monster-effect",
+                    "mode": 4
+                }
+            ]
+        }
+    },
+    "nodes": {
+        "Armature": {
+            "children": [
+                "Bip01_Pelvis"
+            ],
+            "matrix": [
+                0.0254,
+                0,
+                0,
+                0,
+                0,
+                0.0254,
+                0,
+                0,
+                0,
+                0,
+                0.0254,
+                0,
+                0,
+                0,
+                11.7322,
+                1
+            ],
+            "name": "Armature"
+        },
+        "Bip01_Head": {
+            "children": [
+                "Bip01_HeadNub"
+            ],
+            "jointName": "Bip01_Head",
+            "name": "Bip01_Head",
+            "rotation": [
+                -0.00926739,
+                -0.00278277,
+                -0.388481,
+                0.921406
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                181.732,
+                -0.000854492,
+                0.00259566
+            ]
+        },
+        "Bip01_HeadNub": {
+            "children": [],
+            "jointName": "Bip01_HeadNub",
+            "name": "Bip01_HeadNub",
+            "rotation": [
+                1.02991e-005,
+                1.84067e-005,
+                0.707087,
+                0.707127
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -3.05176e-005,
+                345.14,
+                0
+            ]
+        },
+        "Bip01_L_Calf": {
+            "children": [
+                "Bip01_L_Foot"
+            ],
+            "jointName": "Bip01_L_Calf",
+            "name": "Bip01_L_Calf",
+            "rotation": [
+                0.894764,
+                -0.0988358,
+                0.361927,
+                -0.242152
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                1.52588e-005,
+                547.819,
+                3.05176e-005
+            ]
+        },
+        "Bip01_L_Clavicle": {
+            "children": [
+                "Bip01_L_UpperArm"
+            ],
+            "jointName": "Bip01_L_Clavicle",
+            "name": "Bip01_L_Clavicle",
+            "rotation": [
+                0.62698,
+                0.337123,
+                0.203765,
+                0.672104
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0.000488281,
+                0.1427,
+                43.1695
+            ]
+        },
+        "Bip01_L_Finger0": {
+            "children": [
+                "Bip01_L_Finger0Nub"
+            ],
+            "jointName": "Bip01_L_Finger0",
+            "name": "Bip01_L_Finger0",
+            "rotation": [
+                -0.061911,
+                -0.618466,
+                -0.322036,
+                0.714115
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -2.28882e-005,
+                186.694,
+                7.62939e-006
+            ]
+        },
+        "Bip01_L_Finger0Nub": {
+            "children": [],
+            "jointName": "Bip01_L_Finger0Nub",
+            "name": "Bip01_L_Finger0Nub",
+            "rotation": [
+                0.187101,
+                0.187088,
+                0.681926,
+                0.681885
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                167.762,
+                -6.10352e-005
+            ]
+        },
+        "Bip01_L_Foot": {
+            "children": [
+                "Bip01_L_Toe0"
+            ],
+            "jointName": "Bip01_L_Foot",
+            "name": "Bip01_L_Foot",
+            "rotation": [
+                0.66556,
+                -0.434361,
+                0.240113,
+                0.55741
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -6.10352e-005,
+                532.748,
+                3.8147e-005
+            ]
+        },
+        "Bip01_L_Forearm": {
+            "children": [
+                "Bip01_L_Hand"
+            ],
+            "jointName": "Bip01_L_Forearm",
+            "name": "Bip01_L_Forearm",
+            "rotation": [
+                -0.270987,
+                -0.0801902,
+                -0.259695,
+                0.923414
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -6.10352e-005,
+                370.017,
+                -6.10352e-005
+            ]
+        },
+        "Bip01_L_Hand": {
+            "children": [
+                "Bip01_L_Finger0"
+            ],
+            "jointName": "Bip01_L_Hand",
+            "name": "Bip01_L_Hand",
+            "rotation": [
+                0.31595,
+                0.346073,
+                -0.361486,
+                0.806063
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                6.10352e-005,
+                370.017,
+                0
+            ]
+        },
+        "Bip01_L_Thigh": {
+            "children": [
+                "Bip01_L_Calf"
+            ],
+            "jointName": "Bip01_L_Thigh",
+            "name": "Bip01_L_Thigh",
+            "rotation": [
+                0.587041,
+                0.402576,
+                -0.378225,
+                0.591829
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -101.904,
+                96.8195,
+                158.143
+            ]
+        },
+        "Bip01_L_Toe0": {
+            "children": [
+                "Bip01_L_Toe0Nub"
+            ],
+            "jointName": "Bip01_L_Toe0",
+            "name": "Bip01_L_Toe0",
+            "rotation": [
+                0.255933,
+                -0.362018,
+                -0.321951,
+                0.836534
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -1.52588e-005,
+                286.181,
+                -5.34058e-005
+            ]
+        },
+        "Bip01_L_Toe0Nub": {
+            "children": [],
+            "jointName": "Bip01_L_Toe0Nub",
+            "name": "Bip01_L_Toe0Nub",
+            "rotation": [
+                0.700993,
+                -0.700989,
+                0.0927956,
+                -0.0927984
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                166.968,
+                1.14441e-005
+            ]
+        },
+        "Bip01_L_UpperArm": {
+            "children": [
+                "Bip01_L_Forearm"
+            ],
+            "jointName": "Bip01_L_UpperArm",
+            "name": "Bip01_L_UpperArm",
+            "rotation": [
+                -0.583202,
+                0.181926,
+                0.209862,
+                0.763371
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                175.071,
+                -6.10352e-005
+            ]
+        },
+        "Bip01_Neck": {
+            "children": [
+                "Bip01_Head",
+                "Bip01_L_Clavicle",
+                "Bip01_R_Clavicle"
+            ],
+            "jointName": "Bip01_Neck",
+            "name": "Bip01_Neck",
+            "rotation": [
+                4.57449e-006,
+                1.00403e-005,
+                -0.352997,
+                0.935624
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                402.552,
+                -0.104385,
+                -0.00284648
+            ]
+        },
+        "Bip01_Pelvis": {
+            "children": [
+                "Bip01_Spine"
+            ],
+            "jointName": "Bip01_Pelvis",
+            "name": "Bip01_Pelvis",
+            "rotation": [
+                0.611681,
+                0.354728,
+                0.611703,
+                0.354731
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -1.16286,
+                99.4341,
+                -44.1331
+            ]
+        },
+        "Bip01_R_Calf": {
+            "children": [
+                "Bip01_R_Foot"
+            ],
+            "jointName": "Bip01_R_Calf",
+            "name": "Bip01_R_Calf",
+            "rotation": [
+                0.894763,
+                -0.0988353,
+                -0.361931,
+                0.242152
+            ],
+            "scale": [
+                1,
+                1,
+                0.999999
+            ],
+            "translation": [
+                -1.52588e-005,
+                547.819,
+                3.8147e-006
+            ]
+        },
+        "Bip01_R_Clavicle": {
+            "children": [
+                "Bip01_R_UpperArm"
+            ],
+            "jointName": "Bip01_R_Clavicle",
+            "name": "Bip01_R_Clavicle",
+            "rotation": [
+                -0.629516,
+                -0.328596,
+                0.195815,
+                0.676306
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0.00396728,
+                0.145904,
+                -43.1688
+            ]
+        },
+        "Bip01_R_Finger0": {
+            "children": [
+                "Bip01_R_Finger0Nub"
+            ],
+            "jointName": "Bip01_R_Finger0",
+            "name": "Bip01_R_Finger0",
+            "rotation": [
+                0.0619069,
+                0.618458,
+                -0.322038,
+                0.714121
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                5.34058e-005,
+                186.693,
+                3.05176e-005
+            ]
+        },
+        "Bip01_R_Finger0Nub": {
+            "children": [],
+            "jointName": "Bip01_R_Finger0Nub",
+            "name": "Bip01_R_Finger0Nub",
+            "rotation": [
+                0.18708,
+                -0.187099,
+                -0.681888,
+                0.681927
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                167.76,
+                0
+            ]
+        },
+        "Bip01_R_Foot": {
+            "children": [
+                "Bip01_R_Toe0"
+            ],
+            "jointName": "Bip01_R_Foot",
+            "name": "Bip01_R_Foot",
+            "rotation": [
+                -0.66556,
+                0.434365,
+                0.240111,
+                0.557408
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                532.747,
+                0
+            ]
+        },
+        "Bip01_R_Forearm": {
+            "children": [
+                "Bip01_R_Hand"
+            ],
+            "jointName": "Bip01_R_Forearm",
+            "name": "Bip01_R_Forearm",
+            "rotation": [
+                0.270988,
+                0.0801905,
+                -0.259694,
+                0.923414
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                370.017,
+                0
+            ]
+        },
+        "Bip01_R_Hand": {
+            "children": [
+                "Bip01_R_Finger0"
+            ],
+            "jointName": "Bip01_R_Hand",
+            "name": "Bip01_R_Hand",
+            "rotation": [
+                -0.315953,
+                -0.346079,
+                -0.361482,
+                0.80606
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                6.10352e-005,
+                370.017,
+                0
+            ]
+        },
+        "Bip01_R_Thigh": {
+            "children": [
+                "Bip01_R_Calf"
+            ],
+            "jointName": "Bip01_R_Thigh",
+            "name": "Bip01_R_Thigh",
+            "rotation": [
+                -0.597369,
+                -0.393833,
+                -0.364985,
+                0.595678
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -107.676,
+                94.9768,
+                -155.407
+            ]
+        },
+        "Bip01_R_Toe0": {
+            "children": [
+                "Bip01_R_Toe0Nub"
+            ],
+            "jointName": "Bip01_R_Toe0",
+            "name": "Bip01_R_Toe0",
+            "rotation": [
+                -0.255932,
+                0.362015,
+                -0.321953,
+                0.836535
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                1.52588e-005,
+                286.181,
+                -2.28882e-005
+            ]
+        },
+        "Bip01_R_Toe0Nub": {
+            "children": [],
+            "jointName": "Bip01_R_Toe0Nub",
+            "name": "Bip01_R_Toe0Nub",
+            "rotation": [
+                0.700988,
+                0.700994,
+                -0.092793,
+                -0.0928082
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -6.10352e-005,
+                166.969,
+                3.8147e-006
+            ]
+        },
+        "Bip01_R_UpperArm": {
+            "children": [
+                "Bip01_R_Forearm"
+            ],
+            "jointName": "Bip01_R_UpperArm",
+            "name": "Bip01_R_UpperArm",
+            "rotation": [
+                0.573423,
+                -0.182268,
+                0.232267,
+                0.76421
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -0.000305176,
+                175.072,
+                7.62939e-005
+            ]
+        },
+        "Bip01_Spine": {
+            "children": [
+                "Bip01_Spine1",
+                "Bip01_R_Thigh",
+                "Bip01_L_Thigh",
+                "Bip01_Tail"
+            ],
+            "jointName": "Bip01_Spine",
+            "name": "Bip01_Spine",
+            "rotation": [
+                0.00959927,
+                -0.00103765,
+                0.915123,
+                0.403059
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                0,
+                142.054,
+                0
+            ]
+        },
+        "Bip01_Spine1": {
+            "children": [
+                "Bip01_Neck"
+            ],
+            "jointName": "Bip01_Spine1",
+            "name": "Bip01_Spine1",
+            "rotation": [
+                0.00439627,
+                0.00253657,
+                0.050762,
+                0.998698
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                399.195,
+                -0.319542,
+                -0.00304908
+            ]
+        },
+        "Bip01_Tail": {
+            "children": [
+                "Bip01_Tail1"
+            ],
+            "jointName": "Bip01_Tail",
+            "name": "Bip01_Tail",
+            "rotation": [
+                0.00378802,
+                0.00888481,
+                0.653293,
+                0.757043
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -229.277,
+                51.5717,
+                3.92008
+            ]
+        },
+        "Bip01_Tail1": {
+            "children": [
+                "Bip01_Tail2"
+            ],
+            "jointName": "Bip01_Tail1",
+            "name": "Bip01_Tail1",
+            "rotation": [
+                5.95769e-007,
+                2.20509e-007,
+                0.125891,
+                0.992044
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -7.62939e-006,
+                275.134,
+                2.38419e-007
+            ]
+        },
+        "Bip01_Tail2": {
+            "children": [
+                "Bip01_TailNub"
+            ],
+            "jointName": "Bip01_Tail2",
+            "name": "Bip01_Tail2",
+            "rotation": [
+                -8.79674e-007,
+                -6.96714e-007,
+                0.113491,
+                0.993539
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                -2.28882e-005,
+                339.089,
+                0
+            ]
+        },
+        "Bip01_TailNub": {
+            "children": [],
+            "jointName": "Bip01_TailNub",
+            "name": "Bip01_TailNub",
+            "rotation": [
+                0.00039859,
+                1,
+                3.39635e-007,
+                3.30486e-006
+            ],
+            "scale": [
+                1,
+                1,
+                1
+            ],
+            "translation": [
+                1.52588e-005,
+                374.19,
+                0
+            ]
+        },
+        "monster": {
+            "children": [],
+            "matrix": [
+                1,
+                0,
+                0,
+                0,
+                0,
+                1,
+                0,
+                0,
+                0,
+                0,
+                1,
+                0,
+                0,
+                0,
+                0,
+                1
+            ],
+            "meshes": [
+                "monster-mesh"
+            ],
+            "name": "monster",
+            "skeletons": [
+                "Bip01_Pelvis"
+            ],
+            "skin": "Armature_monster-skin"
+        },
+        "node_34": {
+            "children": [
+                "Armature",
+                "monster"
+            ],
+            "matrix": [
+                1,
+                0,
+                0,
+                0,
+                0,
+                0,
+                -1,
+                0,
+                0,
+                1,
+                0,
+                0,
+                0,
+                0,
+                0,
+                1
+            ],
+            "name": "Y_UP_Transform"
+        }
+    },
+    "samplers": {
+        "sampler_0": {
+            "magFilter": 9729,
+            "minFilter": 9729,
+            "wrapS": 10497,
+            "wrapT": 10497
+        }
+    },
+    "scene": "defaultScene",
+    "scenes": {
+        "defaultScene": {
+            "nodes": [
+                "node_34"
+            ]
+        }
+    },
+    "skins": {
+        "Armature_monster-skin": {
+            "bindShapeMatrix": [
+                1,
+                -9.68933e-008,
+                -2.42233e-008,
+                0,
+                4.84467e-008,
+                1,
+                -2.93385e-016,
+                0,
+                4.84467e-008,
+                -2.05369e-015,
+                1,
+                0,
+                4.15673,
+                3.03859,
+                -9.53674e-007,
+                1
+            ],
+            "inverseBindMatrices": "IBM_Armature_monster-skin",
+            "jointNames": [
+                "Bip01_Pelvis",
+                "Bip01_Spine",
+                "Bip01_Spine1",
+                "Bip01_Neck",
+                "Bip01_Head",
+                "Bip01_HeadNub",
+                "Bip01_L_Clavicle",
+                "Bip01_L_UpperArm",
+                "Bip01_L_Forearm",
+                "Bip01_L_Hand",
+                "Bip01_L_Finger0",
+                "Bip01_L_Finger0Nub",
+                "Bip01_R_Clavicle",
+                "Bip01_R_UpperArm",
+                "Bip01_R_Forearm",
+                "Bip01_R_Hand",
+                "Bip01_R_Finger0",
+                "Bip01_R_Finger0Nub",
+                "Bip01_L_Thigh",
+                "Bip01_L_Calf",
+                "Bip01_L_Foot",
+                "Bip01_L_Toe0",
+                "Bip01_L_Toe0Nub",
+                "Bip01_R_Thigh",
+                "Bip01_R_Calf",
+                "Bip01_R_Foot",
+                "Bip01_R_Toe0",
+                "Bip01_R_Toe0Nub",
+                "Bip01_Tail",
+                "Bip01_Tail1",
+                "Bip01_Tail2",
+                "Bip01_TailNub"
+            ],
+            "name": "Armature"
+        }
+    },
+    "textures": {
+        "texture_monster_jpg": {
+            "format": 6408,
+            "internalFormat": 6408,
+            "sampler": "sampler_0",
+            "source": "monster_jpg",
+            "target": 3553,
+            "type": 5121
+        }
+    }
+}

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


BIN
examples/models/gltf/monster/glTF/monster.bin


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 635 - 670
examples/models/gltf/monster/glTF/monster.gltf


BIN
examples/models/gltf/monster/glTF/monster.jpg


+ 5 - 3
examples/models/gltf/monster/monster0FS.glsl → examples/models/gltf/monster/glTF/monster0FS.glsl

@@ -1,23 +1,25 @@
 precision highp float;
 varying vec3 v_normal;
-varying vec4 v_joint;
-varying vec4 v_weight;
-uniform float u_shininess;
 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;
 }

+ 2 - 4
examples/models/gltf/monster/monster0VS.glsl → examples/models/gltf/monster/glTF/monster0VS.glsl

@@ -3,10 +3,8 @@ attribute vec3 a_position;
 attribute vec3 a_normal;
 varying vec3 v_normal;
 attribute vec4 a_joint;
-varying vec4 v_joint;
 attribute vec4 a_weight;
-varying vec4 v_weight;
-uniform mat4 u_jointMat[60];
+uniform mat4 u_jointMat[32];
 uniform mat3 u_normalMatrix;
 uniform mat4 u_modelViewMatrix;
 uniform mat4 u_projectionMatrix;
@@ -18,7 +16,7 @@ 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 = normalize(u_normalMatrix * mat3(skinMat)* a_normal);
+v_normal = u_normalMatrix * mat3(skinMat)* a_normal;
 v_texcoord0 = a_texcoord0;
 gl_Position = u_projectionMatrix * pos;
 }

BIN
examples/models/gltf/monster/monster.bin


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 64
examples/models/gltf/monster/monster.dae


+ 68 - 22
examples/webgl_loader_gltf.html

@@ -13,7 +13,7 @@
 			}
 
 			#info {
-				color: #fff;
+				color: #808080;
 				position: absolute;
 				top: 10px;
 				width: 100%;
@@ -35,7 +35,7 @@
 				width:250px;
 				bottom:0%;
 				right:0%;
-				height:100px;
+				height:132px;
 				background-color:White;
 				opacity:.9;
 				font: 13px/1.231 "Lucida Grande", Lucida, Verdana, sans-serif;
@@ -79,6 +79,11 @@
 				top:72px;
 			}
 
+			#materials_extension_control {
+				position:absolute;
+				top:104px;
+			}
+
 			#info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer }
 		</style>
 	</head>
@@ -86,10 +91,10 @@
 	<body>
 		<div id="info">
 		<a href="http://threejs.org" target="_blank">three.js</a> -
-		<a href="http://gltf.gl/" target="_blank">glTF</a> loader -
+		<a href="https://github.com/KhronosGroup/glTF" target="_blank">glTF</a> loader -
 		<br></br>
 		monster by <a href="http://www.3drt.com/downloads.htm" target="_blank">3drt</a> -
-		COLLADA duck by Sony
+		COLLADA duck by Sony - other models courtesy <a href="http://cesiumjs.org/" target="_blank">Cesium</a>
 		</div>
 	<div id="container">
 	</div>
@@ -111,6 +116,13 @@
 		Animations
 		<div class="controlValue"><input type="checkbox" checked onclick="toggleAnimations();">Play</input></div>
 		</div>
+		<div class="control" id="materials_extension_control">
+			Shaders
+			<div class="controlValue">
+			<input type="checkbox" id="materials_extension_checkbox" checked onclick="toggleMaterialsExtension();">Use built-in</input>
+			</div>
+		</div>
+
 	</div>
 		<script src="../build/three.min.js"></script>
 		<script src="js/controls/OrbitControls.js"></script>
@@ -118,6 +130,7 @@
 		<script src="js/loaders/gltf/glTFLoader.js"></script>
 		<script src="js/loaders/gltf/glTFLoaderUtils.js"></script>
 		<script src="js/loaders/gltf/glTFAnimation.js"></script>
+		<script src="js/loaders/gltf/glTFShaders.js"></script>
 
 		<script>
 			var orbitControls = null;
@@ -158,25 +171,25 @@
 
 				if (sceneInfo.addLights) {
 
-					var ambient = new THREE.AmbientLight( 0x888888 );
+					var ambient = new THREE.AmbientLight( 0x222222 );
 					scene.add( ambient );
 
 					var directionalLight = new THREE.DirectionalLight( 0xdddddd );
-					directionalLight.position.set( 0, -1, 1 ).normalize();
+					directionalLight.position.set( 0, 0, 1 ).normalize();
 					scene.add( directionalLight );
-
-					spot1 = new THREE.SpotLight( 0xffffff, 1, 0, Math.PI / 4, 0.75 );
-					spot1.position.set( -100, 200, 100 );
+				
+					spot1   = new THREE.SpotLight( 0xffffff, 1 );
+					spot1.position.set( 100, 200, 100 );
 					spot1.target.position.set( 0, 0, 0 );
 
 					if (sceneInfo.shadows) {
 
-						spot1.shadowCameraNear = 1;
-						spot1.shadowCameraFar = 1024;
+						spot1.shadow.cameraNear = 1;
+						spot1.shadow.cameraFar = 1024;
 						spot1.castShadow = true;
-						spot1.shadowBias = 0.0001;
-						spot1.shadowMapWidth = 2048;
-						spot1.shadowMapHeight = 2048;
+						spot1.shadow.bias = 0.0001;
+						spot1.shadow.mapSize.width = 2048;
+						spot1.shadow.mapSize.height = 2048;
 
 					}
 
@@ -222,11 +235,18 @@
 				}
 
 				loader = new THREE.glTFLoader;
+				var loadStartTime = Date.now();
+				var status = document.getElementById("status");
+				status.innerHTML = "Loading...";
+				var url = sceneInfo.url;
+				var r = eval("/" + '\%s' + "/g");
+				var dir = useMaterialsExtension ? 'glTF-MaterialsCommon' :  'glTF';
+				url = url.replace(r, dir);
 
 				var loadStartTime = Date.now();
 				var status = document.getElementById("status");
 				status.innerHTML = "Loading...";
-				loader.load( sceneInfo.url, function(data) {
+				loader.load( url, function(data) {
 
 					gltf = data;
 
@@ -336,6 +356,7 @@
 			function animate() {
 				requestAnimationFrame( animate );
 				THREE.glTFAnimator.update();
+				THREE.glTFShaders.update(scene, camera);
 				if (cameraIndex == 0)
 					orbitControls.update();
 				render();
@@ -369,24 +390,40 @@
 
 			var sceneList = [
 				{
-					name : "Monster", url : "./models/gltf/monster/monster.json",
+					name : "Monster", url : "./models/gltf/monster/%s/monster.gltf",
 					cameraPos: new THREE.Vector3(30, 10, 70),
 					objectScale: new THREE.Vector3(0.01, 0.01, 0.01),
-					objectPosition: new THREE.Vector3(0, 1, 0),
-					objectRotation: new THREE.Euler(-Math.PI / 2, 0, -Math.PI / 2),
+					objectPosition: new THREE.Vector3(2, 6, 0),
+					objectRotation: new THREE.Euler(0, - 3 * Math.PI / 4, 0),
 					animationTime: 3,
 					addLights:true,
 					shadows:true,
 					addGround:true
 				},
 				{
-					name : "Duck", url : "./models/gltf/duck/duck.json",
-					cameraPos: new THREE.Vector3(0, 30, -50),
-					objectScale: new THREE.Vector3(0.1, 0.1, 0.1),
+					name : "Duck", url : "./models/gltf/duck/%s/duck.gltf",
+					cameraPos: new THREE.Vector3(0, 3, 5),
 					addLights:true,
 					addGround:true,
 					shadows:true
-				}
+				},
+				{
+					name : "Cesium Man", url : "./models/gltf/CesiumMan/%s/Cesium_Man.gltf", 
+					 cameraPos: new THREE.Vector3(0, 3, 10),
+					 objectRotation: new THREE.Euler(0, 0, 0),
+					 addLights:true,
+					 addGround:true,
+					 shadows:true 
+				},
+				{ 
+					name : "Cesium Milk Truck",
+					url : "./models/gltf/CesiumMilkTruck/%s/CesiumMilkTruck.gltf", 
+					cameraPos: new THREE.Vector3(0, 3, 10),
+					addLights:true,
+					addGround:true,
+					shadows:true
+				},
+
 			];
 
 			function buildSceneList() {
@@ -495,6 +532,15 @@
 
 			}
 
+			var useextmaterials = document.getElementById("materials_extension_checkbox");
+			var useMaterialsExtension = useextmaterials.hasAttribute("checked");
+			function toggleMaterialsExtension()
+			{
+				useMaterialsExtension = !useMaterialsExtension;
+				selectScene();
+			}
+
+
 			function cleanup() {
 
 				if (container && renderer) {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.