diff --git a/2.0/BoxVertexColors/README.md b/2.0/BoxVertexColors/README.md index af9fccc1..f6f4627a 100644 --- a/2.0/BoxVertexColors/README.md +++ b/2.0/BoxVertexColors/README.md @@ -1,8 +1,12 @@ # Box Vertex Colors + +A simple unit cube that uses vertex colors, stored in the `COLORS_0` attribute. The color of each vertex is given by the RGB colors that are defined by the vertex coordinates. So the vertex at (0,0,0) is black, the vertex at (1,0,0) is red, the vertex at (1,1,0) is yellow, ..., and the vertex at (1,1,1) is white. + ## Screenshot ![screenshot](screenshot/screenshot.png) ## License Information -Donated by Michael Feldstein for glTF testing. \ No newline at end of file +Public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)) + diff --git a/2.0/BoxVertexColors/glTF-Binary/BoxVertexColors.glb b/2.0/BoxVertexColors/glTF-Binary/BoxVertexColors.glb index 4409cfbb..875d95a9 100644 Binary files a/2.0/BoxVertexColors/glTF-Binary/BoxVertexColors.glb and b/2.0/BoxVertexColors/glTF-Binary/BoxVertexColors.glb differ diff --git a/2.0/BoxVertexColors/glTF-Embedded/BoxVertexColors.gltf b/2.0/BoxVertexColors/glTF-Embedded/BoxVertexColors.gltf index d7bebd93..8c56cd46 100644 --- a/2.0/BoxVertexColors/glTF-Embedded/BoxVertexColors.gltf +++ b/2.0/BoxVertexColors/glTF-Embedded/BoxVertexColors.gltf @@ -1,220 +1,75 @@ { - "accessors": [ - { - "bufferView": 0, - "byteOffset": 0, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - }, - { - "bufferView": 1, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "max": [ - 0.5, - 0.5, - 0.5 - ], - "min": [ - -0.5, - -0.5, - -0.5 - ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "type": "VEC4" - }, - { - "bufferView": 4, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "type": "VEC2" - } - ], - "asset": { - "generator": "FBX2glTF", - "version": "2.0" - }, - "bufferViews": [ - { - "buffer": 0, - "byteLength": 72, - "byteOffset": 0, - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 288, - "byteOffset": 72, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 288, - "byteOffset": 360, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 384, - "byteOffset": 648, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 192, - "byteOffset": 1032, - "target": 34962 - } - ], - "buffers": [ - { - "byteLength": 1224, - "uri": "data:application/octet-stream;base64,AAABAAIAAQAAAAMABAAFAAYABwAEAAYACAAJAAoACwAJAAgADAANAA4ADQAMAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAAAAAvwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAHekGMHp6JTz+/38/UdInMBHtfz9SNZs6rTHKPJsTwTrvy00/XMpNP0HLTT8AAIA/3ssCP4z/fz+gF+43whYUON7LAj+M/38/oBfuN8IWFDgd6QYwenolPP7/fz9R0icw6vR/PwjDNTqNSsY80xtiOu/LTT9cyk0/QctNPwAAgD8R7X8/UjWbOq0xyjybE8E678tNP1zKTT9By00/AACAP6bmIzurlgY+BNh/P0ziSzveywI/jP9/P6AX7jfCFhQ478tNP1zKTT9By00/AACAP6bmIzurlgY+BNh/P0ziSzsSAI885Oh+PxdguT574rE8Ee1/P1I1mzqtMco8mxPBOhIAjzzk6H4/F2C5PnvisTzq9H8/CMM1Oo1KxjzTG2I6HekGMHp6JTz+/38/UdInMO/LTT9cyk0/QctNPwAAgD+m5iM7q5YGPgTYfz9M4ks778tNP1zKTT9By00/AACAP+r0fz8IwzU6jUrGPNMbYjoSAI885Oh+PxdguT574rE8AACAPgAAAAAAAAA/qqqqPgAAAD8AAAAAAACAPqqqqj4AAIA+qqqqPgAAAACqqqo+AAAAAKqqKj8AAIA+qqoqPwAAAD+qqqo+AACAPqqqKj8AAAA/qqoqPwAAgD6qqqo+AABAP6qqqj4AAAA/qqoqPwAAQD+qqio/AAAAP6qqqj4AAEA/qqoqPwAAgD+qqio/AACAP6qqqj4AAEA/qqqqPgAAAD+qqio/AACAPqqqKj8AAIA+AACAPwAAAD8AAIA/" - } - ], - "materials": [ - { - "name": "Default", - "pbrMetallicRoughness": { - "baseColorFactor": [ - 0.800000011920929, - 0.800000011920929, - 0.800000011920929, - 1.0 - ], - "metallicFactor": 0.100000001490116, - "roughnessFactor": 0.990000005960464 - } - } - ], - "meshes": [ - { - "name": "Cube", - "primitives": [ - { - "attributes": { - "COLOR_0": 3, - "NORMAL": 2, - "POSITION": 1, - "TEXCOORD_0": 4 - }, - "indices": 0, - "material": 0, - "mode": 4 - } - ] - } - ], - "nodes": [ - { - "children": [ - 1, - 2, - 3 - ], - "name": "RootNode", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - }, - { - "name": "Mesh", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - }, - { - "mesh": 0, - "name": "Cube", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - }, - { - "name": "Texture Group", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - } - ], - "samplers": [ - {} - ], - "scene": 0, - "scenes": [ - { - "name": "Root Scene", - "nodes": [ - 0 - ] - } - ] -} + "accessors" : [ { + "bufferView" : 0, + "byteOffset" : 0, + "componentType" : 5123, + "count" : 36, + "type" : "SCALAR", + "max" : [ 23 ], + "min" : [ 0 ] + }, { + "bufferView" : 1, + "byteOffset" : 0, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3", + "max" : [ 1.0, 1.0, 1.0 ], + "min" : [ 0.0, 0.0, 0.0 ] + }, { + "bufferView" : 1, + "byteOffset" : 288, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3", + "max" : [ 1.0, 1.0, 1.0 ], + "min" : [ -1.0, -1.0, -1.0 ] + }, { + "bufferView" : 1, + "byteOffset" : 576, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3", + "max" : [ 1.0, 1.0, 1.0 ], + "min" : [ 0.0, 0.0, 0.0 ] + } ], + "asset" : { + "generator" : "JglTF from https://github.com/javagl/JglTF", + "version" : "2.0" + }, + "buffers" : [ { + "uri" : "data:application/gltf-buffer;base64,AAACAAEAAAADAAIABAAGAAUABAAHAAYACAAKAAkACAALAAoADAAOAA0ADAAPAA4AEAASABEAEAATABIAFAAWABUAFAAXABYAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAIA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAIA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAA", + "byteLength" : 936 + } ], + "bufferViews" : [ { + "name" : "indices bufferView", + "buffer" : 0, + "byteOffset" : 0, + "byteLength" : 72, + "target" : 34963 + }, { + "name" : "attributes bufferView", + "buffer" : 0, + "byteOffset" : 72, + "byteLength" : 864, + "byteStride" : 12, + "target" : 34962 + } ], + "meshes" : [ { + "primitives" : [ { + "attributes" : { + "POSITION" : 1, + "NORMAL" : 2, + "COLOR_0" : 3 + }, + "indices" : 0, + "mode" : 4 + } ] + } ], + "nodes" : [ { + "mesh" : 0 + } ], + "scene" : 0, + "scenes" : [ { + "nodes" : [ 0 ] + } ] +} \ No newline at end of file diff --git a/2.0/BoxVertexColors/glTF/BoxVertexColors.gltf b/2.0/BoxVertexColors/glTF/BoxVertexColors.gltf index 5ea966d4..962b94b2 100644 --- a/2.0/BoxVertexColors/glTF/BoxVertexColors.gltf +++ b/2.0/BoxVertexColors/glTF/BoxVertexColors.gltf @@ -1,220 +1,75 @@ { - "accessors": [ - { - "bufferView": 0, - "byteOffset": 0, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - }, - { - "bufferView": 1, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "max": [ - 0.5, - 0.5, - 0.5 - ], - "min": [ - -0.5, - -0.5, - -0.5 - ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "type": "VEC4" - }, - { - "bufferView": 4, - "byteOffset": 0, - "componentType": 5126, - "count": 24, - "type": "VEC2" - } - ], - "asset": { - "generator": "FBX2glTF", - "version": "2.0" + "accessors" : [ { + "bufferView" : 0, + "byteOffset" : 0, + "componentType" : 5123, + "count" : 36, + "type" : "SCALAR", + "max" : [ 23 ], + "min" : [ 0 ] + }, { + "bufferView" : 1, + "byteOffset" : 0, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3", + "max" : [ 1.0, 1.0, 1.0 ], + "min" : [ 0.0, 0.0, 0.0 ] + }, { + "bufferView" : 1, + "byteOffset" : 288, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3", + "max" : [ 1.0, 1.0, 1.0 ], + "min" : [ -1.0, -1.0, -1.0 ] + }, { + "bufferView" : 1, + "byteOffset" : 576, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3", + "max" : [ 1.0, 1.0, 1.0 ], + "min" : [ 0.0, 0.0, 0.0 ] + } ], + "asset" : { + "generator" : "JglTF from https://github.com/javagl/JglTF", + "version" : "2.0" }, - "bufferViews": [ - { - "buffer": 0, - "byteLength": 72, - "byteOffset": 0, - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 288, - "byteOffset": 72, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 288, - "byteOffset": 360, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 384, - "byteOffset": 648, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 192, - "byteOffset": 1032, - "target": 34962 - } - ], - "buffers": [ - { - "byteLength": 1224, - "uri": "buffer.bin" - } - ], - "materials": [ - { - "name": "Default", - "pbrMetallicRoughness": { - "baseColorFactor": [ - 0.800000011920929, - 0.800000011920929, - 0.800000011920929, - 1.0 - ], - "metallicFactor": 0.100000001490116, - "roughnessFactor": 0.990000005960464 - } - } - ], - "meshes": [ - { - "name": "Cube", - "primitives": [ - { - "attributes": { - "COLOR_0": 3, - "NORMAL": 2, - "POSITION": 1, - "TEXCOORD_0": 4 - }, - "indices": 0, - "material": 0, - "mode": 4 - } - ] - } - ], - "nodes": [ - { - "children": [ - 1, - 2, - 3 - ], - "name": "RootNode", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - }, - { - "name": "Mesh", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - }, - { - "mesh": 0, - "name": "Cube", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] + "buffers" : [ { + "uri" : "buffer.bin", + "byteLength" : 936 + } ], + "bufferViews" : [ { + "name" : "indices bufferView", + "buffer" : 0, + "byteOffset" : 0, + "byteLength" : 72, + "target" : 34963 + }, { + "name" : "attributes bufferView", + "buffer" : 0, + "byteOffset" : 72, + "byteLength" : 864, + "byteStride" : 12, + "target" : 34962 + } ], + "meshes" : [ { + "primitives" : [ { + "attributes" : { + "POSITION" : 1, + "NORMAL" : 2, + "COLOR_0" : 3 }, - { - "name": "Texture Group", - "rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "scale": [ - 1.0, - 1.0, - 1.0 - ], - "translation": [ - 0.0, - 0.0, - 0.0 - ] - } - ], - "samplers": [ - {} - ], - "scene": 0, - "scenes": [ - { - "name": "Root Scene", - "nodes": [ - 0 - ] - } - ] -} + "indices" : 0, + "mode" : 4 + } ] + } ], + "nodes" : [ { + "mesh" : 0 + } ], + "scene" : 0, + "scenes" : [ { + "nodes" : [ 0 ] + } ] + } \ No newline at end of file diff --git a/2.0/BoxVertexColors/glTF/buffer.bin b/2.0/BoxVertexColors/glTF/buffer.bin index a9d7d1b8..52dbc769 100644 Binary files a/2.0/BoxVertexColors/glTF/buffer.bin and b/2.0/BoxVertexColors/glTF/buffer.bin differ diff --git a/2.0/BoxVertexColors/screenshot/screenshot.png b/2.0/BoxVertexColors/screenshot/screenshot.png index 70523a2e..0844d71d 100644 Binary files a/2.0/BoxVertexColors/screenshot/screenshot.png and b/2.0/BoxVertexColors/screenshot/screenshot.png differ diff --git a/2.0/ClearCoatCarPaint/README.md b/2.0/ClearCoatCarPaint/README.md new file mode 100644 index 00000000..937afb45 --- /dev/null +++ b/2.0/ClearCoatCarPaint/README.md @@ -0,0 +1,26 @@ +# Clear Coat Car Paint + +## Screenshot + +![screenshot](screenshot/screenshot_large.jpg) + +Screenshot from the [glTF Sample Viewer](https://github.khronos.org/glTF-Sample-Viewer-Release/) with the Wide Street environment light. + +## Description + +This model is a sphere using the glTF extension [`KHR_materials_clearcoat`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat) overtop a car paint base material. + +The base material is meant to mimic the scattering from micro flakes such as used in some car paints. + +The model uses a single bitmap for the normal bump texture with a random per-pixel noise pattern, and the glTF extension [`KHR_texture_transform`](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform) to increase bump tiling. + +![bump texture](screenshot/normal_bump_enlarged.jpg) + +The normal bump texture, enlarged 200% to show detail. + + +Roughness was increased to 0.4 to scatter the reflected light and to provide a contrast with the clear coat layer which uses zero Roughness. Metalness was set arbitrarily to a partial value of 0.3 to increase the specularity of the base material. + +## License Information + +CC0, No Rights Reserved, https://creativecommons.org/share-your-work/public-domain/cc0/. Model and texture created by Eric Chadwick. diff --git a/2.0/ClearCoatCarPaint/glTF-Binary/ClearCoatCarPaint.glb b/2.0/ClearCoatCarPaint/glTF-Binary/ClearCoatCarPaint.glb new file mode 100644 index 00000000..946178f5 Binary files /dev/null and b/2.0/ClearCoatCarPaint/glTF-Binary/ClearCoatCarPaint.glb differ diff --git a/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint.bin b/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint.bin new file mode 100644 index 00000000..0dbf0856 Binary files /dev/null and b/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint.bin differ diff --git a/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint.gltf b/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint.gltf new file mode 100644 index 00000000..61274304 --- /dev/null +++ b/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint.gltf @@ -0,0 +1,173 @@ +{ + "asset": { + "version": "2.0", + "generator": "babylon.js glTF exporter for 3dsmax 2022 v20220210.4", + "copyright": "CC0, No Rights Reserved. Model and texture created by Eric Chadwick" + }, + "extensionsUsed": [ + "KHR_texture_transform", + "KHR_materials_clearcoat" + ], + "extensionsRequired": [ + "KHR_texture_transform", + "KHR_materials_clearcoat" + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "translation": [ + 0.0, + 0.5, + 0.0 + ], + "name": "Sphere" + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "NORMAL": 2, + "TEXCOORD_0": 3 + }, + "indices": 0, + "material": 0 + } + ], + "name": "Sphere" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5123, + "count": 9216, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1728, + "max": [ + 0.5000792, + 0.4901544, + 0.5000792 + ], + "min": [ + -0.5000792, + -0.490154475, + -0.5000792 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "bufferView": 1, + "byteOffset": 20736, + "componentType": 5126, + "count": 1728, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1728, + "type": "VEC2", + "name": "accessorUVs" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 18432, + "name": "bufferViewScalar", + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 18432, + "byteLength": 41472, + "byteStride": 12, + "name": "bufferViewFloatVec3", + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 59904, + "byteLength": 13824, + "byteStride": 8, + "name": "bufferViewFloatVec2", + "target": 34962 + } + ], + "buffers": [ + { + "uri": "ClearCoatCarPaint.bin", + "byteLength": 73728 + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.7, + 0, + 0, + 1 + ], + "metallicFactor": 0.3, + "roughnessFactor": 0.4 + }, + "normalTexture": { + "index": 0, + "scale": 0.2, + "extensions": { + "KHR_texture_transform": { + "scale": [ + 3, + 3 + ] + } + } + }, + "extensions": { + "KHR_materials_clearcoat": { + "clearcoatFactor": 1, + "clearcoatRoughnessFactor": 0 + } + }, + "doubleSided": false, + "name": "Clear Coat Car Paint" + } + ], + "textures": [ + { + "sampler": 0, + "source": 0, + "name": "ClearCoatCarPaint_Normal.png" + } + ], + "images": [ + { + "uri": "ClearCoatCarPaint_Normal.png" + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ] +} \ No newline at end of file diff --git a/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint_Normal.png b/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint_Normal.png new file mode 100644 index 00000000..70c3ae08 Binary files /dev/null and b/2.0/ClearCoatCarPaint/glTF/ClearCoatCarPaint_Normal.png differ diff --git a/2.0/ClearCoatCarPaint/screenshot/normal_bump_enlarged.jpg b/2.0/ClearCoatCarPaint/screenshot/normal_bump_enlarged.jpg new file mode 100644 index 00000000..5a85bfa7 Binary files /dev/null and b/2.0/ClearCoatCarPaint/screenshot/normal_bump_enlarged.jpg differ diff --git a/2.0/ClearCoatCarPaint/screenshot/screenshot.jpg b/2.0/ClearCoatCarPaint/screenshot/screenshot.jpg new file mode 100644 index 00000000..8f20dc27 Binary files /dev/null and b/2.0/ClearCoatCarPaint/screenshot/screenshot.jpg differ diff --git a/2.0/ClearCoatCarPaint/screenshot/screenshot_large.jpg b/2.0/ClearCoatCarPaint/screenshot/screenshot_large.jpg new file mode 100644 index 00000000..fd618042 Binary files /dev/null and b/2.0/ClearCoatCarPaint/screenshot/screenshot_large.jpg differ diff --git a/2.0/ClearcoatWicker/README.md b/2.0/ClearcoatWicker/README.md new file mode 100644 index 00000000..46ee4f32 --- /dev/null +++ b/2.0/ClearcoatWicker/README.md @@ -0,0 +1,15 @@ +# ClearcoatWicker + +## Screenshot + +![screenshot](screenshot/screenshot_large.jpg) + +Screenshot from the [glTF Sample Viewer](https://github.khronos.org/glTF-Sample-Viewer-Release/) with the Colorful Studio environment light. + +## Description + +This model is a sphere using the glTF extension [`KHR_materials_clearcoat`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat) to create a wicker material covered with a wrinkled plastic clearcoat, to demonstrate the usage of a clearcoat bump texture. + +## License Information + +CC0, No Rights Reserved, https://creativecommons.org/share-your-work/public-domain/cc0/. Model and textures created by Eric Chadwick. diff --git a/2.0/ClearcoatWicker/glTF-Binary/ClearcoatWicker.glb b/2.0/ClearcoatWicker/glTF-Binary/ClearcoatWicker.glb new file mode 100644 index 00000000..a59a4485 Binary files /dev/null and b/2.0/ClearcoatWicker/glTF-Binary/ClearcoatWicker.glb differ diff --git a/2.0/ClearcoatWicker/glTF/ClearcoatWicker.bin b/2.0/ClearcoatWicker/glTF/ClearcoatWicker.bin new file mode 100644 index 00000000..0dbf0856 Binary files /dev/null and b/2.0/ClearcoatWicker/glTF/ClearcoatWicker.bin differ diff --git a/2.0/ClearcoatWicker/glTF/ClearcoatWicker.gltf b/2.0/ClearcoatWicker/glTF/ClearcoatWicker.gltf new file mode 100644 index 00000000..b1fe269c --- /dev/null +++ b/2.0/ClearcoatWicker/glTF/ClearcoatWicker.gltf @@ -0,0 +1,189 @@ +{ + "asset": { + "version": "2.0", + "generator": "babylon.js glTF exporter for 3dsmax 2022 v20220210.4", + "copyright": "CC0, No Rights Reserved. Model and textures created by Eric Chadwick." + }, + "extensionsUsed": [ + "KHR_materials_clearcoat" + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "translation": [ + 0.0, + 0.5, + 0.0 + ], + "name": "Sphere" + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "NORMAL": 2, + "TEXCOORD_0": 3 + }, + "indices": 0, + "material": 0 + } + ], + "name": "Sphere" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5123, + "count": 9216, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 1728, + "max": [ + 0.5000792, + 0.4901544, + 0.5000792 + ], + "min": [ + -0.5000792, + -0.490154475, + -0.5000792 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "bufferView": 1, + "byteOffset": 20736, + "componentType": 5126, + "count": 1728, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 1728, + "type": "VEC2", + "name": "accessorUVs" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 18432, + "name": "bufferViewScalar", + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 18432, + "byteLength": 41472, + "byteStride": 12, + "name": "bufferViewFloatVec3", + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 59904, + "byteLength": 13824, + "byteStride": 8, + "name": "bufferViewFloatVec2", + "target": 34962 + } + ], + "buffers": [ + { + "uri": "ClearcoatWicker.bin", + "byteLength": 73728 + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "metallicFactor": 1, + "roughnessFactor": 1, + "metallicRoughnessTexture": { + "index": 2 + } + }, + "occlusionTexture": { + "index": 2 + }, + "normalTexture": { + "index": 1, + "scale": 1 + }, + "extensions": { + "KHR_materials_clearcoat": { + "clearcoatFactor": 1, + "clearcoatNormalTexture": { + "index": 3 + }, + "clearcoatRoughnessFactor": 0.1 + } + }, + "name": "ClearcoatWicker" + } + ], + "textures": [ + { + "sampler": 0, + "source": 0, + "name": "wicker_basecolor.png" + }, + { + "sampler": 0, + "source": 1, + "name": "wicker_normal.png" + }, + { + "sampler": 0, + "source": 2, + "name": "wicker_occlusion-rough-metal.png" + }, + { + "sampler": 0, + "source": 3, + "name": "clearcoat_normal.png" + } + ], + "images": [ + { + "uri": "wicker_basecolor.png" + }, + { + "uri": "wicker_normal.png" + }, + { + "uri": "wicker_occlusion-rough-metal.png" + }, + { + "uri": "clearcoat_normal.png" + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987 + } + ] +} \ No newline at end of file diff --git a/2.0/ClearcoatWicker/glTF/clearcoat_normal.png b/2.0/ClearcoatWicker/glTF/clearcoat_normal.png new file mode 100644 index 00000000..32406e9c Binary files /dev/null and b/2.0/ClearcoatWicker/glTF/clearcoat_normal.png differ diff --git a/2.0/ClearcoatWicker/glTF/wicker_basecolor.png b/2.0/ClearcoatWicker/glTF/wicker_basecolor.png new file mode 100644 index 00000000..086cac3c Binary files /dev/null and b/2.0/ClearcoatWicker/glTF/wicker_basecolor.png differ diff --git a/2.0/ClearcoatWicker/glTF/wicker_normal.png b/2.0/ClearcoatWicker/glTF/wicker_normal.png new file mode 100644 index 00000000..1932e6d7 Binary files /dev/null and b/2.0/ClearcoatWicker/glTF/wicker_normal.png differ diff --git a/2.0/ClearcoatWicker/glTF/wicker_occlusion-rough-metal.png b/2.0/ClearcoatWicker/glTF/wicker_occlusion-rough-metal.png new file mode 100644 index 00000000..1370363c Binary files /dev/null and b/2.0/ClearcoatWicker/glTF/wicker_occlusion-rough-metal.png differ diff --git a/2.0/ClearcoatWicker/screenshot/screenshot.jpg b/2.0/ClearcoatWicker/screenshot/screenshot.jpg new file mode 100644 index 00000000..6a4d691c Binary files /dev/null and b/2.0/ClearcoatWicker/screenshot/screenshot.jpg differ diff --git a/2.0/ClearcoatWicker/screenshot/screenshot_large.jpg b/2.0/ClearcoatWicker/screenshot/screenshot_large.jpg new file mode 100644 index 00000000..3bedaa4b Binary files /dev/null and b/2.0/ClearcoatWicker/screenshot/screenshot_large.jpg differ diff --git a/2.0/FlightHelmet/README.md b/2.0/FlightHelmet/README.md index 91656ef4..15572778 100644 --- a/2.0/FlightHelmet/README.md +++ b/2.0/FlightHelmet/README.md @@ -4,6 +4,36 @@ ![screenshot](screenshot/screenshot.jpg) +## KHR_texture_basisu + +The model in [glTF-KTX-BasisU](./glTF-KTX-BasisU) has been processed with [glTF-Transform](https://gltf-transform.donmccurdy.com/) to convert the images from PNG to [KTX](https://www.khronos.org/ktx/) with Basis Universal texture compression and the extension KHR_texture_basisu. The model uses glTF-Transform to compress the color textures using ETC1S and the non-color textures using UASTC with default settings. + +### Texture Sizes + +| Name | Before | After | Delta | Type | +|:------------------------------------|------------:|------------:|-------------:|:------| +| GlassPlasticMat_BaseColor | `2.20 MB` | `303.30 KB` | `-1.90 MB` | ETC1S | +| GlassPlasticMat_Normal | `2.53 MB` | `2.63 MB` | `+103.96 KB` | UASTC | +| GlassPlasticMat_OcclusionRoughMetal | `3.52 MB` | `3.64 MB` | `+121.54 KB` | UASTC | +| LeatherPartsMat_BaseColor | `5.22 MB` | `483.02 KB` | `-4.75 MB` | ETC1S | +| LeatherPartsMat_Normal | `5.41 MB` | `3.63 MB` | `-1.78 MB` | UASTC | +| LeatherPartsMat_OcclusionRoughMetal | `4.17 MB` | `3.96 MB` | `-214.13 KB` | UASTC | +| LensesMat_BaseColor | `679.98 KB` | `201.58 KB` | `-478.41 KB` | ETC1S | +| LensesMat_Normal | `5.44 KB` | `1.63 KB` | `-3.81 KB` | UASTC | +| LensesMat_OcclusionRoughMetal | `587.50 KB` | `686.60 KB` | `+99.09 KB` | UASTC | +| MetalPartsMat_BaseColor | `2.56 MB` | `462.95 KB` | `-2.10 MB` | ETC1S | +| MetalPartsMat_Normal | `3.12 MB` | `3.39 MB` | `+272.53 KB` | UASTC | +| MetalPartsMat_OcclusionRoughMetal | `2.84 MB` | `2.96 MB` | `+121.10 KB` | UASTC | +| RubberWoodMat_BaseColor | `3.43 MB` | `434.70 KB` | `-3.00 MB` | ETC1S | +| RubberWoodMat_Normal | `3.17 MB` | `3.31 MB` | `+135.08 KB` | UASTC | +| RubberWoodMat_OcclusionRoughMetal | `3.63 MB` | `3.34 MB` | `-302.25 KB` | UASTC | + +### Texture Size Totals + +| Before | After | Delta | +|-----------:|-----------:|------------:| +| `43.06 MB` | `29.37 MB` | `-13.69 MB` | + ## License Information Donated by Microsoft for glTF testing diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet.bin b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet.bin new file mode 100644 index 00000000..21ed380f Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet.bin differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet.gltf b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet.gltf new file mode 100644 index 00000000..7d3d1f6b --- /dev/null +++ b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet.gltf @@ -0,0 +1,805 @@ +{ + "asset": { + "generator": "glTF-Transform v3.2.1", + "version": "2.0" + }, + "accessors": [ + { + "name": "accessorIndices", + "type": "SCALAR", + "componentType": 5123, + "count": 59040, + "bufferView": 0, + "byteOffset": 0 + }, + { + "name": "accessorIndices", + "type": "SCALAR", + "componentType": 5123, + "count": 72534, + "bufferView": 0, + "byteOffset": 118080 + }, + { + "name": "accessorIndices", + "type": "SCALAR", + "componentType": 5123, + "count": 24408, + "bufferView": 0, + "byteOffset": 263148 + }, + { + "name": "accessorIndices", + "type": "SCALAR", + "componentType": 5123, + "count": 60288, + "bufferView": 0, + "byteOffset": 311964 + }, + { + "name": "accessorIndices", + "type": "SCALAR", + "componentType": 5123, + "count": 65688, + "bufferView": 0, + "byteOffset": 432540 + }, + { + "name": "accessorIndices", + "type": "SCALAR", + "componentType": 5123, + "count": 2208, + "bufferView": 0, + "byteOffset": 563916 + }, + { + "name": "accessorPositions", + "type": "VEC3", + "componentType": 5126, + "count": 10472, + "max": [ + 0.108108289539814, + 0.3565802574157715, + 0.19040986895561218 + ], + "min": [ + -0.0722125768661499, + 0.10412022471427917, + -0.08839477598667145 + ], + "bufferView": 1, + "byteOffset": 0 + }, + { + "name": "accessorTangents", + "type": "VEC4", + "componentType": 5126, + "count": 10472, + "bufferView": 1, + "byteOffset": 12 + }, + { + "name": "accessorNormals", + "type": "VEC3", + "componentType": 5126, + "count": 10472, + "bufferView": 1, + "byteOffset": 28 + }, + { + "name": "accessorUVs", + "type": "VEC2", + "componentType": 5126, + "count": 10472, + "bufferView": 1, + "byteOffset": 40 + }, + { + "name": "accessorPositions", + "type": "VEC3", + "componentType": 5126, + "count": 13638, + "max": [ + 0.1629406362771988, + 0.7025225758552551, + 0.2000291645526886 + ], + "min": [ + -0.15885746479034424, + -0.00002142429366358556, + -0.17154578864574432 + ], + "bufferView": 2, + "byteOffset": 0 + }, + { + "name": "accessorTangents", + "type": "VEC4", + "componentType": 5126, + "count": 13638, + "bufferView": 2, + "byteOffset": 12 + }, + { + "name": "accessorNormals", + "type": "VEC3", + "componentType": 5126, + "count": 13638, + "bufferView": 2, + "byteOffset": 28 + }, + { + "name": "accessorUVs", + "type": "VEC2", + "componentType": 5126, + "count": 13638, + "bufferView": 2, + "byteOffset": 40 + }, + { + "name": "accessorPositions", + "type": "VEC3", + "componentType": 5126, + "count": 4676, + "max": [ + 0.14049406349658966, + 0.6182865500450134, + 0.14737364649772644 + ], + "min": [ + -0.14084601402282715, + 0.4409570097923279, + -0.1078183650970459 + ], + "bufferView": 3, + "byteOffset": 0 + }, + { + "name": "accessorTangents", + "type": "VEC4", + "componentType": 5126, + "count": 4676, + "bufferView": 3, + "byteOffset": 12 + }, + { + "name": "accessorNormals", + "type": "VEC3", + "componentType": 5126, + "count": 4676, + "bufferView": 3, + "byteOffset": 28 + }, + { + "name": "accessorUVs", + "type": "VEC2", + "componentType": 5126, + "count": 4676, + "bufferView": 3, + "byteOffset": 40 + }, + { + "name": "accessorPositions", + "type": "VEC3", + "componentType": 5126, + "count": 13636, + "max": [ + 0.1327083706855774, + 0.6024364233016968, + 0.19947707653045654 + ], + "min": [ + -0.20364271104335785, + 0.021160749718546867, + -0.14751268923282623 + ], + "bufferView": 4, + "byteOffset": 0 + }, + { + "name": "accessorTangents", + "type": "VEC4", + "componentType": 5126, + "count": 13636, + "bufferView": 4, + "byteOffset": 12 + }, + { + "name": "accessorNormals", + "type": "VEC3", + "componentType": 5126, + "count": 13636, + "bufferView": 4, + "byteOffset": 28 + }, + { + "name": "accessorUVs", + "type": "VEC2", + "componentType": 5126, + "count": 13636, + "bufferView": 4, + "byteOffset": 40 + }, + { + "name": "accessorPositions", + "type": "VEC3", + "componentType": 5126, + "count": 12534, + "max": [ + 0.12493337690830231, + 0.7160004377365112, + 0.1291685551404953 + ], + "min": [ + -0.12586301565170288, + 0.29582661390304565, + -0.15415160357952118 + ], + "bufferView": 5, + "byteOffset": 0 + }, + { + "name": "accessorTangents", + "type": "VEC4", + "componentType": 5126, + "count": 12534, + "bufferView": 5, + "byteOffset": 12 + }, + { + "name": "accessorNormals", + "type": "VEC3", + "componentType": 5126, + "count": 12534, + "bufferView": 5, + "byteOffset": 28 + }, + { + "name": "accessorUVs", + "type": "VEC2", + "componentType": 5126, + "count": 12534, + "bufferView": 5, + "byteOffset": 40 + }, + { + "name": "accessorPositions", + "type": "VEC3", + "componentType": 5126, + "count": 436, + "max": [ + 0.10192074626684189, + 0.5936986207962036, + 0.1529267281293869 + ], + "min": [ + -0.101920947432518, + 0.5300428867340088, + 0.09017482399940491 + ], + "bufferView": 6, + "byteOffset": 0 + }, + { + "name": "accessorTangents", + "type": "VEC4", + "componentType": 5126, + "count": 436, + "bufferView": 6, + "byteOffset": 12 + }, + { + "name": "accessorNormals", + "type": "VEC3", + "componentType": 5126, + "count": 436, + "bufferView": 6, + "byteOffset": 28 + }, + { + "name": "accessorUVs", + "type": "VEC2", + "componentType": 5126, + "count": 436, + "bufferView": 6, + "byteOffset": 40 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 568332, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 568332, + "byteLength": 502656, + "byteStride": 48, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 1070988, + "byteLength": 654624, + "byteStride": 48, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 1725612, + "byteLength": 224448, + "byteStride": 48, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 1950060, + "byteLength": 654528, + "byteStride": 48, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 2604588, + "byteLength": 601632, + "byteStride": 48, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 3206220, + "byteLength": 20928, + "byteStride": 48, + "target": 34962 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "textures": [ + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 2 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 0 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 1 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 5 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 3 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 4 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 8 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 6 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 7 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 11 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 9 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 10 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 14 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 12 + } + } + }, + { + "sampler": 0, + "extensions": { + "KHR_texture_basisu": { + "source": 13 + } + } + } + ], + "images": [ + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_RubberWoodMat_Normal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_RubberWoodMat_OcclusionRoughMetal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_RubberWoodMat_BaseColor.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_GlassPlasticMat_Normal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_GlassPlasticMat_OcclusionRoughMetal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_GlassPlasticMat_BaseColor.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_MetalPartsMat_Normal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_MetalPartsMat_OcclusionRoughMetal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_MetalPartsMat_BaseColor.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_LeatherPartsMat_Normal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_LeatherPartsMat_OcclusionRoughMetal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_LeatherPartsMat_BaseColor.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_LensesMat_Normal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_LensesMat_OcclusionRoughMetal.ktx2" + }, + { + "mimeType": "image/ktx2", + "uri": "FlightHelmet_Materials_LensesMat_BaseColor.ktx2" + } + ], + "buffers": [ + { + "uri": "FlightHelmet.bin", + "byteLength": 3227148 + } + ], + "materials": [ + { + "name": "HoseMat", + "doubleSided": true, + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "metallicRoughnessTexture": { + "index": 2 + } + }, + "normalTexture": { + "index": 1 + }, + "occlusionTexture": { + "index": 2 + } + }, + { + "name": "RubberWoodMat", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "metallicRoughnessTexture": { + "index": 2 + } + }, + "normalTexture": { + "index": 1 + }, + "occlusionTexture": { + "index": 2 + } + }, + { + "name": "GlassPlasticMat", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 3 + }, + "metallicRoughnessTexture": { + "index": 5 + } + }, + "normalTexture": { + "index": 4 + }, + "occlusionTexture": { + "index": 5 + } + }, + { + "name": "MetalPartsMat", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 6 + }, + "metallicRoughnessTexture": { + "index": 8 + } + }, + "normalTexture": { + "index": 7 + }, + "occlusionTexture": { + "index": 8 + } + }, + { + "name": "LeatherPartsMat", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 9 + }, + "metallicRoughnessTexture": { + "index": 11 + } + }, + "normalTexture": { + "index": 10 + }, + "occlusionTexture": { + "index": 11 + } + }, + { + "name": "LensesMat", + "alphaMode": "BLEND", + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 12 + }, + "metallicRoughnessTexture": { + "index": 14 + } + }, + "normalTexture": { + "index": 13 + }, + "occlusionTexture": { + "index": 14 + } + } + ], + "meshes": [ + { + "name": "Hose_low", + "primitives": [ + { + "attributes": { + "POSITION": 6, + "TANGENT": 7, + "NORMAL": 8, + "TEXCOORD_0": 9 + }, + "mode": 4, + "material": 0, + "indices": 0 + } + ] + }, + { + "name": "RubberWood_low", + "primitives": [ + { + "attributes": { + "POSITION": 10, + "TANGENT": 11, + "NORMAL": 12, + "TEXCOORD_0": 13 + }, + "mode": 4, + "material": 1, + "indices": 1 + } + ] + }, + { + "name": "GlassPlastic_low", + "primitives": [ + { + "attributes": { + "POSITION": 14, + "TANGENT": 15, + "NORMAL": 16, + "TEXCOORD_0": 17 + }, + "mode": 4, + "material": 2, + "indices": 2 + } + ] + }, + { + "name": "MetalParts_low", + "primitives": [ + { + "attributes": { + "POSITION": 18, + "TANGENT": 19, + "NORMAL": 20, + "TEXCOORD_0": 21 + }, + "mode": 4, + "material": 3, + "indices": 3 + } + ] + }, + { + "name": "LeatherParts_low", + "primitives": [ + { + "attributes": { + "POSITION": 22, + "TANGENT": 23, + "NORMAL": 24, + "TEXCOORD_0": 25 + }, + "mode": 4, + "material": 4, + "indices": 4 + } + ] + }, + { + "name": "Lenses_low", + "primitives": [ + { + "attributes": { + "POSITION": 26, + "TANGENT": 27, + "NORMAL": 28, + "TEXCOORD_0": 29 + }, + "mode": 4, + "material": 5, + "indices": 5 + } + ] + } + ], + "nodes": [ + { + "name": "Hose_low", + "mesh": 0 + }, + { + "name": "RubberWood_low", + "mesh": 1 + }, + { + "name": "GlassPlastic_low", + "mesh": 2 + }, + { + "name": "MetalParts_low", + "mesh": 3 + }, + { + "name": "LeatherParts_low", + "mesh": 4 + }, + { + "name": "Lenses_low", + "mesh": 5 + } + ], + "scenes": [ + { + "nodes": [ + 0, + 1, + 2, + 3, + 4, + 5 + ] + } + ], + "scene": 0, + "extensionsUsed": [ + "KHR_texture_basisu" + ], + "extensionsRequired": [ + "KHR_texture_basisu" + ] +} \ No newline at end of file diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_BaseColor.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_BaseColor.ktx2 new file mode 100644 index 00000000..2f3e3f7b Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_BaseColor.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_Normal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_Normal.ktx2 new file mode 100644 index 00000000..2af67fac Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_Normal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_OcclusionRoughMetal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_OcclusionRoughMetal.ktx2 new file mode 100644 index 00000000..008f1e9b Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_GlassPlasticMat_OcclusionRoughMetal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_BaseColor.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_BaseColor.ktx2 new file mode 100644 index 00000000..12173c06 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_BaseColor.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_Normal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_Normal.ktx2 new file mode 100644 index 00000000..f2dfacfa Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_Normal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_OcclusionRoughMetal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_OcclusionRoughMetal.ktx2 new file mode 100644 index 00000000..96a0a34e Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LeatherPartsMat_OcclusionRoughMetal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_BaseColor.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_BaseColor.ktx2 new file mode 100644 index 00000000..94e68fa2 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_BaseColor.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_Normal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_Normal.ktx2 new file mode 100644 index 00000000..2b6e533b Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_Normal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_OcclusionRoughMetal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_OcclusionRoughMetal.ktx2 new file mode 100644 index 00000000..cbfbb2b6 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_LensesMat_OcclusionRoughMetal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_BaseColor.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_BaseColor.ktx2 new file mode 100644 index 00000000..86943c98 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_BaseColor.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_Normal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_Normal.ktx2 new file mode 100644 index 00000000..21bcd86e Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_Normal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_OcclusionRoughMetal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_OcclusionRoughMetal.ktx2 new file mode 100644 index 00000000..6c38f808 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_MetalPartsMat_OcclusionRoughMetal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_BaseColor.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_BaseColor.ktx2 new file mode 100644 index 00000000..c2e25d49 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_BaseColor.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_Normal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_Normal.ktx2 new file mode 100644 index 00000000..cf4a2639 Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_Normal.ktx2 differ diff --git a/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_OcclusionRoughMetal.ktx2 b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_OcclusionRoughMetal.ktx2 new file mode 100644 index 00000000..e89698ed Binary files /dev/null and b/2.0/FlightHelmet/glTF-KTX-BasisU/FlightHelmet_Materials_RubberWoodMat_OcclusionRoughMetal.ktx2 differ diff --git a/2.0/IridescenceLamp/glTF-Binary/IridescenceLamp.glb b/2.0/IridescenceLamp/glTF-Binary/IridescenceLamp.glb index 66db0171..1c392066 100644 Binary files a/2.0/IridescenceLamp/glTF-Binary/IridescenceLamp.glb and b/2.0/IridescenceLamp/glTF-Binary/IridescenceLamp.glb differ diff --git a/2.0/IridescenceLamp/glTF/IridescenceLamp.gltf b/2.0/IridescenceLamp/glTF/IridescenceLamp.gltf index c84867a7..fff55bca 100644 --- a/2.0/IridescenceLamp/glTF/IridescenceLamp.gltf +++ b/2.0/IridescenceLamp/glTF/IridescenceLamp.gltf @@ -206,21 +206,24 @@ { "buffer": 0, "byteLength": 113196, - "name": "bufferViewScalar" + "name": "bufferViewScalar", + "target": 34963 }, { "buffer": 0, "byteOffset": 113196, "byteLength": 256392, "byteStride": 12, - "name": "bufferViewFloatVec3" + "name": "bufferViewFloatVec3", + "target": 34962 }, { "buffer": 0, "byteOffset": 369588, "byteLength": 85464, "byteStride": 8, - "name": "bufferViewFloatVec2" + "name": "bufferViewFloatVec2", + "target": 34962 } ], "buffers": [ diff --git a/2.0/IridescenceLamp/glTF/IridescenceLamp_BaseColor.png b/2.0/IridescenceLamp/glTF/IridescenceLamp_BaseColor.png index ff8137b1..d51f3d9a 100644 Binary files a/2.0/IridescenceLamp/glTF/IridescenceLamp_BaseColor.png and b/2.0/IridescenceLamp/glTF/IridescenceLamp_BaseColor.png differ diff --git a/2.0/IridescenceLamp/glTF/IridescenceLamp_OcclusionRoughnessMetalness.png b/2.0/IridescenceLamp/glTF/IridescenceLamp_OcclusionRoughnessMetalness.png index 6cefdebb..a9144df5 100644 Binary files a/2.0/IridescenceLamp/glTF/IridescenceLamp_OcclusionRoughnessMetalness.png and b/2.0/IridescenceLamp/glTF/IridescenceLamp_OcclusionRoughnessMetalness.png differ diff --git a/2.0/IridescentDishWithOlives/README.md b/2.0/IridescentDishWithOlives/README.md index b83c72e4..c720a44b 100644 --- a/2.0/IridescentDishWithOlives/README.md +++ b/2.0/IridescentDishWithOlives/README.md @@ -12,9 +12,9 @@ ## Description -This model represents a real Wayfair product, an [Olive 21 fl oz. Covered Dish](https://www.wayfair.com/kitchen-tabletop/pdp/bloomsbury-market-olive-21-fl-oz-covered-dish-w001802862.html?piid=1661795386), which has a glass cover with an iridescent glaze, and a glass dish with the same glaze and gold leaf applied to the underside. +This model represents a real Wayfair product, an [Olive 21 fl oz. Covered Dish](https://www.wayfair.com/kitchen-tabletop/pdp/bloomsbury-market-olive-21-fl-oz-covered-dish-w001802862.html?piid=1661795386) which has a glass cover with an iridescent glaze, and a glass dish with the same glaze and gold leaf applied to the underside. -The use of real-world photographic reference is meant to help glTF developers with calibrating material features and renderer behavior, to more accurately represent e-commerce products. Additional photo reference is available [on the Wayfair website](https://www.wayfair.com/kitchen-tabletop/pdp/bloomsbury-market-olive-21-fl-oz-covered-dish-w001802862.html?piid=1661795386). +The use of real-world photographic reference is meant to help glTF developers with calibrating material features and renderer behavior to more accurately represent e-commerce products. Additional photo reference is available [on the Wayfair website](https://www.wayfair.com/kitchen-tabletop/pdp/bloomsbury-market-olive-21-fl-oz-covered-dish-w001802862.html?piid=1661795386). ![screenshot Babylon.js](screenshot/ReferencePhotos.jpg) @@ -22,27 +22,36 @@ The use of real-world photographic reference is meant to help glTF developers wi ## Animation -The glassCover has an animation to rotate downward and back up, revealing the olives inside and showcasing the refraction and specular effects on the glass. +The glassCover has an animation to rotate downward and back up, revealing the olives inside and showcasing the refraction and iridescent effects on the glass. ![screenshot](screenshot/glassCover_animation.gif) ## glassCover Material -The glassCover material uses [KHR_materials_specular](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular) to reproduce the colored specularity of the glaze, and [KHR_materials_ior](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior) and [KHR_materials_transmission](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission) and [KHR_materials_volume](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume) for refraction. +The glassCover material uses [KHR_materials_iridescence](https://github.com/KhronosGroup/glTF/pull/2027) to reproduce the colored reflections from the glaze, and [KHR_materials_ior](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior) and [KHR_materials_transmission](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission) and [KHR_materials_volume](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume) for refraction. -The colors are caused by a type of glaze called [carnival glass](http://www.ddoty.com/newcomers.html). On the real product the glaze is applied to the inside of the glass cover rather than the outside. However because most rasterizers render only a single layer of transmission, the specular colors were applied to both inside and outside of the cover rather than only on the inside. +The colors are caused by a type of glaze called [carnival glass](http://www.ddoty.com/newcomers.html). On the real product the glaze is applied to the inside of the glass cover rather than the outside. However because most rasterizers render only a single layer of transmission, the iridescent colors were applied to both inside and outside of the cover rather than only on the inside. Refraction is simulated using a `thicknessTexture` that guides rasterizers to render the top part of the glass cover with a deeper refraction. This texture is ignored by pathtracers which use the actual thickness of the geometry rather than the thickness texture. A noise pattern has been added to the thickness to reproduce the wavy refractions seen in photos. ![screenshot](screenshot/glassCover_textures.jpg) -(above) Textures for the glassCover material: normalTexture, thicknessTexture, specularColorTexture. +(above) Ingredients for the glassCover material. Top row: final render, normalTexture, thicknessTexture. Bottom row: iridescenceTexture, iridescenceThicknessTexture, and the iridescence effect isolated. + +To improve the overall dispersion in pathtracers, the inside surface of the glassCover has been assigned a separate roughness from the outside. On the outside the roughnessFactor is 0.1 while on the inside it is 0.0. This helps renderers to avoid over-roughening the glass, because pathtracers can calculate the roughness on each boundary between glass and air, while rasterizers typically only calculate the roughness for whatever surface is nearest to the camera. + +## Iridescence vs. Specular + +Previously this asset used [KHR_materials_specular](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular) to attempt to reproduce the colored specularity of the glaze. More recently `KHR_materials_iridescence` has become available so the materials have been converted from specular to iridescence. This is a more accurate representation of the glaze on the glass. + +![screenshot](screenshot/specular_vs_iridescence.jpg) + +(above) The old model using specular (left) versus the current model with iridescence (right). -To improve the overall dispersion in pathtracers, the inside surface of the glassCover has been assigned a separate material from the outside. On the outside the roughnessFactor is 0.1 while on the inside it is 0.0. This helps renderers to avoid over-roughening the glass, because pathtracers calculate the roughness on each boundary between glass and air, while rasterizers typically only calculate the roughness for a single surface (whatever is nearest to the camera). ## glassDish and goldLeaf Materials -The glass dish uses a glass material with `KHR_materials_specular` for the colored glaze, and the bottom of the dish has gold leaf applied. Both surfaces use explicit geometry for front and back faces because the back side of each surface is visible behind the other material: from above the gold leaf is visible under the glass, and from below the glass can be seen through cracks in the goldleaf. +The glass dish uses a glass material with `KHR_materials_iridescence` for the colored glaze, and the bottom of the dish has gold leaf applied. Both surfaces use explicit geometry for front and back faces because the back side of each surface is visible behind the other material: from above the gold leaf is visible under the glass, and from below the glass can be seen through cracks in the gold leaf. The gold leaf uses `"alphaMode":"MASK"` for the cracks instead of `KHR_materials_transmission` because most rasterizers render only a single layer of transmission. If transmission was used, the gold leaf would be invisible under the glass when viewed from above. diff --git a/2.0/IridescentDishWithOlives/glTF-Binary/IridescentDishWithOlives.glb b/2.0/IridescentDishWithOlives/glTF-Binary/IridescentDishWithOlives.glb index 6ab71110..c6897be9 100644 Binary files a/2.0/IridescentDishWithOlives/glTF-Binary/IridescentDishWithOlives.glb and b/2.0/IridescentDishWithOlives/glTF-Binary/IridescentDishWithOlives.glb differ diff --git a/2.0/IridescentDishWithOlives/glTF/IridescentDishWithOlives.gltf b/2.0/IridescentDishWithOlives/glTF/IridescentDishWithOlives.gltf index 9defff2b..f138bc5c 100644 --- a/2.0/IridescentDishWithOlives/glTF/IridescentDishWithOlives.gltf +++ b/2.0/IridescentDishWithOlives/glTF/IridescentDishWithOlives.gltf @@ -6,7 +6,7 @@ }, "extensionsUsed": [ "KHR_materials_ior", - "KHR_materials_specular", + "KHR_materials_iridescence", "KHR_materials_transmission", "KHR_materials_volume" ], @@ -393,28 +393,32 @@ { "buffer": 0, "byteLength": 146688, - "name": "bufferViewScalar" + "name": "bufferViewScalar", + "target": 34963 }, { "buffer": 0, "byteOffset": 146688, "byteLength": 356712, "byteStride": 12, - "name": "bufferViewFloatVec3" + "name": "bufferViewFloatVec3", + "target": 34962 }, { "buffer": 0, "byteOffset": 503400, "byteLength": 208096, "byteStride": 16, - "name": "bufferViewFloatVec4" + "name": "bufferViewFloatVec4", + "target": 34962 }, { "buffer": 0, "byteOffset": 711496, "byteLength": 118904, "byteStride": 8, - "name": "bufferViewFloatVec2" + "name": "bufferViewFloatVec2", + "target": 34962 }, { "buffer": 0, @@ -455,14 +459,14 @@ "KHR_materials_transmission": { "transmissionFactor": 1 }, - "KHR_materials_specular": { - "specularFactor": 1, - "specularColorFactor": [ - 2, - 2, - 2 - ], - "specularColorTexture": { + "KHR_materials_iridescence": { + "iridescenceFactor": 1, + "iridescenceTexture": { + "index": 0 + }, + "iridescenceThicknessMaximum": 550, + "iridescenceThicknessMinimum": 500, + "iridescenceThicknessTexture": { "index": 0 } }, @@ -510,14 +514,14 @@ "KHR_materials_ior": { "ior": 1.5 }, - "KHR_materials_specular": { - "specularFactor": 1, - "specularColorFactor": [ - 3, - 3, - 3 - ], - "specularColorTexture": { + "KHR_materials_iridescence": { + "iridescenceFactor": 1, + "iridescenceTexture": { + "index": 6 + }, + "iridescenceThicknessMaximum": 550, + "iridescenceThicknessMinimum": 500, + "iridescenceThicknessTexture": { "index": 6 } }, @@ -556,7 +560,7 @@ { "sampler": 0, "source": 0, - "name": "glassdish_spec.png" + "name": "glassdish_irid.png" }, { "sampler": 0, @@ -586,7 +590,7 @@ { "sampler": 0, "source": 6, - "name": "glasscover_spec.png" + "name": "glasscover_irid.png" }, { "sampler": 0, @@ -611,7 +615,7 @@ ], "images": [ { - "uri": "glassdish_spec.png" + "uri": "glassdish_irid.png" }, { "uri": "olives_nrm.png" @@ -629,7 +633,7 @@ "uri": "glasscover_thick.png" }, { - "uri": "glasscover_spec.png" + "uri": "glasscover_irid.png" }, { "uri": "goldleaf_nrm.png" diff --git a/2.0/IridescentDishWithOlives/glTF/glasscover_irid.png b/2.0/IridescentDishWithOlives/glTF/glasscover_irid.png new file mode 100644 index 00000000..c8b392a2 Binary files /dev/null and b/2.0/IridescentDishWithOlives/glTF/glasscover_irid.png differ diff --git a/2.0/IridescentDishWithOlives/glTF/glasscover_orm.png b/2.0/IridescentDishWithOlives/glTF/glasscover_orm.png index 5ed42456..31ab57ae 100644 Binary files a/2.0/IridescentDishWithOlives/glTF/glasscover_orm.png and b/2.0/IridescentDishWithOlives/glTF/glasscover_orm.png differ diff --git a/2.0/IridescentDishWithOlives/glTF/glasscover_spec.png b/2.0/IridescentDishWithOlives/glTF/glasscover_spec.png deleted file mode 100644 index c5c81ec6..00000000 Binary files a/2.0/IridescentDishWithOlives/glTF/glasscover_spec.png and /dev/null differ diff --git a/2.0/IridescentDishWithOlives/glTF/glassdish_irid.png b/2.0/IridescentDishWithOlives/glTF/glassdish_irid.png new file mode 100644 index 00000000..0f8a7eb3 Binary files /dev/null and b/2.0/IridescentDishWithOlives/glTF/glassdish_irid.png differ diff --git a/2.0/IridescentDishWithOlives/glTF/glassdish_spec.png b/2.0/IridescentDishWithOlives/glTF/glassdish_spec.png deleted file mode 100644 index fa504207..00000000 Binary files a/2.0/IridescentDishWithOlives/glTF/glassdish_spec.png and /dev/null differ diff --git a/2.0/IridescentDishWithOlives/glTF/goldleaf_col.png b/2.0/IridescentDishWithOlives/glTF/goldleaf_col.png index 13c59a41..ed06f8d4 100644 Binary files a/2.0/IridescentDishWithOlives/glTF/goldleaf_col.png and b/2.0/IridescentDishWithOlives/glTF/goldleaf_col.png differ diff --git a/2.0/IridescentDishWithOlives/glTF/goldleaf_nrm.png b/2.0/IridescentDishWithOlives/glTF/goldleaf_nrm.png index 594d5b37..41b484cd 100644 Binary files a/2.0/IridescentDishWithOlives/glTF/goldleaf_nrm.png and b/2.0/IridescentDishWithOlives/glTF/goldleaf_nrm.png differ diff --git a/2.0/IridescentDishWithOlives/glTF/goldleaf_orm.png b/2.0/IridescentDishWithOlives/glTF/goldleaf_orm.png index ec42e42b..45271d19 100644 Binary files a/2.0/IridescentDishWithOlives/glTF/goldleaf_orm.png and b/2.0/IridescentDishWithOlives/glTF/goldleaf_orm.png differ diff --git a/2.0/IridescentDishWithOlives/screenshot/DassaultPBRSampleRenderer.jpg b/2.0/IridescentDishWithOlives/screenshot/DassaultPBRSampleRenderer.jpg index 811a9754..a5c149f5 100644 Binary files a/2.0/IridescentDishWithOlives/screenshot/DassaultPBRSampleRenderer.jpg and b/2.0/IridescentDishWithOlives/screenshot/DassaultPBRSampleRenderer.jpg differ diff --git a/2.0/IridescentDishWithOlives/screenshot/glassCover_animation.gif b/2.0/IridescentDishWithOlives/screenshot/glassCover_animation.gif index 1f3678bb..de6117b8 100644 Binary files a/2.0/IridescentDishWithOlives/screenshot/glassCover_animation.gif and b/2.0/IridescentDishWithOlives/screenshot/glassCover_animation.gif differ diff --git a/2.0/IridescentDishWithOlives/screenshot/glassCover_textures.jpg b/2.0/IridescentDishWithOlives/screenshot/glassCover_textures.jpg index 6bbdb5fa..809375c7 100644 Binary files a/2.0/IridescentDishWithOlives/screenshot/glassCover_textures.jpg and b/2.0/IridescentDishWithOlives/screenshot/glassCover_textures.jpg differ diff --git a/2.0/IridescentDishWithOlives/screenshot/screenshot.jpg b/2.0/IridescentDishWithOlives/screenshot/screenshot.jpg index 4492df0c..2de0863f 100644 Binary files a/2.0/IridescentDishWithOlives/screenshot/screenshot.jpg and b/2.0/IridescentDishWithOlives/screenshot/screenshot.jpg differ diff --git a/2.0/IridescentDishWithOlives/screenshot/screenshot_Large.jpg b/2.0/IridescentDishWithOlives/screenshot/screenshot_Large.jpg index 98c054ae..e14fb4f9 100644 Binary files a/2.0/IridescentDishWithOlives/screenshot/screenshot_Large.jpg and b/2.0/IridescentDishWithOlives/screenshot/screenshot_Large.jpg differ diff --git a/2.0/IridescentDishWithOlives/screenshot/specular_vs_iridescence.jpg b/2.0/IridescentDishWithOlives/screenshot/specular_vs_iridescence.jpg new file mode 100644 index 00000000..d30c9383 Binary files /dev/null and b/2.0/IridescentDishWithOlives/screenshot/specular_vs_iridescence.jpg differ diff --git a/2.0/MeshPrimitiveModes/README.md b/2.0/MeshPrimitiveModes/README.md new file mode 100644 index 00000000..8a04a9f6 --- /dev/null +++ b/2.0/MeshPrimitiveModes/README.md @@ -0,0 +1,32 @@ +# MeshPrimitiveModes + +An example that shows rendering modes that are supported for mesh primitives in glTF. + +## Screenshot + +![screenshot](screenshot/screenshot.png) + +## Structure + +The example contains seven meshes, each with one mesh primitive. All mesh primitives have the same vertex positions, forming a regular hexagon: +``` + 3 + 4 2 + 0 + 5 1 + 6 +``` + +Each mesh primitive has a different `mode`, corresponding to the glTF [mesh topology types](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview). The `indices` of each mesh primitive for the respective modes are as follows: + +- indices for `mode=0` (`POINTS`): `[0, 1, 2, 3, 4, 5, 6]` +- indices for `mode=1` (`LINES`): `[0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6]` +- indices for `mode=2` (`LINE_LOOP`): `[0, 1, 2, 3, 4, 5, 6]` +- indices for `mode=3` (`LINE_STRIP`): `[0, 1, 2, 3, 4, 5, 6]` +- indices for `mode=4` (`TRIANGLES`): `[0, 1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 5, 0, 5, 6, 0, 6, 1]` +- indices for `mode=5` (`TRIANGLE_STRIP`): `[2, 3, 1, 4, 6, 5]` (vertex `0` is unused here) +- indices for `mode=6` (`TRIANGLE_FAN`): `[0, 1, 2, 3, 4, 5, 6, 1]` + +## License Information + +Public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)) diff --git a/2.0/MeshPrimitiveModes/glTF-Embedded/MeshPrimitiveModes.gltf b/2.0/MeshPrimitiveModes/glTF-Embedded/MeshPrimitiveModes.gltf new file mode 100644 index 00000000..bc23c4e6 --- /dev/null +++ b/2.0/MeshPrimitiveModes/glTF-Embedded/MeshPrimitiveModes.gltf @@ -0,0 +1,233 @@ +{ + "asset": { + "version": "2.0" + }, + + "scene": 0, + "scenes": [ + { + "nodes": [0, 1, 2, 3, 4, 5, 6] + } + ], + + "nodes": [ + { + "translation": [-0, 3, 0], + "mesh": 0 + }, + { + "translation": [-2, 0, 0], + "mesh": 1 + }, + { + "translation": [0, 0, 0], + "mesh": 2 + }, + { + "translation": [2, 0, 0], + "mesh": 3 + }, + { + "translation": [-2, -3, 0], + "mesh": 4 + }, + { + "translation": [0, -3, 0], + "mesh": 5 + }, + { + "translation": [2, -3, 0], + "mesh": 6 + } + ], + + "meshes": [ + { + "name": "mesh with POINTS", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 0, + "mode": 0 + } + ] + }, + { + "name": "mesh with LINES", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 1, + "mode": 1 + } + ] + }, + { + "name": "mesh with LINE_LOOP", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 2, + "mode": 2 + } + ] + }, + { + "name": "mesh with LINE_STRIP", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 3, + "mode": 3 + } + ] + }, + { + "name": "mesh with TRIANGLES", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 4, + "mode": 4 + } + ] + }, + { + "name": "mesh with GL_TRIANGLE_STRIP", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 5, + "mode": 5 + } + ] + }, + { + "name": "mesh with GL_TRIANGLE_FAN", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 6, + "mode": 6 + } + ] + } + ], + + "buffers": [ + { + "uri" : "data:application/gltf-buffer;base64,AAABAAIAAwAEAAUABgAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAEAAgADAAQABQAGAAAAAQACAAMABAAFAAYAAAABAAIAAAACAAMAAAADAAQAAAAEAAUAAAAFAAYAAAAGAAEAAgADAAEABAAGAAUAAAABAAIAAwAEAAUABgABAAAAAAAAAAAAAAAAAAAALbJdPwAAAL8AAAAALbJdPwAAAD8AAAAAAAAAAAAAgD8AAAAALbJdvwAAAD8AAAAALbJdvwAAAL8AAAAAAAAAAAAAgL8AAAAA", + "byteLength": 216 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 130, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 132, + "byteLength": 84, + "target": 34962 + } + ], + "accessors": [ + { + "name": "indices for POINTS", + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 7, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for LINES", + "bufferView": 0, + "byteOffset": 14, + "componentType": 5123, + "count": 12, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for LINE_LOOP", + "bufferView": 0, + "byteOffset": 38, + "componentType": 5123, + "count": 7, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for LINE_STRIP", + "bufferView": 0, + "byteOffset": 52, + "componentType": 5123, + "count": 7, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for TRIANGLES", + "bufferView": 0, + "byteOffset": 66, + "componentType": 5123, + "count": 18, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for TRIANGLE_STRIP", + "bufferView": 0, + "byteOffset": 102, + "componentType": 5123, + "count": 6, + "type": "SCALAR", + "max": [6], + "min": [1] + }, + { + "name": "indices for TRIANGLE_FAN", + "bufferView": 0, + "byteOffset": 114, + "componentType": 5123, + "count": 8, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "positions", + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 7, + "type": "VEC3", + "max": [0.866, 1.0, 0.0], + "min": [-0.866, -1.0, 0.0] + } + ] +} diff --git a/2.0/MeshPrimitiveModes/glTF/MeshPrimitiveModes.gltf b/2.0/MeshPrimitiveModes/glTF/MeshPrimitiveModes.gltf new file mode 100644 index 00000000..b3922119 --- /dev/null +++ b/2.0/MeshPrimitiveModes/glTF/MeshPrimitiveModes.gltf @@ -0,0 +1,233 @@ +{ + "asset": { + "version": "2.0" + }, + + "scene": 0, + "scenes": [ + { + "nodes": [0, 1, 2, 3, 4, 5, 6] + } + ], + + "nodes": [ + { + "translation": [-0, 3, 0], + "mesh": 0 + }, + { + "translation": [-2, 0, 0], + "mesh": 1 + }, + { + "translation": [0, 0, 0], + "mesh": 2 + }, + { + "translation": [2, 0, 0], + "mesh": 3 + }, + { + "translation": [-2, -3, 0], + "mesh": 4 + }, + { + "translation": [0, -3, 0], + "mesh": 5 + }, + { + "translation": [2, -3, 0], + "mesh": 6 + } + ], + + "meshes": [ + { + "name": "mesh with POINTS", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 0, + "mode": 0 + } + ] + }, + { + "name": "mesh with LINES", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 1, + "mode": 1 + } + ] + }, + { + "name": "mesh with LINE_LOOP", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 2, + "mode": 2 + } + ] + }, + { + "name": "mesh with LINE_STRIP", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 3, + "mode": 3 + } + ] + }, + { + "name": "mesh with TRIANGLES", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 4, + "mode": 4 + } + ] + }, + { + "name": "mesh with GL_TRIANGLE_STRIP", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 5, + "mode": 5 + } + ] + }, + { + "name": "mesh with GL_TRIANGLE_FAN", + "primitives": [ + { + "attributes": { + "POSITION": 7 + }, + "indices": 6, + "mode": 6 + } + ] + } + ], + + "buffers": [ + { + "uri": "buffer.bin", + "byteLength": 216 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 130, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 132, + "byteLength": 84, + "target": 34962 + } + ], + "accessors": [ + { + "name": "indices for POINTS", + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 7, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for LINES", + "bufferView": 0, + "byteOffset": 14, + "componentType": 5123, + "count": 12, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for LINE_LOOP", + "bufferView": 0, + "byteOffset": 38, + "componentType": 5123, + "count": 7, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for LINE_STRIP", + "bufferView": 0, + "byteOffset": 52, + "componentType": 5123, + "count": 7, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for TRIANGLES", + "bufferView": 0, + "byteOffset": 66, + "componentType": 5123, + "count": 18, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "indices for TRIANGLE_STRIP", + "bufferView": 0, + "byteOffset": 102, + "componentType": 5123, + "count": 6, + "type": "SCALAR", + "max": [6], + "min": [1] + }, + { + "name": "indices for TRIANGLE_FAN", + "bufferView": 0, + "byteOffset": 114, + "componentType": 5123, + "count": 8, + "type": "SCALAR", + "max": [6], + "min": [0] + }, + { + "name": "positions", + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 7, + "type": "VEC3", + "max": [0.866, 1.0, 0.0], + "min": [-0.866, -1.0, 0.0] + } + ] +} diff --git a/2.0/MeshPrimitiveModes/glTF/buffer.bin b/2.0/MeshPrimitiveModes/glTF/buffer.bin new file mode 100644 index 00000000..069020ae Binary files /dev/null and b/2.0/MeshPrimitiveModes/glTF/buffer.bin differ diff --git a/2.0/MeshPrimitiveModes/screenshot/screenshot.png b/2.0/MeshPrimitiveModes/screenshot/screenshot.png new file mode 100644 index 00000000..5792662e Binary files /dev/null and b/2.0/MeshPrimitiveModes/screenshot/screenshot.png differ diff --git a/2.0/PrimitiveModeNormalsTest/README.md b/2.0/PrimitiveModeNormalsTest/README.md new file mode 100644 index 00000000..88af057e --- /dev/null +++ b/2.0/PrimitiveModeNormalsTest/README.md @@ -0,0 +1,19 @@ +# Primitive Mode Normals Test + +## Screenshot + +![screenshot](screenshot/screenshot.png) + +## Description + +This asset tests rendering of point, line, and triangle primitive modes with and without vertex normals. + +- The first two columns, points and lines without normals, should be rendered as solid colors without lighting. + +- The third column, triangles without normals, should be rendered with flat shading and full PBR material model. + +- The remaining columns, all three modes with normals, should be rendered with smooth shading and full PBR material model. + +## License Information + +Public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)) diff --git a/2.0/PrimitiveModeNormalsTest/glTF/Colors.bin b/2.0/PrimitiveModeNormalsTest/glTF/Colors.bin new file mode 100644 index 00000000..140565bb Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/glTF/Colors.bin differ diff --git a/2.0/PrimitiveModeNormalsTest/glTF/Labels.png b/2.0/PrimitiveModeNormalsTest/glTF/Labels.png new file mode 100644 index 00000000..1f95409f Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/glTF/Labels.png differ diff --git a/2.0/PrimitiveModeNormalsTest/glTF/Lines.bin b/2.0/PrimitiveModeNormalsTest/glTF/Lines.bin new file mode 100644 index 00000000..f2d5d9b7 Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/glTF/Lines.bin differ diff --git a/2.0/PrimitiveModeNormalsTest/glTF/Plane.bin b/2.0/PrimitiveModeNormalsTest/glTF/Plane.bin new file mode 100644 index 00000000..17e382f1 Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/glTF/Plane.bin differ diff --git a/2.0/PrimitiveModeNormalsTest/glTF/Points.bin b/2.0/PrimitiveModeNormalsTest/glTF/Points.bin new file mode 100644 index 00000000..b0a54249 Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/glTF/Points.bin differ diff --git a/2.0/PrimitiveModeNormalsTest/glTF/PrimitiveModeNormalsTest.gltf b/2.0/PrimitiveModeNormalsTest/glTF/PrimitiveModeNormalsTest.gltf new file mode 100644 index 00000000..2112512d --- /dev/null +++ b/2.0/PrimitiveModeNormalsTest/glTF/PrimitiveModeNormalsTest.gltf @@ -0,0 +1,793 @@ +{ + "asset": { + "version": "2.0" + }, + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5, + 0.5, + 0.5, + 1 + ], + "metallicFactor": 1, + "roughnessFactor": 0 + }, + "emissiveFactor": [ + 0, + 0.1, + 0.1 + ] + }, + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + }, + "emissiveFactor": [ + 1, + 1, + 1 + ], + "emissiveTexture": { + "index": 0 + }, + "alphaMode": "MASK", + "doubleSided": true + } + ], + "buffers": [ + { + "uri": "Points.bin", + "byteLength": 786432 + }, + { + "uri": "Lines.bin", + "byteLength": 786432 + }, + { + "uri": "Triangles.bin", + "byteLength": 4380 + }, + { + "uri": "Colors.bin", + "byteLength": 262144 + }, + { + "uri": "Plane.bin", + "byteLength": 92 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 786432 + }, + { + "buffer": 1, + "byteLength": 786432 + }, + { + "buffer": 2, + "byteLength": 2460, + "byteOffset": 0, + "byteStride": 12 + }, + { + "buffer": 2, + "byteLength": 1920, + "byteOffset": 2460 + }, + { + "buffer": 3, + "byteLength": 262144, + "byteStride": 4 + }, + { + "buffer": 4, + "byteLength": 48 + }, + { + "buffer": 4, + "byteOffset": 48, + "byteLength": 32 + }, + { + "buffer": 4, + "byteOffset": 80, + "byteLength": 12 + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "type": "VEC3", + "count": 65536, + "min": [ + -1, + -1, + -1 + ], + "max": [ + 1, + 1, + 1 + ] + }, + { + "bufferView": 1, + "componentType": 5126, + "type": "VEC3", + "count": 65536, + "min": [ + -1, + -1, + -0.99999237 + ], + "max": [ + 1, + 0.99993896, + 0.99999237 + ] + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 205, + "max": [ + 1, + 1, + 0.99999994 + ], + "min": [ + -0.99999994, + -1, + -0.99999994 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 205, + "type": "VEC3" + }, + { + "bufferView": 3, + "componentType": 5123, + "count": 960, + "type": "SCALAR" + }, + { + "bufferView": 4, + "componentType": 5121, + "count": 205, + "type": "VEC4", + "normalized": true + }, + { + "bufferView": 4, + "componentType": 5121, + "count": 65536, + "type": "VEC4", + "normalized": true + }, + { + "bufferView": 5, + "componentType": 5126, + "count": 4, + "type": "VEC3", + "min": [ + 0, + 0, + 0 + ], + "max": [ + 1, + 1, + 0 + ] + }, + { + "bufferView": 6, + "componentType": 5126, + "count": 4, + "type": "VEC2" + }, + { + "bufferView": 7, + "componentType": 5123, + "count": 6, + "type": "SCALAR" + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 0 + }, + "mode": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1 + }, + "mode": 3 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2 + }, + "indices": 4, + "mode": 4 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0, + "COLOR_0": 6 + }, + "mode": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "COLOR_0": 6 + }, + "mode": 3 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2, + "COLOR_0": 5 + }, + "indices": 4, + "mode": 4 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0 + }, + "mode": 0, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1 + }, + "mode": 3, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2 + }, + "indices": 4, + "mode": 4, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0, + "COLOR_0": 6 + }, + "mode": 0, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "COLOR_0": 6 + }, + "mode": 3, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2, + "COLOR_0": 5 + }, + "indices": 4, + "mode": 4, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 0 + }, + "mode": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "NORMAL": 1 + }, + "mode": 3 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2, + "NORMAL": 3 + }, + "indices": 4, + "mode": 4 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0, + "COLOR_0": 6, + "NORMAL": 0 + }, + "mode": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "COLOR_0": 6, + "NORMAL": 1 + }, + "mode": 3 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2, + "COLOR_0": 5, + "NORMAL": 3 + }, + "indices": 4, + "mode": 4 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0, + "NORMAL": 0 + }, + "mode": 0, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "NORMAL": 1 + }, + "mode": 3, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2, + "NORMAL": 3 + }, + "indices": 4, + "mode": 4, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 0, + "COLOR_0": 6, + "NORMAL": 0 + }, + "mode": 0, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "COLOR_0": 6, + "NORMAL": 1 + }, + "mode": 3, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 2, + "COLOR_0": 5, + "NORMAL": 3 + }, + "indices": 4, + "mode": 4, + "material": 0 + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 7, + "TEXCOORD_0": 8 + }, + "indices": 9, + "material": 1 + } + ] + } + ], + "nodes": [ + { + "mesh": 0, + "translation": [ + -2.5, + 10, + 0 + ] + }, + { + "mesh": 1, + "translation": [ + 0, + 10, + 0 + ] + }, + { + "mesh": 2, + "translation": [ + 2.5, + 10, + 0 + ] + }, + { + "mesh": 3, + "translation": [ + -2.5, + 7, + 0 + ] + }, + { + "mesh": 4, + "translation": [ + 0, + 7, + 0 + ] + }, + { + "mesh": 5, + "translation": [ + 2.5, + 7, + 0 + ] + }, + { + "mesh": 6, + "translation": [ + -2.5, + 4, + 0 + ] + }, + { + "mesh": 7, + "translation": [ + 0, + 4, + 0 + ] + }, + { + "mesh": 8, + "translation": [ + 2.5, + 4, + 0 + ] + }, + { + "mesh": 9, + "translation": [ + -2.5, + 1, + 0 + ] + }, + { + "mesh": 10, + "translation": [ + 0, + 1, + 0 + ] + }, + { + "mesh": 11, + "translation": [ + 2.5, + 1, + 0 + ] + }, + { + "mesh": 12, + "translation": [ + -2.5, + 10, + 0 + ] + }, + { + "mesh": 13, + "translation": [ + 0, + 10, + 0 + ] + }, + { + "mesh": 14, + "translation": [ + 2.5, + 10, + 0 + ] + }, + { + "mesh": 15, + "translation": [ + -2.5, + 7, + 0 + ] + }, + { + "mesh": 16, + "translation": [ + 0, + 7, + 0 + ] + }, + { + "mesh": 17, + "translation": [ + 2.5, + 7, + 0 + ] + }, + { + "mesh": 18, + "translation": [ + -2.5, + 4, + 0 + ] + }, + { + "mesh": 19, + "translation": [ + 0, + 4, + 0 + ] + }, + { + "mesh": 20, + "translation": [ + 2.5, + 4, + 0 + ] + }, + { + "mesh": 21, + "translation": [ + -2.5, + 1, + 0 + ] + }, + { + "mesh": 22, + "translation": [ + 0, + 1, + 0 + ] + }, + { + "mesh": 23, + "translation": [ + 2.5, + 1, + 0 + ] + }, + { + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "translation": [ + -4, + 0, + 0 + ] + }, + { + "children": [ + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + "translation": [ + 4, + 0, + 0 + ] + }, + { + "mesh": 24, + "scale": [ + 20, + 14, + 1 + ], + "translation": [ + -12.5, + 0, + -2 + ] + }, + { + "children": [ + 24, + 25, + 26 + ], + "translation": [ + 2.5, + -7, + 0.5 + ] + } + ], + "scenes": [ + { + "nodes": [ + 27 + ] + } + ], + "scene": 0, + "textures": [ + { + "source": 0, + "sampler": 0 + } + ], + "images": [ + { + "uri": "Labels.png" + } + ], + "samplers": [ + { + "wrapS": 33071, + "wrapT": 33071 + } + ] +} \ No newline at end of file diff --git a/2.0/PrimitiveModeNormalsTest/glTF/Triangles.bin b/2.0/PrimitiveModeNormalsTest/glTF/Triangles.bin new file mode 100644 index 00000000..56b249b9 Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/glTF/Triangles.bin differ diff --git a/2.0/PrimitiveModeNormalsTest/screenshot/screenshot.png b/2.0/PrimitiveModeNormalsTest/screenshot/screenshot.png new file mode 100644 index 00000000..b2ab7f53 Binary files /dev/null and b/2.0/PrimitiveModeNormalsTest/screenshot/screenshot.png differ diff --git a/2.0/SheenChair/glTF-Binary/SheenChair.glb b/2.0/SheenChair/glTF-Binary/SheenChair.glb index b17772fd..3cfb37c3 100644 Binary files a/2.0/SheenChair/glTF-Binary/SheenChair.glb and b/2.0/SheenChair/glTF-Binary/SheenChair.glb differ diff --git a/2.0/SheenChair/glTF/SheenChair.gltf b/2.0/SheenChair/glTF/SheenChair.gltf index 22cdeac2..246b190a 100644 --- a/2.0/SheenChair/glTF/SheenChair.gltf +++ b/2.0/SheenChair/glTF/SheenChair.gltf @@ -364,21 +364,24 @@ { "buffer": 0, "byteLength": 239616, - "name": "bufferViewScalar" + "name": "bufferViewScalar", + "target": 34963 }, { "buffer": 0, "byteOffset": 239616, "byteLength": 539016, "byteStride": 12, - "name": "bufferViewFloatVec3" + "name": "bufferViewFloatVec3", + "target": 34962 }, { "buffer": 0, "byteOffset": 778632, "byteLength": 359344, "byteStride": 8, - "name": "bufferViewFloatVec2" + "name": "bufferViewFloatVec2", + "target": 34962 } ], "buffers": [ diff --git a/2.0/SheenChair/glTF/chair_label.png b/2.0/SheenChair/glTF/chair_label.png index 98126069..85fc0fb1 100644 Binary files a/2.0/SheenChair/glTF/chair_label.png and b/2.0/SheenChair/glTF/chair_label.png differ diff --git a/2.0/SimpleInstancing/README.md b/2.0/SimpleInstancing/README.md new file mode 100644 index 00000000..8a42998c --- /dev/null +++ b/2.0/SimpleInstancing/README.md @@ -0,0 +1,34 @@ +# SimpleInstancing + +A simple example for the `EXT_mesh_gpu_instancing` extension. + +## Screenshot + +![screenshot](screenshot/screenshot_large.png) + +## Data + +The sample contains a single mesh, with a single mesh primitive of a unit cube. The node that contains this mesh defines the `EXT_mesh_gpu_instancing` extension object: +``` +"extensions" : { + "EXT_mesh_gpu_instancing" : { + "attributes" : { + "TRANSLATION" : 3, + "ROTATION" : 4, + "SCALE" : 5 + } + } +} +``` +The object refers to three accessors: One for the `TRANSLATION`, one for the `ROTATION`, and one for the `SCALE` of the instances. The data from these accessors causes 125 instances to be rendered. These instances are arranged in a 5x5x5 cube. + +- The translation ranges from 0.0 to 10.0 along each axis +- The rotation ranges from 0.0 to 90.0 degrees along each axis +- The scale ranges from 1.0 to 2.0 along each axis + +This means that the first instance that is rendered is the unmodified unit cube, and the last instance is a cube at (10.,10.0,10.0) that is rotated around the axis (1.0,1.0,1.0) by 90.0 degrees, and scaled by (2.0, 2.0, 2.0). + +## License Information + +Public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)) + diff --git a/2.0/SimpleInstancing/glTF-Binary/SimpleInstancing.glb b/2.0/SimpleInstancing/glTF-Binary/SimpleInstancing.glb new file mode 100644 index 00000000..0b717bdb Binary files /dev/null and b/2.0/SimpleInstancing/glTF-Binary/SimpleInstancing.glb differ diff --git a/2.0/SimpleInstancing/glTF/SimpleInstancing.gltf b/2.0/SimpleInstancing/glTF/SimpleInstancing.gltf new file mode 100644 index 00000000..c188471e --- /dev/null +++ b/2.0/SimpleInstancing/glTF/SimpleInstancing.gltf @@ -0,0 +1,194 @@ +{ + "extensionsUsed": [ + "EXT_mesh_gpu_instancing" + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5125, + "count": 36, + "type": "SCALAR", + "max": [ + 23 + ], + "min": [ + 0 + ] + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "type": "VEC3", + "max": [ + 1, + 1, + 1 + ], + "min": [ + 0, + 0, + 0 + ] + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "type": "VEC3", + "max": [ + 1, + 1, + 1 + ], + "min": [ + -1, + -1, + -1 + ] + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 125, + "type": "VEC3", + "max": [ + 10, + 10, + 10 + ], + "min": [ + 0, + 0, + 0 + ] + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5126, + "count": 125, + "type": "VEC4", + "max": [ + 0.7071068, + 0.7071068, + 0.7071068, + 1 + ], + "min": [ + 0, + 0, + 0, + 0.5 + ] + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5126, + "count": 125, + "type": "VEC3", + "max": [ + 2, + 2, + 2 + ], + "min": [ + 1, + 1, + 1 + ] + } + ], + "asset": { + "generator": "JglTF from https://github.com/javagl/JglTF", + "version": "2.0" + }, + "buffers": [ + { + "uri": "SimpleInstancing_data.bin", + "byteLength": 5720 + } + ], + "bufferViews": [ + { + "name": "indices", + "buffer": 0, + "byteOffset": 0, + "byteLength": 144, + "target": 34963 + }, + { + "name": "attribute", + "buffer": 0, + "byteOffset": 144, + "byteLength": 288, + "target": 34962 + }, + { + "name": "attribute", + "buffer": 0, + "byteOffset": 432, + "byteLength": 288, + "target": 34962 + }, + { + "name": "additional", + "buffer": 0, + "byteOffset": 720, + "byteLength": 1500 + }, + { + "name": "additional", + "buffer": 0, + "byteOffset": 2220, + "byteLength": 2000 + }, + { + "name": "additional", + "buffer": 0, + "byteOffset": 4220, + "byteLength": 1500 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "NORMAL": 2 + }, + "indices": 0, + "mode": 4 + } + ] + } + ], + "nodes": [ + { + "extensions": { + "EXT_mesh_gpu_instancing": { + "attributes": { + "TRANSLATION": 3, + "ROTATION": 4, + "SCALE": 5 + } + } + }, + "mesh": 0 + } + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ] +} \ No newline at end of file diff --git a/2.0/SimpleInstancing/glTF/SimpleInstancing_data.bin b/2.0/SimpleInstancing/glTF/SimpleInstancing_data.bin new file mode 100644 index 00000000..5970a1a4 Binary files /dev/null and b/2.0/SimpleInstancing/glTF/SimpleInstancing_data.bin differ diff --git a/2.0/SimpleInstancing/screenshot/screenshot.png b/2.0/SimpleInstancing/screenshot/screenshot.png new file mode 100644 index 00000000..542ac105 Binary files /dev/null and b/2.0/SimpleInstancing/screenshot/screenshot.png differ diff --git a/2.0/SimpleInstancing/screenshot/screenshot_large.png b/2.0/SimpleInstancing/screenshot/screenshot_large.png new file mode 100644 index 00000000..59995345 Binary files /dev/null and b/2.0/SimpleInstancing/screenshot/screenshot_large.png differ diff --git a/2.0/ToyCar/README.md b/2.0/ToyCar/README.md index 240cf068..faef4506 100644 --- a/2.0/ToyCar/README.md +++ b/2.0/ToyCar/README.md @@ -4,6 +4,8 @@ ![screenshot](screenshot/screenshot_large.jpg) +Above: Screenshot using Camera002 in [Babylon.js Sandbox](https://sandbox.babylonjs.com/). + ## Description This model demonstrates the usage of [KHR_materials_sheen](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_materials_sheen/README.md), [KHR_materials_transmission](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_materials_transmission/README.md) and [KHR_materials_clearcoat](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md). @@ -12,4 +14,4 @@ This model also includes eight sample cameras, featuring different angles on the ## License Information -Toy car model created by Guido Odendahl. Public domain ([CC0](http://creativecommons.org/publicdomain/zero/1.0/)). +Toy car model created by Guido Odendahl. Materials adjusted by Eric Chadwick. Public domain ([CC0](http://creativecommons.org/publicdomain/zero/1.0/)). diff --git a/2.0/ToyCar/glTF-Binary/ToyCar.glb b/2.0/ToyCar/glTF-Binary/ToyCar.glb index 0aa1495c..42d648be 100644 Binary files a/2.0/ToyCar/glTF-Binary/ToyCar.glb and b/2.0/ToyCar/glTF-Binary/ToyCar.glb differ diff --git a/2.0/ToyCar/glTF/Fabric_occlusion.png b/2.0/ToyCar/glTF/Fabric_occlusion.png index 991b2c8e..63db9953 100644 Binary files a/2.0/ToyCar/glTF/Fabric_occlusion.png and b/2.0/ToyCar/glTF/Fabric_occlusion.png differ diff --git a/2.0/ToyCar/glTF/ToyCar.gltf b/2.0/ToyCar/glTF/ToyCar.gltf index b3e715f6..b8fe4708 100644 --- a/2.0/ToyCar/glTF/ToyCar.gltf +++ b/2.0/ToyCar/glTF/ToyCar.gltf @@ -1,7 +1,8 @@ { "asset": { "version": "2.0", - "generator": "babylon.js glTF exporter for 3dsmax 2020 v20200721.1, then hand-edited to add KHR_materials_clearcoat, KHR_materials_transmission, and KHR_materials_sheen." + "generator": "babylon.js glTF exporter for 3dsmax 2020 v20200721.1", + "copyright": "Public domain (CC0). Toy car model created by Guido Odendahl. Materials edited by Eric Chadwick." }, "extensionsUsed": [ "KHR_texture_transform", @@ -481,21 +482,24 @@ { "buffer": 0, "byteLength": 1186640, - "name": "bufferViewScalar" + "name": "bufferViewScalar", + "target": 34963 }, { "buffer": 0, "byteOffset": 1186640, "byteLength": 1858296, "byteStride": 12, - "name": "bufferViewFloatVec3" + "name": "bufferViewFloatVec3", + "target": 34962 }, { "buffer": 0, "byteOffset": 3044936, "byteLength": 619432, "byteStride": 8, - "name": "bufferViewFloatVec2" + "name": "bufferViewFloatVec2", + "target": 34962 } ], "buffers": [ @@ -676,28 +680,28 @@ ], "images": [ { - "uri": "./ToyCar_normal.png" + "uri": "ToyCar_normal.png" }, { - "uri": "./ToyCar_emissive.png" + "uri": "ToyCar_emissive.png" }, { - "uri": "./ToyCar_basecolor.png" + "uri": "ToyCar_basecolor.png" }, { - "uri": "./ToyCar_occlusion_roughness_metallic.png" + "uri": "ToyCar_occlusion_roughness_metallic.png" }, { - "uri": "./Fabric_normal.png" + "uri": "Fabric_normal.png" }, { - "uri": "./Fabric_occlusion.png" + "uri": "Fabric_occlusion.png" }, { - "uri": "./Fabric_baseColor.png" + "uri": "Fabric_baseColor.png" }, { - "uri": "./ToyCar_clearcoat.png" + "uri": "ToyCar_clearcoat.png" } ], "samplers": [ diff --git a/2.0/ToyCar/glTF/ToyCar_occlusion_roughness_metallic.png b/2.0/ToyCar/glTF/ToyCar_occlusion_roughness_metallic.png index 6d5d28da..baed28bb 100644 Binary files a/2.0/ToyCar/glTF/ToyCar_occlusion_roughness_metallic.png and b/2.0/ToyCar/glTF/ToyCar_occlusion_roughness_metallic.png differ diff --git a/2.0/ToyCar/screenshot/screenshot.jpg b/2.0/ToyCar/screenshot/screenshot.jpg index fb5de72a..3b822236 100644 Binary files a/2.0/ToyCar/screenshot/screenshot.jpg and b/2.0/ToyCar/screenshot/screenshot.jpg differ diff --git a/2.0/ToyCar/screenshot/screenshot_large.jpg b/2.0/ToyCar/screenshot/screenshot_large.jpg index 23c045de..63dd2548 100644 Binary files a/2.0/ToyCar/screenshot/screenshot_large.jpg and b/2.0/ToyCar/screenshot/screenshot_large.jpg differ diff --git a/2.0/XmpMetadataRoundedCube/README.md b/2.0/XmpMetadataRoundedCube/README.md new file mode 100644 index 00000000..8da44b17 --- /dev/null +++ b/2.0/XmpMetadataRoundedCube/README.md @@ -0,0 +1,75 @@ +# KHR_xmp_json_ld Metadata Example - Rounded Cube + +## Sample XMP JSON + +```json +{ + "extensionsUsed": ["KHR_xmp_json_ld"], + "extensions": { + "KHR_xmp_json_ld": { + "packets": [ + { + "@context": { + "dc": "http://purl.org/dc/elements/1.1/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + }, + "@id": "", + "dc:contributor": { + "@set": [ + "Creator1Name", + "Creator2Email@email.com", + "Creator3Name" + ] + }, + "dc:coverage": "Bay Area, California, United States", + "dc:creator": { + "@list": ["CreatorName", "CreatorEmail@email.com"] + }, + "dc:date": { + "@list": ["2019-05-16T19:20:30+01:00"] + }, + "dc:description": { + "@type": "rdf:Alt", + "rdf:_1": { + "@language": "en-us", + "@value": "An example of a glTF file with XMP metadata in it" + } + }, + "dc:format": "model/gltf+json", + "dc:language": { + "@set": ["en"] + }, + "dc:publisher": { + "@set": ["Khronos"] + }, + "dc:title": { + "@type": "rdf:Alt", + "rdf:_1": { + "@language": "en-us", + "@value": "Sample glTF with XMP metadata" + } + } + }, + { + "@context": { + "dc": "http://purl.org/dc/elements/1.1/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + }, + "dc:title": { + "@type": "rdf:Alt", + "rdf:_1": { + "@language": "en-us", + "@value": "My Cube Mesh" + } + } + } + ] + } + }, + ... +} +``` + +## License Information + +This model is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/). diff --git a/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/indices.bin b/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/indices.bin new file mode 100644 index 00000000..f178d8db Binary files /dev/null and b/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/indices.bin differ diff --git a/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/normals.bin b/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/normals.bin new file mode 100644 index 00000000..bdbda393 --- /dev/null +++ b/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/normals.bin @@ -0,0 +1,385 @@ +~;Ϡ,e};Ϡ,e}~Ϡ,e};vu6v;vu6vϠ,e}vu6v;ʋԾhk;ʋԾhkvu6vʋԾhk;\ +bWSM;\ +bWSMʋԾhk\ +bWSM;'B{AL?;'B{AL?\ +bWSM'B{AL?;B{A'L?;B{A'L?'B{AL?B{A'L?;bW\ +SM;bW\ +SMB{A'L?bW\ +SM;hԾk;hԾkbW\ +SMhԾk;uv6v;uv6vhԾkuv6v;,e}Ϡ;,e}Ϡuv6v,e}Ϡ;~;~,e}Ϡ~?Ϡ,e}?;Ϡ,e}?;~?Ϡ,e}?6vvu?6v;vu?;Ϡ,e}?6vvu?kԾh?k;Ծh?6v;vu?kԾh?SM\ +bW?SM;\ +bW?k;Ծh?SM\ +bW?L?'B{A?L?;'B{A?SM;\ +bW?L?'B{A?L?B{A'?L?;B{A'?L?;'B{A?L?B{A'?SMbW\ +?SM;bW\ +?L?;B{A'?SMbW\ +?kh>k;h>SM;bW\ +?kh>6vuv>6v;uv>k;h>6vuv>,e}Ϡ>;,e}Ϡ>6v;uv>,e}Ϡ>~;;~;;,e}Ϡ>~;,e}Ϡ>,e};Ϡ>~;;,e}Ϡ>u6vv>u6v;v>,e};Ϡ>u6vv>hk>hk;>u6v;v>hk>bWSM\ +?bWSM;\ +?hk;>bWSM\ +?B{AL?'?B{AL?;'?bWSM;\ +?B{AL?'?'L?B{A?'L?;B{A?B{AL?;'?'L?B{A?\ +SMbW?\ +SM;bW?'L?;B{A?\ +SMbW?Ծkh?Ծk;h?\ +SM;bW?Ծkh?v6vu?v6v;u?Ծk;h?v6vu?,e}?;,e}?v6v;u?,e}?~?;~?;,e}?~?;,e}?Ϡ;,e}?Ϡ~?,e}?Ϡ;u?v6v;u?v6v,e}?Ϡu?v6v;h?Ծk;h?Ծku?v6vh?Ծk;bW?\ +SM;bW?\ +SMh?ԾkbW?\ +SM;B{A?'L?;B{A?'L?bW?\ +SMB{A?'L?;'?B{AL?;'?B{AL?B{A?'L?'?B{AL?;\ +?bWSM;\ +?bWSM'?B{AL?\ +?bWSM;ʋ>hk;ʋ>hk\ +?bWSMʋ>hk;v>u6v;v>u6vʋ>hkv>u6v;Ϡ>,e};Ϡ>,e}v>u6vϠ>,e};;~;;~Ϡ>,e};~?>,e}?>;,e}?;;~?>,e}?v>6vu?v>6v;u?>;,e}?v>6vu?>kh?>k;h?v>6v;u?>kh?\ +?SMbW?\ +?SM;bW?>k;h?\ +?SMbW?'?L?B{A?'?L?;B{A?\ +?SM;bW?'?L?B{A?B{A?L?'?B{A?L?;'?'?L?;B{A?B{A?L?'?bW?SM\ +?bW?SM;\ +?B{A?L?;'?bW?SM\ +?h?k>h?k;>bW?SM;\ +?h?k>u?6vv>u?6v;v>h?k;>u?6vv>,e}?Ϡ>,e}?;Ϡ>u?6v;v>,e}?Ϡ>~?;~?;;,e}?;Ϡ>~;;,e}Ϡ>;,e}Ϡ>~;,e}Ϡ>;uv>6v;uv>6v,e}Ϡ>uv>6v;h>k;h>kuv>6vh>k;bW\ +?SM;bW\ +?SMh>kbW\ +?SM;B{A'?L?;B{A'?L?bW\ +?SMB{A'?L?;¡'1{A?L?;¡'1{A?L?B{A'?L?¡'1{A?L?;\ +bW?SM;\ +bW?SM¡'1{A?L?\ +bW?SM;Ծh?k;Ծh?k\ +bW?SMԾh?k;Uu?6v;Uu?6vԾh?kUu?6v;Ϡ,e}?;Ϡ,e}?Uu?6vϠ,e}?;~?;~?Ϡ,e}?~?;,e}?Ϡ>;,e}?Ϡ>;~?;,e}?Ϡ>6vu?U>6v;u?U>;,e}?Ϡ>6vu?U>kh?>k;h?>6v;u?U>kh?>SMbW?\ +?SM;bW?\ +?k;h?>SMbW?\ +?L?1{A?¡'?L?;1{A?¡'?SM;bW?\ +?L?1{A?¡'?L?'?B{A?L?;'?B{A?L?;1{A?¡'?L?'?B{A?SM\ +?bW?SM;\ +?bW?L?;'?B{A?SM\ +?bW?k>h?k;>h?SM;\ +?bW?k>h?6vv>u?6v;v>u?k;>h?6vv>u?Ϡ>,e}?;Ϡ>,e}?6v;v>u?Ϡ>,e}?;~?;;~?;Ϡ>,e}?;~?;Ϡ>,e}?;Ϡ>,e}?;~?Ϡ>,e}?;U>u?6v;U>u?6vϠ>,e}?U>u?6v;>h?k;>h?kU>u?6v>h?k;\ +?bW?SM;\ +?bW?SM>h?k\ +?bW?SM;¡'?1{A?L?;¡'?1{A?L?\ +?bW?SM¡'?1{A?L?;B{A?'?L?;B{A?'?L?¡'?1{A?L?B{A?'?L?;bW?\ +?SM;bW?\ +?SMB{A?'?L?bW?\ +?SM;h?>k;h?>kbW?\ +?SMh?>k;u?v>6v;u?v>6vh?>ku?v>6v;,e}?Ϡ>;,e}?Ϡ>u?v>6v,e}?Ϡ>;~?;;~?;,e}?Ϡ>~;,e};Ϡ,e}Ϡ~,e};Ϡu6v;vu6vv,e}Ϡu6v;vhk;ԾhkԾu6vvhk;ԾbWSM;\ +bWSM\ +hkԾbWSM;\ +B{AL?;'B{AL?'bWSM\ +B{AL?;''L?;B{A'L?B{AB{AL?''L?;B{A\ +SM;bW\ +SMbW'L?B{A\ +SM;bWԾk;hԾkh\ +SMbWԾk;hv6v;uv6vuԾkhv6v;u;,e},e}v6vu;,e};~~,e};~Ϡ>,e};Ϡ>,e};;~Ϡ>,e}6vv>u6v;v>u;Ϡ>,e}6vv>uk>hk;>h6v;v>uk>hSM\ +?bWSM;\ +?bWk;>hSM\ +?bWL?'?B{AL?;'?B{ASM;\ +?bWL?'?B{AL?1{A?¡'L?;1{A?¡'L?;'?B{AL?1{A?¡'SMbW?\ +SM;bW?\ +L?;1{A?¡'SMbW?\ +kh?Ծk;h?ԾSM;bW?\ +kh?Ծ6vu?U6v;u?Uk;h?Ծ6vu?U,e}?Ϡ;,e}?Ϡ6v;u?U,e}?Ϡ~?;~?;,e}?Ϡ;;~>;,e}>,e};~>;,e}v>6v;uv>6vu>,e}v>6v;u>k;h>khv>6vu>k;h\ +?SM;bW\ +?SMbW>kh\ +?SM;bW'?L?;B{A'?L?B{A\ +?SMbW'?L?;B{AB{A?L?;'B{A?L?''?L?B{AB{A?L?;'bW?SM;\ +bW?SM\ +B{A?L?'bW?SM;\ +h?k;Ծh?kԾbW?SM\ +h?k;Ծu?6v;vu?6vvh?kԾu?6v;v,e}?;Ϡ,e}?Ϡu?6vv,e}?;Ϡ~?;~?,e}?Ϡ~,e}Ϡ;,e}Ϡ;~,e}Ϡ6vuv6v;uv;,e}Ϡ6vuvkhԾk;hԾ6v;uvkhԾSMbW\ +SM;bW\ +k;hԾSMbW\ +L?B{A'L?;B{A'SM;bW\ +L?B{A'L?'B{AL?;'B{AL?;B{A'L?'B{ASM\ +bWSM;\ +bWL?;'B{ASM\ +bWkԾhk;ԾhSM;\ +bWkԾh6vvu6v;vuk;Ծh6vvuϠ,e};Ϡ,e}6v;vuϠ,e}~;~;Ϡ,e}~?;~?;;~?;~?~?;;~?;;~?~?;~;;~;~~~;~;~;~;~?;~?~?;~?;;~~;~;;~;,e}Ϡ>~;,e}Ϡ;zd;;>zd;;>,e}Ϡ;uv6v;sy >sy >uv6v;hԾk;g{оJ=g{оJ=hԾk;bW\ +SM;V?;B"=V?;B"=bW\ +SM;B{A'L?;U@$&;=U@$&;=B{A'L?;'B{AL?;$&U@;=$&U@;='B{AL?;\ +bWSM;.;VB"=.;VB"=\ +bWSM;ʋԾhk;оgJ=оgJ=ʋԾhk;vu6v;zs >zs >vu6v;Ϡ,e};;zd;>Ϡ,e};~;,e}Ϡ>;zd;>;zd;>,e}Ϡ>6vuv> sz> sz>6vuv>kh>Jg{>Jg{>kh>SMbW\ +?B"V.;?B"V.;?SMbW\ +?L?B{A'?;U@$&?;U@$&?L?B{A'?L?'B{A?;$&U@?;$&U@?L?'B{A?SM\ +bW?B".;V?B".;V?SM\ +bW?kԾh?Jоg?Jоg?kԾh?6vvu? zs? zs?6vvu?Ϡ,e}?d;;z?Ϡ,e}?~?,e}?d;;z?d;;z?,e}?v6vu?z s?z s?v6vu?Ծkh?оJg?оJg?Ծkh?\ +SMbW?.;B"V?.;B"V?\ +SMbW?'L?B{A?$&;U@?$&;U@?'L?B{A?B{AL?'?U@;$&?U@;$&?B{AL?'?bWSM\ +?VB".;?VB".;?bWSM\ +?hk>gJ>gJ>hk>u6vv>s z>s z>u6vv>,e}Ϡ>zd;;>s z>zd;;>sy >OYmr>OYmr>sy >g{оJ=#bshɾ^|>#bshɾ^|>g{оJ=V?;B"=lR l>lR l>V?;B"=U@$&;=Na="3b>Na="3b>U@$&;=$&U@;="Na=3b>"Na=3b>$&U@;=.;VB"=lR l>lR l>.;VB"=оgJ=shɾ#b^|>shɾ#b^|>оgJ=zs >OYmr>zs >;zd;> sz>OYmr>OYmr> sz>Jg{>^|#bsh>^|#bsh>Jg{>B"V.;? llR? llR?B"V.;?;U@$&?3bNa="?3bNa="?;U@$&?;$&U@?3b"Na=?3b"Na=?;$&U@?B".;V? llR? llR?B".;V?Jоg?^|shɾ#b?^|shɾ#b?Jоg? zs?r>Ym? zs?d;;z?z s?r>Ym?r>Ym?z s?оJg?shɾ^|#b?shɾ^|#b?оJg?.;B"V? llR? llR?.;B"V?$&;U@?"3bNa=?"3bNa=?$&;U@?U@;$&?Na=3b"?Na=3b"?U@;$&?VB".;?lR l?lR l?VB".;?gJ>#b^|sh>#b^|sh>gJ>s z>OYmr>#b^|sh>OYmr>#bshɾ^|>Y==>Y==>#bshɾ^|>lR l>rLƯ>rLƯ>lR l>Na="3b>8W>8W>Na="3b>"Na=3b>85>85>"Na=3b>lR l>rLƯ>rLƯ>lR l>shɾ#b^|>=Y=>shɾ#b^|>OYmr>^|#bsh>=Y=>=Y=>^|#bsh> llR?ƯrL>ƯrL> llR?3bNa="?W짾8?W짾8?3bNa="?3b"Na=?5짾8?5짾8?3b"Na=? llR?ǯrL?ǯrL? llR?^|shɾ#b?==Y?^|shɾ#b?r>Ym?shɾ^|#b?==Y?==Y?shɾ^|#b? llR?ƯrL?ƯrL? llR?"3bNa=?W짾8?W짾8?"3bNa=?Na=3b"?85짾?85짾?Na=3b"?lR l?rLƯ>rLƯ>lR l?#b^|sh>Y==>rLƯ>Y==>rLƯ>"B뾋>"B뾋>rLƯ>8W>-z/x>-z/x>8W>85>x-z/>x-z/>85>rLƯ>뾒"B>rLƯ>=Y=>ƯrL>뾒"B>뾒"B>ƯrL>W짾8?޾-z/x?޾-z/x?W짾8?5짾8?޾x-z/?޾x-z/?5짾8?ǯrL?뾋뾒"B?ǯrL?==Y?ƯrL?뾋뾒"B?뾋뾒"B?ƯrL?W짾8?x޾-z/?x޾-z/?W짾8?85짾?-z/޾-x?-z/޾-x?85짾?rLƯ>"B뾋>-z/޾-x?"B뾋>-z/x>% + +?% + +?-z/x>x-z/> + % +?x-z/>뾒"B>޾-z/x? + % +? + % +?޾-z/x?޾x-z/? + +%?޾x-z/?뾋뾒"B?x޾-z/? + +%? + +%?x޾-z/?-z/޾-x?% + +?% + +? + % +? + +%?;,e}Ϡ>;~;Ϡ>,e};;>zd;>;>zd;>Ϡ>,e};v>u6v;z>s >z>s >v>u6v;ʋ>hk;>gJ=>gJ=ʋ>hk;\ +?bWSM;.;?VB"=.;?VB"=\ +?bWSM;'?B{AL?;$&?U@;=$&?U@;='?B{AL?;B{A?'L?;U@?$&;=U@?$&;=B{A?'L?;bW?\ +SM;V?.;B"=V?.;B"=bW?\ +SM;h?Ծk;g?{оJ=g?{оJ=h?Ծk;u?v6v;s?z >s?z >u?v6v;,e}?Ϡ;z?d;d;>,e}?Ϡ;~?;,e}?Ϡ>z?d;d;>z?d;d;>,e}?Ϡ>u?6vv>s? z>s? z>u?6vv>h?k>g?J>g?J>h?k>bW?SM\ +?V?B".;?V?B".;?bW?SM\ +?B{A?L?'?U@?;$&?U@?;$&?B{A?L?'?'?L?B{A?$&?;U@?$&?;U@?'?L?B{A?\ +?SMbW?.;?B"V?.;?B"V?\ +?SMbW?>kh?>Jg?>Jg?>kh?v>6vu?z> s?z> s?v>6vu?>,e}?d;>;z?>,e}?;~?;Ϡ,e}?d;>;z?d;>;z?;Ϡ,e}?6v;vu? >zs? >zs?6v;vu?k;Ծh?J=оg?J=оg?k;Ծh?SM;\ +bW?B"=.;V?B"=.;V?SM;\ +bW?L?;'B{A?;=$&U@?;=$&U@?L?;'B{A?L?;B{A'?;=U@$&?;=U@$&?L?;B{A'?SM;bW\ +?B"=V.;?B"=V.;?SM;bW\ +?k;h>J=g{>J=g{>k;h>6v;uv> >sz> >sz>6v;uv>;,e}Ϡ>;>zd;> >sz>;>zd;>z>s >>OYmr>>OYmr>z>s >>gJ=sh>#b^|>sh>#b^|>>gJ=.;?VB"=?lR l>?lR l>.;?VB"=$&?U@;="?Na=3b>"?Na=3b>$&?U@;=U@?$&;=Na=?"3b>Na=?"3b>U@?$&;=V?.;B"=lR? l>lR? l>V?.;B"=g?{оJ=#b?shɾ^|>#b?shɾ^|>g?{оJ=s?z >OYm?r>s?z >z?d;d;>s? z>OYm?r>OYm?r>s? z>g?J>#b?^|sh>#b?^|sh>g?J>V?B".;?lR? l?lR? l?V?B".;?U@?;$&?Na=?3b"?Na=?3b"?U@?;$&?$&?;U@?"?3bNa=?"?3bNa=?$&?;U@?.;?B"V?? llR?? llR?.;?B"V?>Jg?sh>^|#b?sh>^|#b?>Jg?z> s?r>OYm?z> s?d;>;z? >zs?r>OYm?r>OYm? >zs?J=оg?^|>shɾ#b?^|>shɾ#b?J=оg?B"=.;V? l>lR? l>lR?B"=.;V?;=$&U@?3b>"Na=?3b>"Na=?;=$&U@?;=U@$&?3b>Na="?3b>Na="?;=U@$&?B"=V.;? l>lR? l>lR?B"=V.;?J=g{>^|>#bsh>^|>#bsh>J=g{> >sz>>OYmr>^|>#bsh>>OYmr>sh>#b^|>=>Y=>=>Y=>sh>#b^|>?lR l>>rLƯ>>rLƯ>?lR l>"?Na=3b>?85>?85>"?Na=3b>Na=?"3b>8?W>8?W>Na=?"3b>lR? l>rL?ǯ>rL?ǯ>lR? l>#b?shɾ^|>Y?==>#b?shɾ^|>OYm?r>#b?^|sh>Y?==>Y?==>#b?^|sh>lR? l?rL?ǯ>rL?ǯ>lR? l?Na=?3b"?8?5짾?8?5짾?Na=?3b"?"?3bNa=??W짾8??W짾8?"?3bNa=?? llR?>ǯrL?>ǯrL?? llR?sh>^|#b?=>=Y?sh>^|#b?r>OYm?^|>shɾ#b?=>=Y?=>=Y?^|>shɾ#b? l>lR?ǯ>rL?ǯ>rL? l>lR?3b>"Na=?5>8?5>8?3b>"Na=?3b>Na="?W>8?W>8?3b>Na="? l>lR?ǯ>rL>ǯ>rL> l>lR?^|>#bsh>=>Y=>ǯ>rL>=>Y=>>rLƯ>>"B>>"B>>rLƯ>?85>-x?-z/>-x?-z/>?85>8?W>-z/?x>-z/?x>8?W>rL?ǯ>"B?뾋>rL?ǯ>Y?==>rL?ǯ>"B?뾋>"B?뾋>rL?ǯ>8?5짾?-z/?޾-x?-z/?޾-x?8?5짾??W짾8?x?޾-z/?x?޾-z/??W짾8?>ǯrL?>뾒"B?>ǯrL?=>=Y?ǯ>rL?>뾒"B?>뾒"B?ǯ>rL?5>8?>-x-z/?>-x-z/?5>8?W>8?>-z/x?>-z/x?W>8?ǯ>rL>>"B>>-z/x?>"B>-x?-z/> +?%- +? +?%- +?-x?-z/>-z/?x>%?- + +?-z/?x>"B?뾋>-z/?޾-x?%?- + +?%?- + +?-z/?޾-x?x?޾-z/?- +? +%?x?޾-z/?>뾒"B?>-x-z/?- +? +%?- +? +%?>-x-z/?>-z/x? +?%- +? +?%- +?%?- + +?- +? +%?,e}?Ϡ>~?;Ϡ,e}?;d;z?d;>d;z?d;>Ϡ,e}?;Uu?6v;zs? >zs? >Uu?6v;Ծh?k;{оg?J={оg?J=Ծh?k;\ +bW?SM;.;V?"=.;V?"=\ +bW?SM;¡'1{A?L?;$&D@?;=$&D@?;=¡'1{A?L?;B{A'?L?;U@$&?;=U@$&?;=B{A'?L?;bW\ +?SM;V.;?B"=V.;?B"=bW\ +?SM;h>k;g{>J=g{>J=h>k;uv>6v;sz> >sz> >uv>6v;,e}Ϡ>;zd;>;>,e}Ϡ>;~;;,e};Ϡ>zd;>;>zd;>;>,e};Ϡ>u6v;v>s >z>s >z>u6v;v>hk;>gJ=>gJ=>hk;>bWSM;\ +?VB"=.;?VB"=.;?bWSM;\ +?B{AL?;'?U@;=$&?U@;=$&?B{AL?;'?'L?;B{A?$&;=U@?$&;=U@?'L?;B{A?\ +SM;bW??;B"=V??;B"=V?\ +SM;bW?Ծk;h?оJ=g?оJ=g?Ծk;h?v6v;u?y >s?y >s?v6v;u?;,e}?d;;>z?;,e}?;~?Ϡ>,e}?d;;>z?d;;>z?Ϡ>,e}?6vv>u? z>s? z>s?6vv>u?k>h?J{>g?J{>g?k>h?SM\ +?bW?!.;?V?!.;?V?SM\ +?bW?L?'?B{A?;$&?U@?;$&?U@?L?'?B{A?L?1{A?¡'?;U@?$&?;U@?$&?L?1{A?¡'?SMbW?\ +?B"V?.;?B"V?.;?SMbW?\ +?kh?>g?{>g?{>kh?>6vu?U> s?z> s?z>6vu?U>,e}?Ϡ>d;z?d;> s?z>d;z?d;>zs? >>Ym?r>>Ym?r>zs? >{оg?J=shɾ#b?^|>shɾ#b?^|>{оg?J=.;V?"=lR? l>lR? l>.;V?"=$&D@?;="Na=?3b>"Na=?3b>$&D@?;=U@$&?;=Na="?3b>Na="?3b>U@$&?;=V.;?B"=lR? l>lR? l>V.;?B"=g{>J=#bsh>^|>#bsh>^|>g{>J=sz> >OYmr>>sz> >zd;>;>s >z>OYmr>>OYmr>>s >z>gJ=>#b^|>sh>#b^|>sh>gJ=>VB"=.;?lR l>?lR l>?VB"=.;?U@;=$&?Na=3b>"?Na=3b>"?U@;=$&?$&;=U@?"3b>Na=?"3b>Na=?$&;=U@??;B"=V? l>lR? l>lR??;B"=V?оJ=g?shɾ^|>#b?shɾ^|>#b?оJ=g?y >s?r>OYm?y >s?d;;>z? z>s?r>OYm?r>OYm? z>s?J{>g?^|sh>#b?^|sh>#b?J{>g?!.;?V? l?lR? l?lR?!.;?V?;$&?U@?3b"?Na=?3b"?Na=?;$&?U@?;U@?$&?3bNa=?"?3bNa=?"?;U@?$&?B"V?.;? llR?? llR??B"V?.;?g?{>^|#b?sh>^|#b?sh>g?{> s?z>>Ym?r>^|#b?sh>>Ym?r>shɾ#b?^|>=Y?=>=Y?=>shɾ#b?^|>lR? l>rL?Ư>rL?Ư>lR? l>"Na=?3b>8?5>8?5>"Na=?3b>Na="?3b>8?W>8?W>Na="?3b>lR? l>rL>ǯ>rL>ǯ>lR? l>#bsh>^|>Y=>=>#bsh>^|>OYmr>>#b^|>sh>Y=>=>Y=>=>#b^|>sh>lR l>?rLǯ>>rLǯ>>lR l>?Na=3b>"?85>?85>?Na=3b>"?"3b>Na=?5>8?5>8?"3b>Na=? l>lR?ǯ>rL?ǯ>rL? l>lR?shɾ^|>#b?==>Y?shɾ^|>#b?r>OYm?^|sh>#b?==>Y?==>Y?^|sh>#b? l?lR?ǯ>rL?ǯ>rL? l?lR?3b"?Na=?5짾?8?5짾?8?3b"?Na=?3bNa=?"?W짾8??W짾8??3bNa=?"? llR??ǯrL?>ǯrL?> llR??^|#b?sh>=Y?=>ǯrL?>=Y?=>rL?Ư>뾒"B?>뾒"B?>rL?Ư>8?5>-x-z/?>-x-z/?>8?5>8?W>-z/x?>-z/x?>8?W>rL>ǯ>"B>>rL>ǯ>Y=>=>rLǯ>>"B>>"B>>rLǯ>>85>?-z/>x?-z/>x?85>?5>8?x>-z/?x>-z/?5>8?ǯ>rL?뾋>"B?ǯ>rL?==>Y?ǯ>rL?뾋>"B?뾋>"B?ǯ>rL?5짾?8?޾-x?-z/?޾-x?-z/?5짾?8?W짾8??޾-z/?x?޾-z/?x?W짾8??ǯrL?>뾒"B?>޾-z/?x?뾒"B?>-x-z/?> +%?- +? +%?- +?-x-z/?>-z/x?>%- +? +?-z/x?>"B>>-z/>x?%- +? +?%- +? +?-z/>x?x>-z/?- +- +?%?x>-z/?뾋>"B?޾-x?-z/?- +- +?%?- +- +?%?޾-x?-z/?޾-z/?x? +%?- +? +%?- +?%- +? +?- +- +?%?,e}?;Ϡ>~?;;,e}?Ϡ>;z?d;>;>z?d;>;>,e}?Ϡ>;u?v>6v;s?y> >s?y> >u?v>6v;h?>k;g?{>J=g?{>J=h?>k;bW?\ +?SM;V?.;?B"=V?.;?B"=bW?\ +?SM;B{A?'?L?;U@?$&?;=U@?$&?;=B{A?'?L?;¡'?1{A?L?;$&?D@?;=$&?D@?;=¡'?1{A?L?;\ +?bW?SM;.;?V?"=.;?V?"=\ +?bW?SM;>h?k;{>g?={>g?=>h?k;U>u?6v;z>s? >z>s? >U>u?6v;Ϡ>,e}?;d;>z?d;>Ϡ>,e}?;;~?;;,e}?Ϡ>d;>z?d;>d;>z?d;>;,e}?Ϡ>6v;u?U> >s?z> >s?z>6v;u?U>k;h?>=g?{>=g?{>k;h?>SM;bW?\ +?B"=V?.;?B"=V?.;?SM;bW?\ +?L?;1{A?¡'?;=D@?$&?;=D@?$&?L?;1{A?¡'?L?;'?B{A?;=$&?U@?;=$&?U@?L?;'?B{A?SM;\ +?bW?!=.;?V?!=.;?V?SM;\ +?bW?k;>h?J=>g?J=>g?k;>h?6v;v>u? >z>s? >z>s?6v;v>u?;Ϡ>,e}?d;>;>z?;Ϡ>,e}?;;~?>;,e}?d;>;>z?d;>;>z?>;,e}?v>6v;u?z> >s?z> >s?v>6v;u?>k;h?>J=g?>J=g?>k;h?\ +?SM;bW?.;?B"=V?.;?B"=V?\ +?SM;bW?'?L?;B{A?$&?;=U@?$&?;=U@?'?L?;B{A?B{A?L?;'?U@?;=$&?U@?;=$&?B{A?L?;'?bW?SM;\ +?V?B"=.;?V?B"=.;?bW?SM;\ +?h?k;>g?J=>g?J=>h?k;>u?6v;v>s? >z>s? >z>u?6v;v>,e}?;Ϡ>z?d;>;>s? >z>z?d;>;>s?y> >OYm?r>>OYm?r>>s?y> >g?{>J=#b?sh>^|>#b?sh>^|>g?{>J=V?.;?B"=lR?? l>lR?? l>V?.;?B"=U@?$&?;=Na=?"?3b>Na=?"?3b>U@?$&?;=$&?D@?;="?Na=?3b>"?Na=?3b>$&?D@?;=.;?V?"=?lR? l>?lR? l>.;?V?"={>g?=sh>#b?^|>sh>#b?^|>{>g?=z>s? >>OYm?r>z>s? >d;>z?d;> >s?z>>OYm?r>>OYm?r> >s?z>=g?{>^|>#b?sh>^|>#b?sh>=g?{>B"=V?.;? l>lR?? l>lR??B"=V?.;?;=D@?$&?3b>Na=?"?3b>Na=?"?;=D@?$&?;=$&?U@?3b>"?Na=?3b>"?Na=?;=$&?U@?!=.;?V? l>?lR? l>?lR?!=.;?V?J=>g?^|>sh>#b?^|>sh>#b?J=>g? >z>s?r>>OYm? >z>s?d;>;>z?z> >s?r>>OYm?r>>OYm?z> >s?>J=g?sh>^|>#b?sh>^|>#b?>J=g?.;?B"=V?? l>lR?? l>lR?.;?B"=V?$&?;=U@?"?3b>Na=?"?3b>Na=?$&?;=U@?U@?;=$&?Na=?3b>"?Na=?3b>"?U@?;=$&?V?B"=.;?lR? l>?lR? l>?V?B"=.;?g?J=>#b?^|>sh>#b?^|>sh>g?J=>s? >z>OYm?r>>#b?^|>sh>OYm?r>>#b?sh>^|>Y?=>=>Y?=>=>#b?sh>^|>lR?? l>rL?>ǯ>rL?>ǯ>lR?? l>Na=?"?3b>8??W>8??W>Na=?"?3b>"?Na=?3b>?8?5>?8?5>"?Na=?3b>?lR? l>>rL?Ư>>rL?Ư>?lR? l>sh>#b?^|>=>Y?=>sh>#b?^|>>OYm?r>^|>#b?sh>=>Y?=>=>Y?=>^|>#b?sh> l>lR??Ư>rL?>Ư>rL?> l>lR??3b>Na=?"?W>8??W>8??3b>Na=?"?3b>"?Na=?5>?8?5>?8?3b>"?Na=? l>?lR?Ư>>rL?Ư>>rL? l>?lR?^|>sh>#b?=>=>Y?^|>sh>#b?r>>OYm?sh>^|>#b?=>=>Y?=>=>Y?sh>^|>#b?? l>lR?>Ư>*rL?>Ư>*rL?? l>lR?"?3b>Na=??5>8??5>8?"?3b>Na=?Na=?3b>"?8?5>?8?5>?Na=?3b>"?lR? l>?rL?Ư>>rL?Ư>>lR? l>?#b?^|>sh>Y?=>=>rL?Ư>>Y?=>=>rL?>ǯ>"B?>>"B?>>rL?>ǯ>8??W>-z/?x?>-z/?x?>8??W>?8?5>-x?-z/?>-x?-z/?>?8?5>>rL?Ư>>"B?>>rL?Ư>=>Y?=>Ư>rL?>>"B?>>"B?>Ư>rL?>W>8??>-z/?x?>-z/?x?W>8??5>?8?>x?-z/?>x?-z/?5>?8?Ư>>rL?>>"B?Ư>>rL?=>=>Y?>Ư>*rL?>>"B?>>"B?>Ư>*rL??5>8?x?>-z/?x?>-z/??5>8?8?5>?-z/?>x?-z/?>x?8?5>?rL?Ư>>"B?>>-z/?>x?"B?>>-z/?x?>%? +? +?%? +? +?-z/?x?>-x?-z/?>- +?%? +?-x?-z/?>>"B?>>-z/?x?- +?%? +?- +?%? +?>-z/?x?>x?-z/?- +? +?%?>x?-z/?>>"B?x?>-z/?- +? +?%?- +? +?%?x?>-z/?-z/?>x?%? +? +?%? +? +?- +?%? +?- +? +?%?Ϡ>,e};~;,e}d;;>zd;;>z;,e}v6v;uy >sy >sv6v;uԾk;hоJ=gоJ=gԾk;h\ +SM;bW.;B"=V.;B"=V\ +SM;bW'L?;B{A$&;=U@$&;=U@'L?;B{AB{AL?;'U@;=$&U@;=$&B{AL?;'bWSM;\ +VB"=.;VB"=.;bWSM;\ +hk;ԾgJ=оgJ=оhk;Ծu6v;vs >zs >zu6v;v,e};Ϡzd;>;,e};Ϡ~;,e}Ϡ>zd;>;zd;>;,e}Ϡ>uv>6vsy> sy> uv>6vh>kg{>Jg{>Jh>kbW\ +?SMV.;?B"V.;?B"bW\ +?SMB{A'?L?U@$&?;U@$&?;B{A'?L?¡'1{A?L?$&D@?;$&D@?;¡'1{A?L?\ +bW?SM.;V?".;V?"\ +bW?SMԾh?k{оg?{оg?Ծh?kUu?6vzs? zs? Uu?6vϠ,e}?d;z?d;Ϡ,e}?~?,e}?Ϡd;z?d;d;z?d;,e}?Ϡ6vu?U s?z s?z6vu?Ukh?Ծg?{оg?{оkh?ԾSMbW?\ +B"V?.;B"V?.;SMbW?\ +L?1{A?¡';D@?$&;D@?$&L?1{A?¡'L?'?B{A;$&?U@;$&?U@L?'?B{ASM\ +?bW!.;?V!.;?VSM\ +?bWk>hJ>gJ>gk>h6vv>u z>s z>s6vv>uϠ>,e}d;;>z z>sd;;>zy >sr>OYmr>OYmy >sоJ=gshɾ^|>#bshɾ^|>#bоJ=g.;B"=V l>lR l>lR.;B"=V$&;=U@"3b>Na="3b>Na=$&;=U@U@;=$&Na=3b>"Na=3b>"U@;=$&VB"=.;lR l>lR l>VB"=.;gJ=о#b^|>shɾ#b^|>shɾgJ=оs >zOYmr>s >zzd;>;sy> OYmr>OYmr>sy> g{>J#bsh>^|#bsh>^|g{>JV.;?B"lR? llR? lV.;?B"U@$&?;Na="?3bNa="?3bU@$&?;$&D@?;彷"Na=?3b"Na=?3b$&D@?;.;V?"lR? llR? l.;V?"{оg?shɾ#b?^|shɾ#b?^|{оg?zs? OYm?rzs? d;z?d; s?zOYm?rOYm?r s?zg?{о^|#b?shɾ^|#b?shɾg?{оB"V?.; llR? llR?B"V?.;;D@?$&3bNa=?"3bNa=?";D@?$&;$&?U@3b"?Na=3b"?Na=;$&?U@!.;?V l?lR l?lR!.;?VJ>g^|sh>#b^|sh>#bJ>g z>sr>OYm^|sh>#br>OYmshɾ^|>#b==>Y==>Yshɾ^|>#b l>lRƯ>rLƯ>rL l>lR"3b>Na=W>8W>8"3b>Na=Na=3b>"85>85>Na=3b>"lR l>*rLƯ>*rLƯ>lR l>#b^|>shɾY=>=#b^|>shɾOYmr>#bsh>^|Y=>=Y=>=#bsh>^|lR? lrL>ǯrL>ǯlR? lNa="?3b8?W짾8?W짾Na="?3b"Na=?3b8?5짾8?5짾"Na=?3blR? lrL?ƯrL?ƯlR? lshɾ#b?^|=Y?=shɾ#b?^|OYm?r^|#b?shɾ=Y?==Y?=^|#b?shɾ llR?ƯrL?ƯrL? llR?3bNa=?"W짾8?W짾8?3bNa=?"3b"?Na=5짾?85짾?83b"?Na= l?lRƯ>*rLƯ>*rL l?lR^|sh>#b==>YƯ>*rL==>YƯ>rL뾋>"B뾋>"BƯ>rLW>8x>-z/x>-z/W>885>-z/>x-z/>x85>*rLƯ>"B>*rLƯ>Y=>=rL>ǯ"B>뾒"B>rL>ǯ8?W짾-z/x?޾-z/x?޾8?W짾8?5짾-x-z/?޾-x-z/?޾8?5짾rL?Ư뾒"B?뾹rL?Ư=Y?=ƯrL?뾒"B?뾋뾒"B?ƯrL?W짾8?޾-z/?x޾-z/?xW짾8?5짾?8޾x?-z/޾x?-z/5짾?8Ư>*rL뾋>"B޾x?-z/뾋>"Bx>-z/- + +?%- + +?%x>-z/-z/>x%- +?- +-z/>x"B>-z/x?޾%- +?- +%- +?- +-z/x?޾-x-z/?޾- +%? +-x-z/?޾뾒"B?޾-z/?x- +%? +- +%? +޾-z/?x޾x?-z/- + +?%- + +?%%- +?- +- +%? +,e}?Ϡ>~?;,e}?;Ϡz?d;>;z?d;>;,e}?;Ϡu?6v;vs? >zs? >zu?6v;vh?k;Ծg?J=оg?J=оh?k;ԾbW?SM;\ +V?B"=.;V?B"=.;bW?SM;\ +B{A?L?;'U@?;=$&U@?;=$&B{A?L?;''?L?;B{A$&?;=U@$&?;=U@'?L?;B{A\ +?SM;bW?;?B"=V?;?B"=V\ +?SM;bW>k;h>J=g>J=g>k;hv>6v;uy> >sy> >sv>6v;u>;,e}d;>;>z>;,e};;~;Ϡ>,e}d;>;>zd;>;>z;Ϡ>,e}6v;v>u >z>s >z>s6v;v>uk;>hJ={>gJ={>gk;>hSM;\ +?bW!=.;?V!=.;?VSM;\ +?bWL?;'?B{A;=$&?U@;=$&?U@L?;'?B{AL?;1{A?¡';=U@?$&;=U@?$&L?;1{A?¡'SM;bW?\ +B"=V?.;B"=V?.;SM;bW?\ +k;h?Ծ=g?{о=g?{оk;h?Ծ6v;u?U >s?z >s?z6v;u?U;,e}?Ϡd;>z?d;;,e}?Ϡ;~?Ϡ>,e}?d;>z?d;d;>z?d;Ϡ>,e}?U>u?6vz>s? z>s? U>u?6v>h?k{>g?J{>g?J>h?k\ +?bW?SM.;?V?".;?V?"\ +?bW?SM¡'?1{A?L?$&?D@?;$&?D@?;¡'?1{A?L?B{A?'?L?U@?$&?;U@?$&?;B{A?'?L?bW?\ +?SMV?.;?B"V?.;?B"bW?\ +?SMh?>kg?{>Jg?{>Jh?>ku?v>6vs?z> s?z> u?v>6v,e}?Ϡ>z?d;>;s?z> z?d;>;s? >zOYm?r>OYm?r>s? >zg?J=о#b?^|>shɾ#b?^|>shɾg?J=оV?B"=.;lR? l>lR? l>V?B"=.;U@?;=$&Na=?3b>"Na=?3b>"U@?;=$&$&?;=U@"?3b>Na="?3b>Na=$&?;=U@?;?B"=V? l>lR? l>lR?;?B"=V>J=gsh>^|>#bsh>^|>#b>J=gy> >sr>>OYmy> >sd;>;>z >z>sr>>OYmr>>OYm >z>sJ={>g^|>sh>#b^|>sh>#bJ={>g!=.;?V l>?lR l>?lR!=.;?V;=$&?U@3b>"?Na=3b>"?Na=;=$&?U@;=U@?$&3b>Na=?"3b>Na=?";=U@?$&B"=V?.; l>lR? l>lR?B"=V?.;=g?{о^|>#b?shɾ^|>#b?shɾ=g?{о >s?z>OYm?r >s?zd;>z?d;z>s? >OYm?r>OYm?rz>s? {>g?Jsh>#b?^|sh>#b?^|{>g?J.;?V?"?lR? l?lR? l.;?V?"$&?D@?;彷"?Na=?3b"?Na=?3b$&?D@?;U@?$&?;Na=?"?3bNa=?"?3bU@?$&?;彖V?.;?B"lR?? llR?? lV?.;?B"g?{>J#b?sh>^|#b?sh>^|g?{>Js?z> OYm?r>#b?sh>^|OYm?r>#b?^|>shɾY?=>=Y?=>=#b?^|>shɾlR? l>rL?Ư>rL?Ư>lR? l>Na=?3b>"8?5>8?5>Na=?3b>""?3b>Na=?5>8?5>8"?3b>Na=? l>lR>ǯ>rL>ǯ>rL? l>lRsh>^|>#b=>=>Ysh>^|>#br>>OYm^|>sh>#b=>=>Y=>=>Y^|>sh>#b l>?lRǯ>>rLǯ>>rL l>?lR3b>"?Na=5>?85>?83b>"?Na=3b>Na=?"W>8?W>8?3b>Na=?" l>lR?ǯ>rL?ǯ>rL? l>lR?^|>#b?shɾ=>Y?=^|>#b?shɾ>OYm?rsh>#b?^|=>Y?==>Y?=sh>#b?^|?lR? l>rL?ǯ>rL?ǯ?lR? l"?Na=?3b?8?5짾?8?5짾"?Na=?3bNa=?"?3b8??W짾8??W짾Na=?"?3blR?? lrL?>ǯrL?>ǯlR?? l#b?sh>^|Y?=>=rL?>ǯY?=>=rL?Ư>"B?>뾒"B?>rL?Ư>8?5>-z/?>-x-z/?>-x8?5>?5>8x?>-z/x?>-z/?5>8>ǯ>rL>>"B>ǯ>rL=>=>Yǯ>>rL>>"B>>"Bǯ>>rL5>?8>-x?-z/>-x?-z/5>?8W>8?>-z/?x>-z/?xW>8?ǯ>rL?>"B?ǯ>rL?=>Y?=>rL?ǯ>"B?뾋>"B?뾹>rL?ǯ?8?5짾-x?-z/?޾-x?-z/?޾?8?5짾8??W짾-z/?x?޾-z/?x?޾8??W짾rL?>ǯ"B?>-z/?x?޾"B?>-z/?>-x%?- +?- +%?- +?- +-z/?>-xx?>-z/- +?- +?%x?>-z/>>"B>-x?-z/- +?- +?%- +?- +?%>-x?-z/>-z/?x +?%?- +>-z/?x>"B?-x?-z/?޾ +?%?- + +?%?- +-x?-z/?޾-z/?x?޾%?- +?- +%?- +?- +- +?- +?% +?%?- +,e}Ϡ~Ϡ,e};zd;;zd;Ϡ,e}vu6vzs zs vu6vʋԾhkоgJоgJʋԾhk\ +bWSM.;VB".;VB"\ +bWSM'B{AL?$&U@;$&U@;彲'B{AL?B{A'L?U@$&;U@$&;B{A'L?bW\ +SMV.;B"V.;B"bW\ +SMhԾkg{оJg{оJhԾkuv6vsz sz uv6v,e}Ϡzd;d;,e}Ϡ~,e}Ϡzd;d;zd;d;,e}Ϡu6vvs zs zu6vvhkԾgJоgJоhkԾbWSM\ +VB".;VB".;bWSM\ +B{AL?'U@;$&U@;$&B{AL?''L?B{A$&;U@$&;U@'L?B{A\ +SMbW.;B"V.;B"V\ +SMbWԾkhоJgоJgԾkhv6vuz sz sv6vu,e}d;;z,e}~Ϡ,e}d;;zd;;zϠ,e}6vvu zs zs6vvukԾhJоgJоgkԾhSM\ +bWB".;VB".;VSM\ +bWL?'B{A;$&U@;$&U@L?'B{AL?B{A';U@$&;U@$&L?B{A'SMbW\ +B"V.;B"V.;SMbW\ +khԾJg{оJg{оkhԾ6vuv sz sz6vuv,e}Ϡ;zd; sz;zd;zs OYmrOYmrzs оgJshɾ#b^|shɾ#b^|оgJ.;VB"lR llR l.;VB"$&U@;彷"Na=3b"Na=3b$&U@;U@$&;Na="3bNa="3bU@$&;彖V.;B"lR llR lV.;B"g{оJ#bshɾ^|#bshɾ^|g{оJsz OYmrsz zd;d;s zOYmrOYmrs zgJо#b^|shɾ#b^|shɾgJоVB".;lR llR lVB".;U@;$&Na=3b"Na=3b"U@;$&$&;U@"3bNa="3bNa=$&;U@.;B"V llR llR.;B"VоJgshɾ^|#bshɾ^|#bоJgz srOYmz sd;;z zsrOYmrOYm zsJоg^|shɾ#b^|shɾ#bJоgB".;V llR llRB".;V;$&U@3b"Na=3b"Na=;$&U@;U@$&3bNa="3bNa=";U@$&B"V.; llR llRB"V.;Jg{о^|#bshɾ^|#bshɾJg{о szOYmr^|#bshɾOYmrshɾ#b^|=Y==Y=shɾ#b^|lR lrLƯrLƯlR l"Na=3b85짾85짾"Na=3bNa="3b8W짾8W짾Na="3blR lrLǯrLǯlR l#bshɾ^|Y==#bshɾ^|OYmr#b^|shɾY==Y==#b^|shɾlR lrLǯrLǯlR lNa=3b"85짾85짾Na=3b""3bNa=W짾8W짾8"3bNa= llRǯrLǯrL llRshɾ^|#b==Yshɾ^|#brOYm^|shɾ#b==Y==Y^|shɾ#b llRǯrLǯrL llR3b"Na=5짾85짾83b"Na=3bNa="W짾8W짾83bNa=" llRǯrLǯrL llR^|#bshɾ=Y=ǯrL=Y=rLƯ뾒"B뾋뾒"B뾹rLƯ85짾-x-z/޾-x-z/޾85짾8W짾-z/x޾-z/x޾8W짾rLǯ"B뾋rLǯY==rLǯ"B뾋뾒"B뾋rLǯ85짾-z/޾-x-z/޾-x85짾W짾8x޾-z/x޾-z/W짾8ǯrL뾋뾒"BǯrL==YǯrL뾋뾒"B뾋뾒"BǯrL5짾8޾-x-z/޾-x-z/5짾8W짾8޾-z/x޾-z/xW짾8ǯrL뾒"B޾-z/x뾒"B-x-z/޾ +%- + +%- +-x-z/޾-z/x޾%- + +-z/x޾"B뾋-z/޾-x%- + +%- + +-z/޾-xx޾-z/- + +%x޾-z/뾋뾒"B޾-x-z/- + +%- + +%޾-x-z/޾-z/x +%- + +%- +%- + +- + +%,e}?Ϡ~?,e}?Ϡz?d;;z?d;;,e}?Ϡu?v6vs?y s?y u?v6vh?Ծkg?{оJg?{оJh?ԾkbW?\ +SMV??;B"V??;B"bW?\ +SMB{A?'L?U@?$&;U@?$&;B{A?'L?'?B{AL?$&?U@;$&?U@;彲'?B{AL?\ +?bWSM.;?VB".;?VB"\ +?bWSMʋ>hk>gJ>gJʋ>hkv>u6vz>s z>s v>u6vϠ>,e};>zd;Ϡ>,e};~;,e}Ϡ;>zd;;>zd;;,e}Ϡ6v;uv >sz >sz6v;uvk;hԾJ=g{оJ=g{оk;hԾSM;bW\ +B"=V.;B"=V.;SM;bW\ +L?;B{A';=U@$&;=U@$&L?;B{A'L?;'B{A;=$&U@;=$&U@L?;'B{ASM;\ +bWB"=.;VB"=.;VSM;\ +bWk;ԾhJ=оgJ=оgk;Ծh6v;vu >zs >zs6v;vu;Ϡ,e}d;>;z;Ϡ,e};~>,e}d;>;zd;>;z>,e}v>6vuz> sz> sv>6vu>kh>Jg>Jg>kh\ +?SMbW.;?B"V.;?B"V\ +?SMbW'?L?B{A$&?;U@$&?;U@'?L?B{AB{A?L?'U@?;$&U@?;$&B{A?L?'bW?SM\ +V?B".;V?B".;bW?SM\ +h?kԾg?Jоg?Jоh?kԾu?6vvs? zs? zu?6vv,e}?Ϡz?d;;s? zz?d;;s?y OYm?rOYm?rs?y g?{оJ#b?shɾ^|#b?shɾ^|g?{оJV??;B"lR? llR? lV??;B"U@?$&;Na=?"3bNa=?"3bU@?$&;$&?U@;彷"?Na=3b"?Na=3b$&?U@;.;?VB"?lR l?lR l.;?VB">gJsh>#b^|sh>#b^|>gJz>s >OYmrz>s ;>zd; >sz>OYmr>OYmr >szJ=g{о^|>#bshɾ^|>#bshɾJ=g{оB"=V.; l>lR l>lRB"=V.;;=U@$&3b>Na="3b>Na=";=U@$&;=$&U@3b>"Na=3b>"Na=;=$&U@B"=.;V l>lR l>lRB"=.;VJ=оg^|>shɾ#b^|>shɾ#bJ=оg >zsr>>Ym >zsd;>;zz> sr>>Ymr>>Ymz> s>Jgsh>^|#bsh>^|#b>Jg.;?B"V? llR? llR.;?B"V$&?;U@"?3bNa="?3bNa=$&?;U@U@?;$&Na=?3b"Na=?3b"U@?;$&V?B".;lR? llR? lV?B".;g?Jо#b?^|shɾ#b?^|shɾg?Jоs? zOYm?r#b?^|shɾOYm?r#b?shɾ^|Y?==Y?==#b?shɾ^|lR? lrL?ƯrL?ƯlR? lNa=?"3b8?W짾8?W짾Na=?"3b"?Na=3b?85짾?85짾"?Na=3b?lR l>rLƯ>rLƯ?lR lsh>#b^|=>Y=sh>#b^|>OYmr^|>#bshɾ=>Y==>Y=^|>#bshɾ l>lRƯ>rLƯ>rL l>lR3b>Na="W>8W>83b>Na="3b>"Na=5>85>83b>"Na= l>lRǯ>rLǯ>rL l>lR^|>shɾ#b=>=Y^|>shɾ#br>>Ymsh>^|#b=>=Y=>=Ysh>^|#b? llR>ƯrL>ƯrL? llR"?3bNa=?W짾8?W짾8"?3bNa=Na=?3b"8?5짾8?5짾Na=?3b"lR? lrL?ƯrL?ƯlR? l#b?^|shɾY?==rL?ƯY?==rL?Ư"B?뾋뾒"B?뾋rL?Ư8?W짾-z/?x޾-z/?x޾8?W짾?85짾x?-z/޾x?-z/޾?85짾>rLƯ>"B뾹>rLƯ=>Y=Ư>rL>"B뾋>"BƯ>rLW>8>-z/x>-z/xW>85>8>x-z/>x-z/5>8ǯ>rL>뾒"Bǯ>rL=>=Y>ƯrL>뾒"B>뾒"B>ƯrL?W짾8x?޾-z/x?޾-z/?W짾88?5짾-z/?޾-x-z/?޾-x8?5짾rL?Ư"B?뾋-z/?޾-x"B?뾋-z/?x޾%? + +%? + +-z/?x޾x?-z/޾ +? % +x?-z/޾>"B>-z/x +? % + +? % +>-z/x>x-z/ +? +%>x-z/>뾒"Bx?޾-z/ +? +% +? +%x?޾-z/-z/?޾-x%? + +%? + + +? % + +? +% \ No newline at end of file diff --git a/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/positions.bin b/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/positions.bin new file mode 100644 index 00000000..96c2a4e1 Binary files /dev/null and b/2.0/XmpMetadataRoundedCube/glTF/MODEL_ROUNDED_CUBE_PART_1/positions.bin differ diff --git a/2.0/XmpMetadataRoundedCube/glTF/xmp.gltf b/2.0/XmpMetadataRoundedCube/glTF/xmp.gltf new file mode 100644 index 00000000..1a3029d4 --- /dev/null +++ b/2.0/XmpMetadataRoundedCube/glTF/xmp.gltf @@ -0,0 +1,183 @@ +{ + "extensionsUsed": ["KHR_xmp_json_ld"], + "extensions": { + "KHR_xmp_json_ld": { + "packets": [ + { + "@context": { + "dc": "http://purl.org/dc/elements/1.1/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + }, + "@id": "", + "dc:contributor": { + "@set": [ + "Creator1Name", + "Creator2Email@email.com", + "Creator3Name" + ] + }, + "dc:coverage": "Bay Area, California, United States", + "dc:creator": { + "@list": ["CreatorName", "CreatorEmail@email.com"] + }, + "dc:date": { + "@list": ["2019-05-16T19:20:30+01:00"] + }, + "dc:description": { + "@type": "rdf:Alt", + "rdf:_1": { + "@language": "en-us", + "@value": "An example of a glTF file with XMP metadata in it" + } + }, + "dc:format": "model/gltf+json", + "dc:language": { + "@set": ["en"] + }, + "dc:publisher": { + "@set": ["Khronos"] + }, + "dc:title": { + "@type": "rdf:Alt", + "rdf:_1": { + "@language": "en-us", + "@value": "Sample glTF with XMP metadata" + } + } + }, + { + "@context": { + "dc": "http://purl.org/dc/elements/1.1/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + }, + "dc:title": { + "@type": "rdf:Alt", + "rdf:_1": { + "@language": "en-us", + "@value": "My Cube Mesh" + } + } + } + ] + } + }, + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 3456, + "max": [10, 19.949111938476562, 10], + "min": [-10, -0.050886999815702438, -10], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 3456, + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5125, + "count": 5172, + "max": [3455], + "min": [0], + "type": "SCALAR" + } + ], + "asset": { + "copyright": "2017 (c) Adobe Corp", + "minVersion": "2.0", + "version": "2.0", + "extensions": { + "KHR_xmp_json_ld": { + "packet": 0 + } + } + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 41472, + "byteOffset": 0 + }, + { + "buffer": 1, + "byteLength": 41472, + "byteOffset": 0 + }, + { + "buffer": 2, + "byteLength": 20688, + "byteOffset": 0, + "target": 34963 + } + ], + "buffers": [ + { + "byteLength": 41472, + "uri": "MODEL_ROUNDED_CUBE_PART_1/positions.bin" + }, + { + "byteLength": 41472, + "uri": "MODEL_ROUNDED_CUBE_PART_1/normals.bin" + }, + { + "byteLength": 20688, + "uri": "MODEL_ROUNDED_CUBE_PART_1/indices.bin" + } + ], + "materials": [ + { + "doubleSided": true, + "name": "Rounded Cube Material", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.63075679540634155, + 0.63075679540634155, + 0.63075679540634155, + 1 + ], + "metallicFactor": 0, + "roughnessFactor": 0.50300002098083496 + } + } + ], + "meshes": [ + { + "name": "MODEL_ROUNDED_CUBE_PART_1", + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 0 + }, + "indices": 2, + "material": 0, + "mode": 4 + } + ], + "extensions": { + "KHR_xmp_json_ld": { + "packet": 1 + } + } + } + ], + "nodes": [ + { + "mesh": 0, + "name": "MODEL_ROUNDED_CUBE_PART_1model_N3D" + } + ], + "scene": 0, + "scenes": [ + { + "name": "scene", + "nodes": [0] + } + ] +} diff --git a/2.0/model-index.json b/2.0/model-index.json index 41e18d7c..b42691ac 100644 --- a/2.0/model-index.json +++ b/2.0/model-index.json @@ -219,6 +219,14 @@ "glTF-Embedded": "CesiumMilkTruck.gltf" } }, + { + "name": "ClearCoatCarPaint", + "screenshot": "screenshot/screenshot.jpg", + "variants": { + "glTF": "ClearCoatCarPaint.gltf", + "glTF-Binary": "ClearCoatCarPaint.glb" + } + }, { "name": "ClearCoatTest", "screenshot": "screenshot/screenshot.jpg", @@ -241,6 +249,14 @@ "glTF": "ClearcoatSphere.gltf" } }, + { + "name": "ClearcoatWicker", + "screenshot": "screenshot/screenshot.jpg", + "variants": { + "glTF": "ClearcoatWicker.gltf", + "glTF-Binary": "ClearcoatWicker.glb" + } + }, { "name": "Corset", "screenshot": "screenshot/screenshot.jpg", @@ -306,7 +322,8 @@ "name": "FlightHelmet", "screenshot": "screenshot/screenshot.jpg", "variants": { - "glTF": "FlightHelmet.gltf" + "glTF": "FlightHelmet.gltf", + "glTF-KTX-BasisU": "FlightHelmet.gltf" } }, { @@ -407,6 +424,14 @@ "glTF-Binary": "MaterialsVariantsShoe.glb" } }, + { + "name": "MeshPrimitiveModes", + "screenshot": "screenshot/screenshot.png", + "variants": { + "glTF": "MeshPrimitiveModes.gltf", + "glTF-Embedded": "MeshPrimitiveModes.gltf" + } + }, { "name": "MetalRoughSpheres", "screenshot": "screenshot/screenshot.png", @@ -501,6 +526,13 @@ "glTF-Embedded": "OrientationTest.gltf" } }, + { + "name": "PrimitiveModeNormalsTest", + "screenshot": "screenshot/screenshot.png", + "variants": { + "glTF": "PrimitiveModeNormalsTest.gltf" + } + }, { "name": "ReciprocatingSaw", "screenshot": "screenshot/screenshot.png", @@ -575,6 +607,14 @@ "glTF": "SheenHighHeel.gltf" } }, + { + "name": "SimpleInstancing", + "screenshot": "screenshot/screenshot.png", + "variants": { + "glTF": "SimpleInstancing.gltf", + "glTF-Binary": "SimpleInstancing.glb" + } + }, { "name": "SimpleMeshes", "screenshot": "screenshot/screenshot.png", diff --git a/README.md b/README.md index b311ca20..372aeda6 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ # glTF Sample Models +## Deprecating + +**This repo is in the process of being ARCHIVED. All new Issues and Pull Requests should be filed in the new repo - [glTF-Sample-Assets](https://github.com/KhronosGroup/glTF-Sample-Assets).** +If you have an existing PR or Issue, please consider opening it in glTF-Sample-Assets or getting the issue resolved or the PR merged. + [![glTF Validation](https://github.com/KhronosGroup/glTF-Sample-Models/workflows/glTF%20Validation/badge.svg?branch=master)](https://github.com/KhronosGroup/glTF-Sample-Models/actions) - [glTF 1.0](1.0)