diff --git a/Core/VoxelCamera.cpp b/Core/VoxelCamera.cpp index b87e6e732..2327a1059 100644 --- a/Core/VoxelCamera.cpp +++ b/Core/VoxelCamera.cpp @@ -4,16 +4,17 @@ using namespace Math; // TODO: probably need params here that change the bounds -void VoxelCamera::UpdateMatrix() +void VoxelCamera::UpdateMatrix(AXIS axis) { - constexpr float DUMMY = 2000; + // TODO: the orthographic frustum should be based on ??? something ??? (bounds of the scene? size of the cascade?) + constexpr float DUMMY = 500; float right = DUMMY; float left = -DUMMY; float top = DUMMY; float bottom = -DUMMY; - float _near = -DUMMY; - float _far = DUMMY; + float _near = -2000; + float _far = 2000; float rml = right - left; float rpl = right + left; @@ -22,8 +23,21 @@ void VoxelCamera::UpdateMatrix() float fmn = _far - _near; float fpn = _far + _near; - // looking in a positive x direction for now - SetEyeAtUp(Vector3(3000, 0, 0), Vector3(0, 0, 0), Vector3(0, 1, 0)); + // directions + switch (axis) { + case AXIS::X: + SetEyeAtUp(Vector3(2000, 0, 0), Vector3(0, 0, 0), Vector3(0, 1, 0)); + break; + case AXIS::Y: + SetEyeAtUp(Vector3(0, DUMMY, 0), Vector3(0, 0, 0), Vector3(1, 0, 0)); + break; + case AXIS::Z: + SetEyeAtUp(Vector3(0, 0, DUMMY), Vector3(0, 0, 0), Vector3(0, 1, 0)); + break; + default: + ASSERT(false); + break; + } // create an orthographic matrix // https://wikimedia.org/api/rest_v1/media/math/render/svg/8ea4e438d7439b8fa504fb53fd7fafd678007243 diff --git a/Core/VoxelCamera.h b/Core/VoxelCamera.h index a604ea64c..79a81c3bb 100644 --- a/Core/VoxelCamera.h +++ b/Core/VoxelCamera.h @@ -6,7 +6,13 @@ class VoxelCamera : public Math::BaseCamera { public: + enum AXIS { + X, // Implicitly assigned 0 + Y, // Implicitly assigned 1 + Z // Implicitly assigned 2 + }; + VoxelCamera() {} - void UpdateMatrix(); + void UpdateMatrix(AXIS axis); }; diff --git a/Model/ConstantBuffers.h b/Model/ConstantBuffers.h index 1f7e13da4..c838f8bba 100644 --- a/Model/ConstantBuffers.h +++ b/Model/ConstantBuffers.h @@ -72,4 +72,6 @@ __declspec(align(256)) struct SDFGIGlobalConstants { float viewWidth; float viewHeight; + int axis; + float pad; }; \ No newline at end of file diff --git a/Model/Renderer.cpp b/Model/Renderer.cpp index 2b5678a60..f128b2013 100644 --- a/Model/Renderer.cpp +++ b/Model/Renderer.cpp @@ -78,6 +78,7 @@ namespace Renderer DescriptorHandle m_CommonTextures; + // SDFGI std::vector sm_VoxelPSOs; DescriptorHandle m_SDFGIVoxelTextures; Texture m_VoxelAlbedo; diff --git a/Model/Renderer.h b/Model/Renderer.h index b8a0bb135..2c8cf7f09 100644 --- a/Model/Renderer.h +++ b/Model/Renderer.h @@ -99,6 +99,8 @@ namespace Renderer m_CurrentDraw = 0; } + MeshSorter() : MeshSorter(kDefault) {} + void SetCamera( const BaseCamera& camera ) { m_Camera = &camera; } void SetViewport( const D3D12_VIEWPORT& viewport ) { m_Viewport = viewport; } void SetScissor( const D3D12_RECT& scissor ) { m_Scissor = scissor; } diff --git a/Model/Shaders/DefaultPS.hlsl b/Model/Shaders/DefaultPS.hlsl index 1be3cee69..cbf76bc1a 100644 --- a/Model/Shaders/DefaultPS.hlsl +++ b/Model/Shaders/DefaultPS.hlsl @@ -55,10 +55,18 @@ cbuffer GlobalConstants : register(b1) } #if SDFGI_VOXEL_PASS + +enum VoxelAxis { + X = 0, + Y = 1, + Z = 2 +}; + cbuffer SDFGIConstants : register(b2) { float viewWidth; float viewHeight; + VoxelAxis axis; } RWTexture3D SDFGIVoxelAlbedo : register(u0); @@ -305,8 +313,38 @@ float4 main(VSOutput vsOutput) : SV_Target0 // TODO: Shade each light using Forward+ tiles #if SDFGI_VOXEL_PASS - SDFGIVoxelAlbedo[uint3(20, 20, 20)] = float4(0., 1., 0., 1.); - //float3 pos = float3(vsOutput.position.xyz); + // SDFGIVoxelAlbedo[uint3(20, 20, 20)] = float4(0., 1., 0., 1.); + + float screenResolution = 512.0; + float textureResolution = 128.0; + float2 uv = vsOutput.position.xy / screenResolution; + + uint x = 0; + uint y = 0; + uint z = 0; + float3 color = float3(0., 0., 0.); + + if (axis == X) { + x = uv.x * textureResolution; + y = uv.y * textureResolution; + z = vsOutput.position.z * textureResolution; + color = float3(1., 0., 0.); + } + else if (axis == Y) { + x = uv.x * textureResolution; + y = -vsOutput.position.z * textureResolution; + z = uv.y * textureResolution; + color = float3(0., 1., 0.); + } + else if (axis == Z) { + x = -vsOutput.position.z * textureResolution; + y = uv.x * textureResolution; + z = uv.y * textureResolution; + color = float3(0., 0., 1.); + } + + SDFGIVoxelAlbedo[uint3(x, y, z)] = float4(color, 1.); + //colorAccum = float3(frac(pos.x), frac(pos.x), frac(pos.x)); #endif diff --git a/ModelViewer/ModelViewer.cpp b/ModelViewer/ModelViewer.cpp index 665de6697..6916e1944 100644 --- a/ModelViewer/ModelViewer.cpp +++ b/ModelViewer/ModelViewer.cpp @@ -187,7 +187,8 @@ void ModelViewer::Startup( void ) #ifdef LEGACY_RENDERER Sponza::Startup(m_Camera); #else - m_ModelInst = Renderer::LoadModel(L"Sponza/PBR/sponza2.gltf", forceRebuild); + // m_ModelInst = Renderer::LoadModel(L"Sponza/PBR/sponza2.gltf", forceRebuild); + m_ModelInst = Renderer::LoadModel(L"Models/BoxAndPlane/BoxAndPlane.gltf", forceRebuild); m_ModelInst.Resize(100.0f * m_ModelInst.GetRadius()); OrientedBox obb = m_ModelInst.GetBoundingBox(); float modelRadius = Length(obb.GetDimensions()) * 0.5f; @@ -350,7 +351,6 @@ void ModelViewer::RenderScene( void ) Math::BaseCamera voxelCam = m_Camera; #else VoxelCamera voxelCam; - voxelCam.UpdateMatrix(); #endif globals.ViewProjMatrix = voxelCam.GetViewProjMatrix(); @@ -382,28 +382,30 @@ void ModelViewer::RenderScene( void ) SDFGIglobals.viewHeight = height; } - // gfxContext.TransitionResource(voxelTextures.VoxelAlbedo, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + std::array sorters; - MeshSorter sorter(MeshSorter::kDefault); - sorter.SetCamera(voxelCam); - sorter.SetViewport(voxelViewport); - sorter.SetScissor(voxelScissor); - sorter.SetDepthStencilTarget(g_SceneDepthBuffer); - sorter.AddRenderTarget(g_SceneColorBuffer); + for (MeshSorter& sorter : sorters) { + sorter.SetCamera(voxelCam); + sorter.SetViewport(voxelViewport); + sorter.SetScissor(voxelScissor); + sorter.SetDepthStencilTarget(g_SceneDepthBuffer); + sorter.AddRenderTarget(g_SceneColorBuffer); + } + // Begin rendering depth gfxContext.TransitionResource(g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_WRITE, true); gfxContext.ClearDepth(g_SceneDepthBuffer); - m_ModelInst.Render(sorter); - sorter.Sort(); + m_ModelInst.Render(sorters[0]); + sorters[0].Sort(); - { + /*{ ScopedTimer _prof(L"Depth Pre-Pass", gfxContext); sorter.RenderMeshes(MeshSorter::kZPass, gfxContext, globals); } - SSAO::Render(gfxContext, m_Camera); + SSAO::Render(gfxContext, m_Camera);*/ gfxContext.TransitionResource(g_SceneColorBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, true); gfxContext.ClearColor(g_SceneColorBuffer); @@ -411,14 +413,57 @@ void ModelViewer::RenderScene( void ) // TODO: We should be rendering with the shadow pass... { - ScopedTimer _prof(L"Render Voxel", gfxContext); + ScopedTimer _prof(L"Render Voxel X", gfxContext); gfxContext.TransitionResource(g_SSAOFullScreen, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); gfxContext.TransitionResource(g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_READ); gfxContext.SetRenderTarget(g_SceneColorBuffer.GetRTV()); gfxContext.SetViewportAndScissor(viewport, scissor); - sorter.RenderVoxels(MeshSorter::kOpaque, gfxContext, globals, SDFGIglobals); + // do 3 passes (render from x, y and z axis) + + voxelCam.UpdateMatrix(VoxelCamera::X); + SDFGIglobals.axis = 0; + sorters[0].RenderVoxels(MeshSorter::kOpaque, gfxContext, globals, SDFGIglobals); + } + + + // Code below crashes! + + m_ModelInst.Render(sorters[1]); + sorters[1].Sort(); + + { + ScopedTimer _prof(L"Render Voxel Y", gfxContext); + + gfxContext.TransitionResource(g_SSAOFullScreen, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + gfxContext.TransitionResource(g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_READ); + gfxContext.SetRenderTarget(g_SceneColorBuffer.GetRTV()); + gfxContext.SetViewportAndScissor(viewport, scissor); + + // do 3 passes (render from x, y and z axis) + + voxelCam.UpdateMatrix(VoxelCamera::Y); + SDFGIglobals.axis = 1; + sorters[1].RenderVoxels(MeshSorter::kOpaque, gfxContext, globals, SDFGIglobals); + } + + m_ModelInst.Render(sorters[1]); + sorters[1].Sort(); + + { + ScopedTimer _prof(L"Render Voxel Z", gfxContext); + + gfxContext.TransitionResource(g_SSAOFullScreen, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + gfxContext.TransitionResource(g_SceneDepthBuffer, D3D12_RESOURCE_STATE_DEPTH_READ); + gfxContext.SetRenderTarget(g_SceneColorBuffer.GetRTV()); + gfxContext.SetViewportAndScissor(viewport, scissor); + + // do 3 passes (render from x, y and z axis) + + voxelCam.UpdateMatrix(VoxelCamera::Z); + SDFGIglobals.axis = 2; + sorters[2].RenderVoxels(MeshSorter::kOpaque, gfxContext, globals, SDFGIglobals); } } #else diff --git a/ModelViewer/Models/BoxAndPlane/BoxAndPlane.bin b/ModelViewer/Models/BoxAndPlane/BoxAndPlane.bin new file mode 100644 index 000000000..c208529d6 Binary files /dev/null and b/ModelViewer/Models/BoxAndPlane/BoxAndPlane.bin differ diff --git a/ModelViewer/Models/BoxAndPlane/BoxAndPlane.gltf b/ModelViewer/Models/BoxAndPlane/BoxAndPlane.gltf new file mode 100644 index 000000000..c6d5f89d2 --- /dev/null +++ b/ModelViewer/Models/BoxAndPlane/BoxAndPlane.gltf @@ -0,0 +1,182 @@ +{ + "asset": { + "version": "2.0", + "generator": "babylon.js glTF exporter for Autodesk MAYA 2022.5 v20240312.5" + }, + "scene": 0, + "scenes": [{ "nodes": [0] }], + "nodes": [ + { "children": [1, 2], "scale": [100.0, 100.0, 100.0], "name": "root" }, + { + "mesh": 0, + "scale": [5.39420462, 5.39420462, 5.39420462], + "name": "BotWall" + }, + { + "mesh": 1, + "translation": [0.0, 0.0340479761, 0.0], + "scale": [2.96854, 2.96854, 2.96854], + "name": "pCube1" + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 1, + "TANGENT": 2, + "NORMAL": 3, + "TEXCOORD_0": 4 + }, + "indices": 0, + "material": 0 + } + ], + "name": "BotWall" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 6, + "TANGENT": 7, + "NORMAL": 8, + "TEXCOORD_0": 9 + }, + "indices": 5, + "material": 1 + } + ], + "name": "pCube1" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5123, + "count": 6, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 6, + "max": [0.0749999955, 0.0, 0.0749999955], + "min": [-0.0749999955, 0.0, -0.0749999955], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 6, + "type": "VEC4", + "name": "accessorTangents" + }, + { + "bufferView": 1, + "byteOffset": 72, + "componentType": 5126, + "count": 6, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "bufferView": 3, + "componentType": 5126, + "count": 6, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5123, + "count": 36, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "bufferView": 1, + "byteOffset": 144, + "componentType": 5126, + "count": 36, + "max": [0.005, 0.005, 0.005], + "min": [-0.005, -0.005, -0.005], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "bufferView": 2, + "byteOffset": 96, + "componentType": 5126, + "count": 36, + "type": "VEC4", + "name": "accessorTangents" + }, + { + "bufferView": 1, + "byteOffset": 576, + "componentType": 5126, + "count": 36, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "bufferView": 3, + "byteOffset": 48, + "componentType": 5126, + "count": 36, + "type": "VEC2", + "name": "accessorUVs" + } + ], + "bufferViews": [ + { "buffer": 0, "byteLength": 84, "name": "bufferViewScalar" }, + { + "buffer": 0, + "byteOffset": 84, + "byteLength": 1008, + "byteStride": 12, + "name": "bufferViewFloatVec3" + }, + { + "buffer": 0, + "byteOffset": 1092, + "byteLength": 672, + "byteStride": 16, + "name": "bufferViewFloatVec4" + }, + { + "buffer": 0, + "byteOffset": 1764, + "byteLength": 336, + "byteStride": 8, + "name": "bufferViewFloatVec2" + } + ], + "buffers": [{ "uri": "BoxAndPlane.bin", "byteLength": 2100 }], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorFactor": [0.5, 0.5, 0.5, 1.0], + "metallicFactor": 0.0, + "roughnessFactor": 0.450053632 + }, + "name": "TopWallMat" + }, + { + "pbrMetallicRoughness": { + "baseColorTexture": { "index": 0 }, + "metallicFactor": 0.0, + "roughnessFactor": 0.450053632 + }, + "name": "lambert1" + } + ], + "textures": [{ "sampler": 0, "source": 0, "name": "chillguy.jpg" }], + "images": [{ "uri": "chillguy.jpg" }], + "samplers": [{ "magFilter": 9729, "minFilter": 9987 }] +} diff --git a/ModelViewer/Models/BoxAndPlane/chillguy.dds b/ModelViewer/Models/BoxAndPlane/chillguy.dds new file mode 100644 index 000000000..624310830 Binary files /dev/null and b/ModelViewer/Models/BoxAndPlane/chillguy.dds differ diff --git a/ModelViewer/Models/BoxAndPlane/chillguy.jpg b/ModelViewer/Models/BoxAndPlane/chillguy.jpg new file mode 100644 index 000000000..aeb590328 Binary files /dev/null and b/ModelViewer/Models/BoxAndPlane/chillguy.jpg differ diff --git a/ModelViewer/Models/CornellWithSonic/CornellWithSonic.bin b/ModelViewer/Models/CornellWithSonic/CornellWithSonic.bin new file mode 100644 index 000000000..a92817139 Binary files /dev/null and b/ModelViewer/Models/CornellWithSonic/CornellWithSonic.bin differ diff --git a/ModelViewer/Models/CornellWithSonic/CornellWithSonic.gltf b/ModelViewer/Models/CornellWithSonic/CornellWithSonic.gltf new file mode 100644 index 000000000..0072a9eef --- /dev/null +++ b/ModelViewer/Models/CornellWithSonic/CornellWithSonic.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"babylon.js glTF exporter for Autodesk MAYA 2022.5 v20240312.5"},"extensionsUsed":["KHR_lights_punctual"],"scene":0,"scenes":[{"nodes":[0]}],"nodes":[{"children":[1,2,3,4,5,6,32],"scale":[100.0,100.0,100.0],"name":"root"},{"mesh":0,"name":"BackWall"},{"mesh":1,"name":"LeftWall"},{"mesh":2,"name":"RightWall"},{"mesh":3,"name":"TopWall"},{"mesh":4,"name":"BotWall"},{"children":[7,16,18,21,24,28],"translation":[-0.00533998525,0.0,0.0652139559],"rotation":[0.0,-0.2892676,0.0,0.9572483],"name":"Sonic"},{"children":[8,11,14,15],"mesh":5,"name":"HeadMain","extras":{"currentUVSet":"map1"}},{"children":[9,10],"mesh":6,"name":"Sclera","extras":{"currentUVSet":"map1"}},{"mesh":7,"name":"LeftEye","extras":{"currentUVSet":"map1"}},{"mesh":8,"name":"RightEye","extras":{"currentUVSet":"map1"}},{"children":[12,13],"mesh":9,"name":"Jaw","extras":{"currentUVSet":"map1"}},{"mesh":10,"name":"Nose","extras":{"currentUVSet":"map1"}},{"mesh":11,"name":"Mouth","extras":{"currentUVSet":"map1"}},{"mesh":12,"name":"LeftEarInner","extras":{"currentUVSet":"map1"}},{"mesh":13,"name":"RightEarInner","extras":{"currentUVSet":"map1"}},{"children":[17],"mesh":14,"name":"BodyOuter","extras":{"currentUVSet":"map1"}},{"mesh":15,"name":"BodyInner","extras":{"currentUVSet":"map1"}},{"children":[19],"mesh":16,"name":"LeftArm","extras":{"currentUVSet":"map1"}},{"children":[20],"mesh":17,"name":"LeftHand","extras":{"currentUVSet":"map1"}},{"mesh":18,"name":"LeftHandCuff","extras":{"currentUVSet":"map1"}},{"children":[22],"mesh":19,"name":"RightArm","extras":{"currentUVSet":"map1"}},{"children":[23],"mesh":20,"name":"RightHand","extras":{"currentUVSet":"map1"}},{"mesh":21,"name":"RightHandCuff","extras":{"currentUVSet":"map1"}},{"children":[25],"mesh":22,"name":"LeftLeg","extras":{"currentUVSet":"map1"}},{"children":[26,27],"mesh":23,"name":"LeftShoe","extras":{"currentUVSet":"map1"}},{"mesh":24,"name":"LeftShoeBuckle","extras":{"currentUVSet":"map1"}},{"mesh":25,"name":"LeftShoeCuff","extras":{"currentUVSet":"map1"}},{"children":[29],"mesh":26,"name":"RightLeg","extras":{"currentUVSet":"map1"}},{"children":[30,31],"mesh":27,"name":"RightShoe","extras":{"currentUVSet":"map1"}},{"mesh":28,"name":"RightShoeCuff","extras":{"currentUVSet":"map1"}},{"mesh":29,"name":"RightShoeBuckle","extras":{"currentUVSet":"map1"}},{"translation":[-0.08926507,0.102499448,0.15865843],"rotation":[0.74758,0.5708078,0.008813295,0.339447916],"scale":[2.40313721,2.40313721,2.40313721],"name":"directionalLight1","extensions":{"KHR_lights_punctual":{"light":0}}}],"meshes":[{"primitives":[{"attributes":{"POSITION":1,"TANGENT":2,"NORMAL":3,"TEXCOORD_0":4},"indices":0,"material":0}],"name":"BackWall"},{"primitives":[{"attributes":{"POSITION":6,"TANGENT":7,"NORMAL":8,"TEXCOORD_0":9},"indices":5,"material":1}],"name":"LeftWall"},{"primitives":[{"attributes":{"POSITION":11,"TANGENT":12,"NORMAL":13,"TEXCOORD_0":14},"indices":10,"material":2}],"name":"RightWall"},{"primitives":[{"attributes":{"POSITION":16,"TANGENT":17,"NORMAL":18,"TEXCOORD_0":19},"indices":15,"material":3}],"name":"TopWall"},{"primitives":[{"attributes":{"POSITION":21,"TANGENT":22,"NORMAL":23,"TEXCOORD_0":24},"indices":20,"material":3}],"name":"BotWall"},{"primitives":[{"attributes":{"POSITION":26,"TANGENT":27,"NORMAL":28,"TEXCOORD_0":29},"indices":25,"material":4}],"name":"HeadMain"},{"primitives":[{"attributes":{"POSITION":31,"TANGENT":32,"NORMAL":33,"TEXCOORD_0":34},"indices":30,"material":4}],"name":"Sclera"},{"primitives":[{"attributes":{"POSITION":36,"TANGENT":37,"NORMAL":38,"TEXCOORD_0":39},"indices":35,"material":4}],"name":"LeftEye"},{"primitives":[{"attributes":{"POSITION":41,"TANGENT":42,"NORMAL":43,"TEXCOORD_0":44},"indices":40,"material":4}],"name":"RightEye"},{"primitives":[{"attributes":{"POSITION":46,"TANGENT":47,"NORMAL":48,"TEXCOORD_0":49},"indices":45,"material":4}],"name":"Jaw"},{"primitives":[{"attributes":{"POSITION":51,"TANGENT":52,"NORMAL":53,"TEXCOORD_0":54},"indices":50,"material":4}],"name":"Nose"},{"primitives":[{"attributes":{"POSITION":56,"TANGENT":57,"NORMAL":58,"TEXCOORD_0":59},"indices":55,"material":4}],"name":"Mouth"},{"primitives":[{"attributes":{"POSITION":61,"TANGENT":62,"NORMAL":63,"TEXCOORD_0":64},"indices":60,"material":4}],"name":"LeftEarInner"},{"primitives":[{"attributes":{"POSITION":66,"TANGENT":67,"NORMAL":68,"TEXCOORD_0":69},"indices":65,"material":4}],"name":"RightEarInner"},{"primitives":[{"attributes":{"POSITION":71,"TANGENT":72,"NORMAL":73,"TEXCOORD_0":74},"indices":70,"material":4}],"name":"BodyOuter"},{"primitives":[{"attributes":{"POSITION":76,"TANGENT":77,"NORMAL":78,"TEXCOORD_0":79},"indices":75,"material":4}],"name":"BodyInner"},{"primitives":[{"attributes":{"POSITION":81,"TANGENT":82,"NORMAL":83,"TEXCOORD_0":84},"indices":80,"material":4}],"name":"LeftArm"},{"primitives":[{"attributes":{"POSITION":86,"TANGENT":87,"NORMAL":88,"TEXCOORD_0":89},"indices":85,"material":4}],"name":"LeftHand"},{"primitives":[{"attributes":{"POSITION":91,"TANGENT":92,"NORMAL":93,"TEXCOORD_0":94},"indices":90,"material":4}],"name":"LeftHandCuff"},{"primitives":[{"attributes":{"POSITION":96,"TANGENT":97,"NORMAL":98,"TEXCOORD_0":99},"indices":95,"material":4}],"name":"RightArm"},{"primitives":[{"attributes":{"POSITION":101,"TANGENT":102,"NORMAL":103,"TEXCOORD_0":104},"indices":100,"material":4}],"name":"RightHand"},{"primitives":[{"attributes":{"POSITION":106,"TANGENT":107,"NORMAL":108,"TEXCOORD_0":109},"indices":105,"material":4}],"name":"RightHandCuff"},{"primitives":[{"attributes":{"POSITION":111,"TANGENT":112,"NORMAL":113,"TEXCOORD_0":114},"indices":110,"material":4}],"name":"LeftLeg"},{"primitives":[{"attributes":{"POSITION":116,"TANGENT":117,"NORMAL":118,"TEXCOORD_0":119},"indices":115,"material":4}],"name":"LeftShoe"},{"primitives":[{"attributes":{"POSITION":121,"TANGENT":122,"NORMAL":123,"TEXCOORD_0":124},"indices":120,"material":4}],"name":"LeftShoeBuckle"},{"primitives":[{"attributes":{"POSITION":126,"TANGENT":127,"NORMAL":128,"TEXCOORD_0":129},"indices":125,"material":4}],"name":"LeftShoeCuff"},{"primitives":[{"attributes":{"POSITION":131,"TANGENT":132,"NORMAL":133,"TEXCOORD_0":134},"indices":130,"material":4}],"name":"RightLeg"},{"primitives":[{"attributes":{"POSITION":136,"TANGENT":137,"NORMAL":138,"TEXCOORD_0":139},"indices":135,"material":4}],"name":"RightShoe"},{"primitives":[{"attributes":{"POSITION":141,"TANGENT":142,"NORMAL":143,"TEXCOORD_0":144},"indices":140,"material":4}],"name":"RightShoeCuff"},{"primitives":[{"attributes":{"POSITION":146,"TANGENT":147,"NORMAL":148,"TEXCOORD_0":149},"indices":145,"material":4}],"name":"RightShoeBuckle"}],"accessors":[{"bufferView":0,"componentType":5123,"count":6,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"componentType":5126,"count":6,"max":[0.0749999955,0.149999991,-0.0749999955],"min":[-0.0749999955,0.0,-0.0749999955],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"componentType":5126,"count":6,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":72,"componentType":5126,"count":6,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"componentType":5126,"count":6,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":12,"componentType":5123,"count":6,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":144,"componentType":5126,"count":6,"max":[-0.0749999955,0.149999991,0.0749999955],"min":[-0.0749999955,0.0,-0.0749999955],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":96,"componentType":5126,"count":6,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":216,"componentType":5126,"count":6,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":48,"componentType":5126,"count":6,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":24,"componentType":5123,"count":6,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":288,"componentType":5126,"count":6,"max":[0.0749999955,0.149999991,0.0749999955],"min":[0.0749999955,0.0,-0.0749999955],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":192,"componentType":5126,"count":6,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":360,"componentType":5126,"count":6,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":96,"componentType":5126,"count":6,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":36,"componentType":5123,"count":6,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":432,"componentType":5126,"count":6,"max":[0.0749999955,0.149999991,0.0749999955],"min":[-0.0749999955,0.149999991,-0.0749999955],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":288,"componentType":5126,"count":6,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":504,"componentType":5126,"count":6,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":144,"componentType":5126,"count":6,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":48,"componentType":5123,"count":6,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":576,"componentType":5126,"count":6,"max":[0.0749999955,0.0,0.0749999955],"min":[-0.0749999955,0.0,-0.0749999955],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":384,"componentType":5126,"count":6,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":648,"componentType":5126,"count":6,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":192,"componentType":5126,"count":6,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":60,"componentType":5123,"count":45138,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":720,"componentType":5126,"count":45138,"max":[0.0181480087,0.0977646261,0.015642073],"min":[-0.0338758938,0.0412857756,-0.0384074971],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":480,"componentType":5126,"count":45138,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":542376,"componentType":5126,"count":45138,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":240,"componentType":5126,"count":45138,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":90336,"componentType":5123,"count":6174,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1084032,"componentType":5126,"count":6174,"max":[0.0173163339,0.0814359,0.0153160654],"min":[-0.0108247763,0.0532907434,-0.01444004],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":722688,"componentType":5126,"count":6174,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1158120,"componentType":5126,"count":6174,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":361344,"componentType":5126,"count":6174,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":102684,"componentType":5123,"count":2280,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1232208,"componentType":5126,"count":2280,"max":[0.0168392,0.06465001,-0.0036399602],"min":[0.0151415868,0.05742152,-0.005761272],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":821472,"componentType":5126,"count":2280,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1259568,"componentType":5126,"count":2280,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":410736,"componentType":5126,"count":2280,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":107244,"componentType":5123,"count":2280,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1286928,"componentType":5126,"count":2280,"max":[0.0158974938,0.06571742,0.008532112],"min":[0.0144196553,0.0594538562,0.007245335],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":857952,"componentType":5126,"count":2280,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1314288,"componentType":5126,"count":2280,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":428976,"componentType":5126,"count":2280,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":111804,"componentType":5123,"count":12438,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1341648,"componentType":5126,"count":12438,"max":[0.0158171132,0.0606347658,0.0153581612],"min":[-0.0027578834,0.0495162234,-0.0110303611],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":894432,"componentType":5126,"count":12438,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1490904,"componentType":5126,"count":12438,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":447216,"componentType":5126,"count":12438,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":136680,"componentType":5123,"count":2280,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1640160,"componentType":5126,"count":2280,"max":[0.020034289,0.0599021576,0.0126749584],"min":[0.015327882,0.0573521852,0.009402541],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1093440,"componentType":5126,"count":2280,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1667520,"componentType":5126,"count":2280,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":546720,"componentType":5126,"count":2280,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":141240,"componentType":5123,"count":4728,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1694880,"componentType":5126,"count":4728,"max":[0.0133649539,0.0553497933,-0.00140750222],"min":[0.012839241,0.0528734624,-0.00618167641],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1129920,"componentType":5126,"count":4728,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1751616,"componentType":5126,"count":4728,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":564960,"componentType":5126,"count":4728,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":150696,"componentType":5123,"count":264,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1808352,"componentType":5126,"count":264,"max":[0.0169392079,0.08099652,-0.0109651573],"min":[0.013047914,0.07374899,-0.0175062064],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1205568,"componentType":5126,"count":264,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1811520,"componentType":5126,"count":264,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":602784,"componentType":5126,"count":264,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":151224,"componentType":5123,"count":264,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1814688,"componentType":5126,"count":264,"max":[0.00640795566,0.09056137,0.0121465242],"min":[0.003469126,0.08384262,0.00556595623],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1209792,"componentType":5126,"count":264,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1817856,"componentType":5126,"count":264,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":604896,"componentType":5126,"count":264,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":151752,"componentType":5123,"count":11172,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":1821024,"componentType":5126,"count":11172,"max":[0.0104781361,0.0514567755,0.0141405575],"min":[-0.0175359678,0.0292378236,-0.0184491444],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1214016,"componentType":5126,"count":11172,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":1955088,"componentType":5126,"count":11172,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":607008,"componentType":5126,"count":11172,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":174096,"componentType":5123,"count":6306,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":2089152,"componentType":5126,"count":6306,"max":[0.0112684118,0.04904826,0.0145622808],"min":[-0.004100442,0.0315666161,-0.003562343],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1392768,"componentType":5126,"count":6306,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":2164824,"componentType":5126,"count":6306,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":696384,"componentType":5126,"count":6306,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":186708,"componentType":5123,"count":6420,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":2240496,"componentType":5126,"count":6420,"max":[0.0151162455,0.04728949,-0.0009175337],"min":[0.00539232651,0.033160843,-0.0144732213],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1493664,"componentType":5126,"count":6420,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":2317536,"componentType":5126,"count":6420,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":746832,"componentType":5126,"count":6420,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":199548,"componentType":5123,"count":11970,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":2394576,"componentType":5126,"count":11970,"max":[0.0133679388,0.0374291241,-0.0032730978],"min":[-0.00203103526,0.0217258725,-0.016875755],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1596384,"componentType":5126,"count":11970,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":2538216,"componentType":5126,"count":11970,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":798192,"componentType":5126,"count":11970,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":223488,"componentType":5123,"count":3648,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":2681856,"componentType":5126,"count":3648,"max":[0.0163470153,0.04086512,-0.00445657969],"min":[0.00601403927,0.0305419844,-0.0149429394],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1787904,"componentType":5126,"count":3648,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":2725632,"componentType":5126,"count":3648,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":893952,"componentType":5126,"count":3648,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":230784,"componentType":5123,"count":6102,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":2769408,"componentType":5126,"count":6102,"max":[-0.000440184755,0.0450734049,0.0255862474],"min":[-0.006779875,0.0381691,0.008922469],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1846272,"componentType":5126,"count":6102,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":2842632,"componentType":5126,"count":6102,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":923136,"componentType":5126,"count":6102,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":242988,"componentType":5123,"count":8442,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":2915856,"componentType":5126,"count":8442,"max":[0.00537143229,0.0609589145,0.040400248],"min":[-0.0035072132,0.04052694,0.01987722],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":1943904,"componentType":5126,"count":8442,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3017160,"componentType":5126,"count":8442,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":971952,"componentType":5126,"count":8442,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":259872,"componentType":5123,"count":3672,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3118464,"componentType":5126,"count":3672,"max":[0.00274012447,0.04746691,0.02734496],"min":[-0.00702892151,0.0363314,0.0162607618],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2078976,"componentType":5126,"count":3672,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3162528,"componentType":5126,"count":3672,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1039488,"componentType":5126,"count":3672,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":267216,"componentType":5123,"count":240,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3206592,"componentType":5126,"count":240,"max":[0.00451939227,0.0379804149,0.001653521],"min":[-0.0008470464,0.009195724,-0.00788085],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2137728,"componentType":5126,"count":240,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3209472,"componentType":5126,"count":240,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1068864,"componentType":5126,"count":240,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":267696,"componentType":5123,"count":2556,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3212352,"componentType":5126,"count":2556,"max":[0.0188949388,0.0133389616,0.000200290669],"min":[-0.00493688462,-4.973173E-05,-0.0270938482],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2141568,"componentType":5126,"count":2556,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3243024,"componentType":5126,"count":2556,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1070784,"componentType":5126,"count":2556,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":272808,"componentType":5123,"count":96,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3273696,"componentType":5126,"count":96,"max":[0.008456698,0.009331672,-0.0175197273],"min":[0.0009614405,0.00224480382,-0.0240771249],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2182464,"componentType":5126,"count":96,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3274848,"componentType":5126,"count":96,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1091232,"componentType":5126,"count":96,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":273000,"componentType":5123,"count":840,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3276000,"componentType":5126,"count":840,"max":[0.0104212007,0.0204297639,0.000394555333],"min":[-0.00424251566,0.0107867848,-0.01292294],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2184000,"componentType":5126,"count":840,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3286080,"componentType":5126,"count":840,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1092000,"componentType":5126,"count":840,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":274680,"componentType":5123,"count":240,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3296160,"componentType":5126,"count":240,"max":[4.43685058E-05,0.0378917865,0.0118813347],"min":[-0.00550117856,0.009284356,0.00143893238],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2197440,"componentType":5126,"count":240,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3299040,"componentType":5126,"count":240,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1098720,"componentType":5126,"count":240,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":275160,"componentType":5123,"count":2556,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3301920,"componentType":5126,"count":2556,"max":[0.008169509,0.0133284424,0.0247662067],"min":[-0.01363501,7.513523E-05,-0.004212246],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2201280,"componentType":5126,"count":2556,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3332592,"componentType":5126,"count":2556,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1100640,"componentType":5126,"count":2556,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":280272,"componentType":5123,"count":840,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3363264,"componentType":5126,"count":840,"max":[0.00315780984,0.01986164,0.0134147927],"min":[-0.0111251622,0.0104225259,-0.00184081728],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2242176,"componentType":5126,"count":840,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3373344,"componentType":5126,"count":840,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1121088,"componentType":5126,"count":840,"type":"VEC2","name":"accessorUVs"},{"bufferView":0,"byteOffset":281952,"componentType":5123,"count":96,"type":"SCALAR","name":"accessorIndices"},{"bufferView":1,"byteOffset":3383424,"componentType":5126,"count":96,"max":[-0.002529322,0.009460537,0.0206789635],"min":[-0.009017279,0.00277957437,0.01383169],"type":"VEC3","name":"accessorPositions"},{"bufferView":2,"byteOffset":2255616,"componentType":5126,"count":96,"type":"VEC4","name":"accessorTangents"},{"bufferView":1,"byteOffset":3384576,"componentType":5126,"count":96,"type":"VEC3","name":"accessorNormals"},{"bufferView":3,"byteOffset":1127808,"componentType":5126,"count":96,"type":"VEC2","name":"accessorUVs"}],"bufferViews":[{"buffer":0,"byteLength":282144,"name":"bufferViewScalar"},{"buffer":0,"byteOffset":282144,"byteLength":3385728,"byteStride":12,"name":"bufferViewFloatVec3"},{"buffer":0,"byteOffset":3667872,"byteLength":2257152,"byteStride":16,"name":"bufferViewFloatVec4"},{"buffer":0,"byteOffset":5925024,"byteLength":1128576,"byteStride":8,"name":"bufferViewFloatVec2"}],"buffers":[{"uri":"CornellWithSonic.bin","byteLength":7053600}],"materials":[{"pbrMetallicRoughness":{"baseColorFactor":[0.5,0.5,0.5,1.0],"metallicFactor":0.0,"roughnessFactor":0.450053632},"name":"BackWallMat"},{"pbrMetallicRoughness":{"baseColorFactor":[0.7339,0.0836,0.0836,1.0],"metallicFactor":0.0,"roughnessFactor":0.450053632},"name":"LeftWallMat"},{"pbrMetallicRoughness":{"baseColorFactor":[0.2173,0.5386,0.15,1.0],"metallicFactor":0.0,"roughnessFactor":0.450053632},"name":"RightWallMat"},{"pbrMetallicRoughness":{"baseColorFactor":[0.5,0.5,0.5,1.0],"metallicFactor":0.0,"roughnessFactor":0.450053632},"name":"TopWallMat"},{"pbrMetallicRoughness":{"baseColorFactor":[0.5,0.5,0.5,1.0],"metallicFactor":0.0,"roughnessFactor":0.450053632},"name":"lambert30"}],"extensions":{"KHR_lights_punctual":{"lights":[{"color":[0.0,0.2829,1.0],"intensity":4.67561531,"type":"directional"}]}}} \ No newline at end of file