Browse Source

add windmill2

Gregg Tavares 6 years ago
parent
commit
7bfff0f8ac
30 changed files with 16673 additions and 0 deletions
  1. 2 0
      .gitattirbutes
  2. BIN
      threejs/lessons/resources/images/blender-export-obj-write-nurbs.jpg
  3. BIN
      threejs/lessons/resources/images/car-curves-after.png
  4. BIN
      threejs/lessons/resources/images/car-curves-before.png
  5. BIN
      threejs/lessons/resources/images/car-curves-too-small.png
  6. BIN
      threejs/lessons/resources/images/cars-scale-0.01.png
  7. BIN
      threejs/lessons/resources/images/cartoon_lowpoly_small_city_free_pack.jpg
  8. BIN
      threejs/lessons/resources/images/making-path-for-cars.jpg
  9. 955 0
      threejs/lessons/threejs-load-gltf.md
  10. 1 0
      threejs/lessons/toc.html
  11. 8 0
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/license.md
  12. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/scene.bin
  13. 13650 0
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf
  14. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.11_baseColor.jpeg
  15. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.15_baseColor.jpeg
  16. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.16_baseColor.jpeg
  17. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.17_baseColor.jpeg
  18. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.19_baseColor.jpeg
  19. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.8_baseColor.jpeg
  20. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.9_baseColor.jpeg
  21. BIN
      threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap_baseColor.jpeg
  22. 271 0
      threejs/threejs-load-gltf-animated-cars.html
  23. 246 0
      threejs/threejs-load-gltf-car-path-fixed.html
  24. 243 0
      threejs/threejs-load-gltf-car-path.html
  25. 190 0
      threejs/threejs-load-gltf-dump-scenegraph-extra.html
  26. 180 0
      threejs/threejs-load-gltf-dump-scenegraph.html
  27. 191 0
      threejs/threejs-load-gltf-rotate-cars-fixed.html
  28. 175 0
      threejs/threejs-load-gltf-rotate-cars.html
  29. 395 0
      threejs/threejs-load-gltf-shadows.html
  30. 166 0
      threejs/threejs-load-gltf.html

+ 2 - 0
.gitattirbutes

@@ -0,0 +1,2 @@
+.jpeg binary
+

BIN
threejs/lessons/resources/images/blender-export-obj-write-nurbs.jpg


BIN
threejs/lessons/resources/images/car-curves-after.png


BIN
threejs/lessons/resources/images/car-curves-before.png


BIN
threejs/lessons/resources/images/car-curves-too-small.png


BIN
threejs/lessons/resources/images/cars-scale-0.01.png


BIN
threejs/lessons/resources/images/cartoon_lowpoly_small_city_free_pack.jpg


BIN
threejs/lessons/resources/images/making-path-for-cars.jpg


+ 955 - 0
threejs/lessons/threejs-load-gltf.md

@@ -0,0 +1,955 @@
+Title: Three.js Loading a .GLTF File
+Description: Loading a .GLTF File
+
+In a previous lesson we [loaded an .OBJ file](threejs-load-obj.html). If
+you haven't read it you might want to check it out first.
+
+As pointed out over there the .OBJ file format is very old and fairly
+simple. It provides no scene graph so everything loaded is one large
+mesh. It was designed mostly as a simple way to pass data between
+3D editors.
+
+[The gLTF format](https://github.com/KhronosGroup/glTF) is actually
+a format designed from the ground up for be used for displaying
+graphics. 3D formats can be divided into 3 or 4 basic types.
+
+* 3D Editor Formats
+
+  This are formats specific to a single app. .blend (Blender), .max (3d Studio Max),
+  .mb and .ma (Maya), etc...
+
+* Exchange formats
+
+  These are formats like .OBJ, .DAE (Collada), .FBX. They are designed to help exchange
+  information between 3D editors. As such they are usually much larger than needed with
+  extra info used only inside 3d editors
+
+* App formats
+
+  These are usually specific to certain apps, usually games.
+
+* Transmission formats
+
+  gLTF might be the first truely transmission format. I suppose VRML might be considered
+  one but VRML was actually a pretty poor format.
+
+  gLTF is designed to do 3 things well that all those other formats don't do
+
+  1. Be small for transmission
+
+     For example this means much of their large data, like vertices, is stored in
+     binary. When you download a .gLTF file that data can be uploaded to the GPU
+     with zero processing. It's ready as is. This is in contrast to say VRML, .OBJ,
+     or .DAE where vertices are stored as text and have to be parsed.
+
+  2. Be ready to render
+
+     This again is different from other formats except maybe App formats. The data
+     in a glTF file is mean to be rendered, not edited. Data that's not important to
+     rendering has generally been removed. Polygons have been convered to triangles.
+     Materials have known values that are supposed to work everywhere.
+
+gLTF was specifically designed so you should be able to download a glTF file and
+display it with a minimum of trouble. Let's cross our fingers that's truely the case
+as none of the other formats have been able to do this.
+
+I wasn't really sure what I should show. At some level loading and displaying a gLTF file
+is simpler than an .OBJ file. Unlike a .OBJ file materials are directly part of the format.
+That said I thought I should at least load one up and I think going over the issues I ran 
+into might provide some good info.
+
+Searching the net I found [this low-poly city](https://sketchfab.com/models/edd1c604e1e045a0a2a552ddd9a293e6)
+by [antonmoek](https://sketchfab.com/antonmoek) which seemed like if we're lucky
+might make a good example.
+
+<div class="threejs_center"><img src="resources/images/cartoon_lowpoly_small_city_free_pack.jpg"></div>
+
+Starting with [an example from the .OBJ article](threejs-load-obj.html) I removed the code
+for loading .OBJ and replaced it with code for loading .GLTF
+
+The old .OBJ code was
+
+```
+const objLoader = new THREE.OBJLoader2();
+objLoader.loadMtl('resources/models/windmill/windmill-fixed.mtl', null, (materials) => {
+  materials.Material.side = THREE.DoubleSide;
+  objLoader.setMaterials(materials);
+  objLoader.load('resources/models/windmill/windmill.obj', (event) => {
+    const root = event.detail.loaderRootNode;
+    scene.add(root);
+    ...
+  });
+});
+```
+
+The new .GLTF code is
+
+```
+{
+  const gltfLoader = new THREE.GLTFLoader();
+  const url = 'resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf';
+  gltfLoader.load(url, (gltf) => {
+    const root = gltf.scene;
+    scene.add(root);
+    ...
+  });
+```
+
+I kept the auto framing code as before
+
+We also need to include the `GLTFLoader` and we can get rid of the `OBJLoader2`.
+
+```
+-<script src="resources/threejs/r98/js/loaders/LoaderSupport.js"></script>
+-<script src="resources/threejs/r98/js/loaders/OBJLoader2.js"></script>
+-<script src="resources/threejs/r98/js/loaders/MTLLoader.js"></script>
++<script src="resources/threejs/r98/js/loaders/GLTFLoader.js"></script>
+```
+
+And running that we get
+
+{{{example url="../threejs-load-gltf.html" }}}
+
+Magic! It just works, textures and all.
+
+Next I wanted to see if I could animate the cars driving around so
+I needed to check if the scene had the cars as separate entities
+and if they were setup in a way I could use them.
+
+I wrote some code to dump put the scenegraph to the JavaScript
+console.
+
+Here's the code to print out the scenegraph.
+
+```
+function dumpObject(obj, lines = [], isLast = true, prefix = '') {
+  const localPrefix = isLast ? '└─' : '├─';
+  lines.push(`${prefix}${prefix ? localPrefix : ''}${obj.name || '*no-name*'} [${obj.type}]`);
+  const newPrefix = prefix + (isLast ? '  ' : '│ ');
+  const lastNdx = obj.children.length - 1;
+  obj.children.forEach((child, ndx) => {
+    const isLast = ndx === lastNdx;
+    dumpObject(child, lines, isLast, newPrefix);
+  });
+  return lines;
+}
+```
+
+And I just called it right after loading the scene.
+
+```
+const gltfLoader = new THREE.GLTFLoader();
+gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+  const root = gltf.scene;
+  scene.add(root);
+  console.log(dumpObject(root).join('\n'));
+```
+
+[Running that](.../threejs-load-gltf-dump-scenegraph.html) I got this listing
+
+```
+OSG_Scene [Scene]
+  └─RootNode_(gltf_orientation_matrix) [Object3D]
+    └─RootNode_(model_correction_matrix) [Object3D]
+      └─4d4100bcb1c640e69699a87140df79d7fbx [Object3D]
+        └─RootNode [Object3D]
+          ├─Camera_3 [Object3D]
+          │ └─*no-name* [Object3D]
+          ├─Physical_Sky_1 [Object3D]
+          │ ├─Sky_Null [Object3D]
+          │ │ ├─Sun [Object3D]
+          │ │ │ ├─Lensflare_Source [Object3D]
+          │ │ │ │ └─*no-name* [Object3D]
+          │ │ │ │   └─*no-name* [Object3D]
+          │ │ │ └─Sun_light [Object3D]
+          │ │ │   └─*no-name* [Object3D]
+          │ │ │     └─*no-name* [Object3D]
+          │ │ └─Moon [Object3D]
+          │ │   └─Moon_Light [Object3D]
+          │ │     └─*no-name* [Object3D]
+          │ │       └─*no-name* [Object3D]
+          │ └─Sky_Dome [Object3D]
+          │   └─*no-name* [Object3D]
+          │     └─*no-name* [Object3D]
+          ├─Cars [Object3D]
+          │ ├─CAR_03_1 [Object3D]
+          │ │ └─CAR_03_1_World_ap_0 [Mesh]
+          │ ├─CAR_03 [Object3D]
+          │ │ └─CAR_03_World_ap_0 [Mesh]
+          │ ├─Car_04 [Object3D]
+          │ │ └─Car_04_World_ap_0 [Mesh]
+          │ ├─CAR_03_2 [Object3D]
+          │ │ └─CAR_03_2_World_ap_0 [Mesh]
+          │ ├─Car_04_1 [Object3D]
+          │ │ └─Car_04_1_World_ap_0 [Mesh]
+          │ ├─Car_04_2 [Object3D]
+          │ │ └─Car_04_2_World_ap_0 [Mesh]
+          │ ├─Car_04_3 [Object3D]
+          │ │ └─Car_04_3_World_ap_0 [Mesh]
+          │ ├─Car_04_4 [Object3D]
+          │ │ └─Car_04_4_World_ap_0 [Mesh]
+          │ ├─Car_08_4 [Object3D]
+          │ │ └─Car_08_4_World_ap8_0 [Mesh]
+          │ ├─Car_08_3 [Object3D]
+          │ │ └─Car_08_3_World_ap9_0 [Mesh]
+          │ ├─Car_04_1_2 [Object3D]
+          │ │ └─Car_04_1_2_World_ap_0 [Mesh]
+          │ ├─Car_08_2 [Object3D]
+          │ │ └─Car_08_2_World_ap11_0 [Mesh]
+          │ ├─CAR_03_1_2 [Object3D]
+          │ │ └─CAR_03_1_2_World_ap_0 [Mesh]
+          │ ├─CAR_03_2_2 [Object3D]
+          │ │ └─CAR_03_2_2_World_ap_0 [Mesh]
+          │ ├─Car_04_2_2 [Object3D]
+          │ │ └─Car_04_2_2_World_ap_0 [Mesh]
+          │ ├─Car_08_1 [Object3D]
+          │ │ └─Car_08_1_World_ap15_0 [Mesh]
+          │ ├─Car_08 [Object3D]
+          │ │ └─Car_08_World_ap16_0 [Mesh]
+          │ ├─Car_08_5 [Object3D]
+          │ │ └─Car_08_5_World_ap17_0 [Mesh]
+          │ ├─CAR_03_2_3 [Object3D]
+          │ │ └─CAR_03_2_3_World_ap_0 [Mesh]
+          │ ├─Car_08_6 [Object3D]
+          │ │ └─Car_08_6_World_ap19_0 [Mesh]
+          │ └─CAR_03_3 [Object3D]
+          │   └─CAR_03_3_World_ap_0 [Mesh]
+          ├─Block_2 [Object3D]
+          │ ├─Lights [Object3D]
+          │ │ ├─traffic_light [Object3D]
+          │ │ │ └─traffic_light_World_ap_0 [Mesh]
+          │ │ ├─Light_3 [Object3D]
+          │ │ │ └─Light_3_World_ap_0 [Mesh]
+          │ │ ├─Light_2 [Object3D]
+          │ │ │ └─Light_2_World_ap_0 [Mesh]
+          │ │ ├─Light_1 [Object3D]
+          │ │ │ └─Light_1_World_ap_0 [Mesh]
+          │ │ ├─Light [Object3D]
+          │ │ │ └─Light_World_ap_0 [Mesh]
+          │ │ ├─traffic_light_1 [Object3D]
+          │ │ │ └─traffic_light_1_World_ap_0 [Mesh]
+          │ │ └─traffic_light_2 [Object3D]
+          │ │   └─traffic_light_2_World_ap_0 [Mesh]
+          │ ├─Base_1 [Object3D]
+          │ │ ├─Floor_4 [Object3D]
+          │ │ │ └─Floor_4_World_ap_0 [Mesh]
+          │ │ └─Floor [Object3D]
+          │ │   └─Floor_World_ap_0 [Mesh]
+          │ ├─Bushes [Object3D]
+          │ │ ├─Bed [Object3D]
+          │ │ │ └─Bed_World_ap_0 [Mesh]
+          │ │ └─Bushes_3 [Object3D]
+          │ │   └─Bushes_3_World_ap_0 [Mesh]
+          │ ├─Bushes_1 [Object3D]
+          │ │ ├─Bed_2 [Object3D]
+          │ │ │ └─Bed_2_World_ap_0 [Mesh]
+          │ │ └─Bushes_3_2 [Object3D]
+          │ │   └─Bushes_3_2_World_ap_0 [Mesh]
+          │ └─House [Object3D]
+          │   └─House_World_ap_0 [Mesh]
+          ├─Block_4 [Object3D]
+          │ ├─Bench_1 [Object3D]
+          │ │ └─Bench_1_World_ap_0 [Mesh]
+          │ ├─House_2 [Object3D]
+          │ │ └─House_2_World_ap_0 [Mesh]
+          │ ├─Lights_2 [Object3D]
+          │ │ ├─Light_3_2 [Object3D]
+          │ │ │ └─Light_3_2_World_ap_0 [Mesh]
+          │ │ ├─Light_2_2 [Object3D]
+          │ │ │ └─Light_2_2_World_ap_0 [Mesh]
+          │ │ ├─Light_1_2 [Object3D]
+          │ │ │ └─Light_1_2_World_ap_0 [Mesh]
+          │ │ └─Light_2_3 [Object3D]
+          │ │   └─Light_2_3_World_ap_0 [Mesh]
+          │ ├─Base [Object3D]
+          │ │ ├─Floor_4_2 [Object3D]
+          │ │ │ └─Floor_4_2_World_ap_0 [Mesh]
+          │ │ └─Floor_2 [Object3D]
+          │ │   └─Floor_2_World_ap_0 [Mesh]
+          │ ├─Trees [Object3D]
+          │ │ ├─Firtree_47 [Object3D]
+          │ │ │ └─Firtree_47_World_ap_0 [Mesh]
+          │ │ ├─Firtree_3 [Object3D]
+          │ │ │ └─Firtree_3_World_ap_0 [Mesh]
+          │ │ ├─Firtree_2 [Object3D]
+          │ │ │ └─Firtree_2_World_ap_0 [Mesh]
+          │ │ ├─Firtree_1 [Object3D]
+          │ │ │ └─Firtree_1_World_ap_0 [Mesh]
+          │ │ ├─Firtree [Object3D]
+          │ │ │ └─Firtree_World_ap_0 [Mesh]
+          │ │ ├─Cube_7 [Object3D]
+          │ │ │ └─Cube_7_World_ap_0 [Mesh]
+          │ │ └─Firtree_4 [Object3D]
+          │ │   └─Firtree_4_World_ap_0 [Mesh]
+          │ └─Bench [Object3D]
+          │   └─Bench_World_ap_0 [Mesh]
+          ├─Block_1 [Object3D]
+          │ ├─Muff_1 [Object3D]
+          │ │ └─Muff_1_World_ap_0 [Mesh]
+          │ ├─Muff [Object3D]
+          │ │ └─Muff_World_ap_0 [Mesh]
+          │ ├─Lights_3 [Object3D]
+          │ │ ├─Light_3_3 [Object3D]
+          │ │ │ └─Light_3_3_World_ap_0 [Mesh]
+          │ │ ├─Light_2_4 [Object3D]
+          │ │ │ └─Light_2_4_World_ap_0 [Mesh]
+          │ │ ├─Light_1_3 [Object3D]
+          │ │ │ └─Light_1_3_World_ap_0 [Mesh]
+          │ │ ├─Light_3_4 [Object3D]
+          │ │ │ └─Light_3_4_World_ap_0 [Mesh]
+          │ │ ├─Light_4 [Object3D]
+          │ │ │ └─Light_4_World_ap_0 [Mesh]
+          │ │ └─Light_5 [Object3D]
+          │ │   └─Light_5_World_ap_0 [Mesh]
+          │ ├─Base_2 [Object3D]
+          │ │ ├─Floor_4_3 [Object3D]
+          │ │ │ └─Floor_4_3_World_ap_0 [Mesh]
+          │ │ └─Floor_3 [Object3D]
+          │ │   └─Floor_3_World_ap_0 [Mesh]
+          │ ├─Trees_2 [Object3D]
+          │ │ ├─Firtree_47_2 [Object3D]
+          │ │ │ └─Firtree_47_2_World_ap_0 [Mesh]
+          │ │ ├─Firtree_3_2 [Object3D]
+          │ │ │ └─Firtree_3_2_World_ap_0 [Mesh]
+          │ │ ├─Firtree_2_2 [Object3D]
+          │ │ │ └─Firtree_2_2_World_ap_0 [Mesh]
+          │ │ ├─Firtree_1_2 [Object3D]
+          │ │ │ └─Firtree_1_2_World_ap_0 [Mesh]
+          │ │ ├─Firtree_2_3 [Object3D]
+          │ │ │ └─Firtree_2_3_World_ap_0 [Mesh]
+          │ │ ├─Cube_7_2 [Object3D]
+          │ │ │ └─Cube_7_2_World_ap_0 [Mesh]
+          │ │ └─Firtree_4_2 [Object3D]
+          │ │   └─Firtree_4_2_World_ap_0 [Mesh]
+          │ ├─Bench_2 [Object3D]
+          │ │ └─Bench_2_World_ap_0 [Mesh]
+          │ ├─Behch [Object3D]
+          │ │ └─Behch_World_ap_0 [Mesh]
+          │ └─House_3 [Object3D]
+          │   └─House_3_World_ap_0 [Mesh]
+          ├─Block_3 [Object3D]
+          │ ├─Shop [Object3D]
+          │ │ └─Shop_World_ap_0 [Mesh]
+          │ ├─Trash [Object3D]
+          │ │ └─Trash_World_ap_0 [Mesh]
+          │ ├─Trash_2 [Object3D]
+          │ │ └─Trash_2_World_ap_0 [Mesh]
+          │ ├─Lights_4 [Object3D]
+          │ │ ├─Light_3_5 [Object3D]
+          │ │ │ └─Light_3_5_World_ap_0 [Mesh]
+          │ │ ├─Light_2_5 [Object3D]
+          │ │ │ └─Light_2_5_World_ap_0 [Mesh]
+          │ │ └─Light_4_2 [Object3D]
+          │ │   └─Light_4_2_World_ap_0 [Mesh]
+          │ ├─Base_3 [Object3D]
+          │ │ ├─Floor_4_4 [Object3D]
+          │ │ │ └─Floor_4_4_World_ap_0 [Mesh]
+          │ │ └─Floor_4_5 [Object3D]
+          │ │   └─Floor_4_5_World_ap_0 [Mesh]
+          │ ├─Bushes_1_2 [Object3D]
+          │ │ ├─Bed_3 [Object3D]
+          │ │ │ └─Bed_3_World_ap_0 [Mesh]
+          │ │ ├─Bushes_15 [Object3D]
+          │ │ │ └─Bushes_15_World_ap_0 [Mesh]
+          │ │ ├─Bushes_2 [Object3D]
+          │ │ │ └─Bushes_2_World_ap_0 [Mesh]
+          │ │ ├─Bushes_2_2 [Object3D]
+          │ │ │ └─Bushes_2_2_World_ap_0 [Mesh]
+          │ │ ├─Tree_1 [Object3D]
+          │ │ │ └─Tree_1_World_ap_0 [Mesh]
+          │ │ ├─Tree_2 [Object3D]
+          │ │ │ └─Tree_2_World_ap_0 [Mesh]
+          │ │ └─Tree_3 [Object3D]
+          │ │   └─Tree_3_World_ap_0 [Mesh]
+          │ └─Bushes_3_3 [Object3D]
+          │   ├─Bed_4 [Object3D]
+          │   │ └─Bed_4_World_ap_0 [Mesh]
+          │   ├─Bushes_15_2 [Object3D]
+          │   │ └─Bushes_15_2_World_ap_0 [Mesh]
+          │   ├─Bushes_2_3 [Object3D]
+          │   │ └─Bushes_2_3_World_ap_0 [Mesh]
+          │   ├─Bushes_4 [Object3D]
+          │   │ └─Bushes_4_World_ap_0 [Mesh]
+          │   ├─Tree_1_2 [Object3D]
+          │   │ └─Tree_1_2_World_ap_0 [Mesh]
+          │   ├─Tree_2_2 [Object3D]
+          │   │ └─Tree_2_2_World_ap_0 [Mesh]
+          │   └─Tree_3_2 [Object3D]
+          │     └─Tree_3_2_World_ap_0 [Mesh]
+          ├─ROAD [Object3D]
+          │ ├─ROAD_World_ap_0 [Mesh]
+          │ ├─traffic_light_2_2 [Object3D]
+          │ │ └─traffic_light_2_2_World_ap_0 [Mesh]
+          │ ├─traffic_light_1_2 [Object3D]
+          │ │ └─traffic_light_1_2_World_ap_0 [Mesh]
+          │ ├─traffic_light_2_3 [Object3D]
+          │ │ └─traffic_light_2_3_World_ap_0 [Mesh]
+          │ └─ROAD_Lines_12 [Object3D]
+          │   └─ROAD_Lines_12_World_ap_0 [Mesh]
+          └─Floor_5 [Object3D]
+            └─Floor_6 [Object3D]
+              └─Floor_6_World_ap_0 [Mesh]
+```
+
+From that we can see all the cars happen to be under parent
+called `"Cars"`
+
+```
+*          ├─Cars [Object3D]
+          │ ├─CAR_03_1 [Object3D]
+          │ │ └─CAR_03_1_World_ap_0 [Mesh]
+          │ ├─CAR_03 [Object3D]
+          │ │ └─CAR_03_World_ap_0 [Mesh]
+          │ ├─Car_04 [Object3D]
+          │ │ └─Car_04_World_ap_0 [Mesh]
+```
+
+So as a simple test I thought I would just try rotating
+all the children of the "Cars" node around their Y axis
+
+I looked up the "Cars" node after loading the scene
+and saved the result.
+
+```
++let cars;
+{
+  const gltfLoader = new THREE.GLTFLoader();
+  gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+    const root = gltf.scene;
+    scene.add(root);
++    cars = root.getObjectByName('Cars');
+```
+
+Then in the `render` function we can just set the rotation
+of each child of `cars`
+
+```
++function render(time) {
++  time *= 0.001;  // convert to seconds
+
+  if (resizeRendererToDisplaySize(renderer)) {
+    const canvas = renderer.domElement;
+    camera.aspect = canvas.clientWidth / canvas.clientHeight;
+    camera.updateProjectionMatrix();
+  }
+
++  if (cars) {
++    for (const car of cars.children) {
++      car.rotation.y = time;
++    }
++  }
+
+  renderer.render(scene, camera);
+
+  requestAnimationFrame(render);
+}
+```
+
+And we get
+
+{{{example url="../threejs-load-gltf-rotate-cars.html" }}}
+
+Hmmm, it looks like unfortunately this scene wasn't designed to
+animate the cars as their origins are not setup for that purpose. The trucks are rotating in the wrong direction.
+
+This brings up an important point which is if you're going to
+do something in 3D you need to plan ahead and design your assets
+so they have their origins in the correct places, so they are
+the correct scale, etc.
+
+Since I'm not an artist and I don't know blender that well I
+will hack this example. We'll take each car and parent it to
+another `Object3D`. We will then move those `Object3D` objects
+to move the cars but separately we can set the car's `Object3D`
+to re-orient it so it's about where we really need it.
+
+Looking back at the scene graph listing it looks like there
+are really only 3 types of cars, "Car_08", "CAR_03", and "Car_04".
+Each type of car will work with the same adjustments.
+
+I wrote this code to go through each car, parent it to a new `Object3D`, parent that new `Object3D` to the scene, and apply some per car *type* settings to fix its orientation, and add
+the new `Object3D` a `cars` array.
+
+```
+-let cars;
++const cars = [];
+{
+  const gltfLoader = new THREE.GLTFLoader();
+  gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+    const root = gltf.scene;
+    scene.add(root);
+
+-    cars = root.getObjectByName('Cars');
++    const loadedCars = root.getObjectByName('Cars');
++    const fixes = [
++      { prefix: 'Car_08', rot: [Math.PI * .5, 0, Math.PI +* .5], },
++      { prefix: 'CAR_03', rot: [0, Math.PI, 0], },
++      { prefix: 'Car_04', rot: [0, Math.PI, 0], },
++    ];
++
++     root.updateMatrixWorld();
++    for (const car of loadedCars.children.slice()) {
++      const fix = fixes.find(fix => car.name.startsWith+(fix.prefix));
++      const obj = new THREE.Object3D();
++      car.getWorldPosition(obj.position);
++      car.position.set(0, 0, 0);
++      car.rotation.set(...fix.rot);
++      obj.add(car);
++      scene.add(obj);
++      cars.push(obj);
++    }
+     ...
+```
+
+This fixes the orientation of the cars. 
+
+Now let's drive them around
+
+Making even a simple driving system is too much for this post but
+it seems instead we could just make one convoluted path that
+drives down all the roads and then put the cars on the path.
+Here's a picture from Blender about half way through building
+the path.
+
+<div class="threejs_center"><img src="resources/images/making-path-for-cars.jpg" style="width: 1094px"></div>
+
+I needed as way to get the data for that path out of Blender.
+Fortunately I was able to select just my path and export .OBJ checking "write nurbs".
+
+<div class="threejs_center"><img src="resources/images/blender-export-obj-write-nurbs.jpg" style="width: 498px"></div>
+
+Opening the .OBJ file I was able to get a list of points
+which I formated into this
+
+```
+const controlPoints = [
+  [1.118281, 5.115846, -3.681386],
+  [3.948875, 5.115846, -3.641834],
+  [3.960072, 5.115846, -0.240352],
+  [3.985447, 5.115846, 4.585005],
+  [-3.793631, 5.115846, 4.585006],
+  [-3.826839, 5.115846, -14.736200],
+  [-14.542292, 5.115846, -14.765865],
+  [-14.520929, 5.115846, -3.627002],
+  [-5.452815, 5.115846, -3.634418],
+  [-5.467251, 5.115846, 4.549161],
+  [-13.266233, 5.115846, 4.567083],
+  [-13.250067, 5.115846, -13.499271],
+  [4.081842, 5.115846, -13.435463],
+  [4.125436, 5.115846, -5.334928],
+  [-14.521364, 5.115846, -5.239871],
+  [-14.510466, 5.115846, 5.486727],
+  [5.745666, 5.115846, 5.510492],
+  [5.787942, 5.115846, -14.728308],
+  [-5.423720, 5.115846, -14.761919],
+  [-5.373599, 5.115846, -3.704133],
+  [1.004861, 5.115846, -3.641834],
+];
+```
+
+THREE.js has some curve classes. The `CatmullRomCurve3` seemed
+like it might work. The thing about that kind of curve is
+it tries to make a smooth curve going through the points.
+
+In fact putting those points in directly will generate
+a curve like this
+
+<div class="threejs_center"><img src="resources/images/car-curves-before.png" style="width: 400px"></div>
+
+but we want a sharper corners. It seemed like if we computed
+some extra points we could get what we want. For each pair
+of points we'll compute a point 10% of the way between
+the 2 points and another 90% of the way between the 2 points
+and pass the result to `CatmullRomCurve3`
+
+This will give us a curve like this
+
+<div class="threejs_center"><img src="resources/images/car-curves-after.png" style="width: 400px"></div>
+
+Here's the code to make the curve 
+
+```
+let curve;
+let curveObject;
+{
+  const controlPoints = [
+    [1.118281, 5.115846, -3.681386],
+    [3.948875, 5.115846, -3.641834],
+    [3.960072, 5.115846, -0.240352],
+    [3.985447, 5.115846, 4.585005],
+    [-3.793631, 5.115846, 4.585006],
+    [-3.826839, 5.115846, -14.736200],
+    [-14.542292, 5.115846, -14.765865],
+    [-14.520929, 5.115846, -3.627002],
+    [-5.452815, 5.115846, -3.634418],
+    [-5.467251, 5.115846, 4.549161],
+    [-13.266233, 5.115846, 4.567083],
+    [-13.250067, 5.115846, -13.499271],
+    [4.081842, 5.115846, -13.435463],
+    [4.125436, 5.115846, -5.334928],
+    [-14.521364, 5.115846, -5.239871],
+    [-14.510466, 5.115846, 5.486727],
+    [5.745666, 5.115846, 5.510492],
+    [5.787942, 5.115846, -14.728308],
+    [-5.423720, 5.115846, -14.761919],
+    [-5.373599, 5.115846, -3.704133],
+    [1.004861, 5.115846, -3.641834],
+  ];
+  const p0 = new THREE.Vector3();
+  const p1 = new THREE.Vector3();
+  curve = new THREE.CatmullRomCurve3(
+    controlPoints.map((p, ndx) => {
+      p0.set(...p);
+      p1.set(...controlPoints[(ndx + 1) % controlPoints.length]);
+      return [
+        (new THREE.Vector3()).copy(p0),
+        (new THREE.Vector3()).lerpVectors(p0, p1, 0.1),
+        (new THREE.Vector3()).lerpVectors(p0, p1, 0.9),
+      ];
+    }).flat(),
+    true,
+  );
+  {
+    const points = curve.getPoints(250);
+    const geometry = new THREE.BufferGeometry().setFromPoints(points);
+    const material = new THREE.LineBasicMaterial({color: 0xff0000});
+    curveObject = new THREE.Line(geometry, material);
+    scene.add(curveObject);
+  }
+}
+```
+
+The first part of that code makes a curve.
+The second part of that code generaetes 250 points
+from the curve and then creates an object to display
+the lines made by connecting those 250 points.
+
+Running [the example](../threejs-load-gltf-car-path.html) I didn't see the curve. To make it
+visible made it ignore the depth test and render last
+
+```
+    curveObject = new THREE.Line(geometry, material);
++    material.depthTest = false;
++    curveObject.renderOrder = 1;
+```
+
+And that's when I discovered it was way too small.
+
+<div class="threejs_center"><img src="resources/images/car-curves-too-small.png" style="width: 498px"></div>
+
+Checking the heirarchy in Blender I found out that the artist had
+scaled the node all the cars are parented to.
+
+<div class="threejs_center"><img src="resources/images/cars-scale-0.01.png" style="width: 342px;"></div>
+
+Scaling is bad for real time 3D apps. It causes all kinds of
+issues and ends up being no end of frustrating when doing
+real time 3D. Artists often don't know this because it's so
+easy to scale an entire scene in a 3D editing program but if you decide to make a real time 3D app I suggest you instructor your
+artists to never scale anything. If they change the scale
+they should find a way to apply that scale to the vertices
+so that when it ends up making it your app you can ignore
+scale.
+
+And not just scale, in this case the cars are rotated and offset
+by their parent, the `Cars` node. This will make it hard at runtime
+to move the cars around in world space.
+
+Going back to the function we wrote above to dump the scene graph,
+let's dump the position, rotation, and scale of each node.
+
+```
++function dumpVec3(v3, precision = 3) {
++  return `${v3.x.toFixed(precision)}, ${v3.y.toFixed(precision)}, ${v3.z.toFixed(precision)}`;
++}
+
+function dumpObject(obj, lines, isLast = true, prefix = '') {
+  const localPrefix = isLast ? '└─' : '├─';
+  lines.push(`${prefix}${prefix ? localPrefix : ''}${obj.name || '*no-name*'} [${obj.type}]`);
++  const dataPrefix = obj.children.length
++     ? (isLast ? '  │ ' : '│ │ ')
++     : (isLast ? '    ' : '│   ');
++  lines.push(`${prefix}${dataPrefix}  pos: ${dumpVec3(obj.position)}`);
++  lines.push(`${prefix}${dataPrefix}  rot: ${dumpVec3(obj.rotation)}`);
++  lines.push(`${prefix}${dataPrefix}  scl: ${dumpVec3(obj.scale)}`);
+  const newPrefix = prefix + (isLast ? '  ' : '│ ');
+  const lastNdx = obj.children.length - 1;
+  obj.children.forEach((child, ndx) => {
+    const isLast = ndx === lastNdx;
+    dumpObject(child, lines, isLast, newPrefix);
+  });
+  return lines;
+}
+```
+
+And the result from [running it](.../threejs-load-gltf-dump-scenegraph-extra.html)
+
+```
+OSG_Scene [Scene]
+  │   pos: 0.000, 0.000, 0.000
+  │   rot: 0.000, 0.000, 0.000
+  │   scl: 1.000, 1.000, 1.000
+  └─RootNode_(gltf_orientation_matrix) [Object3D]
+    │   pos: 0.000, 0.000, 0.000
+    │   rot: -1.571, 0.000, 0.000
+    │   scl: 1.000, 1.000, 1.000
+    └─RootNode_(model_correction_matrix) [Object3D]
+      │   pos: 0.000, 0.000, 0.000
+      │   rot: 0.000, 0.000, 0.000
+      │   scl: 1.000, 1.000, 1.000
+      └─4d4100bcb1c640e69699a87140df79d7fbx [Object3D]
+        │   pos: 0.000, 0.000, 0.000
+        │   rot: 1.571, 0.000, 0.000
+        │   scl: 1.000, 1.000, 1.000
+        └─RootNode [Object3D]
+          │   pos: 0.000, 0.000, 0.000
+          │   rot: 0.000, 0.000, 0.000
+          │   scl: 1.000, 1.000, 1.000
+          ├─Cars [Object3D]
+*          │ │   pos: -369.069, -90.704, -920.159
+*          │ │   rot: 0.000, 0.000, 0.000
+*          │ │   scl: 1.000, 1.000, 1.000
+          │ ├─CAR_03_1 [Object3D]
+          │ │ │   pos: 22.131, 14.663, -475.071
+          │ │ │   rot: -3.142, 0.732, 3.142
+          │ │ │   scl: 1.500, 1.500, 1.500
+          │ │ └─CAR_03_1_World_ap_0 [Mesh]
+          │ │       pos: 0.000, 0.000, 0.000
+          │ │       rot: 0.000, 0.000, 0.000
+          │ │       scl: 1.000, 1.000, 1.000
+```
+
+This shows us that `Cars` in the original scene has had its rotation and scale removed and applied to its children. That suggests either whatever exporter was used to create the .GLTF file did some special work here
+or more likely the artist exported a different version of the file than the corresponding .blend file, which is why things don't match.
+
+The moral of that is I should have probably downloaded the .blend
+file and exported myself. Before exporting I should have inspected
+all the major nodes and removed any transformations.
+
+All these nodes at the top
+
+```
+OSG_Scene [Scene]
+  │   pos: 0.000, 0.000, 0.000
+  │   rot: 0.000, 0.000, 0.000
+  │   scl: 1.000, 1.000, 1.000
+  └─RootNode_(gltf_orientation_matrix) [Object3D]
+    │   pos: 0.000, 0.000, 0.000
+    │   rot: -1.571, 0.000, 0.000
+    │   scl: 1.000, 1.000, 1.000
+    └─RootNode_(model_correction_matrix) [Object3D]
+      │   pos: 0.000, 0.000, 0.000
+      │   rot: 0.000, 0.000, 0.000
+      │   scl: 1.000, 1.000, 1.000
+      └─4d4100bcb1c640e69699a87140df79d7fbx [Object3D]
+        │   pos: 0.000, 0.000, 0.000
+        │   rot: 1.571, 0.000, 0.000
+        │   scl: 1.000, 1.000, 1.000
+```
+
+are also a waste.
+
+Ideally the scene would consist of a single
+"root" node with no position, rotation, or scale. A runtime I could then
+pull all the children out of that root and parent them to the scene itself.
+There might be children of the root like "Cars" which would
+help me find all the cars but ideally it would also have no
+translation, rotation, or scale so I could reparent the cars
+to the scene with the minimal amount of work.
+
+In any case the quickest though maybe not the best fix is to just
+adjust the object we're using to view the curve.
+
+Here's what I ended up with.
+
+First I adjusted the position of the curve and after I found values
+that seemd to work. I then hid it.
+
+```
+{
+  const points = curve.getPoints(250);
+  const geometry = new THREE.BufferGeometry().setFromPoints(points);
+  const material = new THREE.LineBasicMaterial({color: 0xff0000});
+  curveObject = new THREE.Line(geometry, material);
++  curveObject.scale.set(100, 100, 100);
++  curveObject.position.y = -621;
++  curveObject.visible = false;
+  material.depthTest = false;
+  curveObject.renderOrder = 1;
+  scene.add(curveObject);
+}
+```
+
+Then I wrote code to move the cars along the curve. For each car we pick
+a position from 0 to 1 along the curve and compute a point in world space
+using the `curveObject` to transform the point. We then pick another point
+slightly further down the curve. We set the car's orientation using `lookAt` and put the car at the mid point between the 2 points.
+
+```
+// create 2 Vector3s we can use for path calculations
+const carPosition = new THREE.Vector3();
+const carTarget = new THREE.Vector3();
+
+function render(time) {
+  ...
+
+-  for (const car of cars) {
+-    car.rotation.y = time;
+-  }
+
++  {
++    const pathTime = time * .01;
++    const targetOffset = 0.01;
++    cars.forEach((car, ndx) => {
++      // a number between 0 and 1 to evenly space the cars
++      const u = pathTime + ndx / cars.length;
++
++      // get the first point
++      curve.getPointAt(u % 1, carPosition);
++      carPosition.applyMatrix4(curveObject.matrixWorld);
++
++      // get a second point slightly further down the curve
++      curve.getPointAt((u + targetOffset) % 1, carTarget);
++      carTarget.applyMatrix4(curveObject.matrixWorld);
++
++      // put the car at the first point (temporarily)
++      car.position.copy(carPosition);
++      // point the car the second point
++      car.lookAt(carTarget);
++
++      // put the car between the 2 points
++      car.position.lerpVectors(carPosition, carTarget, 0.5);
++    });
++  }
+```
+
+and when I ran it I found out for each type of car, their height above their origins
+are not consistently set and so I needed to offset each one
+a little.
+
+```
+const loadedCars = root.getObjectByName('Cars');
+const fixes = [
+-  { prefix: 'Car_08', rot: [Math.PI * .5, 0, Math.PI * .5], },
+-  { prefix: 'CAR_03', rot: [0, Math.PI, 0], },
+-  { prefix: 'Car_04', rot: [0, Math.PI, 0], },
++  { prefix: 'Car_08', y: 0,  rot: [Math.PI * .5, 0, Math.PI * .5], },
++  { prefix: 'CAR_03', y: 33, rot: [0, Math.PI, 0], },
++  { prefix: 'Car_04', y: 40, rot: [0, Math.PI, 0], },
+];
+
+root.updateMatrixWorld();
+for (const car of loadedCars.children.slice()) {
+  const fix = fixes.find(fix => car.name.startsWith(fix.prefix));
+  const obj = new THREE.Object3D();
+  car.getWorldPosition(obj.position);
+-  car.position.set(0, 0, 0);
++  car.position.set(0, fix.y, 0);
+  car.rotation.set(...fix.rot);
+  obj.add(car);
+  scene.add(obj);
+  cars.push(obj);
+}
+```
+
+And the result.
+
+{{{example url="../threejs-load-gltf-animated-cars.html" }}}
+
+Not bad for a few minutes work.
+
+The last thing I wanted to do is turn on shadows.
+
+To do this I grabbed all the GUI code from the `DirectionalLight` shadows
+example in [the article on shadows](threejs-shadows.html) and pasted it
+into our latest code.
+
+Then, after loading, we need to turn on shadows on all the objects.
+
+```
+{
+  const gltfLoader = new THREE.GLTFLoader();
+  gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+    const root = gltf.scene;
+    scene.add(root);
+
++    root.traverse((obj) => {
++      if (obj.castShadow !== undefined) {
++        obj.castShadow = true;
++        obj.receiveShadow = true;
++      }
++    });
+```
+
+I then spent nearly 4 hours trying to figure out why the shadow helpers
+were not working. It was because I forgot to enable shadows with
+
+```
+renderer.shadowMap.enabled = true;
+```
+
+😭
+
+I then adjusted the values until our `DirectionLight`'s shadow camera
+had a frustum that covered the entire scene. These are the settings
+I ended up with.
+
+```
+{
+  const color = 0xFFFFFF;
+  const intensity = 1;
+  const light = new THREE.DirectionalLight(color, intensity);
++  light.castShadow = true;
+*  light.position.set(-250, 800, -850);
+*  light.target.position.set(-550, 40, -450);
+
++  light.shadow.bias = -0.004;
++  light.shadow.mapSize.width = 2048;
++  light.shadow.mapSize.height = 2048;
+
+  scene.add(light);
+  scene.add(light.target);
++  const cam = light.shadow.camera;
++  cam.near = 1;
++  cam.far = 2000;
++  cam.left = -1500;
++  cam.right = 1500;
++  cam.top = 1500;
++  cam.bottom = -1500;
+...
+```
+
+and I set the background color to light blue.
+
+```
+const scene = new THREE.Scene();
+-scene.background = new THREE.Color('black');
++scene.background = new THREE.Color('#DEFEFF');
+```
+
+And ... shadows
+
+{{{example url="../threejs-load-gltf-shadows.html" }}}
+
+I hope walking through that example was useful and showed some
+good examples of working though some of the issues of loading
+a file with a scenegraph.
+
+One interesting thing is that comparing the .blend file to the .gltf
+file, the .blend file has several lights but they are not lights
+after being loaded into the scene. A .GLTF file is just a JSON
+file so you can easily look inside. It consists of several
+arrays of things and each item in an array is referenced by index
+else where. While there are extensions in the works they point
+to a problem with almost all 3d formats. **They can never cover every
+case**.
+
+There is always a need for more data. For example we manually exported
+a path for the cars to follow. Ideally that info could have been in
+the .GLTF file but to do that we'd need to write our own exporter
+and some how mark nodes for how we want them exported or use a
+naming scheme or someting along those lines to get data from
+whatever tool we're using to create the data into our app.
+
+All of that is left as an exercise to the reader.
+

+ 1 - 0
threejs/lessons/toc.html

@@ -2,6 +2,7 @@
   <li>Solutions</li>
   <li>Solutions</li>
   <ul>
   <ul>
     <li><a href="/threejs/lessons/threejs-load-obj.html">Load an .OBJ file</a></li>
     <li><a href="/threejs/lessons/threejs-load-obj.html">Load an .OBJ file</a></li>
+    <li><a href="/threejs/lessons/threejs-load-gltf.html">Load a .GLTF file</a></li>
   </ul>
   </ul>
   <li>Fundamentals</li>
   <li>Fundamentals</li>
   <ul>
   <ul>

+ 8 - 0
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/license.md

@@ -0,0 +1,8 @@
+Link
+https://sketchfab.com/models/edd1c604e1e045a0a2a552ddd9a293e6
+
+Artist: antonmoek
+https://sketchfab.com/antonmoek
+
+Licence: CC-BY 4.0
+http://creativecommons.org/licenses/by/4.0/

BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/scene.bin


+ 13650 - 0
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf

@@ -0,0 +1,13650 @@
+{
+  "accessors": [
+    {
+      "bufferView": 2,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        25.192995071411133,
+        10.835280418395996,
+        27.863927841186523
+      ],
+      "min": [
+        -18.667209625244141,
+        -29.31907844543457,
+        -72.12615966796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 21144,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.99740523099899292,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038398027420044,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.96230340003967285,
+        0.95091342926025391
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1761
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 42288,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        29.471704483032227,
+        10.83527946472168,
+        23.998146057128906
+      ],
+      "min": [
+        -14.388500213623047,
+        -29.31907844543457,
+        -75.991943359375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 63996,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 28192,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        0.93038403987884521,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038409948348999,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 14096,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        0.96230340003967285,
+        0.84032684564590454
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 8976,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1808
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 85704,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 97680,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 57136,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 28568,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.93881052732467651
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 17952,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 109656,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        29.471704483032227,
+        10.83527946472168,
+        23.998146057128906
+      ],
+      "min": [
+        -14.388500213623047,
+        -29.31907844543457,
+        -75.991943359375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 131364,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 73104,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        0.93038403987884521,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038409948348999,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 36552,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        0.96230340003967285,
+        0.84032684564590454
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 25056,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1808
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 153072,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 165048,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 102048,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 51024,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.93881052732467651
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 34032,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 177024,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 189000,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 118016,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 59008,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.97906112670898438
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 41136,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 200976,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 212952,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 133984,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 66992,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.97906112670898438
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 48240,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 224928,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 236904,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 149952,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 74976,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.93881052732467651
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 55344,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 248880,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -156.28700256347656,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 276828,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 165920,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 82960,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.035080943256616592,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 62448,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 304776,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -156.28700256347656,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 332724,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 203184,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 101592,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.17248445749282837,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 79800,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 360672,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 372648,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 240448,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 120224,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.93881052732467651
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 97152,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 384624,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -99.960868835449219,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 412572,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 256416,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 128208,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.71914905309677124,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 104256,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 440520,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        25.192995071411133,
+        10.835280418395996,
+        27.863927841186523
+      ],
+      "min": [
+        -18.667209625244141,
+        -29.31907844543457,
+        -72.12615966796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 461664,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 293680,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.99740523099899292,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038398027420044,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 146840,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.96230340003967285,
+        0.84032684564590454
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 121608,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1761
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 482808,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        29.471704483032227,
+        10.83527946472168,
+        23.998146057128906
+      ],
+      "min": [
+        -14.388500213623047,
+        -29.31907844543457,
+        -75.991943359375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 504516,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 321872,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        0.93038403987884521,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038409948348999,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 160936,
+      "componentType": 5126,
+      "count": 1809,
+      "max": [
+        0.96230340003967285,
+        0.84032684564590454
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 130584,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1808
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 526224,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        15.287956237792969,
+        6.8513331413269043,
+        26.343643188476562
+      ],
+      "min": [
+        -34.339530944824219,
+        -33.768573760986328,
+        -71.889091491699219
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 538200,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -0.99771338701248169
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 350816,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        1,
+        0.020341530442237854,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.019785413518548012,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 175408,
+      "componentType": 5126,
+      "count": 998,
+      "max": [
+        0.99077886343002319,
+        0.93881052732467651
+      ],
+      "min": [
+        0.048115845769643784,
+        0.057774662971496582
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 139560,
+      "componentType": 5125,
+      "count": 1776,
+      "max": [
+        997
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 550176,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -99.960868835449219,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 578124,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 366784,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 183392,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.71914905309677124,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 146664,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 606072,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -99.960868835449219,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 634020,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 404048,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 202024,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.54581636190414429,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 164016,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 661968,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -156.28700256347656,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 689916,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 441312,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 220656,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.17248445749282837,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 181368,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 717864,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        25.192995071411133,
+        10.835280418395996,
+        27.863927841186523
+      ],
+      "min": [
+        -18.667209625244141,
+        -29.31907844543457,
+        -72.12615966796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 739008,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 478576,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.99740523099899292,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038398027420044,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 239288,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.96230340003967285,
+        0.84032684564590454
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 198720,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1761
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 760152,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        23.44947624206543,
+        27.000873565673828,
+        6.6610488891601562
+      ],
+      "min": [
+        -99.960868835449219,
+        -25.883865356445312,
+        -59.969089508056641
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 788100,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 506768,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 253384,
+      "componentType": 5126,
+      "count": 2329,
+      "max": [
+        0.94049042463302612,
+        0.95496916770935059
+      ],
+      "min": [
+        0.54581636190414429,
+        -0.326141357421875
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 207696,
+      "componentType": 5125,
+      "count": 4338,
+      "max": [
+        2328
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 816048,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        25.192995071411133,
+        10.835280418395996,
+        27.863927841186523
+      ],
+      "min": [
+        -18.667209625244141,
+        -29.31907844543457,
+        -72.12615966796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 837192,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        1,
+        1,
+        0.98781126737594604
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 544032,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.99740523099899292,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -0.93038398027420044,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 272016,
+      "componentType": 5126,
+      "count": 1762,
+      "max": [
+        0.96230340003967285,
+        0.9209134578704834
+      ],
+      "min": [
+        0.0095251230522990227,
+        0.021897315979003906
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 225048,
+      "componentType": 5125,
+      "count": 2244,
+      "max": [
+        1761
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 858336,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        7.2236700057983398,
+        51.181350708007812,
+        7.223670482635498
+      ],
+      "min": [
+        -12.200178146362305,
+        -79.097610473632812,
+        -7.2236700057983398
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 859992,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 572224,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        1,
+        0.48361799120903015,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.48361963033676147,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 286112,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        0.86278128623962402,
+        0.0056219100952148438
+      ],
+      "min": [
+        0.8465268611907959,
+        0.00374603271484375
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 234024,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        137
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 861648,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 864576,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 574432,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 287216,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 234744,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 867504,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 870432,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 578336,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 289168,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 235848,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 873360,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        4.000007152557373,
+        275.51947021484375,
+        8.7191972732543945
+      ],
+      "min": [
+        -96.932762145996094,
+        -23.222204208374023,
+        -8.719207763671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 876384,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 582240,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 291120,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 236952,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        251
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 879408,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        4.000007152557373,
+        275.51947021484375,
+        8.7191972732543945
+      ],
+      "min": [
+        -96.932762145996094,
+        -23.222204208374023,
+        -8.719207763671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 882432,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 586272,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 293136,
+      "componentType": 5126,
+      "count": 252,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 238056,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        251
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 885456,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        7.2236700057983398,
+        51.181350708007812,
+        7.223670482635498
+      ],
+      "min": [
+        -12.200178146362305,
+        -79.097610473632812,
+        -7.2236700057983398
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 887112,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 590304,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        1,
+        0.48361799120903015,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.48361963033676147,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 295152,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        0.86278128623962402,
+        0.0056219100952148438
+      ],
+      "min": [
+        0.8465268611907959,
+        0.00374603271484375
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 239160,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        137
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 888768,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        7.2236700057983398,
+        51.181350708007812,
+        7.223670482635498
+      ],
+      "min": [
+        -12.200178146362305,
+        -79.097610473632812,
+        -7.2236700057983398
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 890424,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 592512,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        1,
+        0.48361799120903015,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.48361963033676147,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 296256,
+      "componentType": 5126,
+      "count": 138,
+      "max": [
+        0.86278128623962402,
+        0.0056219100952148438
+      ],
+      "min": [
+        0.8465268611907959,
+        0.00374603271484375
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 239880,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        137
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 892080,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        278.419677734375,
+        -24.195926666259766,
+        278.419677734375
+      ],
+      "min": [
+        -278.419677734375,
+        -41.278724670410156,
+        -278.419677734375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 892656,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 594720,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 297360,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.78880071640014648,
+        0.39199972152709961
+      ],
+      "min": [
+        0.78041630983352661,
+        0.15641868114471436
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 240600,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 893232,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        348.02459716796875,
+        -31.087314605712891,
+        348.02459716796875
+      ],
+      "min": [
+        -348.02459716796875,
+        -52.440811157226562,
+        -348.02459716796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 893808,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 595488,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 297744,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.78880071640014648,
+        0.45200324058532715
+      ],
+      "min": [
+        0.49241632223129272,
+        0.38841521739959717
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 240936,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 894384,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        68.662147521972656,
+        13.572908401489258,
+        278.38333129882812
+      ],
+      "min": [
+        -14.328450202941895,
+        -4.1943387985229492,
+        -278.08538818359375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 896304,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 596256,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        1,
+        2.0701520497823367e-06,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -2.0494417185545899e-06,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 298128,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        0.87676405906677246,
+        0.43938755989074707
+      ],
+      "min": [
+        -1.6894266082090326e-05,
+        0.42359817028045654
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 241272,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        159
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 898224,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        101.65433502197266,
+        126.25851440429688,
+        65.548248291015625
+      ],
+      "min": [
+        -58.300910949707031,
+        -393.37777709960938,
+        -13.173244476318359
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 941424,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 598816,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        0.99921870231628418,
+        0.56668710708618164,
+        0.97978347539901733,
+        1
+      ],
+      "min": [
+        -0.99921870231628418,
+        -0.56668716669082642,
+        -0.97978359460830688,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 299408,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        0.029202239587903023,
+        0.13080775737762451
+      ],
+      "min": [
+        0.01320226676762104,
+        0.1148078441619873
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 241992,
+      "componentType": 5125,
+      "count": 4800,
+      "max": [
+        3599
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 984624,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        68.662147521972656,
+        13.572908401489258,
+        278.38333129882812
+      ],
+      "min": [
+        -14.328450202941895,
+        -4.1943387985229492,
+        -278.08538818359375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 986544,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 656416,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        1,
+        2.0701520497823367e-06,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -2.0494417185545899e-06,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 328208,
+      "componentType": 5126,
+      "count": 160,
+      "max": [
+        0.87676405906677246,
+        0.43938755989074707
+      ],
+      "min": [
+        -1.6894266082090326e-05,
+        0.42359817028045654
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 261192,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        159
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 988464,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        101.65433502197266,
+        126.25851440429688,
+        65.548248291015625
+      ],
+      "min": [
+        -58.300910949707031,
+        -393.37777709960938,
+        -13.173244476318359
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1031664,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 658976,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        0.99921870231628418,
+        0.56668710708618164,
+        0.97978347539901733,
+        1
+      ],
+      "min": [
+        -0.99921870231628418,
+        -0.56668716669082642,
+        -0.97978359460830688,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 329488,
+      "componentType": 5126,
+      "count": 3600,
+      "max": [
+        0.029202239587903023,
+        0.13080775737762451
+      ],
+      "min": [
+        0.01320226676762104,
+        0.1148078441619873
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 261912,
+      "componentType": 5125,
+      "count": 4800,
+      "max": [
+        3599
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1074864,
+      "componentType": 5126,
+      "count": 2736,
+      "max": [
+        205.3082275390625,
+        62.766788482666016,
+        213.0311279296875
+      ],
+      "min": [
+        -163.876220703125,
+        -450.33425903320312,
+        -335.533203125
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1107696,
+      "componentType": 5126,
+      "count": 2736,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 716576,
+      "componentType": 5126,
+      "count": 2736,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 358288,
+      "componentType": 5126,
+      "count": 2736,
+      "max": [
+        0.87699997425079346,
+        0.99719202518463135
+      ],
+      "min": [
+        0.20153388381004333,
+        0.082234740257263184
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 281112,
+      "componentType": 5125,
+      "count": 4194,
+      "max": [
+        2735
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1140528,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        12.109499931335449,
+        52.966609954833984,
+        8.0538415908813477
+      ],
+      "min": [
+        -12.109499931335449,
+        -10.592499732971191,
+        -10.558954238891602
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1141392,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 760352,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 380176,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        0.11499993503093719,
+        0.85404402017593384
+      ],
+      "min": [
+        0.10995595157146454,
+        0.84900003671646118
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 297888,
+      "componentType": 5125,
+      "count": 108,
+      "max": [
+        71
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1142256,
+      "componentType": 5126,
+      "count": 2265,
+      "max": [
+        106.71202087402344,
+        495.35079956054688,
+        420.2020263671875
+      ],
+      "min": [
+        -234.02861022949219,
+        -7.531043529510498,
+        -60.102001190185547
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1169436,
+      "componentType": 5126,
+      "count": 2265,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 761504,
+      "componentType": 5126,
+      "count": 2265,
+      "max": [
+        1,
+        0.19064173102378845,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.19064173102378845,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 380752,
+      "componentType": 5126,
+      "count": 2265,
+      "max": [
+        0.87447690963745117,
+        0.95574450492858887
+      ],
+      "min": [
+        0.10937768965959549,
+        0.069333076477050781
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 298320,
+      "componentType": 5125,
+      "count": 5808,
+      "max": [
+        2264
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1196616,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1199544,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 797744,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 398872,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 321552,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1202472,
+      "componentType": 5126,
+      "count": 246,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1205424,
+      "componentType": 5126,
+      "count": 246,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 801648,
+      "componentType": 5126,
+      "count": 246,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 400824,
+      "componentType": 5126,
+      "count": 246,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 322656,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        245
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1208376,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        4.000007152557373,
+        275.51947021484375,
+        8.7191972732543945
+      ],
+      "min": [
+        -96.932762145996094,
+        -23.222204208374023,
+        -8.719207763671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1211352,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 805584,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 402792,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 323760,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        247
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1214328,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        4.000007152557373,
+        275.51947021484375,
+        8.7191972732543945
+      ],
+      "min": [
+        -96.932762145996094,
+        -23.222204208374023,
+        -8.719207763671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1217304,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 809552,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 404776,
+      "componentType": 5126,
+      "count": 248,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 324864,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        247
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1220280,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        278.419677734375,
+        -32.70941162109375,
+        278.419677734375
+      ],
+      "min": [
+        -278.419677734375,
+        -49.792209625244141,
+        -278.419677734375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1220856,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 813520,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 406760,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.87200081348419189,
+        0.39199972152709961
+      ],
+      "min": [
+        0.78521621227264404,
+        0.21841871738433838
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 325968,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1221432,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        348.02459716796875,
+        -39.600803375244141,
+        348.02459716796875
+      ],
+      "min": [
+        -348.02459716796875,
+        -60.954299926757812,
+        -348.02459716796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1222008,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 814288,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 407144,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.78880071640014648,
+        0.45200324058532715
+      ],
+      "min": [
+        0.49241632223129272,
+        0.38841521739959717
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 326304,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1222584,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        72.089195251464844,
+        199.96510314941406,
+        29.367717742919922
+      ],
+      "min": [
+        -21.277032852172852,
+        11.549564361572266,
+        -63.998504638671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1224276,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060243368148804
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060243368148804
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 815056,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.15283231437206268,
+        0.9994971752166748,
+        1
+      ],
+      "min": [
+        -1,
+        -0.22645218670368195,
+        -0.99060231447219849,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 407528,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.93483340740203857,
+        0.51613104343414307
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 326640,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1225968,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        63.467193603515625,
+        121.46705627441406,
+        30.738641738891602
+      ],
+      "min": [
+        -16.474493026733398,
+        4.1401810646057129,
+        -49.203041076660156
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1227660,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060231447219849
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060243368148804
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 817312,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.18897005915641785,
+        0.99917513132095337,
+        1
+      ],
+      "min": [
+        -1,
+        -0.25942128896713257,
+        -0.99060237407684326,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 408656,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94550001621246338,
+        0.58813077211380005
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 328464,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1229352,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        61.611595153808594,
+        305.798828125,
+        36.404674530029297
+      ],
+      "min": [
+        -13.732738494873047,
+        16.301568984985352,
+        -38.939659118652344
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1231044,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060243368148804
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060243368148804
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 819568,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.093018725514411926,
+        0.99984174966812134,
+        1
+      ],
+      "min": [
+        -1,
+        -0.14213182032108307,
+        -0.99540084600448608,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 409784,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94550001621246338,
+        0.64679723978042603
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 330288,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1232736,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        65.470016479492188,
+        291.80908203125,
+        46.602523803710938
+      ],
+      "min": [
+        -14.752511024475098,
+        16.59404182434082,
+        -33.620002746582031
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1234428,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060237407684326
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060231447219849
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 821824,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.10259891301393509,
+        0.99980407953262329,
+        1
+      ],
+      "min": [
+        -1,
+        -0.15623088181018829,
+        -0.99432021379470825,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 410912,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94816666841506958,
+        0.5098615288734436
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 332112,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1236120,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        55.488491058349609,
+        224.47268676757812,
+        45.831386566162109
+      ],
+      "min": [
+        -6.2991690635681152,
+        12.501139640808105,
+        -15.956274032592773
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1237812,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060243368148804
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060231447219849
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 824080,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.10259895026683807,
+        0.99980413913726807,
+        1
+      ],
+      "min": [
+        -1,
+        -0.1562308669090271,
+        -0.99432021379470825,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 412040,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.92950010299682617,
+        0.72679692506790161
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 333936,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1239504,
+      "componentType": 5126,
+      "count": 150,
+      "max": [
+        99.367195129394531,
+        4.4264469146728516,
+        279.03347778320312
+      ],
+      "min": [
+        -22.105474472045898,
+        -13.340800285339355,
+        -277.64175415039062
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1241304,
+      "componentType": 5126,
+      "count": 150,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 826336,
+      "componentType": 5126,
+      "count": 150,
+      "max": [
+        1,
+        1.4971634527682909e-06,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1.4751527714906842e-06,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 413168,
+      "componentType": 5126,
+      "count": 150,
+      "max": [
+        0.87676405906677246,
+        0.43938755989074707
+      ],
+      "min": [
+        -1.6894266082090326e-05,
+        0.42359817028045654
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 335760,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        149
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1243104,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        36.036579132080078,
+        318.73583984375,
+        70.718727111816406
+      ],
+      "min": [
+        -37.190658569335938,
+        17.275815963745117,
+        -2.5085055828094482
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1244796,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060243368148804,
+        1,
+        0.99060231447219849
+      ],
+      "min": [
+        -0.99060243368148804,
+        -1,
+        -0.99060231447219849
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 828736,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.087501190602779388,
+        0.99986118078231812,
+        1
+      ],
+      "min": [
+        -1,
+        -0.13394102454185486,
+        -0.99596136808395386,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 414368,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94816666841506958,
+        0.5098615288734436
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 336480,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1246488,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        12.109499931335449,
+        52.966609954833984,
+        8.0538415908813477
+      ],
+      "min": [
+        -12.109499931335449,
+        -10.592499732971191,
+        -10.558954238891602
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1247352,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 830992,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 415496,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        0.11499993503093719,
+        0.85404402017593384
+      ],
+      "min": [
+        0.10995595157146454,
+        0.84900003671646118
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 338304,
+      "componentType": 5125,
+      "count": 108,
+      "max": [
+        71
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1248216,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        43.24322509765625,
+        60.338272094726562,
+        41.430400848388672
+      ],
+      "min": [
+        -41.430400848388672,
+        -52.081188201904297,
+        -41.430400848388672
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1250112,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 832144,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        1,
+        0.20700907707214355,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 416072,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        0.88000047206878662,
+        0.85448980331420898
+      ],
+      "min": [
+        0.27199968695640564,
+        0.29333150386810303
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 338736,
+      "componentType": 5125,
+      "count": 222,
+      "max": [
+        157
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1252008,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        43.24322509765625,
+        60.338272094726562,
+        41.430400848388672
+      ],
+      "min": [
+        -41.430400848388672,
+        -52.081188201904297,
+        -41.430400848388672
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1253904,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 834672,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        1,
+        0.20700907707214355,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 417336,
+      "componentType": 5126,
+      "count": 158,
+      "max": [
+        0.88000047206878662,
+        0.92933505773544312
+      ],
+      "min": [
+        0.11999968439340591,
+        0.39999854564666748
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 339624,
+      "componentType": 5125,
+      "count": 222,
+      "max": [
+        157
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1255800,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1258728,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 837200,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 418600,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 340512,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1261656,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1264584,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 841104,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 420552,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 341616,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1267512,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.000007152557373,
+        275.51947021484375,
+        8.7191972732543945
+      ],
+      "min": [
+        -96.932762145996094,
+        -23.222204208374023,
+        -8.719207763671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1270440,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 845008,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 422504,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 342720,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1273368,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.000007152557373,
+        275.51947021484375,
+        8.7191972732543945
+      ],
+      "min": [
+        -96.932762145996094,
+        -23.222204208374023,
+        -8.719207763671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1276296,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 848912,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 424456,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 343824,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1279224,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1282152,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 852816,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 426408,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 344928,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1285080,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        4.0000076293945312,
+        275.51947021484375,
+        8.7191953659057617
+      ],
+      "min": [
+        -96.932754516601562,
+        -23.222204208374023,
+        -8.7192106246948242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1288008,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.97866135835647583,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 856720,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        1,
+        0.000141141950734891,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.96906089782714844,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 428360,
+      "componentType": 5126,
+      "count": 244,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 346032,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        243
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1290936,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        278.419677734375,
+        -32.70941162109375,
+        278.419677734375
+      ],
+      "min": [
+        -278.419677734375,
+        -49.792209625244141,
+        -278.419677734375
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1291512,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 860624,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 430312,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.87200081348419189,
+        0.39199972152709961
+      ],
+      "min": [
+        0.78521621227264404,
+        0.21841871738433838
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 347136,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1292088,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        348.02459716796875,
+        -39.600803375244141,
+        348.02459716796875
+      ],
+      "min": [
+        -348.02459716796875,
+        -60.954299926757812,
+        -348.02459716796875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1292664,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 861392,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 430696,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.78880071640014648,
+        0.45200324058532715
+      ],
+      "min": [
+        0.49241632223129272,
+        0.38841521739959717
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 347472,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1293240,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        72.089195251464844,
+        199.96510314941406,
+        29.367717742919922
+      ],
+      "min": [
+        -21.277032852172852,
+        11.549564361572266,
+        -63.998504638671875
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1294932,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060243368148804
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060243368148804
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 862160,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.15283231437206268,
+        0.9994971752166748,
+        1
+      ],
+      "min": [
+        -1,
+        -0.22645218670368195,
+        -0.99060231447219849,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 431080,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.93483340740203857,
+        0.51613104343414307
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 347808,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1296624,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        63.467193603515625,
+        121.46705627441406,
+        30.738641738891602
+      ],
+      "min": [
+        -16.474493026733398,
+        4.1401810646057129,
+        -49.203041076660156
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1298316,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060231447219849
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060243368148804
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 864416,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.18897005915641785,
+        0.99917513132095337,
+        1
+      ],
+      "min": [
+        -1,
+        -0.25942128896713257,
+        -0.99060237407684326,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 432208,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94550001621246338,
+        0.58813077211380005
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 349632,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1300008,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        61.611595153808594,
+        305.798828125,
+        36.404674530029297
+      ],
+      "min": [
+        -13.732738494873047,
+        16.301568984985352,
+        -38.939659118652344
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1301700,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060243368148804
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060243368148804
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 866672,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.093018725514411926,
+        0.99984174966812134,
+        1
+      ],
+      "min": [
+        -1,
+        -0.14213182032108307,
+        -0.99540084600448608,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 433336,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94550001621246338,
+        0.64679723978042603
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 351456,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1303392,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        65.470016479492188,
+        291.80908203125,
+        46.602523803710938
+      ],
+      "min": [
+        -14.752511024475098,
+        16.59404182434082,
+        -33.620002746582031
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1305084,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060237407684326
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060231447219849
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 868928,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.10259891301393509,
+        0.99980407953262329,
+        1
+      ],
+      "min": [
+        -1,
+        -0.15623088181018829,
+        -0.99432021379470825,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 434464,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94816666841506958,
+        0.5098615288734436
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 353280,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1306776,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        55.488491058349609,
+        224.47268676757812,
+        45.831386566162109
+      ],
+      "min": [
+        -6.2991690635681152,
+        12.501139640808105,
+        -15.956274032592773
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1308468,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060231447219849,
+        1,
+        0.99060243368148804
+      ],
+      "min": [
+        -0.99060231447219849,
+        -1,
+        -0.99060231447219849
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 871184,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.10259895026683807,
+        0.99980413913726807,
+        1
+      ],
+      "min": [
+        -1,
+        -0.1562308669090271,
+        -0.99432021379470825,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 435592,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.92950010299682617,
+        0.72679692506790161
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 355104,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1310160,
+      "componentType": 5126,
+      "count": 128,
+      "max": [
+        95.344413757324219,
+        4.0240416526794434,
+        271.90237426757812
+      ],
+      "min": [
+        -21.210554122924805,
+        -12.128000259399414,
+        -270.54620361328125
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1311696,
+      "componentType": 5126,
+      "count": 128,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 873440,
+      "componentType": 5126,
+      "count": 128,
+      "max": [
+        1,
+        3.6927414726051211e-07,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -3.6927414726051211e-07,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 436720,
+      "componentType": 5126,
+      "count": 128,
+      "max": [
+        0.87676405906677246,
+        0.43938755989074707
+      ],
+      "min": [
+        -1.6894266082090326e-05,
+        0.42359817028045654
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 356928,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        127
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1313232,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        36.036579132080078,
+        318.73583984375,
+        70.718727111816406
+      ],
+      "min": [
+        -37.190658569335938,
+        17.275815963745117,
+        -2.5085055828094482
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1314924,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.99060243368148804,
+        1,
+        0.99060231447219849
+      ],
+      "min": [
+        -0.99060243368148804,
+        -1,
+        -0.99060231447219849
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 875488,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        1,
+        0.087501190602779388,
+        0.99986118078231812,
+        1
+      ],
+      "min": [
+        -1,
+        -0.13394102454185486,
+        -0.99596136808395386,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 437744,
+      "componentType": 5126,
+      "count": 141,
+      "max": [
+        0.94816666841506958,
+        0.5098615288734436
+      ],
+      "min": [
+        0.68646132946014404,
+        0.14403998851776123
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 357648,
+      "componentType": 5125,
+      "count": 456,
+      "max": [
+        140
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1316616,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        12.109499931335449,
+        52.966609954833984,
+        8.0538415908813477
+      ],
+      "min": [
+        -12.109499931335449,
+        -10.592499732971191,
+        -10.558954238891602
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1317480,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 877744,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 438872,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        0.69999998807907104,
+        0.24804401397705078
+      ],
+      "min": [
+        0.69495600461959839,
+        0.24300003051757812
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 359472,
+      "componentType": 5125,
+      "count": 108,
+      "max": [
+        71
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1318344,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        12.109499931335449,
+        52.966609954833984,
+        8.0538415908813477
+      ],
+      "min": [
+        -12.109499931335449,
+        -10.592499732971191,
+        -10.558954238891602
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1319208,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 878896,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 439448,
+      "componentType": 5126,
+      "count": 72,
+      "max": [
+        0.69999998807907104,
+        0.24804401397705078
+      ],
+      "min": [
+        0.69495600461959839,
+        0.24300003051757812
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 359904,
+      "componentType": 5125,
+      "count": 108,
+      "max": [
+        71
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1320072,
+      "componentType": 5126,
+      "count": 805,
+      "max": [
+        115.7760009765625,
+        452.59390258789062,
+        239.15376281738281
+      ],
+      "min": [
+        -115.7760009765625,
+        -40.462089538574219,
+        -54.320724487304688
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1329732,
+      "componentType": 5126,
+      "count": 805,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 880048,
+      "componentType": 5126,
+      "count": 805,
+      "max": [
+        1,
+        0.17819739878177643,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.17819736897945404,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 440024,
+      "componentType": 5126,
+      "count": 805,
+      "max": [
+        0.87333387136459351,
+        0.95671898126602173
+      ],
+      "min": [
+        0.38320839405059814,
+        0.043550372123718262
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 360336,
+      "componentType": 5125,
+      "count": 1602,
+      "max": [
+        804
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1339392,
+      "componentType": 5126,
+      "count": 1009,
+      "max": [
+        187.19999694824219,
+        219.73985290527344,
+        -5.2018246650695801
+      ],
+      "min": [
+        -187.19999694824219,
+        -145.60000610351562,
+        -185.15585327148438
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1351500,
+      "componentType": 5126,
+      "count": 1009,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 892928,
+      "componentType": 5126,
+      "count": 1009,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 446464,
+      "componentType": 5126,
+      "count": 1009,
+      "max": [
+        1,
+        1
+      ],
+      "min": [
+        0,
+        0
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 366744,
+      "componentType": 5125,
+      "count": 1356,
+      "max": [
+        1008
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1363608,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        10.420000076293945,
+        10.687520027160645,
+        10.420000076293945
+      ],
+      "min": [
+        -10.420000076293945,
+        -21.125350952148438,
+        -10.420000076293945
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1366356,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        0.99603503942489624,
+        1,
+        0.99603503942489624
+      ],
+      "min": [
+        -0.99603503942489624,
+        -1,
+        -0.99603503942489624
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 909072,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.92827969789505005,
+        -1,
+        -1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 454536,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        0.77566361427307129,
+        0.43124270439147949
+      ],
+      "min": [
+        0.75108999013900757,
+        0.406669020652771
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 372168,
+      "componentType": 5125,
+      "count": 390,
+      "max": [
+        228
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1369104,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        10.420000076293945,
+        10.687520027160645,
+        10.420000076293945
+      ],
+      "min": [
+        -10.420000076293945,
+        -21.125350952148438,
+        -10.420000076293945
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1371852,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        0.99603503942489624,
+        1,
+        0.99603503942489624
+      ],
+      "min": [
+        -0.99603503942489624,
+        -1,
+        -0.99603503942489624
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 912736,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.92827969789505005,
+        -1,
+        -1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 456368,
+      "componentType": 5126,
+      "count": 229,
+      "max": [
+        0.77566361427307129,
+        0.43124270439147949
+      ],
+      "min": [
+        0.75108999013900757,
+        0.406669020652771
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 373728,
+      "componentType": 5125,
+      "count": 390,
+      "max": [
+        228
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1374600,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        4.0000066757202148,
+        306.13275146484375,
+        8.7191963195800781
+      ],
+      "min": [
+        -96.932762145996094,
+        -25.802450180053711,
+        -8.7192087173461914
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1377096,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        1,
+        0.97385084629058838,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 916400,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        1,
+        0.00015150067338254303,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.97471851110458374,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 458200,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 375288,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        207
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1379592,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        4.0000066757202148,
+        306.13275146484375,
+        8.7191963195800781
+      ],
+      "min": [
+        -96.932762145996094,
+        -25.802450180053711,
+        -8.7192087173461914
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1382088,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        1,
+        0.97385084629058838,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 919728,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        1,
+        0.00015150067338254303,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.97471851110458374,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 459864,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 376392,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        207
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1384584,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        4.0000066757202148,
+        306.13275146484375,
+        8.7191963195800781
+      ],
+      "min": [
+        -96.932762145996094,
+        -25.802450180053711,
+        -8.7192087173461914
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1387080,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        1,
+        0.97385084629058838,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 923056,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        1,
+        0.00015150067338254303,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.97471851110458374,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 461528,
+      "componentType": 5126,
+      "count": 208,
+      "max": [
+        0.86762005090713501,
+        0.40372800827026367
+      ],
+      "min": [
+        0.85975414514541626,
+        0.39585697650909424
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 377496,
+      "componentType": 5125,
+      "count": 276,
+      "max": [
+        207
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1389576,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        348.2081298828125,
+        -40.908329010009766,
+        113.02440643310547
+      ],
+      "min": [
+        -348.2081298828125,
+        -62.273086547851562,
+        -348.2081298828125
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1390152,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 926384,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        1,
+        0,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        0,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 463192,
+      "componentType": 5126,
+      "count": 48,
+      "max": [
+        0.87200081348419189,
+        0.39199972152709961
+      ],
+      "min": [
+        0.78521621227264404,
+        0.21841871738433838
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 378600,
+      "componentType": 5125,
+      "count": 84,
+      "max": [
+        47
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1390728,
+      "componentType": 5126,
+      "count": 108,
+      "max": [
+        268.47943115234375,
+        -46.361801147460938,
+        51.986072540283203
+      ],
+      "min": [
+        -412.394287109375,
+        -46.361804962158203,
+        -174.50308227539062
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1392024,
+      "componentType": 5126,
+      "count": 108,
+      "max": [
+        0,
+        1,
+        -0
+      ],
+      "min": [
+        -2.4350894634039832e-08,
+        1,
+        -0
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 927152,
+      "componentType": 5126,
+      "count": 108,
+      "max": [
+        1,
+        2.4350894634039832e-08,
+        2.4360177874882538e-08,
+        1
+      ],
+      "min": [
+        1,
+        0,
+        0,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 463576,
+      "componentType": 5126,
+      "count": 108,
+      "max": [
+        0.85270869731903076,
+        0.35225081443786621
+      ],
+      "min": [
+        0.82315891981124878,
+        0.098419189453125
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 378936,
+      "componentType": 5125,
+      "count": 312,
+      "max": [
+        107
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1393320,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        62.420135498046875,
+        12.339007377624512,
+        90.813774108886719
+      ],
+      "min": [
+        -13.025863647460938,
+        -3.8130354881286621,
+        -252.80490112304688
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1395312,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 928880,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        1,
+        8.8861789038219285e-08,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -6.8151450705045136e-08,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 464440,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        0.87676405906677246,
+        0.43938755989074707
+      ],
+      "min": [
+        -1.6894266082090326e-05,
+        0.42359817028045654
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 380184,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        165
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1397304,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        -0.76118075847625732,
+        90.960929870605469,
+        43.943950653076172
+      ],
+      "min": [
+        -47.056785583496094,
+        -26.625307083129883,
+        -8.8282384872436523
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1408104,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 931536,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9992186427116394,
+        0.56668674945831299,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668657064437866,
+        -0.97978329658508301,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 465768,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.050202272832393646,
+        0.42380774021148682
+      ],
+      "min": [
+        0.034202300012111664,
+        0.40780782699584961
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 380904,
+      "componentType": 5125,
+      "count": 1200,
+      "max": [
+        899
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1418904,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        22.29228401184082,
+        64.405067443847656,
+        46.025909423828125
+      ],
+      "min": [
+        -37.605911254882812,
+        -57.626296997070312,
+        -15.637804985046387
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1429704,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 945936,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9992186427116394,
+        0.56668651103973389,
+        0.97978329658508301,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668657064437866,
+        -0.97978323698043823,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 472968,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.10120225697755814,
+        0.41780769824981689
+      ],
+      "min": [
+        0.085202284157276154,
+        0.40180778503417969
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 385704,
+      "componentType": 5125,
+      "count": 1200,
+      "max": [
+        899
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1440504,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        19.996795654296875,
+        74.329437255859375,
+        45.6990966796875
+      ],
+      "min": [
+        -39.901397705078125,
+        -47.701923370361328,
+        -15.964620590209961
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1451304,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 960336,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9992186427116394,
+        0.56668645143508911,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668651103973389,
+        -0.97978329658508301,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 480168,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.05020223930478096,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.36580789089202881
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 390504,
+      "componentType": 5125,
+      "count": 1200,
+      "max": [
+        899
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1462104,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        163.73191833496094,
+        48.882766723632812,
+        42.757175445556641
+      ],
+      "min": [
+        5.53570556640625,
+        -2.1041340827941895,
+        -3.4679067134857178
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1473192,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 974736,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        0.9992186427116394,
+        0.56668746471405029,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668657064437866,
+        -0.97978323698043823,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 487368,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        0.73060226440429688,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.027207851409912109
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 395304,
+      "componentType": 5125,
+      "count": 1224,
+      "max": [
+        923
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1484280,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        220.32949829101562,
+        68.917686462402344,
+        59.268825531005859
+      ],
+      "min": [
+        9.8628425598144531,
+        -4.8850393295288086,
+        -13.64366626739502
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1493208,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.98181438446044922,
+        0.99037832021713257,
+        0.99153703451156616
+      ],
+      "min": [
+        -0.98181438446044922,
+        -0.99037832021713257,
+        -0.99153703451156616
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 989520,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.99864369630813599,
+        0.86485058069229126,
+        0.97951215505599976,
+        1
+      ],
+      "min": [
+        -0.99864369630813599,
+        -0.86485034227371216,
+        -0.97951221466064453,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 494760,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.73060226440429688,
+        0.38180780410766602
+      ],
+      "min": [
+        0.014202296733856201,
+        0.027207851409912109
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 400200,
+      "componentType": 5125,
+      "count": 984,
+      "max": [
+        743
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1502136,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        154.38917541503906,
+        51.124103546142578,
+        43.709598541259766
+      ],
+      "min": [
+        6.5241665840148926,
+        -2.7172181606292725,
+        -10.851022720336914
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1511064,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.9863666296005249,
+        0.99124425649642944,
+        0.99171996116638184
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99124425649642944,
+        -0.99171996116638184
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1001424,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.9992186427116394,
+        0.86470627784729004,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.86470627784729004,
+        -0.97978323698043823,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 500712,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.73060226440429688,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.027207851409912109
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 404136,
+      "componentType": 5125,
+      "count": 984,
+      "max": [
+        743
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1519992,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        62.420135498046875,
+        12.339007377624512,
+        90.813774108886719
+      ],
+      "min": [
+        -13.025863647460938,
+        -3.8130354881286621,
+        -252.80490112304688
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1521984,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1013328,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        1,
+        8.8861789038219285e-08,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -6.8151450705045136e-08,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 506664,
+      "componentType": 5126,
+      "count": 166,
+      "max": [
+        0.87676405906677246,
+        0.43938755989074707
+      ],
+      "min": [
+        -1.6894266082090326e-05,
+        0.42359817028045654
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 408072,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        165
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1523976,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        -0.76118075847625732,
+        90.960929870605469,
+        43.943950653076172
+      ],
+      "min": [
+        -47.056785583496094,
+        -26.625307083129883,
+        -8.8282384872436523
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1534776,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1015984,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9992186427116394,
+        0.56668674945831299,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668657064437866,
+        -0.97978329658508301,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 507992,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.050202272832393646,
+        0.42380774021148682
+      ],
+      "min": [
+        0.034202300012111664,
+        0.40780782699584961
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 408792,
+      "componentType": 5125,
+      "count": 1200,
+      "max": [
+        899
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1545576,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        22.29228401184082,
+        64.405067443847656,
+        46.025909423828125
+      ],
+      "min": [
+        -37.605911254882812,
+        -57.626296997070312,
+        -15.637804985046387
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1556376,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1030384,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9992186427116394,
+        0.56668651103973389,
+        0.97978329658508301,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668657064437866,
+        -0.97978323698043823,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 515192,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.10120225697755814,
+        0.41780769824981689
+      ],
+      "min": [
+        0.085202284157276154,
+        0.40180778503417969
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 413592,
+      "componentType": 5125,
+      "count": 1200,
+      "max": [
+        899
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1567176,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        19.996795654296875,
+        74.329437255859375,
+        45.6990966796875
+      ],
+      "min": [
+        -39.901397705078125,
+        -47.701923370361328,
+        -15.964620590209961
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1577976,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1044784,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.9992186427116394,
+        0.56668645143508911,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668651103973389,
+        -0.97978329658508301,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 522392,
+      "componentType": 5126,
+      "count": 900,
+      "max": [
+        0.05020223930478096,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.36580789089202881
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 418392,
+      "componentType": 5125,
+      "count": 1200,
+      "max": [
+        899
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1588776,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        185.69413757324219,
+        56.151882171630859,
+        49.115386962890625
+      ],
+      "min": [
+        6.3588933944702148,
+        -2.4170296192169189,
+        -3.9836020469665527
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1599864,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        0.9863666296005249,
+        0.99545508623123169,
+        0.99577462673187256
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99545508623123169,
+        -0.99577462673187256
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1059184,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        0.9992186427116394,
+        0.56668680906295776,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.56668651103973389,
+        -0.97978341579437256,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 529592,
+      "componentType": 5126,
+      "count": 924,
+      "max": [
+        0.73060226440429688,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.027207851409912109
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 423192,
+      "componentType": 5125,
+      "count": 1224,
+      "max": [
+        923
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1610952,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        185.7091064453125,
+        59.959148406982422,
+        51.809524536132812
+      ],
+      "min": [
+        8.2711048126220703,
+        -4.6504383087158203,
+        -13.663222312927246
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1619880,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.9863666296005249,
+        0.99124425649642944,
+        0.99171996116638184
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99124425649642944,
+        -0.99171996116638184
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1073968,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.9992186427116394,
+        0.86470621824264526,
+        0.97978335618972778,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.86470627784729004,
+        -0.97978335618972778,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 536984,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.73060226440429688,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.027207851409912109
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 428088,
+      "componentType": 5125,
+      "count": 984,
+      "max": [
+        743
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1628808,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        216.14483642578125,
+        71.573745727539062,
+        61.193439483642578
+      ],
+      "min": [
+        9.1338329315185547,
+        -3.8041055202484131,
+        -15.191431999206543
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1637736,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.9863666296005249,
+        0.99124425649642944,
+        0.99171996116638184
+      ],
+      "min": [
+        -0.9863666296005249,
+        -0.99124425649642944,
+        -0.99171996116638184
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1085872,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.9992186427116394,
+        0.86470627784729004,
+        0.97978323698043823,
+        1
+      ],
+      "min": [
+        -0.9992186427116394,
+        -0.86470633745193481,
+        -0.97978329658508301,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 542936,
+      "componentType": 5126,
+      "count": 744,
+      "max": [
+        0.73060226440429688,
+        0.38180780410766602
+      ],
+      "min": [
+        0.034202266484498978,
+        0.027207851409912109
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 432024,
+      "componentType": 5125,
+      "count": 984,
+      "max": [
+        743
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1646664,
+      "componentType": 5126,
+      "count": 144,
+      "max": [
+        982.431640625,
+        1096.08154296875,
+        8.8322134017944336
+      ],
+      "min": [
+        -1209.7313232421875,
+        -1096.08154296875,
+        -8.8322134017944336
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1648392,
+      "componentType": 5126,
+      "count": 144,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1097776,
+      "componentType": 5126,
+      "count": 144,
+      "max": [
+        1,
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 548888,
+      "componentType": 5126,
+      "count": 144,
+      "max": [
+        0.87000000476837158,
+        0.11689078807830811
+      ],
+      "min": [
+        0.85998928546905518,
+        0.1068800687789917
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 435960,
+      "componentType": 5125,
+      "count": 216,
+      "max": [
+        143
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1650120,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        7.223670482635498,
+        56.868167877197266,
+        7.223670482635498
+      ],
+      "min": [
+        -12.200177192687988,
+        -87.88623046875,
+        -7.223670482635498
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1651512,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1100080,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        1,
+        0.5231931209564209,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.52319484949111938,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 550040,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        0.86278128623962402,
+        0.0056219100952148438
+      ],
+      "min": [
+        0.8465268611907959,
+        0.00374603271484375
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 436824,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        115
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1652904,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        7.223670482635498,
+        56.868167877197266,
+        7.223670482635498
+      ],
+      "min": [
+        -12.200177192687988,
+        -87.88623046875,
+        -7.223670482635498
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1654296,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1101936,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        1,
+        0.5231931209564209,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.52319484949111938,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 550968,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        0.86278128623962402,
+        0.0056219100952148438
+      ],
+      "min": [
+        0.8465268611907959,
+        0.00374603271484375
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 437544,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        115
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1655688,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        7.223670482635498,
+        56.868167877197266,
+        7.223670482635498
+      ],
+      "min": [
+        -12.200177192687988,
+        -87.88623046875,
+        -7.223670482635498
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1657080,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        1,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1103792,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        1,
+        0.5231931209564209,
+        1,
+        1
+      ],
+      "min": [
+        -1,
+        -0.52319484949111938,
+        -1,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 551896,
+      "componentType": 5126,
+      "count": 116,
+      "max": [
+        0.86278128623962402,
+        0.0056219100952148438
+      ],
+      "min": [
+        0.8465268611907959,
+        0.00374603271484375
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 438264,
+      "componentType": 5125,
+      "count": 180,
+      "max": [
+        115
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1658472,
+      "componentType": 5126,
+      "count": 432,
+      "max": [
+        968.7603759765625,
+        1084.67333984375,
+        -8.8322134017944336
+      ],
+      "min": [
+        -937.56732177734375,
+        -826.352783203125,
+        -8.8322134017944336
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1663656,
+      "componentType": 5126,
+      "count": 432,
+      "max": [
+        2.4755520441725742e-15,
+        2.4755520441725742e-15,
+        -1
+      ],
+      "min": [
+        -2.628050161930344e-15,
+        -3.0113075830909709e-15,
+        -1
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1105648,
+      "componentType": 5126,
+      "count": 432,
+      "max": [
+        1,
+        1,
+        0,
+        1
+      ],
+      "min": [
+        -1,
+        -1,
+        -3.0113080066074445e-15,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 552824,
+      "componentType": 5126,
+      "count": 432,
+      "max": [
+        0.81299996376037598,
+        0.38089084625244141
+      ],
+      "min": [
+        0.79998928308486938,
+        0.36488008499145508
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 438984,
+      "componentType": 5125,
+      "count": 564,
+      "max": [
+        431
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1668840,
+      "componentType": 5126,
+      "count": 172,
+      "max": [
+        1088.144287109375,
+        1088.0780029296875,
+        120.50090789794922
+      ],
+      "min": [
+        -1086.7955322265625,
+        -1088.14208984375,
+        -119.93952178955078
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1670904,
+      "componentType": 5126,
+      "count": 172,
+      "max": [
+        0.99999922513961792,
+        0.99999135732650757,
+        0.99999970197677612
+      ],
+      "min": [
+        -0.99998509883880615,
+        -0.99999791383743286,
+        -0.99999904632568359
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1112560,
+      "componentType": 5126,
+      "count": 172,
+      "max": [
+        0.99999505281448364,
+        0.11012805998325348,
+        0.99999469518661499,
+        1
+      ],
+      "min": [
+        -0.99999994039535522,
+        -0.06492035835981369,
+        -0.99999964237213135,
+        1
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 556280,
+      "componentType": 5126,
+      "count": 172,
+      "max": [
+        0.7035139799118042,
+        0.42222452163696289
+      ],
+      "min": [
+        0.16799932718276978,
+        0.0052355527877807617
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 441240,
+      "componentType": 5125,
+      "count": 480,
+      "max": [
+        171
+      ],
+      "min": [
+        0
+      ],
+      "type": "SCALAR"
+    }
+  ],
+  "asset": {
+    "extras": {
+      "author": "antonmoek (https://sketchfab.com/antonmoek)",
+      "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
+      "source": "https://sketchfab.com/models/edd1c604e1e045a0a2a552ddd9a293e6",
+      "title": "Cartoon Lowpoly Small City Free Pack"
+    },
+    "generator": "Sketchfab-3.25.5",
+    "version": "2.0"
+  },
+  "bufferViews": [
+    {
+      "buffer": 0,
+      "byteLength": 443160,
+      "byteOffset": 0,
+      "name": "floatBufferViews",
+      "target": 34963
+    },
+    {
+      "buffer": 0,
+      "byteLength": 557656,
+      "byteOffset": 443160,
+      "byteStride": 8,
+      "name": "floatBufferViews",
+      "target": 34962
+    },
+    {
+      "buffer": 0,
+      "byteLength": 1672968,
+      "byteOffset": 1000816,
+      "byteStride": 12,
+      "name": "floatBufferViews",
+      "target": 34962
+    },
+    {
+      "buffer": 0,
+      "byteLength": 1115312,
+      "byteOffset": 2673784,
+      "byteStride": 16,
+      "name": "floatBufferViews",
+      "target": 34962
+    }
+  ],
+  "buffers": [
+    {
+      "byteLength": 3789096,
+      "uri": "scene.bin"
+    }
+  ],
+  "images": [
+    {
+      "uri": "textures/World_ap.16_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap.17_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap.15_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap.9_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap.19_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap.8_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/World_ap.11_baseColor.jpeg"
+    }
+  ],
+  "materials": [
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 4,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 1
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.8",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 6,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.9",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 3,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.11",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 7,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.15",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 2,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.16",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 0,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.17",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 1,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        0,
+        0,
+        0
+      ],
+      "name": "World_ap.19",
+      "pbrMetallicRoughness": {
+        "baseColorFactor": [
+          1,
+          1,
+          1,
+          1
+        ],
+        "baseColorTexture": {
+          "index": 5,
+          "texCoord": 0
+        },
+        "metallicFactor": 0,
+        "roughnessFactor": 0.59999999999999998
+      }
+    }
+  ],
+  "meshes": [
+    {
+      "name": "CAR_03_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 1,
+            "POSITION": 0,
+            "TANGENT": 2,
+            "TEXCOORD_0": 3
+          },
+          "indices": 4,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "CAR_03_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 6,
+            "POSITION": 5,
+            "TANGENT": 7,
+            "TEXCOORD_0": 8
+          },
+          "indices": 9,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 11,
+            "POSITION": 10,
+            "TANGENT": 12,
+            "TEXCOORD_0": 13
+          },
+          "indices": 14,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "CAR_03_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 16,
+            "POSITION": 15,
+            "TANGENT": 17,
+            "TEXCOORD_0": 18
+          },
+          "indices": 19,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 21,
+            "POSITION": 20,
+            "TANGENT": 22,
+            "TEXCOORD_0": 23
+          },
+          "indices": 24,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 26,
+            "POSITION": 25,
+            "TANGENT": 27,
+            "TEXCOORD_0": 28
+          },
+          "indices": 29,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 31,
+            "POSITION": 30,
+            "TANGENT": 32,
+            "TEXCOORD_0": 33
+          },
+          "indices": 34,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 36,
+            "POSITION": 35,
+            "TANGENT": 37,
+            "TEXCOORD_0": 38
+          },
+          "indices": 39,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_4_World ap.8_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 41,
+            "POSITION": 40,
+            "TANGENT": 42,
+            "TEXCOORD_0": 43
+          },
+          "indices": 44,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_3_World ap.9_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 46,
+            "POSITION": 45,
+            "TANGENT": 47,
+            "TEXCOORD_0": 48
+          },
+          "indices": 49,
+          "material": 2,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_1_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 51,
+            "POSITION": 50,
+            "TANGENT": 52,
+            "TEXCOORD_0": 53
+          },
+          "indices": 54,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_2_World ap.11_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 56,
+            "POSITION": 55,
+            "TANGENT": 57,
+            "TEXCOORD_0": 58
+          },
+          "indices": 59,
+          "material": 3,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "CAR_03_1_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 61,
+            "POSITION": 60,
+            "TANGENT": 62,
+            "TEXCOORD_0": 63
+          },
+          "indices": 64,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "CAR_03_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 66,
+            "POSITION": 65,
+            "TANGENT": 67,
+            "TEXCOORD_0": 68
+          },
+          "indices": 69,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_04_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 71,
+            "POSITION": 70,
+            "TANGENT": 72,
+            "TEXCOORD_0": 73
+          },
+          "indices": 74,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_1_World ap.15_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 76,
+            "POSITION": 75,
+            "TANGENT": 77,
+            "TEXCOORD_0": 78
+          },
+          "indices": 79,
+          "material": 4,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_World ap.16_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 81,
+            "POSITION": 80,
+            "TANGENT": 82,
+            "TEXCOORD_0": 83
+          },
+          "indices": 84,
+          "material": 5,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_5_World ap.17_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 86,
+            "POSITION": 85,
+            "TANGENT": 87,
+            "TEXCOORD_0": 88
+          },
+          "indices": 89,
+          "material": 6,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "CAR_03_2_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 91,
+            "POSITION": 90,
+            "TANGENT": 92,
+            "TEXCOORD_0": 93
+          },
+          "indices": 94,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Car_08_6_World ap.19_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 96,
+            "POSITION": 95,
+            "TANGENT": 97,
+            "TEXCOORD_0": 98
+          },
+          "indices": 99,
+          "material": 7,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "CAR_03_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 101,
+            "POSITION": 100,
+            "TANGENT": 102,
+            "TEXCOORD_0": 103
+          },
+          "indices": 104,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "traffic_light_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 106,
+            "POSITION": 105,
+            "TANGENT": 107,
+            "TEXCOORD_0": 108
+          },
+          "indices": 109,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 111,
+            "POSITION": 110,
+            "TANGENT": 112,
+            "TEXCOORD_0": 113
+          },
+          "indices": 114,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 116,
+            "POSITION": 115,
+            "TANGENT": 117,
+            "TEXCOORD_0": 118
+          },
+          "indices": 119,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 121,
+            "POSITION": 120,
+            "TANGENT": 122,
+            "TEXCOORD_0": 123
+          },
+          "indices": 124,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 126,
+            "POSITION": 125,
+            "TANGENT": 127,
+            "TEXCOORD_0": 128
+          },
+          "indices": 129,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "traffic_light_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 131,
+            "POSITION": 130,
+            "TANGENT": 132,
+            "TEXCOORD_0": 133
+          },
+          "indices": 134,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "traffic_light_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 136,
+            "POSITION": 135,
+            "TANGENT": 137,
+            "TEXCOORD_0": 138
+          },
+          "indices": 139,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 141,
+            "POSITION": 140,
+            "TANGENT": 142,
+            "TEXCOORD_0": 143
+          },
+          "indices": 144,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 146,
+            "POSITION": 145,
+            "TANGENT": 147,
+            "TEXCOORD_0": 148
+          },
+          "indices": 149,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bed_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 151,
+            "POSITION": 150,
+            "TANGENT": 152,
+            "TEXCOORD_0": 153
+          },
+          "indices": 154,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 156,
+            "POSITION": 155,
+            "TANGENT": 157,
+            "TEXCOORD_0": 158
+          },
+          "indices": 159,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bed_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 161,
+            "POSITION": 160,
+            "TANGENT": 162,
+            "TEXCOORD_0": 163
+          },
+          "indices": 164,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_3_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 166,
+            "POSITION": 165,
+            "TANGENT": 167,
+            "TEXCOORD_0": 168
+          },
+          "indices": 169,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "House_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 171,
+            "POSITION": 170,
+            "TANGENT": 172,
+            "TEXCOORD_0": 173
+          },
+          "indices": 174,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bench_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 176,
+            "POSITION": 175,
+            "TANGENT": 177,
+            "TEXCOORD_0": 178
+          },
+          "indices": 179,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "House_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 181,
+            "POSITION": 180,
+            "TANGENT": 182,
+            "TEXCOORD_0": 183
+          },
+          "indices": 184,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_3_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 186,
+            "POSITION": 185,
+            "TANGENT": 187,
+            "TEXCOORD_0": 188
+          },
+          "indices": 189,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 191,
+            "POSITION": 190,
+            "TANGENT": 192,
+            "TEXCOORD_0": 193
+          },
+          "indices": 194,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_1_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 196,
+            "POSITION": 195,
+            "TANGENT": 197,
+            "TEXCOORD_0": 198
+          },
+          "indices": 199,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_2_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 201,
+            "POSITION": 200,
+            "TANGENT": 202,
+            "TEXCOORD_0": 203
+          },
+          "indices": 204,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_4_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 206,
+            "POSITION": 205,
+            "TANGENT": 207,
+            "TEXCOORD_0": 208
+          },
+          "indices": 209,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 211,
+            "POSITION": 210,
+            "TANGENT": 212,
+            "TEXCOORD_0": 213
+          },
+          "indices": 214,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_47_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 216,
+            "POSITION": 215,
+            "TANGENT": 217,
+            "TEXCOORD_0": 218
+          },
+          "indices": 219,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 221,
+            "POSITION": 220,
+            "TANGENT": 222,
+            "TEXCOORD_0": 223
+          },
+          "indices": 224,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 226,
+            "POSITION": 225,
+            "TANGENT": 227,
+            "TEXCOORD_0": 228
+          },
+          "indices": 229,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 231,
+            "POSITION": 230,
+            "TANGENT": 232,
+            "TEXCOORD_0": 233
+          },
+          "indices": 234,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 236,
+            "POSITION": 235,
+            "TANGENT": 237,
+            "TEXCOORD_0": 238
+          },
+          "indices": 239,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Cube_7_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 241,
+            "POSITION": 240,
+            "TANGENT": 242,
+            "TEXCOORD_0": 243
+          },
+          "indices": 244,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 246,
+            "POSITION": 245,
+            "TANGENT": 247,
+            "TEXCOORD_0": 248
+          },
+          "indices": 249,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bench_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 251,
+            "POSITION": 250,
+            "TANGENT": 252,
+            "TEXCOORD_0": 253
+          },
+          "indices": 254,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Muff_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 256,
+            "POSITION": 255,
+            "TANGENT": 257,
+            "TEXCOORD_0": 258
+          },
+          "indices": 259,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Muff_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 261,
+            "POSITION": 260,
+            "TANGENT": 262,
+            "TEXCOORD_0": 263
+          },
+          "indices": 264,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_3_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 266,
+            "POSITION": 265,
+            "TANGENT": 267,
+            "TEXCOORD_0": 268
+          },
+          "indices": 269,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_2_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 271,
+            "POSITION": 270,
+            "TANGENT": 272,
+            "TEXCOORD_0": 273
+          },
+          "indices": 274,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_1_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 276,
+            "POSITION": 275,
+            "TANGENT": 277,
+            "TEXCOORD_0": 278
+          },
+          "indices": 279,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_3_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 281,
+            "POSITION": 280,
+            "TANGENT": 282,
+            "TEXCOORD_0": 283
+          },
+          "indices": 284,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 286,
+            "POSITION": 285,
+            "TANGENT": 287,
+            "TEXCOORD_0": 288
+          },
+          "indices": 289,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_5_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 291,
+            "POSITION": 290,
+            "TANGENT": 292,
+            "TEXCOORD_0": 293
+          },
+          "indices": 294,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_4_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 296,
+            "POSITION": 295,
+            "TANGENT": 297,
+            "TEXCOORD_0": 298
+          },
+          "indices": 299,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 301,
+            "POSITION": 300,
+            "TANGENT": 302,
+            "TEXCOORD_0": 303
+          },
+          "indices": 304,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_47_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 306,
+            "POSITION": 305,
+            "TANGENT": 307,
+            "TEXCOORD_0": 308
+          },
+          "indices": 309,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_3_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 311,
+            "POSITION": 310,
+            "TANGENT": 312,
+            "TEXCOORD_0": 313
+          },
+          "indices": 314,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 316,
+            "POSITION": 315,
+            "TANGENT": 317,
+            "TEXCOORD_0": 318
+          },
+          "indices": 319,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_1_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 321,
+            "POSITION": 320,
+            "TANGENT": 322,
+            "TEXCOORD_0": 323
+          },
+          "indices": 324,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_2_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 326,
+            "POSITION": 325,
+            "TANGENT": 327,
+            "TEXCOORD_0": 328
+          },
+          "indices": 329,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Cube_7_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 331,
+            "POSITION": 330,
+            "TANGENT": 332,
+            "TEXCOORD_0": 333
+          },
+          "indices": 334,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Firtree_4_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 336,
+            "POSITION": 335,
+            "TANGENT": 337,
+            "TEXCOORD_0": 338
+          },
+          "indices": 339,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bench_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 341,
+            "POSITION": 340,
+            "TANGENT": 342,
+            "TEXCOORD_0": 343
+          },
+          "indices": 344,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Behch_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 346,
+            "POSITION": 345,
+            "TANGENT": 347,
+            "TEXCOORD_0": 348
+          },
+          "indices": 349,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "House_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 351,
+            "POSITION": 350,
+            "TANGENT": 352,
+            "TEXCOORD_0": 353
+          },
+          "indices": 354,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Shop_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 356,
+            "POSITION": 355,
+            "TANGENT": 357,
+            "TEXCOORD_0": 358
+          },
+          "indices": 359,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Trash_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 361,
+            "POSITION": 360,
+            "TANGENT": 362,
+            "TEXCOORD_0": 363
+          },
+          "indices": 364,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Trash_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 366,
+            "POSITION": 365,
+            "TANGENT": 367,
+            "TEXCOORD_0": 368
+          },
+          "indices": 369,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_3_5_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 371,
+            "POSITION": 370,
+            "TANGENT": 372,
+            "TEXCOORD_0": 373
+          },
+          "indices": 374,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_2_5_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 376,
+            "POSITION": 375,
+            "TANGENT": 377,
+            "TEXCOORD_0": 378
+          },
+          "indices": 379,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Light_4_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 381,
+            "POSITION": 380,
+            "TANGENT": 382,
+            "TEXCOORD_0": 383
+          },
+          "indices": 384,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_4_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 386,
+            "POSITION": 385,
+            "TANGENT": 387,
+            "TEXCOORD_0": 388
+          },
+          "indices": 389,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_4_5_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 391,
+            "POSITION": 390,
+            "TANGENT": 392,
+            "TEXCOORD_0": 393
+          },
+          "indices": 394,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bed_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 396,
+            "POSITION": 395,
+            "TANGENT": 397,
+            "TEXCOORD_0": 398
+          },
+          "indices": 399,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_15_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 401,
+            "POSITION": 400,
+            "TANGENT": 402,
+            "TEXCOORD_0": 403
+          },
+          "indices": 404,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 406,
+            "POSITION": 405,
+            "TANGENT": 407,
+            "TEXCOORD_0": 408
+          },
+          "indices": 409,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 411,
+            "POSITION": 410,
+            "TANGENT": 412,
+            "TEXCOORD_0": 413
+          },
+          "indices": 414,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Tree_1_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 416,
+            "POSITION": 415,
+            "TANGENT": 417,
+            "TEXCOORD_0": 418
+          },
+          "indices": 419,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Tree_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 421,
+            "POSITION": 420,
+            "TANGENT": 422,
+            "TEXCOORD_0": 423
+          },
+          "indices": 424,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Tree_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 426,
+            "POSITION": 425,
+            "TANGENT": 427,
+            "TEXCOORD_0": 428
+          },
+          "indices": 429,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bed_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 431,
+            "POSITION": 430,
+            "TANGENT": 432,
+            "TEXCOORD_0": 433
+          },
+          "indices": 434,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_15_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 436,
+            "POSITION": 435,
+            "TANGENT": 437,
+            "TEXCOORD_0": 438
+          },
+          "indices": 439,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_2_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 441,
+            "POSITION": 440,
+            "TANGENT": 442,
+            "TEXCOORD_0": 443
+          },
+          "indices": 444,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Bushes_4_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 446,
+            "POSITION": 445,
+            "TANGENT": 447,
+            "TEXCOORD_0": 448
+          },
+          "indices": 449,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Tree_1_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 451,
+            "POSITION": 450,
+            "TANGENT": 452,
+            "TEXCOORD_0": 453
+          },
+          "indices": 454,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Tree_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 456,
+            "POSITION": 455,
+            "TANGENT": 457,
+            "TEXCOORD_0": 458
+          },
+          "indices": 459,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Tree_3_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 461,
+            "POSITION": 460,
+            "TANGENT": 462,
+            "TEXCOORD_0": 463
+          },
+          "indices": 464,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "ROAD_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 466,
+            "POSITION": 465,
+            "TANGENT": 467,
+            "TEXCOORD_0": 468
+          },
+          "indices": 469,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "traffic_light_2_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 471,
+            "POSITION": 470,
+            "TANGENT": 472,
+            "TEXCOORD_0": 473
+          },
+          "indices": 474,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "traffic_light_1_2_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 476,
+            "POSITION": 475,
+            "TANGENT": 477,
+            "TEXCOORD_0": 478
+          },
+          "indices": 479,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "traffic_light_2_3_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 481,
+            "POSITION": 480,
+            "TANGENT": 482,
+            "TEXCOORD_0": 483
+          },
+          "indices": 484,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "ROAD_Lines_12_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 486,
+            "POSITION": 485,
+            "TANGENT": 487,
+            "TEXCOORD_0": 488
+          },
+          "indices": 489,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Floor_6_World ap_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 491,
+            "POSITION": 490,
+            "TANGENT": 492,
+            "TEXCOORD_0": 493
+          },
+          "indices": 494,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    }
+  ],
+  "nodes": [
+    {
+      "children": [
+        1
+      ],
+      "name": "RootNode (gltf orientation matrix)",
+      "rotation": [
+        -0.70710678118654746,
+        -0,
+        -0,
+        0.70710678118654757
+      ]
+    },
+    {
+      "children": [
+        2
+      ],
+      "name": "RootNode (model correction matrix)"
+    },
+    {
+      "children": [
+        3
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        -1,
+        0,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "4d4100bcb1c640e69699a87140df79d7.fbx"
+    },
+    {
+      "children": [
+        4,
+        6,
+        22,
+        65,
+        98,
+        134,
+        178,
+        227,
+        237
+      ],
+      "name": "RootNode"
+    },
+    {
+      "children": [
+        5
+      ],
+      "matrix": [
+        -0.5195871827043943,
+        -0.56636077796070827,
+        -0.63973793756275832,
+        0,
+        -0.35706016456664957,
+        0.82415742985654206,
+        -0.4396277626491486,
+        0,
+        0.77623269607054524,
+        -1.7367819765690129e-08,
+        -0.63044650966680127,
+        0,
+        -397.58914184570312,
+        -77.156997680664062,
+        -513.34393310546875,
+        1
+      ],
+      "name": "Camera_3"
+    },
+    {
+      "name": ""
+    },
+    {
+      "children": [
+        7,
+        19
+      ],
+      "matrix": [
+        -0.65098597621594911,
+        -7.9722789206267689e-17,
+        0.75908975672852286,
+        0,
+        -2.1542636399904814e-16,
+        1,
+        -7.9722789206267689e-17,
+        0,
+        -0.75908975672852286,
+        -2.1542636399904814e-16,
+        -0.65098597621594911,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "Physical_Sky_1"
+    },
+    {
+      "children": [
+        8,
+        15
+      ],
+      "matrix": [
+        1,
+        1.5944557841253533e-16,
+        -5.5511151231257827e-17,
+        0,
+        -1.5944557841253533e-16,
+        1,
+        -1.8592336816862574e-16,
+        0,
+        5.5511151231257802e-17,
+        1.8592336816862574e-16,
+        1,
+        0,
+        -130.84916687011719,
+        -77.156997680664062,
+        635.98553466796875,
+        1
+      ],
+      "name": "Sky_Null"
+    },
+    {
+      "children": [
+        9,
+        12
+      ],
+      "matrix": [
+        0.99902554618950035,
+        2.770575062947811e-08,
+        -0.044135677866887331,
+        0,
+        -0.028733433102971981,
+        0.7590566304963785,
+        -0.65039020712307871,
+        0,
+        0.033501460906764195,
+        0.65102460145487862,
+        0.75831696566648765,
+        0,
+        4997.20068359375,
+        97109.09375,
+        113113.1953125,
+        1
+      ],
+      "name": "Sun"
+    },
+    {
+      "children": [
+        10
+      ],
+      "matrix": [
+        1,
+        -1.1102230246251565e-16,
+        2.2204460492503131e-16,
+        0,
+        -2.2204460492503131e-16,
+        -2.2204460492503131e-16,
+        1,
+        0,
+        -1.1102230246251562e-16,
+        -1,
+        -2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "Lensflare_Source"
+    },
+    {
+      "children": [
+        11
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        2.2204460492503131e-16,
+        1,
+        0,
+        0,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": ""
+    },
+    {
+      "name": ""
+    },
+    {
+      "children": [
+        13
+      ],
+      "matrix": [
+        1,
+        -1.1102230246251565e-16,
+        2.2204460492503131e-16,
+        0,
+        -2.2204460492503131e-16,
+        -2.2204460492503131e-16,
+        1,
+        0,
+        -1.1102230246251562e-16,
+        -1,
+        -2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "Sun_light"
+    },
+    {
+      "children": [
+        14
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        2.2204460492503131e-16,
+        1,
+        0,
+        0,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": ""
+    },
+    {
+      "name": ""
+    },
+    {
+      "children": [
+        16
+      ],
+      "matrix": [
+        0.76344365626315702,
+        2.0198411485039536e-08,
+        0.6458744333936296,
+        0,
+        0.18418187249556811,
+        0.95847793270362835,
+        -0.21770872826831061,
+        0,
+        -0.61905639610262397,
+        0.285166710049014,
+        0.73174389367062909,
+        0,
+        -2377.078857421875,
+        1094.9952392578125,
+        2809.78125,
+        1
+      ],
+      "name": "Moon"
+    },
+    {
+      "children": [
+        17
+      ],
+      "matrix": [
+        1,
+        -6.9388939039072284e-18,
+        -1.1102230246251563e-16,
+        0,
+        1.1102230246251563e-16,
+        2.2204460492503131e-16,
+        1,
+        0,
+        -6.9388939039072099e-18,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "Moon_Light"
+    },
+    {
+      "children": [
+        18
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        2.2204460492503131e-16,
+        1,
+        0,
+        0,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": ""
+    },
+    {
+      "name": ""
+    },
+    {
+      "children": [
+        20
+      ],
+      "matrix": [
+        1,
+        1.0393442718127745e-16,
+        -2.7755575615628904e-16,
+        0,
+        2.7755575615628904e-16,
+        2.2204460492503131e-16,
+        1,
+        0,
+        1.0393442718127749e-16,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "Sky_Dome"
+    },
+    {
+      "children": [
+        21
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        2.2204460492503131e-16,
+        1,
+        0,
+        0,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": ""
+    },
+    {
+      "name": ""
+    },
+    {
+      "children": [
+        23,
+        25,
+        27,
+        29,
+        31,
+        33,
+        35,
+        37,
+        39,
+        41,
+        43,
+        45,
+        47,
+        49,
+        51,
+        53,
+        55,
+        57,
+        59,
+        61,
+        63
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -369.06906127929688,
+        -90.703544616699219,
+        -920.1591796875,
+        1
+      ],
+      "name": "Cars"
+    },
+    {
+      "children": [
+        24
+      ],
+      "matrix": [
+        -1.1161040868103447,
+        1.3668332938134597e-16,
+        -1.002153514889434,
+        0,
+        -1.8070770596253361e-08,
+        1.4999999999999998,
+        2.0125520511237016e-08,
+        0,
+        1.002153514889434,
+        2.7047907974381987e-08,
+        -1.1161040868103445,
+        0,
+        22.131305694580078,
+        14.663174629211426,
+        -475.07095336914062,
+        1
+      ],
+      "name": "CAR_03_1"
+    },
+    {
+      "mesh": 0,
+      "name": "CAR_03_1_World ap_0"
+    },
+    {
+      "children": [
+        26
+      ],
+      "matrix": [
+        -0.039509975088762972,
+        4.8385761910227429e-18,
+        -1.4994795636715044,
+        0,
+        1.6096576513098873e-09,
+        1.5,
+        -4.2413066498289683e-11,
+        0,
+        1.4994795636715044,
+        -1.610216327898289e-09,
+        -0.039509975088762972,
+        0,
+        -281.15509033203125,
+        14.663183212280273,
+        108.45243835449219,
+        1
+      ],
+      "name": "CAR_03"
+    },
+    {
+      "mesh": 1,
+      "name": "CAR_03_World ap_0"
+    },
+    {
+      "children": [
+        28
+      ],
+      "matrix": [
+        0.00082360820274196556,
+        0,
+        -1.4999997738898259,
+        0,
+        1.5148267022145999e-09,
+        1.5,
+        8.3174925716231654e-13,
+        0,
+        1.4999997738898259,
+        -1.5148269305597877e-09,
+        0.00082360820274196556,
+        0,
+        -302.70330810546875,
+        21.449604034423828,
+        233.83567810058594,
+        1
+      ],
+      "name": "Car_04"
+    },
+    {
+      "mesh": 2,
+      "name": "Car_04_World ap_0"
+    },
+    {
+      "children": [
+        30
+      ],
+      "matrix": [
+        -0.17032274490979316,
+        -2.0858520196911888e-17,
+        1.4902986823339788,
+        0,
+        -1.5997995351087865e-09,
+        1.5,
+        -1.8283731983888007e-10,
+        0,
+        -1.4902986823339788,
+        -1.6102136622386964e-09,
+        -0.17032274490979316,
+        0,
+        -478.53021240234375,
+        14.663183212280273,
+        1463.2359619140625,
+        1
+      ],
+      "name": "CAR_03_2"
+    },
+    {
+      "mesh": 3,
+      "name": "CAR_03_2_World ap_0"
+    },
+    {
+      "children": [
+        32
+      ],
+      "matrix": [
+        0.00082360820274196556,
+        0,
+        -1.4999997738898259,
+        0,
+        1.5148267022145999e-09,
+        1.5,
+        8.3174925716231654e-13,
+        0,
+        1.4999997738898259,
+        -1.5148269305597877e-09,
+        0.00082360820274196556,
+        0,
+        -445.67431640625,
+        21.449604034423828,
+        -438.26852416992188,
+        1
+      ],
+      "name": "Car_04_1"
+    },
+    {
+      "mesh": 4,
+      "name": "Car_04_1_World ap_0"
+    },
+    {
+      "children": [
+        34
+      ],
+      "matrix": [
+        -1.4999670907732456,
+        -1.8369298965644623e-16,
+        0.0099361258670799431,
+        0,
+        -1.0034521200574557e-11,
+        1.5,
+        -1.5147932136116421e-09,
+        0,
+        -0.0099361258670799431,
+        -1.5148264493398498e-09,
+        -1.4999670907732456,
+        0,
+        -1097.6541748046875,
+        21.449604034423828,
+        1123.554931640625,
+        1
+      ],
+      "name": "Car_04_2"
+    },
+    {
+      "mesh": 5,
+      "name": "Car_04_2_World ap_0"
+    },
+    {
+      "children": [
+        36
+      ],
+      "matrix": [
+        -0.00082360820274363089,
+        -2.2351741790942681e-08,
+        1.4999997738898256,
+        0,
+        -1.5270994857497568e-09,
+        1.4999999999999998,
+        2.2350906672345702e-08,
+        0,
+        -1.4999997738898256,
+        -1.5148269955052036e-09,
+        -0.00082360820274363089,
+        0,
+        449.95364379882812,
+        21.449604034423828,
+        544.782958984375,
+        1
+      ],
+      "name": "Car_04_3"
+    },
+    {
+      "mesh": 6,
+      "name": "Car_04_3_World ap_0"
+    },
+    {
+      "children": [
+        38
+      ],
+      "matrix": [
+        -1.4999997738898259,
+        1.836969921816082e-16,
+        -0.00082360820251659028,
+        0,
+        8.3193268906200266e-13,
+        1.5,
+        -1.5148262197779106e-09,
+        0,
+        0.00082360820251659028,
+        -1.5148264482238881e-09,
+        -1.4999997738898259,
+        0,
+        780.42401123046875,
+        21.449604034423828,
+        -35.69158935546875,
+        1
+      ],
+      "name": "Car_04_4"
+    },
+    {
+      "mesh": 7,
+      "name": "Car_04_4_World ap_0"
+    },
+    {
+      "children": [
+        40
+      ],
+      "matrix": [
+        1.3033193091427364e-07,
+        -8.3266726846886741e-17,
+        -1.4999999999999947,
+        0,
+        1.4999999999999947,
+        0,
+        1.303319310808071e-07,
+        0,
+        2.4980018054066022e-16,
+        -1.5,
+        0,
+        0,
+        938.820068359375,
+        -12.940871238708496,
+        754.0858154296875,
+        1
+      ],
+      "name": "Car_08_4"
+    },
+    {
+      "mesh": 8,
+      "name": "Car_08_4_World ap.8_0"
+    },
+    {
+      "children": [
+        42
+      ],
+      "matrix": [
+        -1.4989820157445064,
+        1.8214596497756474e-16,
+        0.055253203296616059,
+        0,
+        -0.055253203296616059,
+        0,
+        -1.4989820157445064,
+        0,
+        -1.8214596497756474e-16,
+        -1.5,
+        0,
+        0,
+        187.86569213867188,
+        -12.940871238708496,
+        1351.53857421875,
+        1
+      ],
+      "name": "Car_08_3"
+    },
+    {
+      "mesh": 9,
+      "name": "Car_08_3_World ap.9_0"
+    },
+    {
+      "children": [
+        44
+      ],
+      "matrix": [
+        0.0368153302376103,
+        5.9137150231712411e-08,
+        -1.4995481424280757,
+        0,
+        9.9744262981393291e-11,
+        1.4999999999999989,
+        5.9157418795445159e-08,
+        0,
+        1.499548142428077,
+        -1.5516474888203576e-09,
+        0.036815330237610133,
+        0,
+        -719.8218994140625,
+        21.449604034423828,
+        374.47564697265625,
+        1
+      ],
+      "name": "Car_04_1_2"
+    },
+    {
+      "mesh": 10,
+      "name": "Car_04_1_2_World ap_0"
+    },
+    {
+      "children": [
+        46
+      ],
+      "matrix": [
+        1.4654024309901272,
+        -6.2450045135165055e-17,
+        -0.32030565909491127,
+        0,
+        0.32030565909491127,
+        4.9960036108132044e-16,
+        1.4654024309901272,
+        0,
+        6.2450045135165055e-17,
+        -1.4999999999999998,
+        4.9960036108132044e-16,
+        0,
+        -271.2222900390625,
+        -14.732329368591309,
+        -95.644256591796875,
+        1
+      ],
+      "name": "Car_08_2"
+    },
+    {
+      "mesh": 11,
+      "name": "Car_08_2_World ap.11_0"
+    },
+    {
+      "children": [
+        48
+      ],
+      "matrix": [
+        -0.01978968720225438,
+        3.8714353772561779e-08,
+        -1.4998694504124137,
+        0,
+        -8.9587833419021903e-09,
+        1.4999999999999996,
+        3.8835928128861618e-08,
+        0,
+        1.4998694504124139,
+        9.4703708781747474e-09,
+        -0.019789687202254047,
+        0,
+        81.42254638671875,
+        14.663172721862793,
+        401.82693481445312,
+        1
+      ],
+      "name": "CAR_03_1_2"
+    },
+    {
+      "mesh": 12,
+      "name": "CAR_03_1_2_World ap_0"
+    },
+    {
+      "children": [
+        50
+      ],
+      "matrix": [
+        -0.21007729108572049,
+        3.1610136248958534e-08,
+        1.4852163249069428,
+        0,
+        -1.3716620910618795e-08,
+        1.4999999999999996,
+        -3.3864935426387606e-08,
+        0,
+        -1.485216324906943,
+        -1.8324268797452875e-08,
+        -0.21007729108572015,
+        0,
+        -661.16802978515625,
+        8.7452297210693359,
+        533.5748291015625,
+        1
+      ],
+      "name": "CAR_03_2_2"
+    },
+    {
+      "mesh": 13,
+      "name": "CAR_03_2_2_World ap_0"
+    },
+    {
+      "children": [
+        52
+      ],
+      "matrix": [
+        -0.32086795247014044,
+        4.9980013330641841e-08,
+        -1.4652794126301019,
+        0,
+        1.2207053530210628e-08,
+        1.4999999999999991,
+        4.84912072820936e-08,
+        0,
+        1.4652794126301028,
+        -1.551646555520468e-09,
+        -0.32086795247014077,
+        0,
+        574.3653564453125,
+        21.449604034423828,
+        -216.99188232421875,
+        1
+      ],
+      "name": "Car_04_2_2"
+    },
+    {
+      "mesh": 14,
+      "name": "Car_04_2_2_World ap_0"
+    },
+    {
+      "children": [
+        54
+      ],
+      "matrix": [
+        -1.4999999999999942,
+        -1.8369703781394253e-16,
+        -1.3033193172977722e-07,
+        0,
+        1.3033193172977722e-07,
+        -6.6613381477509392e-16,
+        -1.4999999999999942,
+        0,
+        1.8369697825693842e-16,
+        -1.5,
+        6.6613381477509392e-16,
+        0,
+        -581.17236328125,
+        -14.732329368591309,
+        -559.034423828125,
+        1
+      ],
+      "name": "Car_08_1"
+    },
+    {
+      "mesh": 15,
+      "name": "Car_08_1_World ap.15_0"
+    },
+    {
+      "children": [
+        56
+      ],
+      "matrix": [
+        0,
+        0,
+        -1.5,
+        0,
+        1.5,
+        0,
+        0,
+        0,
+        0,
+        -1.5,
+        0,
+        0,
+        -6.1704864501953125,
+        -13.296236038208008,
+        785.61590576171875,
+        1
+      ],
+      "name": "Car_08"
+    },
+    {
+      "mesh": 16,
+      "name": "Car_08_World ap.16_0"
+    },
+    {
+      "children": [
+        58
+      ],
+      "matrix": [
+        1.4989820157445062,
+        -5.2041704279304213e-18,
+        -0.055253203296616267,
+        0,
+        0.055253203296616267,
+        0,
+        1.4989820157445062,
+        0,
+        -5.2041704279304213e-18,
+        -1.5,
+        0,
+        0,
+        565.8494873046875,
+        -12.940871238708496,
+        -425.91354370117188,
+        1
+      ],
+      "name": "Car_08_5"
+    },
+    {
+      "mesh": 17,
+      "name": "Car_08_5_World ap.17_0"
+    },
+    {
+      "children": [
+        60
+      ],
+      "matrix": [
+        0.66168096130125398,
+        0,
+        1.3461717221259137,
+        0,
+        8.4991638969917259e-09,
+        1.5,
+        -4.1775761926845635e-09,
+        0,
+        -1.3461717221259137,
+        9.4703711539523316e-09,
+        0.66168096130125398,
+        0,
+        -932.31732177734375,
+        14.663172721862793,
+        -406.06472778320312,
+        1
+      ],
+      "name": "CAR_03_2_3"
+    },
+    {
+      "mesh": 18,
+      "name": "CAR_03_2_3_World ap_0"
+    },
+    {
+      "children": [
+        62
+      ],
+      "matrix": [
+        0,
+        0,
+        -1.5,
+        0,
+        1.5,
+        0,
+        0,
+        0,
+        0,
+        -1.5,
+        0,
+        0,
+        -6.1704864501953125,
+        -13.296236038208008,
+        1020.4228515625,
+        1
+      ],
+      "name": "Car_08_6"
+    },
+    {
+      "mesh": 19,
+      "name": "Car_08_6_World ap.19_0"
+    },
+    {
+      "children": [
+        64
+      ],
+      "matrix": [
+        1.4927536270573525,
+        -2.2351741790771481e-08,
+        -0.14726373928132516,
+        0,
+        1.9588311716432136e-08,
+        1.4999999999999996,
+        -2.911164244806574e-08,
+        0,
+        0.14726373928132552,
+        2.7047907882917953e-08,
+        1.4927536270573525,
+        0,
+        940.96563720703125,
+        14.663174629211426,
+        -243.44924926757812,
+        1
+      ],
+      "name": "CAR_03_3"
+    },
+    {
+      "mesh": 20,
+      "name": "CAR_03_3_World ap_0"
+    },
+    {
+      "children": [
+        66,
+        81,
+        86,
+        91,
+        96
+      ],
+      "matrix": [
+        6.2522692578781403e-08,
+        0,
+        -0.99999999999999811,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0.99999999999999811,
+        0,
+        6.2522692578781403e-08,
+        0,
+        -858.07000732421875,
+        -53.778575897216797,
+        24.51386833190918,
+        1
+      ],
+      "name": "Block_2"
+    },
+    {
+      "children": [
+        67,
+        69,
+        71,
+        73,
+        75,
+        77,
+        79
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -152.77236938476562,
+        -44.680438995361328,
+        -137.83876037597656,
+        1
+      ],
+      "name": "Lights"
+    },
+    {
+      "children": [
+        68
+      ],
+      "matrix": [
+        1.9710513021742315e-07,
+        -4.1359030627651384e-25,
+        0.99999999999998057,
+        0,
+        5.2787170802847685e-09,
+        1,
+        -1.040462217029134e-15,
+        0,
+        -0.99999999999998057,
+        5.278717080284871e-09,
+        1.9710513021742315e-07,
+        0,
+        474.59854125976562,
+        66.933815002441406,
+        -256.17816162109375,
+        1
+      ],
+      "name": "traffic_light"
+    },
+    {
+      "mesh": 21,
+      "name": "traffic_light_World ap_0"
+    },
+    {
+      "children": [
+        70
+      ],
+      "matrix": [
+        1.9440969811768127e-07,
+        2.0679515313825692e-25,
+        -0.99999999999998113,
+        0,
+        2.5566349160150352e-09,
+        1,
+        4.9703462239026597e-16,
+        0,
+        0.99999999999998113,
+        -2.556634916015084e-09,
+        1.9440969811768127e-07,
+        0,
+        403.841552734375,
+        -14.340279579162598,
+        382.06204223632812,
+        1
+      ],
+      "name": "Light_3"
+    },
+    {
+      "mesh": 22,
+      "name": "Light_3_World ap_0"
+    },
+    {
+      "children": [
+        72
+      ],
+      "matrix": [
+        1.9440969811768127e-07,
+        2.0679515313825692e-25,
+        -0.99999999999998113,
+        0,
+        2.5566349160150352e-09,
+        1,
+        4.9703462239026597e-16,
+        0,
+        0.99999999999998113,
+        -2.556634916015084e-09,
+        1.9440969811768127e-07,
+        0,
+        -82.277122497558594,
+        -14.340290069580078,
+        382.06210327148438,
+        1
+      ],
+      "name": "Light_2"
+    },
+    {
+      "mesh": 23,
+      "name": "Light_2_World ap_0"
+    },
+    {
+      "children": [
+        74
+      ],
+      "matrix": [
+        1.9440969811768127e-07,
+        2.0679515313825692e-25,
+        0.99999999999998113,
+        0,
+        2.5566350706487811e-09,
+        1,
+        -4.9703465258235832e-16,
+        0,
+        -0.99999999999998113,
+        2.556635070648829e-09,
+        1.9440969811768127e-07,
+        0,
+        403.84149169921875,
+        -14.340295791625977,
+        -257.03958129882812,
+        1
+      ],
+      "name": "Light_1"
+    },
+    {
+      "mesh": 24,
+      "name": "Light_1_World ap_0"
+    },
+    {
+      "children": [
+        76
+      ],
+      "matrix": [
+        1.9440969811768127e-07,
+        2.0679515313825692e-25,
+        0.99999999999998113,
+        0,
+        2.5566350706487811e-09,
+        1,
+        -4.9703465258235832e-16,
+        0,
+        -0.99999999999998113,
+        2.556635070648829e-09,
+        1.9440969811768127e-07,
+        0,
+        -82.277191162109375,
+        -14.340273857116699,
+        -257.03952026367188,
+        1
+      ],
+      "name": "Light"
+    },
+    {
+      "mesh": 25,
+      "name": "Light_World ap_0"
+    },
+    {
+      "children": [
+        78
+      ],
+      "matrix": [
+        1.9710513021742315e-07,
+        -4.1359030627651384e-25,
+        0.99999999999998057,
+        0,
+        5.2787170802847685e-09,
+        1,
+        -1.040462217029134e-15,
+        0,
+        -0.99999999999998057,
+        5.278717080284871e-09,
+        1.9710513021742315e-07,
+        0,
+        -160.49176025390625,
+        66.933822631835938,
+        -256.17803955078125,
+        1
+      ],
+      "name": "traffic_light_1"
+    },
+    {
+      "mesh": 26,
+      "name": "traffic_light_1_World ap_0"
+    },
+    {
+      "children": [
+        80
+      ],
+      "matrix": [
+        1.9654105887223494e-07,
+        8.2718061255302767e-25,
+        0.99999999999998079,
+        0,
+        5.2787170190524275e-09,
+        1,
+        -1.0374846331761003e-15,
+        0,
+        -0.99999999999998079,
+        5.2787170190525301e-09,
+        1.9654105887223494e-07,
+        0,
+        474.59866333007812,
+        66.933837890625,
+        379.60708618164062,
+        1
+      ],
+      "name": "traffic_light_2"
+    },
+    {
+      "mesh": 27,
+      "name": "traffic_light_2_World ap_0"
+    },
+    {
+      "children": [
+        82,
+        84
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        1.9013911485671997,
+        -22.362026214599609,
+        -74.237197875976562,
+        1
+      ],
+      "name": "Base_1"
+    },
+    {
+      "children": [
+        83
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -1.2707886298812809e-07,
+        -2.8427059650421143,
+        0,
+        1
+      ],
+      "name": "Floor_4"
+    },
+    {
+      "mesh": 28,
+      "name": "Floor_4_World ap_0"
+    },
+    {
+      "children": [
+        85
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        1.2707886298812809e-07,
+        2.8427059650421143,
+        0,
+        1
+      ],
+      "name": "Floor"
+    },
+    {
+      "mesh": 29,
+      "name": "Floor_World ap_0"
+    },
+    {
+      "children": [
+        87,
+        89
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        2.9582283945787982e-31,
+        0,
+        0,
+        -2.9582283945787982e-31,
+        1,
+        0,
+        -194.20205688476562,
+        -41.068439483642578,
+        -31.505508422851562,
+        1
+      ],
+      "name": "Bushes"
+    },
+    {
+      "children": [
+        88
+      ],
+      "matrix": [
+        -0.999999999999996,
+        1.2246467991473515e-16,
+        9.2325014866896676e-08,
+        0,
+        4.2497142314860564e-15,
+        0.999999999999999,
+        4.4703481039472196e-08,
+        0,
+        -9.232501486689657e-08,
+        4.4703481039472395e-08,
+        -0.99999999999999512,
+        0,
+        3.1415956020355225,
+        -17.392654418945312,
+        -42.033069610595703,
+        1
+      ],
+      "name": "Bed"
+    },
+    {
+      "mesh": 30,
+      "name": "Bed_World ap_0"
+    },
+    {
+      "children": [
+        90
+      ],
+      "matrix": [
+        0.17114240591771201,
+        0.95915612362932545,
+        0.22523278491610293,
+        0,
+        0.0071408948075809553,
+        0.22739199426473156,
+        -0.97377712468801381,
+        0,
+        -0.98522042433053758,
+        0.16826292357104294,
+        0.032067180002008477,
+        0,
+        -1.0472195148468018,
+        5.7975516319274902,
+        -183.50408935546875,
+        1
+      ],
+      "name": "Bushes_3"
+    },
+    {
+      "mesh": 31,
+      "name": "Bushes_3_World ap_0"
+    },
+    {
+      "children": [
+        92,
+        94
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        263.14361572265625,
+        -41.068439483642578,
+        -31.505537033081055,
+        1
+      ],
+      "name": "Bushes_1"
+    },
+    {
+      "children": [
+        93
+      ],
+      "matrix": [
+        -0.999999999999996,
+        1.2246467991473475e-16,
+        9.2325014866896676e-08,
+        0,
+        4.2497142314860564e-15,
+        0.999999999999999,
+        4.4703481039472196e-08,
+        0,
+        -9.232501486689657e-08,
+        4.4703481039472395e-08,
+        -0.99999999999999512,
+        0,
+        3.1415956020355225,
+        -17.392654418945312,
+        -42.033069610595703,
+        1
+      ],
+      "name": "Bed_2"
+    },
+    {
+      "mesh": 32,
+      "name": "Bed_2_World ap_0"
+    },
+    {
+      "children": [
+        95
+      ],
+      "matrix": [
+        0.17114240591771201,
+        0.95915612362932534,
+        0.22523278491610299,
+        0,
+        0.0071408948075811218,
+        0.22739199426473178,
+        -0.97377712468801358,
+        0,
+        -0.98522042433053747,
+        0.16826292357104283,
+        0.032067180002008477,
+        0,
+        -1.0472195148468018,
+        5.7975516319274902,
+        -183.50408935546875,
+        1
+      ],
+      "name": "Bushes_3_2"
+    },
+    {
+      "mesh": 33,
+      "name": "Bushes_3_2_World ap_0"
+    },
+    {
+      "children": [
+        97
+      ],
+      "matrix": [
+        0.99999999999999711,
+        0,
+        7.5515671493775445e-08,
+        0,
+        -7.5515671493775445e-08,
+        -3.7747582837255322e-15,
+        0.99999999999999711,
+        0,
+        2.779326858178173e-22,
+        -1,
+        -3.7747582837255322e-15,
+        0,
+        0.00038776744622737169,
+        104.49887847900391,
+        143.57933044433594,
+        1
+      ],
+      "name": "House"
+    },
+    {
+      "mesh": 34,
+      "name": "House_World ap_0"
+    },
+    {
+      "children": [
+        99,
+        101,
+        103,
+        112,
+        117,
+        132
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        84.723274230957031,
+        -88.641670227050781,
+        8.4532594680786133,
+        1
+      ],
+      "name": "Block_4"
+    },
+    {
+      "children": [
+        100
+      ],
+      "matrix": [
+        0,
+        0,
+        -1,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        -1,
+        0,
+        0,
+        138.12872314453125,
+        -19.652130126953125,
+        19.719945907592773,
+        1
+      ],
+      "name": "Bench_1"
+    },
+    {
+      "mesh": 35,
+      "name": "Bench_1_World ap_0"
+    },
+    {
+      "children": [
+        102
+      ],
+      "matrix": [
+        6.2522692578781403e-08,
+        0,
+        0.99999999999999811,
+        0,
+        0,
+        1,
+        0,
+        0,
+        -0.99999999999999811,
+        0,
+        6.2522692578781403e-08,
+        0,
+        131.58216857910156,
+        -47.961521148681641,
+        121.88463592529297,
+        1
+      ],
+      "name": "House_2"
+    },
+    {
+      "mesh": 36,
+      "name": "House_2_World ap_0"
+    },
+    {
+      "children": [
+        104,
+        106,
+        108,
+        110
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -201.53298950195312,
+        -9.8173484802246094,
+        -54.040645599365234,
+        1
+      ],
+      "name": "Lights_2"
+    },
+    {
+      "children": [
+        105
+      ],
+      "matrix": [
+        9.4243216564038335e-08,
+        3.3087224502121107e-24,
+        -0.99999999999999556,
+        0,
+        -4.214684851089383e-08,
+        0.99999999999999911,
+        -3.9720545678565406e-15,
+        0,
+        0.99999999999999467,
+        4.2146848510894015e-08,
+        9.4243216564038335e-08,
+        0,
+        342.30673217773438,
+        -14.340261459350586,
+        382.06210327148438,
+        1
+      ],
+      "name": "Light_3_2"
+    },
+    {
+      "mesh": 37,
+      "name": "Light_3_2_World ap_0"
+    },
+    {
+      "children": [
+        107
+      ],
+      "matrix": [
+        9.4243216564038335e-08,
+        3.3087224502121107e-24,
+        -0.99999999999999556,
+        0,
+        -4.214684851089383e-08,
+        0.99999999999999911,
+        -3.9720545678565406e-15,
+        0,
+        0.99999999999999467,
+        4.2146848510894015e-08,
+        9.4243216564038335e-08,
+        0,
+        -82.27716064453125,
+        -14.340293884277344,
+        382.06210327148438,
+        1
+      ],
+      "name": "Light_2_2"
+    },
+    {
+      "mesh": 38,
+      "name": "Light_2_2_World ap_0"
+    },
+    {
+      "children": [
+        109
+      ],
+      "matrix": [
+        9.4243215675859915e-08,
+        -3.3087224502121107e-24,
+        0.99999999999999556,
+        0,
+        -4.2146848510893843e-08,
+        0.99999999999999911,
+        3.9720545347693161e-15,
+        0,
+        -0.99999999999999467,
+        -4.2146848510894028e-08,
+        9.4243215675859915e-08,
+        0,
+        342.30673217773438,
+        -14.340277671813965,
+        -262.32623291015625,
+        1
+      ],
+      "name": "Light_1_2"
+    },
+    {
+      "mesh": 39,
+      "name": "Light_1_2_World ap_0"
+    },
+    {
+      "children": [
+        111
+      ],
+      "matrix": [
+        9.4243215675859915e-08,
+        -3.3087224502121107e-24,
+        0.99999999999999556,
+        0,
+        -4.2146848510893843e-08,
+        0.99999999999999911,
+        3.9720545347693161e-15,
+        0,
+        -0.99999999999999467,
+        -4.2146848510894028e-08,
+        9.4243215675859915e-08,
+        0,
+        -82.27716064453125,
+        -14.340277671813965,
+        -262.32623291015625,
+        1
+      ],
+      "name": "Light_2_3"
+    },
+    {
+      "mesh": 40,
+      "name": "Light_2_3_World ap_0"
+    },
+    {
+      "children": [
+        113,
+        115
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -66.162193298339844,
+        12.501072883605957,
+        7.2961111068725586,
+        1
+      ],
+      "name": "Base"
+    },
+    {
+      "children": [
+        114
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        -0.85749071836471558,
+        0,
+        1
+      ],
+      "name": "Floor_4_2"
+    },
+    {
+      "mesh": 41,
+      "name": "Floor_4_2_World ap_0"
+    },
+    {
+      "children": [
+        116
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        4.8279213905334473,
+        0,
+        1
+      ],
+      "name": "Floor_2"
+    },
+    {
+      "mesh": 42,
+      "name": "Floor_2_World ap_0"
+    },
+    {
+      "children": [
+        118,
+        120,
+        122,
+        124,
+        126,
+        128,
+        130
+      ],
+      "matrix": [
+        6.2522692578781403e-08,
+        0,
+        0.99999999999999811,
+        0,
+        0,
+        1,
+        0,
+        0,
+        -0.99999999999999811,
+        0,
+        6.2522692578781403e-08,
+        0,
+        -73.047286987304688,
+        -36.012382507324219,
+        -229.55169677734375,
+        1
+      ],
+      "name": "Trees"
+    },
+    {
+      "children": [
+        119
+      ],
+      "matrix": [
+        1,
+        0,
+        -2.646977960169688e-23,
+        0,
+        0,
+        1,
+        0,
+        0,
+        2.646977960169688e-23,
+        0,
+        1,
+        0,
+        -9.322514533996582,
+        -17.955022811889648,
+        195.55067443847656,
+        1
+      ],
+      "name": "Firtree_47"
+    },
+    {
+      "mesh": 43,
+      "name": "Firtree_47_World ap_0"
+    },
+    {
+      "children": [
+        121
+      ],
+      "matrix": [
+        1,
+        0,
+        -2.646977960169688e-23,
+        0,
+        0,
+        1,
+        0,
+        0,
+        2.646977960169688e-23,
+        0,
+        1,
+        0,
+        8.9936008453369141,
+        9.3294849395751953,
+        112.13507843017578,
+        1
+      ],
+      "name": "Firtree_3"
+    },
+    {
+      "mesh": 44,
+      "name": "Firtree_3_World ap_0"
+    },
+    {
+      "children": [
+        123
+      ],
+      "matrix": [
+        1,
+        0,
+        -2.646977960169688e-23,
+        0,
+        0,
+        1,
+        0,
+        0,
+        2.646977960169688e-23,
+        0,
+        1,
+        0,
+        4.2952919006347656,
+        1.0836267471313477,
+        31.603199005126953,
+        1
+      ],
+      "name": "Firtree_2"
+    },
+    {
+      "mesh": 45,
+      "name": "Firtree_2_World ap_0"
+    },
+    {
+      "children": [
+        125
+      ],
+      "matrix": [
+        1,
+        0,
+        -2.646977960169688e-23,
+        0,
+        0,
+        1,
+        0,
+        0,
+        2.646977960169688e-23,
+        0,
+        1,
+        0,
+        -9.6140661239624023,
+        -11.24543571472168,
+        -45.04547119140625,
+        1
+      ],
+      "name": "Firtree_1"
+    },
+    {
+      "mesh": 46,
+      "name": "Firtree_1_World ap_0"
+    },
+    {
+      "children": [
+        127
+      ],
+      "matrix": [
+        1,
+        0,
+        -2.646977960169688e-23,
+        0,
+        0,
+        1,
+        0,
+        0,
+        2.646977960169688e-23,
+        0,
+        1,
+        0,
+        -3.0458920001983643,
+        -11.959982872009277,
+        -133.05636596679688,
+        1
+      ],
+      "name": "Firtree"
+    },
+    {
+      "mesh": 47,
+      "name": "Firtree_World ap_0"
+    },
+    {
+      "children": [
+        129
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -19.840900421142578,
+        13.995558738708496,
+        -8.4764480590820312,
+        1
+      ],
+      "name": "Cube_7"
+    },
+    {
+      "mesh": 48,
+      "name": "Cube_7_World ap_0"
+    },
+    {
+      "children": [
+        131
+      ],
+      "matrix": [
+        0.68573760239169723,
+        -3.0654856193185073e-08,
+        -0.72784884465532096,
+        0,
+        4.4703483581542631e-08,
+        0.999999999999999,
+        4.7490335757988352e-15,
+        0,
+        0.72784884465532029,
+        -3.2537382133484814e-08,
+        0.6857376023916979,
+        0,
+        8.2082462310791016,
+        -0.78180360794067383,
+        -227.08114624023438,
+        1
+      ],
+      "name": "Firtree_4"
+    },
+    {
+      "mesh": 49,
+      "name": "Firtree_4_World ap_0"
+    },
+    {
+      "children": [
+        133
+      ],
+      "matrix": [
+        0,
+        0,
+        -1,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        -1,
+        0,
+        0,
+        138.12872314453125,
+        -19.652130126953125,
+        -109.69647979736328,
+        1
+      ],
+      "name": "Bench"
+    },
+    {
+      "mesh": 50,
+      "name": "Bench_World ap_0"
+    },
+    {
+      "children": [
+        135,
+        137,
+        139,
+        152,
+        157,
+        172,
+        174,
+        176
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        77.486320495605469,
+        -88.641670227050781,
+        -941.2847900390625,
+        1
+      ],
+      "name": "Block_1"
+    },
+    {
+      "children": [
+        136
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        111.52333068847656,
+        20.053009033203125,
+        89.048980712890625,
+        1
+      ],
+      "name": "Muff_1"
+    },
+    {
+      "mesh": 51,
+      "name": "Muff_1_World ap_0"
+    },
+    {
+      "children": [
+        138
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        111.52333068847656,
+        20.053009033203125,
+        188.91305541992188,
+        1
+      ],
+      "name": "Muff"
+    },
+    {
+      "mesh": 52,
+      "name": "Muff_World ap_0"
+    },
+    {
+      "children": [
+        140,
+        142,
+        144,
+        146,
+        148,
+        150
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -201.53298950195312,
+        -9.8173484802246094,
+        -54.040645599365234,
+        1
+      ],
+      "name": "Lights_3"
+    },
+    {
+      "children": [
+        141
+      ],
+      "matrix": [
+        9.4243216564038335e-08,
+        3.3087224502121107e-24,
+        -0.99999999999999556,
+        0,
+        -4.214684851089383e-08,
+        0.99999999999999911,
+        -3.9720545678565406e-15,
+        0,
+        0.99999999999999467,
+        4.2146848510894015e-08,
+        9.4243216564038335e-08,
+        0,
+        342.30673217773438,
+        -14.340261459350586,
+        382.06210327148438,
+        1
+      ],
+      "name": "Light_3_3"
+    },
+    {
+      "mesh": 53,
+      "name": "Light_3_3_World ap_0"
+    },
+    {
+      "children": [
+        143
+      ],
+      "matrix": [
+        9.4243216564038335e-08,
+        3.3087224502121107e-24,
+        -0.99999999999999556,
+        0,
+        -4.214684851089383e-08,
+        0.99999999999999911,
+        -3.9720545678565406e-15,
+        0,
+        0.99999999999999467,
+        4.2146848510894015e-08,
+        9.4243216564038335e-08,
+        0,
+        -82.27716064453125,
+        -14.340293884277344,
+        382.06210327148438,
+        1
+      ],
+      "name": "Light_2_4"
+    },
+    {
+      "mesh": 54,
+      "name": "Light_2_4_World ap_0"
+    },
+    {
+      "children": [
+        145
+      ],
+      "matrix": [
+        9.4243215675859915e-08,
+        -3.3087224502121107e-24,
+        0.99999999999999556,
+        0,
+        -4.2146848510893843e-08,
+        0.99999999999999911,
+        3.9720545347693161e-15,
+        0,
+        -0.99999999999999467,
+        -4.2146848510894028e-08,
+        9.4243215675859915e-08,
+        0,
+        342.30673217773438,
+        -14.340277671813965,
+        -262.32623291015625,
+        1
+      ],
+      "name": "Light_1_3"
+    },
+    {
+      "mesh": 55,
+      "name": "Light_1_3_World ap_0"
+    },
+    {
+      "children": [
+        147
+      ],
+      "matrix": [
+        9.4243215675859915e-08,
+        -3.3087224502121107e-24,
+        0.99999999999999556,
+        0,
+        -4.2146848510893843e-08,
+        0.99999999999999911,
+        3.9720545347693161e-15,
+        0,
+        -0.99999999999999467,
+        -4.2146848510894028e-08,
+        9.4243215675859915e-08,
+        0,
+        -82.27716064453125,
+        -14.340277671813965,
+        -262.32623291015625,
+        1
+      ],
+      "name": "Light_3_4"
+    },
+    {
+      "mesh": 56,
+      "name": "Light_3_4_World ap_0"
+    },
+    {
+      "children": [
+        149
+      ],
+      "matrix": [
+        -0.999999999999996,
+        -4.4703483704007495e-08,
+        8.2966151940408107e-08,
+        0,
+        -4.4703480207245451e-08,
+        0.99999999999999811,
+        4.2146852352938068e-08,
+        0,
+        -8.2966153824519079e-08,
+        4.2146848644062153e-08,
+        -0.999999999999996,
+        0,
+        456.3272705078125,
+        -14.340261459350586,
+        37.5616455078125,
+        1
+      ],
+      "name": "Light_4"
+    },
+    {
+      "mesh": 57,
+      "name": "Light_4_World ap_0"
+    },
+    {
+      "children": [
+        151
+      ],
+      "matrix": [
+        -0.999999999999996,
+        -4.4703483704007495e-08,
+        8.2966151940408107e-08,
+        0,
+        -4.4703480207245451e-08,
+        0.99999999999999811,
+        4.2146852352938068e-08,
+        0,
+        -8.2966153824519079e-08,
+        4.2146848644062153e-08,
+        -0.999999999999996,
+        0,
+        456.3272705078125,
+        -14.340261459350586,
+        1034.843505859375,
+        1
+      ],
+      "name": "Light_5"
+    },
+    {
+      "mesh": 58,
+      "name": "Light_5_World ap_0"
+    },
+    {
+      "children": [
+        153,
+        155
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -66.162193298339844,
+        12.501072883605957,
+        7.2961111068725586,
+        1
+      ],
+      "name": "Base_2"
+    },
+    {
+      "children": [
+        154
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        -0.85749071836471558,
+        0,
+        1
+      ],
+      "name": "Floor_4_3"
+    },
+    {
+      "mesh": 59,
+      "name": "Floor_4_3_World ap_0"
+    },
+    {
+      "children": [
+        156
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        4.8279213905334473,
+        0,
+        1
+      ],
+      "name": "Floor_3"
+    },
+    {
+      "mesh": 60,
+      "name": "Floor_3_World ap_0"
+    },
+    {
+      "children": [
+        158,
+        160,
+        162,
+        164,
+        166,
+        168,
+        170
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -305.4674072265625,
+        -36.01239013671875,
+        2.8684186935424805,
+        1
+      ],
+      "name": "Trees_2"
+    },
+    {
+      "children": [
+        159
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -9.3224935531616211,
+        -17.955022811889648,
+        195.55067443847656,
+        1
+      ],
+      "name": "Firtree_47_2"
+    },
+    {
+      "mesh": 61,
+      "name": "Firtree_47_2_World ap_0"
+    },
+    {
+      "children": [
+        161
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        8.9936122894287109,
+        9.3294849395751953,
+        112.13507843017578,
+        1
+      ],
+      "name": "Firtree_3_2"
+    },
+    {
+      "mesh": 62,
+      "name": "Firtree_3_2_World ap_0"
+    },
+    {
+      "children": [
+        163
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        4.295295238494873,
+        1.0836268663406372,
+        31.603199005126953,
+        1
+      ],
+      "name": "Firtree_2_2"
+    },
+    {
+      "mesh": 63,
+      "name": "Firtree_2_2_World ap_0"
+    },
+    {
+      "children": [
+        165
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -9.614069938659668,
+        -11.24543571472168,
+        -45.04547119140625,
+        1
+      ],
+      "name": "Firtree_1_2"
+    },
+    {
+      "mesh": 64,
+      "name": "Firtree_1_2_World ap_0"
+    },
+    {
+      "children": [
+        167
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -3.045905590057373,
+        -11.959983825683594,
+        -133.05636596679688,
+        1
+      ],
+      "name": "Firtree_2_3"
+    },
+    {
+      "mesh": 65,
+      "name": "Firtree_2_3_World ap_0"
+    },
+    {
+      "children": [
+        169
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -18.898706436157227,
+        13.99555778503418,
+        -1.5777350664138794,
+        1
+      ],
+      "name": "Cube_7_2"
+    },
+    {
+      "mesh": 66,
+      "name": "Cube_7_2_World ap_0"
+    },
+    {
+      "children": [
+        171
+      ],
+      "matrix": [
+        0.68573752506933949,
+        0,
+        -0.72784891750402225,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0.72784891750402225,
+        0,
+        0.68573752506933949,
+        0,
+        8.208221435546875,
+        -0.78180325031280518,
+        -227.08114624023438,
+        1
+      ],
+      "name": "Firtree_4_2"
+    },
+    {
+      "mesh": 67,
+      "name": "Firtree_4_2_World ap_0"
+    },
+    {
+      "children": [
+        173
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        2.2204460492503131e-16,
+        1,
+        0,
+        0,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        -186.91551208496094,
+        -19.652130126953125,
+        -230.34255981445312,
+        1
+      ],
+      "name": "Bench_2"
+    },
+    {
+      "mesh": 68,
+      "name": "Bench_2_World ap_0"
+    },
+    {
+      "children": [
+        175
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        2.2204460492503131e-16,
+        1,
+        0,
+        0,
+        -1,
+        2.2204460492503131e-16,
+        0,
+        -186.91551208496094,
+        -19.652130126953125,
+        -152.01170349121094,
+        1
+      ],
+      "name": "Behch"
+    },
+    {
+      "mesh": 69,
+      "name": "Behch_World ap_0"
+    },
+    {
+      "children": [
+        177
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -82.284980773925781,
+        5.9581599235534668,
+        -23.080223083496094,
+        1
+      ],
+      "name": "House_3"
+    },
+    {
+      "mesh": 70,
+      "name": "House_3_World ap_0"
+    },
+    {
+      "children": [
+        179,
+        181,
+        183,
+        185,
+        192,
+        197,
+        212
+      ],
+      "matrix": [
+        6.2522692578781403e-08,
+        0,
+        -0.99999999999999811,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0.99999999999999811,
+        0,
+        6.2522692578781403e-08,
+        0,
+        -938.46307373046875,
+        -88.641670227050781,
+        -995.2442626953125,
+        1
+      ],
+      "name": "Block_3"
+    },
+    {
+      "children": [
+        180
+      ],
+      "matrix": [
+        0.99999999999999989,
+        0,
+        -1.5078019721670447e-08,
+        0,
+        1.5078019721670447e-08,
+        2.55351295663786e-15,
+        0.99999999999999989,
+        0,
+        3.9704669402545328e-23,
+        -1,
+        2.55351295663786e-15,
+        0,
+        -65.33612060546875,
+        -36.632900238037109,
+        -123.33483123779297,
+        1
+      ],
+      "name": "Shop"
+    },
+    {
+      "mesh": 71,
+      "name": "Shop_World ap_0"
+    },
+    {
+      "children": [
+        182
+      ],
+      "matrix": [
+        0.999999999999999,
+        -7.3468396926392969e-40,
+        4.3562654816753372e-08,
+        0,
+        -5.3348865783698038e-24,
+        -1,
+        1.224646799147352e-16,
+        0,
+        4.3562654816753372e-08,
+        -1.224646799147353e-16,
+        -0.99999999999999911,
+        0,
+        46.263298034667969,
+        -28.068424224853516,
+        47.978172302246094,
+        1
+      ],
+      "name": "Trash"
+    },
+    {
+      "mesh": 72,
+      "name": "Trash_World ap_0"
+    },
+    {
+      "children": [
+        184
+      ],
+      "matrix": [
+        0.999999999999999,
+        -7.3468396926392969e-40,
+        4.3562654816753372e-08,
+        0,
+        -5.3348865783698038e-24,
+        -1,
+        1.224646799147352e-16,
+        0,
+        4.3562654816753372e-08,
+        -1.224646799147353e-16,
+        -0.99999999999999911,
+        0,
+        -82.156120300292969,
+        -28.068435668945312,
+        47.978179931640625,
+        1
+      ],
+      "name": "Trash_2"
+    },
+    {
+      "mesh": 73,
+      "name": "Trash_2_World ap_0"
+    },
+    {
+      "children": [
+        186,
+        188,
+        190
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -201.53298950195312,
+        -9.8173398971557617,
+        -54.040622711181641,
+        1
+      ],
+      "name": "Lights_4"
+    },
+    {
+      "children": [
+        187
+      ],
+      "matrix": [
+        1.9440969811768127e-07,
+        2.0679515313825692e-25,
+        -0.99999999999998113,
+        0,
+        2.5566349160150352e-09,
+        1,
+        4.9703462239026597e-16,
+        0,
+        0.99999999999998113,
+        -2.556634916015084e-09,
+        1.9440969811768127e-07,
+        0,
+        413.75408935546875,
+        -15.933650016784668,
+        144.86747741699219,
+        1
+      ],
+      "name": "Light_3_5"
+    },
+    {
+      "mesh": 74,
+      "name": "Light_3_5_World ap_0"
+    },
+    {
+      "children": [
+        189
+      ],
+      "matrix": [
+        1.9440969811768127e-07,
+        2.0679515313825692e-25,
+        -0.99999999999998113,
+        0,
+        2.5566349160150352e-09,
+        1,
+        4.9703462239026597e-16,
+        0,
+        0.99999999999998113,
+        -2.556634916015084e-09,
+        1.9440969811768127e-07,
+        0,
+        -134.67507934570312,
+        -15.93366527557373,
+        145.28273010253906,
+        1
+      ],
+      "name": "Light_2_5"
+    },
+    {
+      "mesh": 75,
+      "name": "Light_2_5_World ap_0"
+    },
+    {
+      "children": [
+        191
+      ],
+      "matrix": [
+        1.9326417666221118e-07,
+        0,
+        0.99999999999998135,
+        0,
+        -2.5566350706487914e-09,
+        1,
+        4.9410597206072911e-16,
+        0,
+        -0.99999999999998135,
+        -2.556635070648839e-09,
+        1.9326417666221118e-07,
+        0,
+        154.50833129882812,
+        -15.933650016784668,
+        -264.62918090820312,
+        1
+      ],
+      "name": "Light_4_2"
+    },
+    {
+      "mesh": 76,
+      "name": "Light_4_2_World ap_0"
+    },
+    {
+      "children": [
+        193,
+        195
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        -66.162185668945312,
+        12.501075744628906,
+        7.2961182594299316,
+        1
+      ],
+      "name": "Base_3"
+    },
+    {
+      "children": [
+        194
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        2.2485664885607548e-07,
+        5.0299587249755859,
+        0,
+        1
+      ],
+      "name": "Floor_4_4"
+    },
+    {
+      "mesh": 77,
+      "name": "Floor_4_4_World ap_0"
+    },
+    {
+      "children": [
+        196
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        0,
+        70.758964538574219,
+        3.3909292221069336,
+        277.5018310546875,
+        1
+      ],
+      "name": "Floor_4_5"
+    },
+    {
+      "mesh": 78,
+      "name": "Floor_4_5_World ap_0"
+    },
+    {
+      "children": [
+        198,
+        200,
+        202,
+        204,
+        206,
+        208,
+        210
+      ],
+      "matrix": [
+        -0.99999999999998845,
+        1.2246467991473357e-16,
+        1.5308274105042081e-07,
+        0,
+        -6.7208667321032109e-15,
+        0.999999999999999,
+        -4.4703481039471859e-08,
+        0,
+        -1.5308274105042065e-07,
+        -4.4703481039472362e-08,
+        -0.99999999999998757,
+        0,
+        -356.01425170898438,
+        -14.546416282653809,
+        -70.984123229980469,
+        1
+      ],
+      "name": "Bushes_1_2"
+    },
+    {
+      "children": [
+        199
+      ],
+      "matrix": [
+        -0.99999999999998912,
+        -5.8956244079654845e-15,
+        -1.4882959765739133e-07,
+        0,
+        -1.2548826033703987e-14,
+        0.999999999999999,
+        4.4703484592185564e-08,
+        0,
+        1.4882959765739091e-07,
+        4.4703484592186941e-08,
+        -0.99999999999998801,
+        0,
+        2.8560011386871338,
+        -15.811504364013672,
+        -38.211883544921875,
+        1
+      ],
+      "name": "Bed_3"
+    },
+    {
+      "mesh": 79,
+      "name": "Bed_3_World ap_0"
+    },
+    {
+      "children": [
+        201
+      ],
+      "matrix": [
+        0.17114231574116057,
+        0.95915613532408828,
+        0.22523280363417758,
+        0,
+        0.0071409857723985781,
+        0.22739199475270111,
+        -0.97377712390699855,
+        0,
+        -0.98522043933576176,
+        0.16826285624743981,
+        0.03206707224712102,
+        0,
+        -0.95200091600418091,
+        5.2705016136169434,
+        177.883056640625,
+        1
+      ],
+      "name": "Bushes_15"
+    },
+    {
+      "mesh": 80,
+      "name": "Bushes_15_World ap_0"
+    },
+    {
+      "children": [
+        203
+      ],
+      "matrix": [
+        0.17114231574116057,
+        0.95915613532408828,
+        0.22523280363417758,
+        0,
+        0.0071409857723985781,
+        0.22739199475270111,
+        -0.97377712390699855,
+        0,
+        -0.98522043933576176,
+        0.16826285624743981,
+        0.03206707224712102,
+        0,
+        -0.9520002007484436,
+        5.2705016136169434,
+        -52.619766235351562,
+        1
+      ],
+      "name": "Bushes_2"
+    },
+    {
+      "mesh": 81,
+      "name": "Bushes_2_World ap_0"
+    },
+    {
+      "children": [
+        205
+      ],
+      "matrix": [
+        0.17114231574116057,
+        0.95915613532408828,
+        0.22523280363417758,
+        0,
+        0.0071409857723985781,
+        0.22739199475270111,
+        -0.97377712390699855,
+        0,
+        -0.98522043933576176,
+        0.16826285624743981,
+        0.03206707224712102,
+        0,
+        -0.95200049877166748,
+        5.2705016136169434,
+        49.296520233154297,
+        1
+      ],
+      "name": "Bushes_2_2"
+    },
+    {
+      "mesh": 82,
+      "name": "Bushes_2_2_World ap_0"
+    },
+    {
+      "children": [
+        207
+      ],
+      "matrix": [
+        -0.20844095105021521,
+        0.9591561338043918,
+        0.19123776015916299,
+        0,
+        0.97026467938141725,
+        0.22739203457614854,
+        -0.08294163343095684,
+        0,
+        -0.12303991982343526,
+        0.16826281109244368,
+        -0.97803313059073393,
+        0,
+        -20.424535751342773,
+        -28.775819778442383,
+        -82.210166931152344,
+        1
+      ],
+      "name": "Tree_1"
+    },
+    {
+      "mesh": 83,
+      "name": "Tree_1_World ap_0"
+    },
+    {
+      "children": [
+        209
+      ],
+      "matrix": [
+        0.17114231574116079,
+        0.95915613532408828,
+        0.22523280363417736,
+        0,
+        0.0071409857723984671,
+        0.22739199475270111,
+        -0.97377712390699833,
+        0,
+        -0.98522043933576153,
+        0.16826285624743992,
+        0.032067072247121242,
+        0,
+        -26.521291732788086,
+        -46.037933349609375,
+        12.043270111083984,
+        1
+      ],
+      "name": "Tree_2"
+    },
+    {
+      "mesh": 84,
+      "name": "Tree_2_World ap_0"
+    },
+    {
+      "children": [
+        211
+      ],
+      "matrix": [
+        0.25441956608645189,
+        0.95915611921364075,
+        -0.12365364275835009,
+        0,
+        -0.95347165569600911,
+        0.22739203536397512,
+        -0.1979511657892922,
+        0,
+        -0.16174821846528245,
+        0.1682628932000659,
+        0.9723811560264064,
+        0,
+        -39.242584228515625,
+        -27.907720565795898,
+        158.02482604980469,
+        1
+      ],
+      "name": "Tree_3"
+    },
+    {
+      "mesh": 85,
+      "name": "Tree_3_World ap_0"
+    },
+    {
+      "children": [
+        213,
+        215,
+        217,
+        219,
+        221,
+        223,
+        225
+      ],
+      "matrix": [
+        -0.99999999999998801,
+        1.2246467991473318e-16,
+        1.548856772951644e-07,
+        0,
+        -6.8014642583354845e-15,
+        0.999999999999999,
+        -4.4703481039471839e-08,
+        0,
+        -1.5488567729516424e-07,
+        -4.4703481039472355e-08,
+        -0.99999999999998712,
+        0,
+        180.93075561523438,
+        -14.546416282653809,
+        -70.984153747558594,
+        1
+      ],
+      "name": "Bushes_3_3"
+    },
+    {
+      "children": [
+        214
+      ],
+      "matrix": [
+        -0.99999999999998779,
+        -5.8956244079654782e-15,
+        -1.5488567507471806e-07,
+        0,
+        -1.2819553866001596e-14,
+        0.999999999999999,
+        4.4703485036274721e-08,
+        0,
+        1.5488567507471764e-07,
+        4.4703485036276177e-08,
+        -0.99999999999998668,
+        0,
+        2.8560013771057129,
+        -15.811504364013672,
+        -38.211883544921875,
+        1
+      ],
+      "name": "Bed_4"
+    },
+    {
+      "mesh": 86,
+      "name": "Bed_4_World ap_0"
+    },
+    {
+      "children": [
+        216
+      ],
+      "matrix": [
+        0.17114230941491582,
+        0.95915613638042374,
+        0.22523280394273648,
+        0,
+        0.0071409861245334549,
+        0.22739199479677741,
+        -0.97377712389412374,
+        0,
+        -0.98522044043213919,
+        0.16826285016639986,
+        0.032067070470831238,
+        0,
+        -0.95200127363204956,
+        5.2705016136169434,
+        177.883056640625,
+        1
+      ],
+      "name": "Bushes_15_2"
+    },
+    {
+      "mesh": 87,
+      "name": "Bushes_15_2_World ap_0"
+    },
+    {
+      "children": [
+        218
+      ],
+      "matrix": [
+        0.17114230941491604,
+        0.95915613638042374,
+        0.22523280394273643,
+        0,
+        0.0071409861245331219,
+        0.22739199479677752,
+        -0.97377712389412374,
+        0,
+        -0.98522044043213919,
+        0.16826285016639991,
+        0.032067070470831682,
+        0,
+        -0.95200014114379883,
+        5.2705016136169434,
+        -52.619766235351562,
+        1
+      ],
+      "name": "Bushes_2_3"
+    },
+    {
+      "mesh": 88,
+      "name": "Bushes_2_3_World ap_0"
+    },
+    {
+      "children": [
+        220
+      ],
+      "matrix": [
+        0.17114230941491604,
+        0.95915613638042374,
+        0.22523280394273643,
+        0,
+        0.0071409861245331219,
+        0.22739199479677752,
+        -0.97377712389412374,
+        0,
+        -0.98522044043213919,
+        0.16826285016639991,
+        0.032067070470831682,
+        0,
+        -0.95200061798095703,
+        5.2705016136169434,
+        49.296520233154297,
+        1
+      ],
+      "name": "Bushes_4"
+    },
+    {
+      "mesh": 89,
+      "name": "Bushes_4_World ap_0"
+    },
+    {
+      "children": [
+        222
+      ],
+      "matrix": [
+        0.17114230941491604,
+        0.95915613638042374,
+        0.22523280394273643,
+        0,
+        0.0071409861245331219,
+        0.22739199479677752,
+        -0.97377712389412374,
+        0,
+        -0.98522044043213919,
+        0.16826285016639991,
+        0.032067070470831682,
+        0,
+        -20.424535751342773,
+        -28.775819778442383,
+        -82.210166931152344,
+        1
+      ],
+      "name": "Tree_1_2"
+    },
+    {
+      "mesh": 90,
+      "name": "Tree_1_2_World ap_0"
+    },
+    {
+      "children": [
+        224
+      ],
+      "matrix": [
+        0.17114230941491604,
+        0.95915613638042374,
+        0.22523280394273643,
+        0,
+        0.0071409861245331219,
+        0.22739199479677752,
+        -0.97377712389412374,
+        0,
+        -0.98522044043213919,
+        0.16826285016639991,
+        0.032067070470831682,
+        0,
+        -34.946388244628906,
+        -27.90772819519043,
+        12.043268203735352,
+        1
+      ],
+      "name": "Tree_2_2"
+    },
+    {
+      "mesh": 91,
+      "name": "Tree_2_2_World ap_0"
+    },
+    {
+      "children": [
+        226
+      ],
+      "matrix": [
+        0.25441956038922808,
+        0.95915612078398516,
+        -0.12365364229964808,
+        0,
+        -0.95347165674263912,
+        0.22739202947889769,
+        -0.19795116750834102,
+        0,
+        -0.16174822125698654,
+        0.1682628922017137,
+        0.97238115573478456,
+        0,
+        -29.610383987426758,
+        -27.907720565795898,
+        158.02482604980469,
+        1
+      ],
+      "name": "Tree_3_2"
+    },
+    {
+      "mesh": 92,
+      "name": "Tree_3_2_World ap_0"
+    },
+    {
+      "children": [
+        228,
+        229,
+        231,
+        233,
+        235
+      ],
+      "matrix": [
+        -0.99999999999999623,
+        -1.2246469187596169e-16,
+        -8.6887954287358252e-08,
+        0,
+        8.6887954287358252e-08,
+        -4.4408920985006262e-16,
+        -0.99999999999999623,
+        0,
+        1.2246465217129228e-16,
+        -1,
+        4.4408920985006262e-16,
+        0,
+        -549.038330078125,
+        -127.66201019287109,
+        -453.77383422851562,
+        1
+      ],
+      "name": "ROAD"
+    },
+    {
+      "mesh": 93,
+      "name": "ROAD_World ap_0"
+    },
+    {
+      "children": [
+        230
+      ],
+      "matrix": [
+        -1.8230193798984828e-07,
+        -0.99999999999998335,
+        3.3306690738754696e-16,
+        0,
+        3.9424767672713301e-08,
+        -7.5495165674510645e-15,
+        -0.99999999999999922,
+        0,
+        0.99999999999998257,
+        -1.8230193810087059e-07,
+        3.9424767672713301e-08,
+        0,
+        -878.58538818359375,
+        -144.63273620605469,
+        -92.937583923339844,
+        1
+      ],
+      "name": "traffic_light_2_2"
+    },
+    {
+      "mesh": 94,
+      "name": "traffic_light_2_2_World ap_0"
+    },
+    {
+      "children": [
+        232
+      ],
+      "matrix": [
+        -1.8230193798984828e-07,
+        -0.99999999999998335,
+        3.3306690738754696e-16,
+        0,
+        3.9424767672713301e-08,
+        -7.5495165674510645e-15,
+        -0.99999999999999922,
+        0,
+        0.99999999999998257,
+        -1.8230193810087059e-07,
+        3.9424767672713301e-08,
+        0,
+        -241.85246276855469,
+        -144.63285827636719,
+        -92.937553405761719,
+        1
+      ],
+      "name": "traffic_light_1_2"
+    },
+    {
+      "mesh": 95,
+      "name": "traffic_light_1_2_World ap_0"
+    },
+    {
+      "children": [
+        234
+      ],
+      "matrix": [
+        -1.8230193798984828e-07,
+        -0.99999999999998335,
+        3.3306690738754696e-16,
+        0,
+        3.9424767672713301e-08,
+        -7.5495165674510645e-15,
+        -0.99999999999999922,
+        0,
+        0.99999999999998257,
+        -1.8230193810087059e-07,
+        3.9424767672713301e-08,
+        0,
+        -878.5853271484375,
+        175.52865600585938,
+        -92.937583923339844,
+        1
+      ],
+      "name": "traffic_light_2_3"
+    },
+    {
+      "mesh": 96,
+      "name": "traffic_light_2_3_World ap_0"
+    },
+    {
+      "children": [
+        236
+      ],
+      "matrix": [
+        1,
+        2.646977960169688e-23,
+        -4.2739796162811663e-32,
+        0,
+        -2.646977960169688e-23,
+        1,
+        -1.4791141972893965e-31,
+        0,
+        4.2739796162811663e-32,
+        1.4791141972893965e-31,
+        1,
+        0,
+        -106.27663421630859,
+        -127.72003173828125,
+        -0.40417826175689697,
+        1
+      ],
+      "name": "ROAD_Lines_12"
+    },
+    {
+      "mesh": 97,
+      "name": "ROAD_Lines_12_World ap_0"
+    },
+    {
+      "children": [
+        238
+      ],
+      "matrix": [
+        0,
+        0,
+        -1,
+        0,
+        1,
+        0,
+        0,
+        0,
+        0,
+        -1,
+        0,
+        0,
+        -434.04421997070312,
+        -237.44309997558594,
+        -451.9093017578125,
+        1
+      ],
+      "name": "Floor_5"
+    },
+    {
+      "children": [
+        239
+      ],
+      "matrix": [
+        1,
+        0,
+        0,
+        0,
+        0,
+        1,
+        2.2958450216584675e-49,
+        0,
+        0,
+        -2.2958450216584675e-49,
+        1,
+        0,
+        0,
+        0,
+        0,
+        1
+      ],
+      "name": "Floor_6"
+    },
+    {
+      "mesh": 98,
+      "name": "Floor_6_World ap_0"
+    }
+  ],
+  "samplers": [
+    {
+      "magFilter": 9729,
+      "minFilter": 9987,
+      "wrapS": 10497,
+      "wrapT": 10497
+    }
+  ],
+  "scene": 0,
+  "scenes": [
+    {
+      "name": "OSG_Scene",
+      "nodes": [
+        0
+      ]
+    }
+  ],
+  "textures": [
+    {
+      "sampler": 0,
+      "source": 0
+    },
+    {
+      "sampler": 0,
+      "source": 1
+    },
+    {
+      "sampler": 0,
+      "source": 2
+    },
+    {
+      "sampler": 0,
+      "source": 3
+    },
+    {
+      "sampler": 0,
+      "source": 4
+    },
+    {
+      "sampler": 0,
+      "source": 5
+    },
+    {
+      "sampler": 0,
+      "source": 6
+    },
+    {
+      "sampler": 0,
+      "source": 7
+    }
+  ]
+}
+

BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.11_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.15_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.16_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.17_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.19_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.8_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap.9_baseColor.jpeg


BIN
threejs/resources/models/cartoon_lowpoly_small_city_free_pack/textures/World_ap_baseColor.jpeg


+ 271 - 0
threejs/threejs-load-gltf-animated-cars.html

@@ -0,0 +1,271 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Animated Cars</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  let curve;
+  let curveObject;
+  {
+    const controlPoints = [
+      [1.118281, 5.115846, -3.681386],
+      [3.948875, 5.115846, -3.641834],
+      [3.960072, 5.115846, -0.240352],
+      [3.985447, 5.115846, 4.585005],
+      [-3.793631, 5.115846, 4.585006],
+      [-3.826839, 5.115846, -14.736200],
+      [-14.542292, 5.115846, -14.765865],
+      [-14.520929, 5.115846, -3.627002],
+      [-5.452815, 5.115846, -3.634418],
+      [-5.467251, 5.115846, 4.549161],
+      [-13.266233, 5.115846, 4.567083],
+      [-13.250067, 5.115846, -13.499271],
+      [4.081842, 5.115846, -13.435463],
+      [4.125436, 5.115846, -5.334928],
+      [-14.521364, 5.115846, -5.239871],
+      [-14.510466, 5.115846, 5.486727],
+      [5.745666, 5.115846, 5.510492],
+      [5.787942, 5.115846, -14.728308],
+      [-5.423720, 5.115846, -14.761919],
+      [-5.373599, 5.115846, -3.704133],
+      [1.004861, 5.115846, -3.641834],
+    ];
+    const p0 = new THREE.Vector3();
+    const p1 = new THREE.Vector3();
+    curve = new THREE.CatmullRomCurve3(
+      controlPoints.map((p, ndx) => {
+        p0.set(...p);
+        p1.set(...controlPoints[(ndx + 1) % controlPoints.length]);
+        return [
+          (new THREE.Vector3()).copy(p0),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.1),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.9),
+        ];
+      }).flat(),
+      true,
+    );
+    {
+      const points = curve.getPoints(250);
+      const geometry = new THREE.BufferGeometry().setFromPoints(points);
+      const material = new THREE.LineBasicMaterial({color: 0xff0000});
+      curveObject = new THREE.Line(geometry, material);
+      curveObject.scale.set(100, 100, 100);
+      curveObject.position.y = -621;
+      curveObject.visible = false;
+      material.depthTest = false;
+      curveObject.renderOrder = 1;
+      scene.add(curveObject);
+    }
+  }
+
+  const cars = [];
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+
+      const loadedCars = root.getObjectByName('Cars');
+      const fixes = [
+        { prefix: 'Car_08', y: 0,  rot: [Math.PI * .5, 0, Math.PI * .5], },
+        { prefix: 'CAR_03', y: 33, rot: [0, Math.PI, 0], },
+        { prefix: 'Car_04', y: 40, rot: [0, Math.PI, 0], },
+      ];
+
+      root.updateMatrixWorld();
+      for (const car of loadedCars.children.slice()) {
+        const fix = fixes.find(fix => car.name.startsWith(fix.prefix));
+        const obj = new THREE.Object3D();
+        car.getWorldPosition(obj.position);
+        car.position.set(0, fix.y, 0);
+        car.rotation.set(...fix.rot);
+        obj.add(car);
+        scene.add(obj);
+        cars.push(obj);
+      }
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  // create 2 Vector3s we can use for path calculations
+  const carPosition = new THREE.Vector3();
+  const carTarget = new THREE.Vector3();
+
+  function render(time) {
+    time *= 0.001;  // convert to seconds
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    {
+      const pathTime = time * .01;
+      const targetOffset = 0.01;
+      cars.forEach((car, ndx) => {
+        // a number between 0 and 1 to evenly space the cars
+        const u = pathTime + ndx / cars.length;
+
+        // get the first point
+        curve.getPointAt(u % 1, carPosition);
+        carPosition.applyMatrix4(curveObject.matrixWorld);
+
+        // get a second point slightly further down the curve
+        curve.getPointAt((u + targetOffset) % 1, carTarget);
+        carTarget.applyMatrix4(curveObject.matrixWorld);
+
+        // put the car at the first point (temporarily)
+        car.position.copy(carPosition);
+        // point the car the second point
+        car.lookAt(carTarget);
+
+        // put the car between the 2 points
+        car.position.lerpVectors(carPosition, carTarget, 0.5);
+      });
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+

+ 246 - 0
threejs/threejs-load-gltf-car-path-fixed.html

@@ -0,0 +1,246 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Car Path Fixed</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  let curve;
+  let curveObject;
+  {
+    const controlPoints = [
+      [1.118281, 5.115846, -3.681386],
+      [3.948875, 5.115846, -3.641834],
+      [3.960072, 5.115846, -0.240352],
+      [3.985447, 5.115846, 4.585005],
+      [-3.793631, 5.115846, 4.585006],
+      [-3.826839, 5.115846, -14.736200],
+      [-14.542292, 5.115846, -14.765865],
+      [-14.520929, 5.115846, -3.627002],
+      [-5.452815, 5.115846, -3.634418],
+      [-5.467251, 5.115846, 4.549161],
+      [-13.266233, 5.115846, 4.567083],
+      [-13.250067, 5.115846, -13.499271],
+      [4.081842, 5.115846, -13.435463],
+      [4.125436, 5.115846, -5.334928],
+      [-14.521364, 5.115846, -5.239871],
+      [-14.510466, 5.115846, 5.486727],
+      [5.745666, 5.115846, 5.510492],
+      [5.787942, 5.115846, -14.728308],
+      [-5.423720, 5.115846, -14.761919],
+      [-5.373599, 5.115846, -3.704133],
+      [1.004861, 5.115846, -3.641834],
+    ];
+    const p0 = new THREE.Vector3();
+    const p1 = new THREE.Vector3();
+    curve = new THREE.CatmullRomCurve3(
+      controlPoints.map((p, ndx) => {
+        p0.set(...p);
+        p1.set(...controlPoints[(ndx + 1) % controlPoints.length]);
+        return [
+          (new THREE.Vector3()).copy(p0),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.1),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.9),
+        ];
+      }).flat(),
+      true,
+    );
+    {
+      const points = curve.getPoints(250);
+      const geometry = new THREE.BufferGeometry().setFromPoints(points);
+      const material = new THREE.LineBasicMaterial({color: 0xff0000});
+      curveObject = new THREE.Line(geometry, material);
+      curveObject.scale.set(100, 100, 100);
+      curveObject.position.y = -621;
+      //curveObject.visible = false;
+      material.depthTest = false;
+      curveObject.renderOrder = 1;
+      scene.add(curveObject);
+    }
+  }
+
+  const cars = [];
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+
+      const loadedCars = root.getObjectByName('Cars');
+      const fixes = [
+        { prefix: 'Car_08', rot: [Math.PI * .5, 0, Math.PI * .5], },
+        { prefix: 'CAR_03', rot: [0, Math.PI, 0], },
+        { prefix: 'Car_04', rot: [0, Math.PI, 0], },
+      ];
+
+      root.updateMatrixWorld();
+      for (const car of loadedCars.children.slice()) {
+        const fix = fixes.find(fix => car.name.startsWith(fix.prefix));
+        const obj = new THREE.Object3D();
+        car.getWorldPosition(obj.position);
+        car.position.set(0, 0, 0);
+        car.rotation.set(...fix.rot);
+        obj.add(car);
+        scene.add(obj);
+        cars.push(obj);
+      }
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render(time) {
+    time *= 0.001;  // convert to seconds
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    for (const car of cars) {
+      car.rotation.y = time;
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+

+ 243 - 0
threejs/threejs-load-gltf-car-path.html

@@ -0,0 +1,243 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Car Path</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  let curve;
+  let curveObject;
+  {
+    const controlPoints = [
+      [1.118281, 5.115846, -3.681386],
+      [3.948875, 5.115846, -3.641834],
+      [3.960072, 5.115846, -0.240352],
+      [3.985447, 5.115846, 4.585005],
+      [-3.793631, 5.115846, 4.585006],
+      [-3.826839, 5.115846, -14.736200],
+      [-14.542292, 5.115846, -14.765865],
+      [-14.520929, 5.115846, -3.627002],
+      [-5.452815, 5.115846, -3.634418],
+      [-5.467251, 5.115846, 4.549161],
+      [-13.266233, 5.115846, 4.567083],
+      [-13.250067, 5.115846, -13.499271],
+      [4.081842, 5.115846, -13.435463],
+      [4.125436, 5.115846, -5.334928],
+      [-14.521364, 5.115846, -5.239871],
+      [-14.510466, 5.115846, 5.486727],
+      [5.745666, 5.115846, 5.510492],
+      [5.787942, 5.115846, -14.728308],
+      [-5.423720, 5.115846, -14.761919],
+      [-5.373599, 5.115846, -3.704133],
+      [1.004861, 5.115846, -3.641834],
+    ];
+    const p0 = new THREE.Vector3();
+    const p1 = new THREE.Vector3();
+    curve = new THREE.CatmullRomCurve3(
+      controlPoints.map((p, ndx) => {
+        p0.set(...p);
+        p1.set(...controlPoints[(ndx + 1) % controlPoints.length]);
+        return [
+          (new THREE.Vector3()).copy(p0),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.1),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.9),
+        ];
+      }).flat(),
+      true,
+    );
+    {
+      const points = curve.getPoints(250);
+      const geometry = new THREE.BufferGeometry().setFromPoints(points);
+      const material = new THREE.LineBasicMaterial({color: 0xff0000});
+      curveObject = new THREE.Line(geometry, material);
+      material.depthTest = false;
+      curveObject.renderOrder = 1;
+      scene.add(curveObject);
+    }
+  }
+
+  const cars = [];
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+
+      const loadedCars = root.getObjectByName('Cars');
+      const fixes = [
+        { prefix: 'Car_08', rot: [Math.PI * .5, 0, Math.PI * .5], },
+        { prefix: 'CAR_03', rot: [0, Math.PI, 0], },
+        { prefix: 'Car_04', rot: [0, Math.PI, 0], },
+      ];
+
+      root.updateMatrixWorld();
+      for (const car of loadedCars.children.slice()) {
+        const fix = fixes.find(fix => car.name.startsWith(fix.prefix));
+        const obj = new THREE.Object3D();
+        car.getWorldPosition(obj.position);
+        car.position.set(0, 0, 0);
+        car.rotation.set(...fix.rot);
+        obj.add(car);
+        scene.add(obj);
+        cars.push(obj);
+      }
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render(time) {
+    time *= 0.001;  // convert to seconds
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    for (const car of cars) {
+      car.rotation.y = time;
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+

+ 190 - 0
threejs/threejs-load-gltf-dump-scenegraph-extra.html

@@ -0,0 +1,190 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  function dumpVec3(v3, precision = 3) {
+    return `${v3.x.toFixed(precision)}, ${v3.y.toFixed(precision)}, ${v3.z.toFixed(precision)}`;
+  }
+
+  function dumpObject(obj, lines = [], isLast = true, prefix = '') {
+    const localPrefix = isLast ? '└─' : '├─';
+    lines.push(`${prefix}${prefix ? localPrefix : ''}${obj.name || '*no-name*'} [${obj.type}]`);
+    const dataPrefix = obj.children.length
+       ? (isLast ? '  │ ' : '│ │ ')
+       : (isLast ? '    ' : '│   ');
+    lines.push(`${prefix}${dataPrefix}  pos: ${dumpVec3(obj.position)}`);
+    lines.push(`${prefix}${dataPrefix}  rot: ${dumpVec3(obj.rotation)}`);
+    lines.push(`${prefix}${dataPrefix}  scl: ${dumpVec3(obj.scale)}`);
+    const newPrefix = prefix + (isLast ? '  ' : '│ ');
+    const lastNdx = obj.children.length - 1;
+    obj.children.forEach((child, ndx) => {
+      const isLast = ndx === lastNdx;
+      dumpObject(child, lines, isLast, newPrefix);
+    });
+    return lines;
+  }
+
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+      console.log(dumpObject(root).join('\n'));  // eslint-disable-line
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render() {
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+

+ 180 - 0
threejs/threejs-load-gltf-dump-scenegraph.html

@@ -0,0 +1,180 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Dump Scenegraph to Console</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  function dumpObject(obj, lines = [], isLast = true, prefix = '') {
+    const localPrefix = isLast ? '└─' : '├─';
+    lines.push(`${prefix}${prefix ? localPrefix : ''}${obj.name || '*no-name*'} [${obj.type}]`);
+    const newPrefix = prefix + (isLast ? '  ' : '│ ');
+    const lastNdx = obj.children.length - 1;
+    obj.children.forEach((child, ndx) => {
+      const isLast = ndx === lastNdx;
+      dumpObject(child, lines, isLast, newPrefix);
+    });
+    return lines;
+  }
+
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+      console.log(dumpObject(root).join('\n'));  // eslint-disable-line
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render() {
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+

+ 191 - 0
threejs/threejs-load-gltf-rotate-cars-fixed.html

@@ -0,0 +1,191 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Rotate Cars Fixed</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  const cars = [];
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+
+      const loadedCars = root.getObjectByName('Cars');
+      const fixes = [
+        { prefix: 'Car_08', rot: [Math.PI * .5, 0, Math.PI * .5], },
+        { prefix: 'CAR_03', rot: [0, Math.PI, 0], },
+        { prefix: 'Car_04', rot: [0, Math.PI, 0], },
+      ];
+
+      root.updateMatrixWorld();
+      for (const car of loadedCars.children.slice()) {
+        const fix = fixes.find(fix => car.name.startsWith(fix.prefix));
+        const obj = new THREE.Object3D();
+        car.getWorldPosition(obj.position);
+        car.position.set(0, 0, 0);
+        car.rotation.set(...fix.rot);
+        obj.add(car);
+        scene.add(obj);
+        cars.push(obj);
+      }
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render(time) {
+    time *= 0.001;  // convert to seconds
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    for (const car of cars) {
+      car.rotation.y = time;
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>

+ 175 - 0
threejs/threejs-load-gltf-rotate-cars.html

@@ -0,0 +1,175 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Rotate Cars</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  let cars;
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+      cars = root.getObjectByName('Cars');
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render(time) {
+    time *= 0.001;  // convert to seconds
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    if (cars) {
+      for (const car of cars.children) {
+        car.rotation.y = time;
+      }
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>

+ 395 - 0
threejs/threejs-load-gltf-shadows.html

@@ -0,0 +1,395 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF - Shadows</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE, dat */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+  renderer.shadowMap.enabled = true;
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('#DEFEFF');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.castShadow = true;
+    light.position.set(-250, 800, -850);
+    light.target.position.set(-550, 40, -450);
+
+    light.shadow.bias = -0.004;
+    light.shadow.mapSize.width = 2048;
+    light.shadow.mapSize.height = 2048;
+
+    scene.add(light);
+    scene.add(light.target);
+    const cam = light.shadow.camera;
+    cam.near = 1;
+    cam.far = 2000;
+    cam.left = -1500;
+    cam.right = 1500;
+    cam.top = 1500;
+    cam.bottom = -1500;
+
+    const cameraHelper = new THREE.CameraHelper(cam);
+    scene.add(cameraHelper);
+    const helper = new THREE.DirectionalLightHelper(light, 100);
+    scene.add(helper);
+
+    function makeXYZGUI(gui, vector3, name, onChangeFn) {
+      const folder = gui.addFolder(name);
+      folder.add(vector3, 'x', vector3.x - 500, vector3.x + 500).onChange(onChangeFn);
+      folder.add(vector3, 'y', vector3.y - 500, vector3.y + 500).onChange(onChangeFn);
+      folder.add(vector3, 'z', vector3.z - 500, vector3.z + 500).onChange(onChangeFn);
+      folder.open();
+    }
+
+    function updateCamera() {
+      // update the light target's matrixWorld because it's needed by the helper
+      light.updateMatrixWorld();
+      light.target.updateMatrixWorld();
+      helper.update();
+      helper.visible = false;
+      // update the light's shadow camera's projection matrix
+      light.shadow.camera.updateProjectionMatrix();
+      // and now update the camera helper we're using to show the light's shadow camera
+      cameraHelper.update();
+      cameraHelper.visible = false;
+    }
+    updateCamera();
+
+    class DimensionGUIHelper {
+      constructor(obj, minProp, maxProp) {
+        this.obj = obj;
+        this.minProp = minProp;
+        this.maxProp = maxProp;
+      }
+      get value() {
+        return this.obj[this.maxProp] * 2;
+      }
+      set value(v) {
+        this.obj[this.maxProp] = v /  2;
+        this.obj[this.minProp] = v / -2;
+      }
+    }
+
+    class MinMaxGUIHelper {
+      constructor(obj, minProp, maxProp, minDif) {
+        this.obj = obj;
+        this.minProp = minProp;
+        this.maxProp = maxProp;
+        this.minDif = minDif;
+      }
+      get min() {
+        return this.obj[this.minProp];
+      }
+      set min(v) {
+        this.obj[this.minProp] = v;
+        this.obj[this.maxProp] = Math.max(this.obj[this.maxProp], v + this.minDif);
+      }
+      get max() {
+        return this.obj[this.maxProp];
+      }
+      set max(v) {
+        this.obj[this.maxProp] = v;
+        this.min = this.min;  // this will call the min setter
+      }
+    }
+
+    class VisibleGUIHelper {
+      constructor(...objects) {
+        this.objects = [...objects];
+        this.show = this.objects[0].visible;
+      }
+      get value() {
+        return this.show;
+      }
+      set value(v) {
+        this.show = v;
+        this.objects.forEach((obj) => {
+          obj.visible = v;
+        });
+      }
+    }
+
+    const gui = new dat.GUI();
+    gui.close();
+    gui.add(new VisibleGUIHelper(helper, cameraHelper), 'value').name('show helpers');
+    gui.add(light.shadow, 'bias', -0.1, 0.1, 0.001);
+    {
+      const folder = gui.addFolder('Shadow Camera');
+      folder.open();
+      folder.add(new DimensionGUIHelper(light.shadow.camera, 'left', 'right'), 'value', 1, 4000)
+        .name('width')
+        .onChange(updateCamera);
+      folder.add(new DimensionGUIHelper(light.shadow.camera, 'bottom', 'top'), 'value', 1, 4000 )
+        .name('height')
+        .onChange(updateCamera);
+      const minMaxGUIHelper = new MinMaxGUIHelper(light.shadow.camera, 'near', 'far', 0.1);
+      folder.add(minMaxGUIHelper, 'min', 1, 1000, 1).name('near').onChange(updateCamera);
+      folder.add(minMaxGUIHelper, 'max', 1, 4000, 1).name('far').onChange(updateCamera);
+      folder.add(light.shadow.camera, 'zoom', 0.01, 1.5, 0.01).onChange(updateCamera);
+    }
+
+    makeXYZGUI(gui, light.position, 'position', updateCamera);
+    makeXYZGUI(gui, light.target.position, 'target', updateCamera);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  let curve;
+  let curveObject;
+  {
+    const controlPoints = [
+      [1.118281, 5.115846, -3.681386],
+      [3.948875, 5.115846, -3.641834],
+      [3.960072, 5.115846, -0.240352],
+      [3.985447, 5.115846, 4.585005],
+      [-3.793631, 5.115846, 4.585006],
+      [-3.826839, 5.115846, -14.736200],
+      [-14.542292, 5.115846, -14.765865],
+      [-14.520929, 5.115846, -3.627002],
+      [-5.452815, 5.115846, -3.634418],
+      [-5.467251, 5.115846, 4.549161],
+      [-13.266233, 5.115846, 4.567083],
+      [-13.250067, 5.115846, -13.499271],
+      [4.081842, 5.115846, -13.435463],
+      [4.125436, 5.115846, -5.334928],
+      [-14.521364, 5.115846, -5.239871],
+      [-14.510466, 5.115846, 5.486727],
+      [5.745666, 5.115846, 5.510492],
+      [5.787942, 5.115846, -14.728308],
+      [-5.423720, 5.115846, -14.761919],
+      [-5.373599, 5.115846, -3.704133],
+      [1.004861, 5.115846, -3.641834],
+    ];
+    const p0 = new THREE.Vector3();
+    const p1 = new THREE.Vector3();
+    curve = new THREE.CatmullRomCurve3(
+      controlPoints.map((p, ndx) => {
+        p0.set(...p);
+        p1.set(...controlPoints[(ndx + 1) % controlPoints.length]);
+        return [
+          (new THREE.Vector3()).copy(p0),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.1),
+          (new THREE.Vector3()).lerpVectors(p0, p1, 0.9),
+        ];
+      }).flat(),
+      true,
+    );
+    {
+      const points = curve.getPoints(250);
+      const geometry = new THREE.BufferGeometry().setFromPoints(points);
+      const material = new THREE.LineBasicMaterial({color: 0xff0000});
+      curveObject = new THREE.Line(geometry, material);
+      curveObject.scale.set(100, 100, 100);
+      curveObject.position.y = -621;
+      curveObject.visible = false;
+      scene.add(curveObject);
+    }
+  }
+
+
+  const cars = [];
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+
+      root.traverse((obj) => {
+        if (obj.castShadow !== undefined) {
+          obj.castShadow = true;
+          obj.receiveShadow = true;
+        }
+      });
+
+      const loadedCars = root.getObjectByName('Cars');
+      const fixes = [
+        { prefix: 'Car_08', y: 0,  rot: [Math.PI * .5, 0, Math.PI * .5], },
+        { prefix: 'CAR_03', y: 33, rot: [0, Math.PI, 0], },
+        { prefix: 'Car_04', y: 40, rot: [0, Math.PI, 0], },
+      ];
+
+      root.updateMatrixWorld();
+      for (const car of loadedCars.children.slice()) {
+        const fix = fixes.find(fix => car.name.startsWith(fix.prefix));
+        const obj = new THREE.Object3D();
+        car.position.set(0, fix.y, 0);
+        car.rotation.set(...fix.rot);
+        car.scale.set(1, 1, 1);
+        obj.add(car);
+        scene.add(obj);
+        cars.push(obj);
+      }
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  // create 2 Vector3s we can use for path calculations
+  const carPosition = new THREE.Vector3();
+  const carTarget = new THREE.Vector3();
+
+  function render(time) {
+    time *= 0.001;  // convert to seconds
+
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    {
+      const pathTime = time * .01;
+      const targetOffset = 0.01;
+      cars.forEach((car, ndx) => {
+        // a number between 0 and 1 to evenly space the cars
+        const u = pathTime + ndx / cars.length;
+
+        // get the first point
+        curve.getPointAt(u % 1, carPosition);
+        carPosition.applyMatrix4(curveObject.matrixWorld);
+
+        // get a second point slightly further down the curve
+        curve.getPointAt((u + targetOffset) % 1, carTarget);
+        carTarget.applyMatrix4(curveObject.matrixWorld);
+
+        // put the car at the first point (temporarily)
+        car.position.copy(carPosition);
+        // point the car the second point
+        car.lookAt(carTarget);
+
+        // put the car between the 2 points
+        car.position.lerpVectors(carPosition, carTarget, 0.5);
+      });
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+

+ 166 - 0
threejs/threejs-load-gltf.html

@@ -0,0 +1,166 @@
+<!-- Licensed under a BSD license. See license.html for license -->
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
+    <title>Three.js - Load .GLTF</title>
+    <style>
+    html, body {
+        margin: 0;
+        height: 100%;
+    }
+    #c {
+        width: 100%;
+        height: 100%;
+        display: block;
+    }
+    </style>
+  </head>
+  <body>
+    <canvas id="c"></canvas>
+  </body>
+<script src="resources/threejs/r94/three.js"></script>
+<script src="resources/threejs/r94/js/controls/OrbitControls.js"></script>
+<script src="resources/threejs/r94/js/loaders/GLTFLoader.js"></script>
+<script src="../3rdparty/dat.gui.min.js"></script>
+<script>
+'use strict';
+
+/* global THREE */
+
+function main() {
+  const canvas = document.querySelector('#c');
+  const renderer = new THREE.WebGLRenderer({canvas: canvas});
+
+  const fov = 45;
+  const aspect = 2;  // the canvas default
+  const near = 0.1;
+  const far = 100;
+  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
+  camera.position.set(0, 10, 20);
+
+  const controls = new THREE.OrbitControls(camera, canvas);
+  controls.target.set(0, 5, 0);
+  controls.update();
+
+  const scene = new THREE.Scene();
+  scene.background = new THREE.Color('black');
+
+  {
+    const planeSize = 40;
+
+    const loader = new THREE.TextureLoader();
+    const texture = loader.load('resources/images/checker.png');
+    texture.wrapS = THREE.RepeatWrapping;
+    texture.wrapT = THREE.RepeatWrapping;
+    texture.magFilter = THREE.NearestFilter;
+    const repeats = planeSize / 2;
+    texture.repeat.set(repeats, repeats);
+
+    const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
+    const planeMat = new THREE.MeshPhongMaterial({
+      map: texture,
+      side: THREE.DoubleSide,
+    });
+    const mesh = new THREE.Mesh(planeGeo, planeMat);
+    mesh.rotation.x = Math.PI * -.5;
+    scene.add(mesh);
+  }
+
+  {
+    const skyColor = 0xB1E1FF;  // light blue
+    const groundColor = 0xB97A20;  // brownish orange
+    const intensity = 1;
+    const light = new THREE.HemisphereLight(skyColor, groundColor, intensity);
+    scene.add(light);
+  }
+
+  {
+    const color = 0xFFFFFF;
+    const intensity = 1;
+    const light = new THREE.DirectionalLight(color, intensity);
+    light.position.set(5, 10, 2);
+    scene.add(light);
+    scene.add(light.target);
+  }
+
+  function frameArea(sizeToFitOnScreen, boxSize, boxCenter, camera) {
+    const halfSizeToFitOnScreen = sizeToFitOnScreen * 0.5;
+    const halfFovY = THREE.Math.degToRad(camera.fov * .5);
+    const distance = halfSizeToFitOnScreen / Math.tan(halfFovY);
+    // compute a unit vector that points in the direction the camera is now
+    // in the xz plane from the center of the box
+    const direction = (new THREE.Vector3())
+        .subVectors(camera.position, boxCenter)
+        .multiply(new THREE.Vector3(1, 0, 1))
+        .normalize();
+
+    // move the camera to a position distance units way from the center
+    // in whatever direction the camera was from the center already
+    camera.position.copy(direction.multiplyScalar(distance).add(boxCenter));
+
+    // pick some near and far values for the frustum that
+    // will contain the box.
+    camera.near = boxSize / 100;
+    camera.far = boxSize * 100;
+
+    camera.updateProjectionMatrix();
+
+    // point the camera to look at the center of the box
+    camera.lookAt(boxCenter.x, boxCenter.y, boxCenter.z);
+  }
+
+  {
+    const gltfLoader = new THREE.GLTFLoader();
+    gltfLoader.load('resources/models/cartoon_lowpoly_small_city_free_pack/scene.gltf', (gltf) => {
+      const root = gltf.scene;
+      scene.add(root);
+
+      // compute the box that contains all the stuff
+      // from root and below
+      const box = new THREE.Box3().setFromObject(root);
+
+      const boxSize = box.getSize(new THREE.Vector3()).length();
+      const boxCenter = box.getCenter(new THREE.Vector3());
+
+      // set the camera to frame the box
+      frameArea(boxSize * 1.2, boxSize, boxCenter, camera);
+
+      // update the Trackball controls to handle the new size
+      controls.maxDistance = boxSize * 10;
+      controls.target.copy(boxCenter);
+      controls.update();
+    });
+  }
+
+  function resizeRendererToDisplaySize(renderer) {
+    const canvas = renderer.domElement;
+    const width = canvas.clientWidth;
+    const height = canvas.clientHeight;
+    const needResize = canvas.width !== width || canvas.height !== height;
+    if (needResize) {
+      renderer.setSize(width, height, false);
+    }
+    return needResize;
+  }
+
+  function render() {
+    if (resizeRendererToDisplaySize(renderer)) {
+      const canvas = renderer.domElement;
+      camera.aspect = canvas.clientWidth / canvas.clientHeight;
+      camera.updateProjectionMatrix();
+    }
+
+    renderer.render(scene, camera);
+
+    requestAnimationFrame(render);
+  }
+
+  requestAnimationFrame(render);
+}
+
+main();
+</script>
+</html>
+