blob: 334fa9b842b6f06754a83268d5289262e2442a77 [file] [log] [blame] [edit]
const char *kglTFSchemaStrings[] = {"{\n \"required\": [\n \"asset\"\n ], \n \"description\": \"The root object for a glTF asset.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"glTF\", \n \"dependencies\": {\n \"scene\": [\n \"scenes\"\n ]\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"textures\": {\n \"minItems\": 1, \n \"items\": {\n \"description\": \"A texture and its sampler.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Texture\", \n \"gltf_webgl\": \"`createTexture()`, `deleteTexture()`, `bindTexture()`, `texImage2D()`, and `texParameterf()`\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"source\": {\n \"description\": \"The index of the image used by this texture. When undefined, it is expected that an extension or other mechanism will supply an alternate texture source, otherwise behavior is undefined.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"name\": {}, \n \"sampler\": {\n \"description\": \"The index of the sampler used by this texture. When undefined, a sampler with repeat wrapping and auto filtering should be used.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of textures.\"\n }, \n \"cameras\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"type\"\n ], \n \"description\": \"A camera's projection. A node can reference a camera to apply a transform to place the camera in the scene.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Camera\", \n \"not\": {\n \"required\": [\n \"perspective\", \n \"orthographic\"\n ]\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"name\": {}, \n \"extras\": {}, \n \"extensions\": {}, \n \"perspective\": {\n \"description\": \"A perspective camera containing properties to create a perspective projection matrix.\", \n \"allOf\": [\n {\n \"required\": [\n \"yfov\", \n \"znear\"\n ], \n \"description\": \"A perspective camera containing properties to create a perspective projection matrix.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://jso",
"n-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Camera Perspective\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"yfov\": {\n \"exclusiveMinimum\": true, \n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The floating-point vertical field of view in radians.\"\n }, \n \"zfar\": {\n \"exclusiveMinimum\": true, \n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The floating-point distance to the far clipping plane.\", \n \"gltf_detailedDescription\": \"The floating-point distance to the far clipping plane. When defined, `zfar` must be greater than `znear`. If `zfar` is undefined, runtime must use infinite projection matrix.\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"aspectRatio\": {\n \"exclusiveMinimum\": true, \n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The floating-point aspect ratio of the field of view.\", \n \"gltf_detailedDescription\": \"The floating-point aspect ratio of the field of view. When this is undefined, the aspect ratio of the canvas is used.\"\n }, \n \"znear\": {\n \"exclusiveMinimum\": true, \n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The floating-point distance to the near clipping plane.\", \n \"gltf_detailedDescription\": \"The floating-point distance to the near clipping plane.\"\n }\n }\n }\n ]\n }, \n \"orthographic\": {\n \"description\": \"An orthographic camera containing properties to create an orthographic projection matrix.\", \n \"allOf\": [\n {\n \"required\": [\n \"xmag\", \n \"ymag\", \n \"zfar\", \n \"znear\"\n ], \n \"description\": \"An orthographic camera containing properties to create an orthographic projection matrix.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Camera Orthographic\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"xmag\": {\n \"type\": \"number\", \n \"description\": \"The floating-point horizontal magnification of the view. Must not be zero.\"\n }, \n \"znear\": {\n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The floating-point distance to the near clipping plane.\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"ymag\": {\n \"type\": \"number\", \n \"description\": \"The floating-point vertical magnification of the view. Must not be zero.\"\n }, \n \"zfar\": {\n \"exclusiveMinimum\": true, \n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The floating-point distance to the far clipping plane. `zfar` must be greater than `znear`.\"\n }\n }\n }\n ]\n }, \n \"type\": {\n \"anyOf\": [\n {\n \"enum\": [\n \"perspective\"\n ]\n }, \n {\n \"enum\": [\n \"orthographic\"\n ]\n }, \n {\n \"type\": \"string\"\n }\n ], \n \"gltf_detailedDescription\": \"Specifies if the camera uses a perspective or orthographic projection. Based on this, either the camera's `perspective` or `orthographic` property will be defined.\", \n \"description\": \"Specifies if the camera uses a perspective or orthographic projection.\"\n }\n }\n }, \n \"gltf_detailedDescription\": \"An array of cameras. A camera defines a projection matrix.\", \n \"type\": \"array\", \n \"description\": \"An array of cameras.\"\n }, \n \"accessors\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"componentType\", \n \"count\", \n \"type\"\n ], \n \"description\": \"A typed view into a bufferView. A bufferView contains raw binary data. An accessor provides a typed view into a bufferView or a subset of a bufferView similar to how WebGL's `vertexAttribPointer()` defines an attribute in a buffer.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, ",
"or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Accessor\", \n \"dependencies\": {\n \"byteOffset\": [\n \"bufferView\"\n ]\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"count\": {\n \"gltf_detailedDescription\": \"The number of attributes referenced by this accessor, not to be confused with the number of bytes or number of components.\", \n \"minimum\": 1, \n \"type\": \"integer\", \n \"description\": \"The number of attributes referenced by this accessor.\"\n }, \n \"name\": {}, \n \"min\": {\n \"description\": \"Minimum value of each component in this attribute.\", \n \"minItems\": 1, \n \"items\": {\n \"type\": \"number\"\n }, \n \"gltf_detailedDescription\": \"Minimum value of each component in this attribute. Array elements must be treated as having the same data type as accessor's `componentType`. Both min and max arrays have the same length. The length is determined by the value of the type property; it can be 1, 2, 3, 4, 9, or 16.\\n\\n`normalized` property has no effect on array values: they always correspond to the actual values stored in the buffer. When accessor is sparse, this property must contain min values of accessor data with sparse substitution applied.\", \n \"maxItems\": 16, \n \"type\": \"array\"\n }, \n \"max\": {\n \"description\": \"Maximum value of each component in this attribute.\", \n \"minItems\": 1, \n \"items\": {\n \"type\": \"number\"\n }, \n \"gltf_detailedDescription\": \"Maximum value of each component in this attribute. Array elements must be treated as having the same data type as accessor's `componentType`. Both min and max arrays have the same length. The length is determined by the value of the type property; it can be 1, 2, 3, 4, 9, or 16.\\n\\n`normalized` property has no effect on array values: they always correspond to the actual values stored in the buffer. When accessor is sparse, this property must contain max values of accessor data with sparse substitution applied.\", \n \"maxItems\": 16, \n \"type\": \"array\"\n }, \n \"bufferView\": {\n \"gltf_detailedDescription\": \"The index of the bufferView. When not defined, accessor must be initialized with zeros; `sparse` property or extensions could override zeros with actual values.\", \n \"description\": \"The index of the bufferView.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"componentType\": {\n \"anyOf\": [\n {\n \"enum\": [\n 5120\n ], \n \"type\": \"integer\", \n \"description\": \"BYTE\"\n }, \n {\n \"enum\": [\n 5121\n ], \n \"type\": \"integer\", \n \"description\": \"UNSIGNED_BYTE\"\n }, \n {\n \"enum\": [\n 5122\n ], \n \"type\": \"integer\", \n \"description\": \"SHORT\"\n }, \n {\n \"enum\": [\n 5123\n ], \n \"type\": \"integer\", \n \"description\": \"UNSIGNED_SHORT\"\n }, \n {\n \"enum\": [\n 5125\n ], \n \"type\": \"integer\", \n \"description\": \"UNSIGNED_INT\"\n }, \n {\n \"enum\": [\n 5126\n ], \n \"type\": \"integer\", \n \"description\": \"FLOAT\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"The datatype of components in the attribute. All valid values correspond to WebGL enums. The corresponding typed arrays are `Int8Array`, `Uint8Array`, `Int16Array`, `Uint16Array`, `Uint32Array`, and `Float32Array`, respectively. 5125 (UNSIGNED_INT) is only allowed when the accessor contains indices, i.e., the accessor is only referenced by `primitive.indices`.\", \n \"description\": \"The datatype of components in the attribute.\", \n \"gltf_webgl\": \"`vertexAttribPointer()` type parameter\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"byteOffset\": {\n \"description\": \"The offset relative to the start of the bufferView in bytes.\", \n \"default\": 0, \n \"gltf_detailedDescription\": \"The offset relative to the start of the bufferView in bytes. This must be a multiple of the size of the component datatype.\", \n \"minimum\": 0, \n \"gltf_webgl\": \"`vertexAttribPointer()` offset parameter\", \n \"type\": \"integer\"\n }, \n \"sparse\": {\n \"description\": \"Sparse storage of attributes that deviate from their initialization value.\", \n \"allOf\": [\n {\n \"required\": [\n \"count\", \n \"indices\", \n \"values\"\n ], \n \"description\": \"Sparse storage of attributes that deviate from their initialization value.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Accessor Sparse\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"count\": {\n \"gltf_detailedDescription\": \"The number of attributes encoded in this sparse accessor.\", \n \"minimum\": 1, \n \"type\": \"integer\", \n \"description\": \"Number of entries stored in the sparse array.\"\n }, \n \"indices\": {\n \"description\": \"Index array of size `count` that points to those accessor attributes that deviate f",
"rom their initialization value. Indices must strictly increase.\", \n \"allOf\": [\n {\n \"required\": [\n \"bufferView\", \n \"componentType\"\n ], \n \"description\": \"Indices of those attributes that deviate from their initialization value.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Accessor Sparse Indices\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"componentType\": {\n \"anyOf\": [\n {\n \"enum\": [\n 5121\n ], \n \"type\": \"integer\", \n \"description\": \"UNSIGNED_BYTE\"\n }, \n {\n \"enum\": [\n 5123\n ], \n \"type\": \"integer\", \n \"description\": \"UNSIGNED_SHORT\"\n }, \n {\n \"enum\": [\n 5125\n ], \n \"type\": \"integer\", \n \"description\": \"UNSIGNED_INT\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"The indices data type. Valid values correspond to WebGL enums: `5121` (UNSIGNED_BYTE), `5123` (UNSIGNED_SHORT), `5125` (UNSIGNED_INT).\", \n \"description\": \"The indices data type.\"\n }, \n \"bufferView\": {\n \"description\": \"The index of the bufferView with sparse indices. Referenced bufferView can't have ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER target.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extensions\": {}, \n \"byteOffset\": {\n \"default\": 0, \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The offset relative to the start of the bufferView in bytes. Must be aligned.\"\n }, \n \"extras\": {}\n }\n }\n ]\n }, \n \"extras\": {}, \n \"values\": {\n \"description\": \"Array of size `count` times number of components, storing the displaced accessor attributes pointed by `indices`. Substituted values must have the same `componentType` and number of components as the base accessor.\", \n \"allOf\": [\n {\n \"required\": [\n \"bufferView\"\n ], \n \"description\": \"Array of size `accessor.sparse.count` times number of components storing the displaced accessor attributes pointed by `accessor.sparse.indices`.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Accessor Sparse Values\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"bufferView\": {\n \"description\": \"The index of the bufferView with sparse values. Referenced bufferView can't have ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER target.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extensions\": {}, \n \"byteOffset\": {\n \"default\": 0, \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The offset relative to the start of the bufferView in bytes. Must be aligned.\"\n }, \n \"extras\": {}\n }\n ",
" }\n ]\n }, \n \"extensions\": {}\n }\n }\n ]\n }, \n \"type\": {\n \"anyOf\": [\n {\n \"enum\": [\n \"SCALAR\"\n ]\n }, \n {\n \"enum\": [\n \"VEC2\"\n ]\n }, \n {\n \"enum\": [\n \"VEC3\"\n ]\n }, \n {\n \"enum\": [\n \"VEC4\"\n ]\n }, \n {\n \"enum\": [\n \"MAT2\"\n ]\n }, \n {\n \"enum\": [\n \"MAT3\"\n ]\n }, \n {\n \"enum\": [\n \"MAT4\"\n ]\n }, \n {\n \"type\": \"string\"\n }\n ], \n \"description\": \"Specifies if the attribute is a scalar, vector, or matrix.\"\n }, \n \"normalized\": {\n \"default\": false, \n \"gltf_detailedDescription\": \"Specifies whether integer data values should be normalized (`true`) to [0, 1] (for unsigned types) or [-1, 1] (for signed types), or converted directly (`false`) when they are accessed. This property is defined only for accessors that contain vertex attributes or animation output data.\", \n \"type\": \"boolean\", \n \"description\": \"Specifies whether integer data values should be normalized.\", \n \"gltf_webgl\": \"`vertexAttribPointer()` normalized parameter\"\n }\n }\n }, \n \"gltf_detailedDescription\": \"An array of accessors. An accessor is a typed view into a bufferView.\", \n \"type\": \"array\", \n \"description\": \"An array of accessors.\"\n }, \n \"samplers\": {\n \"minItems\": 1, \n \"items\": {\n \"description\": \"Texture sampler properties for filtering and wrapping modes.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Sampler\", \n \"gltf_webgl\": \"`texParameterf()`\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"wrapS\": {\n \"default\": 10497, \n \"anyOf\": [\n {\n \"enum\": [\n 33071\n ], \n \"type\": \"integer\", \n \"description\": \"CLAMP_TO_EDGE\"\n }, \n {\n \"enum\": [\n 33648\n ], \n \"type\": \"integer\", \n \"description\": \"MIRRORED_REPEAT\"\n }, \n {\n \"enum\": [\n 10497\n ], \n \"type\": \"integer\", \n \"description\": \"REPEAT\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"S (U) wrapping mode. All valid values correspond to WebGL enums.\", \n \"description\": \"s wrapping mode.\", \n \"gltf_webgl\": \"`texParameterf()` with pname equal to TEXTURE_WRAP_S\"\n }, \n \"minFilter\": {\n \"anyOf\": [\n {\n \"enum\": [\n 9728\n ], \n \"type\": \"integer\", \n \"description\": \"NEAREST\"\n }, \n {\n \"enum\": [\n 9729\n ], \n \"type\": \"integer\", \n \"description\": \"LINEAR\"\n }, \n {\n \"enum\": [\n 9984\n ], \n \"type\": \"integer\", \n \"description\": \"NEAREST_MIPMAP_NEAREST\"\n }, \n {\n \"enum\": [\n 9985\n ], \n \"type\": \"integer\", \n \"description\": \"LINEAR_MIPMAP_NEAREST\"\n }, \n {\n \"enum\": [\n 9986\n ], \n \"type\": \"integer\", \n \"description\": \"NEAREST_MIPMAP_LINEAR\"\n }, \n {\n \"enum\": [\n 9987\n ], \n \"type\": \"integer\", \n \"description\": \"LINEAR_MIPMAP_LINEAR\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"Minification filter. All valid values correspond to WebGL enums.\", \n \"description\": \"Minification filter.\", \n \"gltf_webgl\": \"`texParameterf()` with pname equal to TEXTURE_MIN_FILTER\"\n }, \n \"name\": {}, \n \"magFilter\": {\n \"anyOf\": [\n {\n \"enum\": [\n 9728\n ], \n \"type\": \"integer\", \n \"description\": \"NEAREST\"\n }, \n {\n \"enum\": [\n 9729\n ], \n \"type\": \"integer\", \n \"description\": \"LINEAR\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"Magnification filter. Valid values correspond to WebGL enums: `9728` (NEAREST) and `9729` (LINEAR).\", \n \"description\": \"Magnification filter.\", \n \"gltf_webgl\": \"`texParameterf()` with pname equal to TEXTURE_MAG_FILTER\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"wrapT\": {\n \"default\": 10497, \n \"anyOf\": [\n {\n \"enum\": [\n 33071\n ], \n \"type\": \"integer\", \n \"description\":",
" \"CLAMP_TO_EDGE\"\n }, \n {\n \"enum\": [\n 33648\n ], \n \"type\": \"integer\", \n \"description\": \"MIRRORED_REPEAT\"\n }, \n {\n \"enum\": [\n 10497\n ], \n \"type\": \"integer\", \n \"description\": \"REPEAT\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"T (V) wrapping mode. All valid values correspond to WebGL enums.\", \n \"description\": \"t wrapping mode.\", \n \"gltf_webgl\": \"`texParameterf()` with pname equal to TEXTURE_WRAP_T\"\n }\n }\n }, \n \"gltf_detailedDescription\": \"An array of samplers. A sampler contains properties for texture filtering and wrapping modes.\", \n \"type\": \"array\", \n \"description\": \"An array of samplers.\"\n }, \n \"extensionsUsed\": {\n \"uniqueItems\": true, \n \"items\": {\n \"type\": \"string\"\n }, \n \"minItems\": 1, \n \"type\": \"array\", \n \"description\": \"Names of glTF extensions used somewhere in this asset.\"\n }, \n \"scenes\": {\n \"minItems\": 1, \n \"items\": {\n \"description\": \"The root nodes of a scene.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Scene\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"nodes\": {\n \"uniqueItems\": true, \n \"items\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }, \n \"minItems\": 1, \n \"type\": \"array\", \n \"description\": \"The indices of each root node.\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"name\": {}\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of scenes.\"\n }, \n \"scene\": {\n \"description\": \"The index of the default scene.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"materials\": {\n \"minItems\": 1, \n \"items\": {\n \"description\": \"The material appearance of a primitive.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Material\", \n \"dependencies\": {\n \"alphaCutoff\": [\n \"alphaMode\"\n ]\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"alphaCutoff\": {\n \"default\": 0.5, \n \"gltf_detailedDescription\": \"Specifies the cutoff threshold when in `MASK` mode. If the alpha value is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent. A value greater than 1.0 will render the entire material as fully transparent. This value is ignored for other modes.\", \n \"minimum\": 0.0, \n \"type\": \"number\", \n \"description\": \"The alpha cutoff value of the material.\"\n }, \n \"name\": {}, \n \"pbrMetallicRoughness\": {\n \"description\": \"A set of parameter values that are used to define the metallic-roughness material model from Physically-Based Rendering (PBR) methodology. When not specified, all the default values of `pbrMetallicRoughness` apply.\", \n \"allOf\": [\n {\n \"description\": \"A set of parameter values that are used to define the metallic-roughness material model from Physically-Based Rendering (PBR) methodology.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictiona",
"ry object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Material PBR Metallic Roughness\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"baseColorTexture\": {\n \"gltf_detailedDescription\": \"The base color texture. This texture contains RGB(A) components in sRGB color space. The first three components (RGB) specify the base color of the material. If the fourth component (A) is present, it represents the alpha coverage of the material. Otherwise, an alpha of 1.0 is assumed. The `alphaMode` property specifies how alpha is interpreted. The stored texels must not be premultiplied.\", \n \"description\": \"The base color texture.\", \n \"allOf\": [\n {\n \"required\": [\n \"index\"\n ], \n \"description\": \"Reference to a texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Texture Info\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"index\": {\n \"description\": \"The index of the texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"texCoord\": {\n \"default\": 0, \n \"gltf_detailedDescription\": \"This integer value is used to construct a string in the format `TEXCOORD_<set index>` which is a reference to a key in mesh.primitives.attributes (e.g. A value of `0` corresponds to `TEXCOORD_0`). Mesh must have corresponding texture coordinate attributes for the material to be applicable to it.\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The set index of texture's TEXCOORD attribute used for texture coordinate mapping.\"\n }\n }\n }\n ]\n }, \n \"baseColorFactor\": {\n \"description\": \"The material's base color factor.\", \n \"default\": [\n 1.0, \n 1.0, \n 1.0, \n 1.0\n ], \n \"items\": {\n \"minimum\": 0.0, \n \"type\": \"number\", \n \"maximum\": 1.0\n }, \n \"gltf_detailedDescription\": \"The RGBA components of the base color of the material. The fourth component (A) is the alpha coverage of the material. The `alphaMode` property specifies how alpha is interpreted. These values are linear. If a baseColorTexture is specified, this value is multiplied with the texel values.\", \n \"minItems\": 4, \n \"maxItems\": 4, \n \"type\": \"array\"\n }, \n \"metallicFactor\": {\n \"description\": \"The metalness of the material.\", \n \"default\": 1.0, \n \"gltf_detailedDescription\": \"The metalness of the material. A value of 1.0 means the material is a metal. A value of 0.0 means the material is a dielectric. Values in between are for blending between metals and dielectrics such as dirty metallic surfaces. This value is linear. If a metallicRoughnessTexture is specified, this value is multiplied with the metallic texel values.\", \n \"maximum\": 1.0, \n \"minimum\": 0.0, \n \"type\": \"number\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"roughnessFactor\": {\n \"description\": \"The roughness of the material.\", \n \"default\": 1.0, \n \"gltf_detailedDescription\": \"The roughness of the material. A value of 1.0 means the material is completely rough. A value of 0.0 means the material is completely smooth. This value is linear. If a metallicRoughnessTexture is specified, this value is multiplied with the roughness texel values.\", \n \"maximum\": 1.0, \n \"minimum\": 0.0, \n \"type\": \"number\"\n }, \n \"metallicRoughnessTexture\": {\n \"gltf_detailedDescription\": \"The metallic-roughness texture. The metalness values are sampled from the B channel. The roughness values are sampled from the G channel. These values are linear. If other channels are present (R or A), they are ignored for metallic-roughness calculations.\", \n \"description\": \"The metallic-roughness texture.\", \n \"allOf\": [\n {\n \"required\": [\n \"index\"\n ], \n \"description\": \"Reference to a texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n ",
" \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Texture Info\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"index\": {\n \"description\": \"The index of the texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"texCoord\": {\n \"default\": 0, \n \"gltf_detailedDescription\": \"This integer value is used to construct a string in the format `TEXCOORD_<set index>` which is a reference to a key in mesh.primitives.attributes (e.g. A value of `0` corresponds to `TEXCOORD_0`). Mesh must have corresponding texture coordinate attributes for the material to be applicable to it.\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The set index of texture's TEXCOORD attribute used for texture coordinate mapping.\"\n }\n }\n }\n ]\n }\n }\n }\n ]\n }, \n \"occlusionTexture\": {\n \"gltf_detailedDescription\": \"The occlusion map texture. The occlusion values are sampled from the R channel. Higher values indicate areas that should receive full indirect lighting and lower values indicate no indirect lighting. These values are linear. If other channels are present (GBA), they are ignored for occlusion calculations.\", \n \"description\": \"The occlusion map texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"required\": [\n \"index\"\n ], \n \"description\": \"Reference to a texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Texture Info\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"index\": {\n \"description\": \"The index of the texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"texCoord\": {\n \"default\": 0, \n \"gltf_detailedDescription\": \"This integer value is used to construct a string in the format `TEXCOORD_<set index>` which is a reference to a key in mesh.primitives.attributes (e.g. A value of `0` corresponds to `TEXCOORD_0`). Mesh must have corresponding texture coordinate attributes for the material to be applicable to it.\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The set index of texture's TEXCOORD attribute used for texture coordinate mapping.\"\n }\n }\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"index\": {}, \n \"strength\": {\n \"description\": \"A scalar multiplier controlling the amount of occlusion applied.\", \n \"default\": 1.0, \n \"gltf_detailedDescription\": \"A scalar multiplier controlling the amount of occlusion applied. A value of 0.0 means no occlusion. A value of 1.0 means full occlusion. This value affects the resulting color using the formula: `occludedColor = lerp(color, color * <sampled occlusion texture value>, <occlusion strength>)`. This value is ignored if the corresponding texture is not specified. This value is linear.\", \n \"maximum\": 1.0, \n \"minimum\": 0.0, \n \"type\": \"number\"\n }, \n \"extensions\": {}, \n \"texCoord\": {}, \n \"extras\": {}\n }, \n \"title\": \"Material Occlusion Texture Info\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"doubleSided\": {\n \"default\": false, \n \"gltf_detailedDescription\": \"Specifies whether the material is double sided. When this value is false, back-face culling is enabled. When this value is true, back-face culling is disabled and double sided lighting is enabled. The back-face must have its normals reversed before the lighting equation is evaluated.\", \n \"type\": \"boolean\", \n \"description\": \"Specifies whether the material is double sided.\"\n }, \n \"alphaMode\": {\n \"default\": \"OPAQUE\", \n \"an",
"yOf\": [\n {\n \"enum\": [\n \"OPAQUE\"\n ], \n \"description\": \"The alpha value is ignored and the rendered output is fully opaque.\"\n }, \n {\n \"enum\": [\n \"MASK\"\n ], \n \"description\": \"The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value.\"\n }, \n {\n \"enum\": [\n \"BLEND\"\n ], \n \"description\": \"The alpha value is used to composite the source and destination areas. The rendered output is combined with the background using the normal painting operation (i.e. the Porter and Duff over operator).\"\n }, \n {\n \"type\": \"string\"\n }\n ], \n \"gltf_detailedDescription\": \"The material's alpha rendering mode enumeration specifying the interpretation of the alpha value of the main factor and texture.\", \n \"description\": \"The alpha rendering mode of the material.\"\n }, \n \"normalTexture\": {\n \"gltf_detailedDescription\": \"A tangent space normal map. The texture contains RGB components in linear space. Each texel represents the XYZ components of a normal vector in tangent space. Red [0 to 255] maps to X [-1 to 1]. Green [0 to 255] maps to Y [-1 to 1]. Blue [128 to 255] maps to Z [1/255 to 1]. The normal vectors use OpenGL conventions where +X is right and +Y is up. +Z points toward the viewer. In GLSL, this vector would be unpacked like so: `float3 normalVector = tex2D(<sampled normal map texture value>, texCoord) * 2 - 1`. Client implementations should normalize the normal vectors before using them in lighting equations.\", \n \"description\": \"The normal map texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"required\": [\n \"index\"\n ], \n \"description\": \"Reference to a texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Texture Info\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"index\": {\n \"description\": \"The index of the texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"texCoord\": {\n \"default\": 0, \n \"gltf_detailedDescription\": \"This integer value is used to construct a string in the format `TEXCOORD_<set index>` which is a reference to a key in mesh.primitives.attributes (e.g. A value of `0` corresponds to `TEXCOORD_0`). Mesh must have corresponding texture coordinate attributes for the material to be applicable to it.\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The set index of texture's TEXCOORD attribute used for texture coordinate mapping.\"\n }\n }\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"index\": {}, \n \"scale\": {\n \"default\": 1.0, \n \"gltf_detailedDescription\": \"The scalar multiplier applied to each normal vector of the texture. This value scales the normal vector using the formula: `scaledNormal = normalize((<sampled normal texture value> * 2.0 - 1.0) * vec3(<normal scale>, <normal scale>, 1.0))`. This value is ignored if normalTexture is not specified. This value is linear.\", \n \"type\": \"number\", \n \"description\": \"The scalar multiplier applied to each normal vector of the normal texture.\"\n }, \n \"extensions\": {}, \n \"texCoord\": {}, \n \"extras\": {}\n }, \n \"title\": \"Material Normal Texture Info\"\n }\n ]\n }, \n \"emissiveFactor\": {\n \"description\": \"The emissive color of the material.\", \n \"minItems\": 3, \n \"items\": {\n \"minimum\": 0.0, \n \"type\": \"number\", \n \"maximum\": 1.0\n }, \n \"gltf_detailedDescription\": \"The RGB components of the emissive color of the material. These values are linear. If an emissiveTexture is specified, this value is multiplied with the texel values.\", \n \"default\": [\n 0.0, \n 0.0, \n 0.0\n ], \n \"maxItems\": 3, \n \"type\": \"array\"\n }, \n \"emissiveTexture\": {\n \"gltf_detailedDescription\": \"The emissive map controls the color and intensity of the light being emitted by the material. This texture contains RGB components in sRGB color space. If a fourth component (A) is present, it is ignored.\", \n \"description\": \"The emissive map texture.\", \n \"allOf\": [\n {\n \"required\": [\n \"index\"\n ], \n \"description\": \"Reference to a texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalPropertie",
"s\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Texture Info\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"index\": {\n \"description\": \"The index of the texture.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"texCoord\": {\n \"default\": 0, \n \"gltf_detailedDescription\": \"This integer value is used to construct a string in the format `TEXCOORD_<set index>` which is a reference to a key in mesh.primitives.attributes (e.g. A value of `0` corresponds to `TEXCOORD_0`). Mesh must have corresponding texture coordinate attributes for the material to be applicable to it.\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The set index of texture's TEXCOORD attribute used for texture coordinate mapping.\"\n }\n }\n }\n ]\n }\n }\n }, \n \"gltf_detailedDescription\": \"An array of materials. A material defines the appearance of a primitive.\", \n \"type\": \"array\", \n \"description\": \"An array of materials.\"\n }, \n \"extras\": {}, \n \"extensionsRequired\": {\n \"uniqueItems\": true, \n \"items\": {\n \"type\": \"string\"\n }, \n \"minItems\": 1, \n \"type\": \"array\", \n \"description\": \"Names of glTF extensions required to properly load this asset.\"\n }, \n \"extensions\": {}, \n \"asset\": {\n \"description\": \"Metadata about the glTF asset.\", \n \"allOf\": [\n {\n \"required\": [\n \"version\"\n ], \n \"description\": \"Metadata about the glTF asset.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Asset\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"copyright\": {\n \"type\": \"string\", \n \"description\": \"A copyright message suitable for display to credit the content creator.\"\n }, \n \"generator\": {\n \"type\": \"string\", \n \"description\": \"Tool that generated this glTF model. Useful for debugging.\"\n }, \n \"version\": {\n \"pattern\": \"^[0-9]+\\\\.[0-9]+$\", \n \"type\": \"string\", \n \"description\": \"The glTF version that this asset targets.\"\n }, \n \"extensions\": {}, \n \"minVersion\": {\n \"pattern\": \"^[0-9]+\\\\.[0-9]+$\", \n \"type\": \"string\", \n \"description\": \"The minimum glTF version that this asset targets.\"\n }, \n \"extras\": {}\n }\n }\n ]\n }, \n \"animations\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"channels\", \n \"samplers\"\n ], \n \"description\": \"A keyframe animation.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Animation\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"channels\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"sampler\", \n \"target\"\n ], \n \"description\": \"Targets an animation's sampler at a node's property.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n ",
" }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Animation Channel\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {}, \n \"extensions\": {}, \n \"target\": {\n \"description\": \"The index of the node and TRS property to target.\", \n \"allOf\": [\n {\n \"required\": [\n \"path\"\n ], \n \"description\": \"The index of the node and TRS property that an animation channel targets.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Animation Channel Target\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"node\": {\n \"description\": \"The index of the node to target.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"path\": {\n \"anyOf\": [\n {\n \"enum\": [\n \"translation\"\n ]\n }, \n {\n \"enum\": [\n \"rotation\"\n ]\n }, \n {\n \"enum\": [\n \"scale\"\n ]\n }, \n {\n \"enum\": [\n \"weights\"\n ]\n }, \n {\n \"type\": \"string\"\n }\n ], \n \"description\": \"The name of the node's TRS property to modify, or the \\\"weights\\\" of the Morph Targets it instantiates. For the \\\"translation\\\" property, the values that are provided by the sampler are the translation along the x, y, and z axes. For the \\\"rotation\\\" property, the values are a quaternion in the order (x, y, z, w), where w is the scalar. For the \\\"scale\\\" property, the values are the scaling factors along the x, y, and z axes.\"\n }, \n \"extras\": {}, \n \"extensions\": {}\n }\n }\n ]\n }, \n \"sampler\": {\n \"gltf_detailedDescription\": \"The index of a sampler in this animation used to compute the value for the target, e.g., a node's translation, rotation, or scale (TRS).\", \n \"description\": \"The index of a sampler in this animation used to compute the value for the target.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of channels, each of which targets an animation's sampler at a node's property. Different channels of the same animation can't have equal targets.\"\n }, \n \"samplers\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"input\", \n \"output\"\n ], \n \"description\": \"Combines input and output accessors with an interpolation algorithm to define a keyframe graph (but not its target).\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Animation Sampler\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"input\": {\n \"gltf_detailedDescription\": \"The index of an accessor containing keyframe input values, e.g., time. That accessor must have componentType `FLOAT`. The values represent time in seconds with `time[0] >= 0.0`, and strictly increasing values, i.e., `time[n + 1] > time[n]`.\", \n \"description\": \"The index of an accessor containing keyframe input values, e.g., time.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"output\": {\n \"gltf_detailedDescription\": \"The index of an accessor containing keyframe output values. When target",
"ing translation or scale paths, the `accessor.componentType` of the output values must be `FLOAT`. When targeting rotation or morph weights, the `accessor.componentType` of the output values must be `FLOAT` or normalized integer. For weights, each output element stores `SCALAR` values with a count equal to the number of morph targets.\", \n \"description\": \"The index of an accessor, containing keyframe output values.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extensions\": {}, \n \"interpolation\": {\n \"default\": \"LINEAR\", \n \"anyOf\": [\n {\n \"enum\": [\n \"LINEAR\"\n ], \n \"description\": \"The animated values are linearly interpolated between keyframes. When targeting a rotation, spherical linear interpolation (slerp) should be used to interpolate quaternions. The number output of elements must equal the number of input elements.\"\n }, \n {\n \"enum\": [\n \"STEP\"\n ], \n \"description\": \"The animated values remain constant to the output of the first keyframe, until the next keyframe. The number of output elements must equal the number of input elements.\"\n }, \n {\n \"enum\": [\n \"CUBICSPLINE\"\n ], \n \"description\": \"The animation's interpolation is computed using a cubic spline with specified tangents. The number of output elements must equal three times the number of input elements. For each input element, the output stores three elements, an in-tangent, a spline vertex, and an out-tangent. There must be at least two keyframes when using this interpolation.\"\n }, \n {\n \"type\": \"string\"\n }\n ], \n \"gltf_detailedDescription\": \"Interpolation algorithm.\", \n \"description\": \"Interpolation algorithm.\"\n }\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of samplers that combines input and output accessors with an interpolation algorithm to define a keyframe graph (but not its target).\"\n }, \n \"extensions\": {}, \n \"name\": {}, \n \"extras\": {}\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of keyframe animations.\"\n }, \n \"images\": {\n \"minItems\": 1, \n \"items\": {\n \"oneOf\": [\n {\n \"required\": [\n \"uri\"\n ]\n }, \n {\n \"required\": [\n \"bufferView\"\n ]\n }\n ], \n \"description\": \"Image data used to create a texture. Image can be referenced by URI or `bufferView` index. `mimeType` is required in the latter case.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Image\", \n \"dependencies\": {\n \"bufferView\": [\n \"mimeType\"\n ]\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"mimeType\": {\n \"anyOf\": [\n {\n \"enum\": [\n \"image/jpeg\"\n ]\n }, \n {\n \"enum\": [\n \"image/png\"\n ]\n }, \n {\n \"type\": \"string\"\n }\n ], \n \"description\": \"The image's MIME type. Required if `bufferView` is defined.\"\n }, \n \"name\": {}, \n \"bufferView\": {\n \"description\": \"The index of the bufferView that contains the image. Use this instead of the image's uri property.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"uri\": {\n \"gltf_uriType\": \"image\", \n \"gltf_detailedDescription\": \"The uri of the image. Relative paths are relative to the .gltf file. Instead of referencing an external file, the uri can also be a data-uri. The image format must be jpg or png.\", \n \"type\": \"string\", \n \"description\": \"The uri of the image.\", \n \"format\": \"uriref\"\n }, \n \"extras\": {}, \n \"extensions\": {}\n }\n }, \n \"gltf_detailedDescription\": \"An array of images. An image defines data used to create a texture.\", \n \"type\": \"array\", \n \"description\": \"An array of images.\"\n }, \n \"nodes\": {\n \"minItems\": 1, \n \"items\": {\n \"description\": \"A node in the node hierarchy. When the node contains `skin`, all `mesh.primitives` must contain `JOINTS_0` and `WEIGHTS_0` attributes. A node can have either a `matrix` or any combination of `translation`/`rotation`/`scale` (TRS) properties. TRS properties are converted to matrices and postmultiplied in the `T * R * S` order to compose the transformation matrix; first the scale is applied to the vertices, then the rotation, and then the translation. If none are provided, the transform is the identity. When a node is targeted for animation (referenced by an animation.channel.target), only TRS properties may be present; `matrix` will not be present.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {",
"\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Node\", \n \"dependencies\": {\n \"weights\": [\n \"mesh\"\n ], \n \"skin\": [\n \"mesh\"\n ]\n }, \n \"not\": {\n \"anyOf\": [\n {\n \"required\": [\n \"matrix\", \n \"translation\"\n ]\n }, \n {\n \"required\": [\n \"matrix\", \n \"rotation\"\n ]\n }, \n {\n \"required\": [\n \"matrix\", \n \"scale\"\n ]\n }\n ]\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"scale\": {\n \"description\": \"The node's non-uniform scale, given as the scaling factors along the x, y, and z axes.\", \n \"minItems\": 3, \n \"items\": {\n \"type\": \"number\"\n }, \n \"default\": [\n 1.0, \n 1.0, \n 1.0\n ], \n \"maxItems\": 3, \n \"type\": \"array\"\n }, \n \"matrix\": {\n \"description\": \"A floating-point 4x4 transformation matrix stored in column-major order.\", \n \"minItems\": 16, \n \"items\": {\n \"type\": \"number\"\n }, \n \"gltf_detailedDescription\": \"A floating-point 4x4 transformation matrix stored in column-major order.\", \n \"default\": [\n 1.0, \n 0.0, \n 0.0, \n 0.0, \n 0.0, \n 1.0, \n 0.0, \n 0.0, \n 0.0, \n 0.0, \n 1.0, \n 0.0, \n 0.0, \n 0.0, \n 0.0, \n 1.0\n ], \n \"maxItems\": 16, \n \"gltf_webgl\": \"`uniformMatrix4fv()` with the transpose parameter equal to false\", \n \"type\": \"array\"\n }, \n \"extras\": {}, \n \"translation\": {\n \"description\": \"The node's translation along the x, y, and z axes.\", \n \"minItems\": 3, \n \"items\": {\n \"type\": \"number\"\n }, \n \"default\": [\n 0.0, \n 0.0, \n 0.0\n ], \n \"maxItems\": 3, \n \"type\": \"array\"\n }, \n \"mesh\": {\n \"description\": \"The index of the mesh in this node.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"camera\": {\n \"description\": \"The index of the camera referenced by this node.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"weights\": {\n \"minItems\": 1, \n \"items\": {\n \"type\": \"number\"\n }, \n \"type\": \"array\", \n \"description\": \"The weights of the instantiated Morph Target. Number of elements must match number of Morph Targets of used mesh.\"\n }, \n \"skin\": {\n \"gltf_detailedDescription\": \"The index of the skin referenced by this node. When a skin is referenced by a node within a scene, all joints used by the skin must belong to the same scene.\", \n \"description\": \"The index of the skin referenced by this node.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extensions\": {}, \n \"rotation\": {\n \"description\": \"The node's unit quaternion rotation in the order (x, y, z, w), where w is the scalar.\", \n \"minItems\": 4, \n \"items\": {\n \"minimum\": -1.0, \n \"type\": \"number\", \n \"maximum\": 1.0\n }, \n \"default\": [\n 0.0, \n 0.0, \n 0.0, \n 1.0\n ], \n \"maxItems\": 4, \n \"type\": \"array\"\n }, \n \"children\": {\n \"uniqueItems\": true, \n \"items\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }, \n \"minItems\": 1, \n \"type\": \"array\", \n \"description\": \"The indices of this node's children.\"\n }, \n \"name\": {}\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of nodes.\"\n }, \n \"bufferViews\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"buffer\", \n \"byteLength\"\n ], \n \"description\": \"A view into a buffer generally representing a subset of the buffer.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"addition",
"alProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Buffer View\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"byteLength\": {\n \"minimum\": 1, \n \"type\": \"integer\", \n \"description\": \"The total byte length of the buffer view.\"\n }, \n \"target\": {\n \"anyOf\": [\n {\n \"enum\": [\n 34962\n ], \n \"type\": \"integer\", \n \"description\": \"ARRAY_BUFFER\"\n }, \n {\n \"enum\": [\n 34963\n ], \n \"type\": \"integer\", \n \"description\": \"ELEMENT_ARRAY_BUFFER\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"description\": \"The target that the GPU buffer should be bound to.\", \n \"gltf_webgl\": \"`bindBuffer()`\"\n }, \n \"byteStride\": {\n \"description\": \"The stride, in bytes.\", \n \"gltf_detailedDescription\": \"The stride, in bytes, between vertex attributes. When this is not defined, data is tightly packed. When two or more accessors use the same bufferView, this field must be defined.\", \n \"multipleOf\": 4, \n \"maximum\": 252, \n \"minimum\": 4, \n \"gltf_webgl\": \"`vertexAttribPointer()` stride parameter\", \n \"type\": \"integer\"\n }, \n \"buffer\": {\n \"description\": \"The index of the buffer.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"byteOffset\": {\n \"default\": 0, \n \"minimum\": 0, \n \"type\": \"integer\", \n \"description\": \"The offset into the buffer in bytes.\"\n }, \n \"name\": {}\n }\n }, \n \"gltf_detailedDescription\": \"An array of bufferViews. A bufferView is a view into a buffer generally representing a subset of the buffer.\", \n \"type\": \"array\", \n \"description\": \"An array of bufferViews.\"\n }, \n \"skins\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"joints\"\n ], \n \"description\": \"Joints and matrices defining a skin.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Skin\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"skeleton\": {\n \"gltf_detailedDescription\": \"The index of the node used as a skeleton root. The node must be the closest common root of the joints hierarchy or a direct or indirect parent node of the closest common root.\", \n \"description\": \"The index of the node used as a skeleton root.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"joints\": {\n \"description\": \"Indices of skeleton nodes, used as joints in this skin.\", \n \"minItems\": 1, \n \"items\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }, \n \"gltf_detailedDescription\": \"Indices of skeleton nodes, used as joints in this skin. The array length must be the same as the `count` property of the `inverseBindMatrices` accessor (when defined).\", \n \"uniqueItems\": true, \n \"type\": \"array\"\n }, \n \"inverseBindMatrices\": {\n \"description\": \"The index of the accessor containing the floating-point 4x4 inverse-bind matrices. The default is that each matrix is a 4x4 identity matrix, which implies that inverse-bind matrices were pre-applied.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"name\": {}\n }\n }, \n \"gltf_detailedDescription\": \"An array of skins. A skin is defined by joints and matrices.\", \n \"type\": \"array\", \n \"description\": \"An array of skins.\"\n }, \n \"buffers\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"byteLength\"\n ], \n \"description\": \"A buffer points to binary geometry, animation, or skins.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n ",
" \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Buffer\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"byteLength\": {\n \"minimum\": 1, \n \"type\": \"integer\", \n \"description\": \"The length of the buffer in bytes.\"\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"uri\": {\n \"gltf_uriType\": \"application\", \n \"gltf_detailedDescription\": \"The uri of the buffer. Relative paths are relative to the .gltf file. Instead of referencing an external file, the uri can also be a data-uri.\", \n \"type\": \"string\", \n \"description\": \"The uri of the buffer.\", \n \"format\": \"uriref\"\n }, \n \"name\": {}\n }\n }, \n \"gltf_detailedDescription\": \"An array of buffers. A buffer points to binary geometry, animation, or skins.\", \n \"type\": \"array\", \n \"description\": \"An array of buffers.\"\n }, \n \"meshes\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"primitives\"\n ], \n \"description\": \"A set of primitives to be rendered. A node can contain one mesh. A node's transform places the mesh in the scene.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"type\": \"object\", \n \"properties\": {\n \"name\": {\n \"gltf_detailedDescription\": \"The user-defined name of this object. This is not necessarily unique, e.g., an accessor and a buffer could have the same name, or two accessors could even have the same name.\", \n \"type\": \"string\", \n \"description\": \"The user-defined name of this object.\"\n }\n }, \n \"title\": \"glTF Child of Root Property\"\n }\n ], \n \"title\": \"Mesh\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"primitives\": {\n \"minItems\": 1, \n \"items\": {\n \"required\": [\n \"attributes\"\n ], \n \"description\": \"Geometry to be rendered with the given material.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"extras\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"description\": \"Application-specific data.\", \n \"title\": \"Extras\"\n }, \n \"extensions\": {\n \"description\": \"Dictionary object with extension-specific objects.\", \n \"title\": \"Extension\", \n \"additionalProperties\": {\n \"type\": \"object\"\n }, \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {}\n }\n }, \n \"title\": \"glTF Property\"\n }\n ], \n \"title\": \"Mesh Primitive\", \n \"gltf_webgl\": \"`drawElements()` and `drawArrays()`\", \n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"type\": \"object\", \n \"properties\": {\n \"material\": {\n \"description\": \"The index of the material to apply to this primitive when rendering.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"extras\": {}, \n \"extensions\": {}, \n \"mode\": {\n \"default\": 4, \n \"anyOf\": [\n {\n \"enum\": [\n 0\n ], \n \"type\": \"integer\", \n \"description\": \"POINTS\"\n }, \n {\n \"enum\": [\n 1\n ], \n \"type\": \"integer\", \n \"description\": \"LINES\"\n }, \n {\n \"enum\": [\n 2\n ], \n \"type\": \"integer\", \n \"description\": \"LINE_LOOP\"\n }, \n {\n \"enum\": [\n 3\n ], \n \"type\": \"integer\", \n \"description\": \"LINE_STRIP\"\n }, \n {\n \"enum\": [\n 4\n ",
" ], \n \"type\": \"integer\", \n \"description\": \"TRIANGLES\"\n }, \n {\n \"enum\": [\n 5\n ], \n \"type\": \"integer\", \n \"description\": \"TRIANGLE_STRIP\"\n }, \n {\n \"enum\": [\n 6\n ], \n \"type\": \"integer\", \n \"description\": \"TRIANGLE_FAN\"\n }, \n {\n \"type\": \"integer\"\n }\n ], \n \"gltf_detailedDescription\": \"The type of primitives to render. All valid values correspond to WebGL enums.\", \n \"description\": \"The type of primitives to render.\"\n }, \n \"indices\": {\n \"gltf_detailedDescription\": \"The index of the accessor that contains mesh indices. When this is not defined, the primitives should be rendered without indices using `drawArrays()`. When defined, the accessor must contain indices: the `bufferView` referenced by the accessor should have a `target` equal to 34963 (ELEMENT_ARRAY_BUFFER); `componentType` must be 5121 (UNSIGNED_BYTE), 5123 (UNSIGNED_SHORT) or 5125 (UNSIGNED_INT), the latter may require enabling additional hardware support; `type` must be `\\\"SCALAR\\\"`. For triangle primitives, the front face has a counter-clockwise (CCW) winding order. Values of the index accessor must not include the maximum value for the given component type, which triggers primitive restart in several graphics APIs and would require client implementations to rebuild the index buffer. Primitive restart values are disallowed and all index values must refer to actual vertices. As a result, the index accessor's values must not exceed the following maxima: BYTE `< 255`, UNSIGNED_SHORT `< 65535`, UNSIGNED_INT `< 4294967295`.\", \n \"description\": \"The index of the accessor that contains the indices.\", \n \"allOf\": [\n {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }\n ]\n }, \n \"attributes\": {\n \"additionalProperties\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }, \n \"type\": \"object\", \n \"description\": \"A dictionary object, where each key corresponds to mesh attribute semantic and each value is the index of the accessor containing attribute's data.\", \n \"minProperties\": 1\n }, \n \"targets\": {\n \"minItems\": 1, \n \"items\": {\n \"additionalProperties\": {\n \"$schema\": \"http://json-schema.org/draft-04/schema\", \n \"minimum\": 0, \n \"type\": \"integer\", \n \"title\": \"glTF Id\"\n }, \n \"type\": \"object\", \n \"description\": \"A dictionary object specifying attributes displacements in a Morph Target, where each key corresponds to one of the three supported attribute semantic (`POSITION`, `NORMAL`, or `TANGENT`) and each value is the index of the accessor containing the attribute displacements' data.\", \n \"minProperties\": 1\n }, \n \"type\": \"array\", \n \"description\": \"An array of Morph Targets, each Morph Target is a dictionary mapping attributes (only `POSITION`, `NORMAL`, and `TANGENT` supported) to their deviations in the Morph Target.\"\n }\n }\n }, \n \"type\": \"array\", \n \"description\": \"An array of primitives, each defining geometry to be rendered with a material.\"\n }, \n \"extensions\": {}, \n \"extras\": {}, \n \"weights\": {\n \"minItems\": 1, \n \"items\": {\n \"type\": \"number\"\n }, \n \"type\": \"array\", \n \"description\": \"Array of weights to be applied to the Morph Targets.\"\n }, \n \"name\": {}\n }\n }, \n \"gltf_detailedDescription\": \"An array of meshes. A mesh is a set of primitives to be rendered.\", \n \"type\": \"array\", \n \"description\": \"An array of meshes.\"\n }\n }\n}"};