Merge feature/female-hair (Tim t1018u-t1021u)
@@ -19,7 +19,7 @@ The UI is available in English (default) and Nederlands. **Settings** (on the st
19
19
20
20
## Project and bodies
21
21
22
The start screen offers **Load project** and **New project**, both with a system file picker. New project asks for a parent folder (**Choose folder…**) and a project name, and creates `<folder>/<name>/`. The name must not be empty, must not contain `/ \ < > : " | ? *` or control characters and must not end with a dot; if the folder already exists it must be empty. Errors are shown in the form and nothing is created. The new folder receives `character.ppd` (with that name) and the folders `assets/body/`, `assets/equipment/`, `presets/`, `cache/` and `renders/`. The bundled default bodies (see *Attribution*) are copied into `assets/body/male/` and `assets/body/female/`, each with its `license.txt`, and set as the male and female body, so the project renders immediately. (`--preview-fixture` and the tests use the small CC0 test bodies instead.) Below the buttons the last 5 opened or created projects are listed (**Recently opened**); click a name to open it. A project that no longer exists is greyed out with *not found*. The list is `recent.json` in the user config directory (`$XDG_CONFIG_HOME/paperdoll-renderer/`, by default `~/.config/paperdoll-renderer/`, on Windows `%APPDATA%\paperdoll-renderer\`; override with `PAPERDOLL_CONFIG_DIR`). `--preview-fixture` creates a temporary sample project and opens the male body.
22
The start screen offers **Load project** and **New project**, both with a system file picker. New project asks for a parent folder (**Choose folder…**) and a project name, and creates `<folder>/<name>/`. The name must not be empty, must not contain `/ \ < > : " | ? *` or control characters and must not end with a dot; if the folder already exists it must be empty. Errors are shown in the form and nothing is created. The new folder receives `character.ppd` (with that name) and the folders `assets/body/`, `assets/equipment/`, `presets/`, `cache/` and `renders/`. The bundled default bodies (see *Attribution*) are copied into `assets/body/male/` and `assets/body/female/`, each with its `license.txt`, and set as the male and female body, so the project renders immediately. The equipment list also gets the female-only hair preset `presets/female-hair.ppe`. (`--preview-fixture` and the tests use the small CC0 test bodies instead.) Below the buttons the last 5 opened or created projects are listed (**Recently opened**); click a name to open it. A project that no longer exists is greyed out with *not found*. The list is `recent.json` in the user config directory (`$XDG_CONFIG_HOME/paperdoll-renderer/`, by default `~/.config/paperdoll-renderer/`, on Windows `%APPDATA%\paperdoll-renderer\`; override with `PAPERDOLL_CONFIG_DIR`). `--preview-fixture` creates a temporary sample project and opens the male body.
23
23
24
24
The first project view shows the bodies. **Choose male / Choose female** selects a model. An external file is copied into the project folder; if the name exists the copy gets its own name. Models with side files can be placed in the project folder with their relative folder structure and selected there. **Import overview** lists meshes, materials, textures, joints and clips of glTF/GLB, FBX and OBJ+MTL. FBX bodies are normalized once on load (right-handed Y-up, meters) and then drawn like glTF/GLB in the live 3D preview and production render, with all their animation stacks as clips.
25
25
@@ -36,7 +36,7 @@ The first project view shows the bodies. **Choose male / Choose female** selects
36
36
37
37
### Multiple meshes and skins (glTF/GLB)
38
38
39
A skinned glTF/GLB body is loaded completely: all mesh nodes and all skins. The joints of all skins are merged into one skeleton (joints present in several skins count once; at most 128). A mesh node without a skin moves rigidly with the nearest ancestor that is a joint; if it has none, it hangs from the first joint. Its rest position in the scene is kept exactly (mirrored transforms flip the triangle winding). Materials stay per primitive: base color factor × albedo texture, alpha cutoff and vertex colors; every primitive uses its own material, in the live preview and in production. External image files (`uri` next to the `.gltf`) are resolved relative to the model, like embedded and `data:` images. `KHR_texture_transform` on the base color texture (offset, rotation, scale and `texCoord`) is applied once to the UVs on load. The sampler wrap mode is not read: textures are always sampled nearest with REPEAT, so CLAMP/MIRROR look different outside the 0–1 UV range. `KHR_materials_specular` feeds the body's specular map per primitive: `specularFactor` × the alpha of `specularTexture` (sampled with the base-colour UVs; `specularColor*` is not used); in the live preview it drives the highlight. Without the extension a body's specular is zero. Metallic/roughness, normal, occlusion and emissive textures and morph targets are not used; the normal map comes from geometry (metallic/roughness is not converted; a scalar specular cannot reproduce PBR physically).
39
A skinned glTF/GLB body is loaded completely: all mesh nodes and all skins. The joints of all skins are merged into one skeleton (joints present in several skins count once; at most 128). A mesh node without a skin moves rigidly with the nearest ancestor that is a joint; if it has none, it hangs from the first joint. Its rest position in the scene is kept exactly (mirrored transforms flip the triangle winding). Materials stay per primitive: base color factor × albedo texture, alpha cutoff and vertex colors; every primitive uses its own material, in the live preview and in production. Materials with `alphaMode` `BLEND` (eyes' cornea, eyelashes, hair cards) are drawn after the opaque ones and alpha-blended over them, without writing depth until a final depth-only pass; blending between overlapping BLEND layers follows file order (no sorting). External image files (`uri` next to the `.gltf`) are resolved relative to the model, like embedded and `data:` images. `KHR_texture_transform` on the base color texture (offset, rotation, scale and `texCoord`) is applied once to the UVs on load. The sampler wrap mode is not read: textures are always sampled nearest with REPEAT, so CLAMP/MIRROR look different outside the 0–1 UV range. `KHR_materials_specular` feeds the body's specular map per primitive: `specularFactor` × the alpha of `specularTexture` (sampled with the base-colour UVs; `specularColor*` is not used); in the live preview it drives the highlight. Without the extension a body's specular is zero. Metallic/roughness, normal, occlusion and emissive textures and morph targets are not used; the normal map comes from geometry (metallic/roughness is not converted; a scalar specular cannot reproduce PBR physically).
40
40
41
41
### Static bodies (OBJ, glTF/FBX without skin)
42
42
@@ -208,7 +208,7 @@ The default starter bodies are third-party assets, bundled in `assets/default-bo
208
208
- **Animated walking Male Base Mesh** by assetfactory — https://sketchfab.com/3d-models/animated-walking-male-base-mesh-cf6fd4382d7745468328115b49223d90 — Sketchfab Standard licence.
209
209
- **Animated Female Base Mesh** by assetfactory — https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec — Sketchfab Standard licence.
210
210
211
Details are in `THIRD_PARTY_NOTICES.md`, which every package ships next to the licence. The synthetic test bodies in `tests/fixtures/bodies/` are CC0.
211
The bundled female has its hair removed (and one stray one-key animation); the hair is the bundled female-only equipment preset `female-hair`, rigid on the head joint. Details are in `THIRD_PARTY_NOTICES.md`, which every package ships next to the licence. The synthetic test bodies in `tests/fixtures/bodies/` are CC0.
212
212
213
213
## Tests
214
214
@@ -19,7 +19,7 @@ The UI is available in English (default) and Nederlands. **Settings** (on the st19
19
20
## Project and bodies20
## Project and bodies21
21
22
The start screen offers **Load project** and **New project**, both with a system file picker. New project asks for a parent folder (**Choose folder…**) and a project name, and creates `<folder>/<name>/`. The name must not be empty, must not contain `/ \ < > : " | ? *` or control characters and must not end with a dot; if the folder already exists it must be empty. Errors are shown in the form and nothing is created. The new folder receives `character.ppd` (with that name) and the folders `assets/body/`, `assets/equipment/`, `presets/`, `cache/` and `renders/`. The bundled default bodies (see *Attribution*) are copied into `assets/body/male/` and `assets/body/female/`, each with its `license.txt`, and set as the male and female body, so the project renders immediately. (`--preview-fixture` and the tests use the small CC0 test bodies instead.) Below the buttons the last 5 opened or created projects are listed (**Recently opened**); click a name to open it. A project that no longer exists is greyed out with *not found*. The list is `recent.json` in the user config directory (`$XDG_CONFIG_HOME/paperdoll-renderer/`, by default `~/.config/paperdoll-renderer/`, on Windows `%APPDATA%\paperdoll-renderer\`; override with `PAPERDOLL_CONFIG_DIR`). `--preview-fixture` creates a temporary sample project and opens the male body.22
The start screen offers **Load project** and **New project**, both with a system file picker. New project asks for a parent folder (**Choose folder…**) and a project name, and creates `<folder>/<name>/`. The name must not be empty, must not contain `/ \ < > : " | ? *` or control characters and must not end with a dot; if the folder already exists it must be empty. Errors are shown in the form and nothing is created. The new folder receives `character.ppd` (with that name) and the folders `assets/body/`, `assets/equipment/`, `presets/`, `cache/` and `renders/`. The bundled default bodies (see *Attribution*) are copied into `assets/body/male/` and `assets/body/female/`, each with its `license.txt`, and set as the male and female body, so the project renders immediately. The equipment list also gets the female-only hair preset `presets/female-hair.ppe`. (`--preview-fixture` and the tests use the small CC0 test bodies instead.) Below the buttons the last 5 opened or created projects are listed (**Recently opened**); click a name to open it. A project that no longer exists is greyed out with *not found*. The list is `recent.json` in the user config directory (`$XDG_CONFIG_HOME/paperdoll-renderer/`, by default `~/.config/paperdoll-renderer/`, on Windows `%APPDATA%\paperdoll-renderer\`; override with `PAPERDOLL_CONFIG_DIR`). `--preview-fixture` creates a temporary sample project and opens the male body.23
23
24
The first project view shows the bodies. **Choose male / Choose female** selects a model. An external file is copied into the project folder; if the name exists the copy gets its own name. Models with side files can be placed in the project folder with their relative folder structure and selected there. **Import overview** lists meshes, materials, textures, joints and clips of glTF/GLB, FBX and OBJ+MTL. FBX bodies are normalized once on load (right-handed Y-up, meters) and then drawn like glTF/GLB in the live 3D preview and production render, with all their animation stacks as clips.24
The first project view shows the bodies. **Choose male / Choose female** selects a model. An external file is copied into the project folder; if the name exists the copy gets its own name. Models with side files can be placed in the project folder with their relative folder structure and selected there. **Import overview** lists meshes, materials, textures, joints and clips of glTF/GLB, FBX and OBJ+MTL. FBX bodies are normalized once on load (right-handed Y-up, meters) and then drawn like glTF/GLB in the live 3D preview and production render, with all their animation stacks as clips.25
25
@@ -36,7 +36,7 @@ The first project view shows the bodies. **Choose male / Choose female** selects36
36
37
### Multiple meshes and skins (glTF/GLB)37
### Multiple meshes and skins (glTF/GLB)38
38
39
A skinned glTF/GLB body is loaded completely: all mesh nodes and all skins. The joints of all skins are merged into one skeleton (joints present in several skins count once; at most 128). A mesh node without a skin moves rigidly with the nearest ancestor that is a joint; if it has none, it hangs from the first joint. Its rest position in the scene is kept exactly (mirrored transforms flip the triangle winding). Materials stay per primitive: base color factor × albedo texture, alpha cutoff and vertex colors; every primitive uses its own material, in the live preview and in production. External image files (`uri` next to the `.gltf`) are resolved relative to the model, like embedded and `data:` images. `KHR_texture_transform` on the base color texture (offset, rotation, scale and `texCoord`) is applied once to the UVs on load. The sampler wrap mode is not read: textures are always sampled nearest with REPEAT, so CLAMP/MIRROR look different outside the 0–1 UV range. `KHR_materials_specular` feeds the body's specular map per primitive: `specularFactor` × the alpha of `specularTexture` (sampled with the base-colour UVs; `specularColor*` is not used); in the live preview it drives the highlight. Without the extension a body's specular is zero. Metallic/roughness, normal, occlusion and emissive textures and morph targets are not used; the normal map comes from geometry (metallic/roughness is not converted; a scalar specular cannot reproduce PBR physically).39
A skinned glTF/GLB body is loaded completely: all mesh nodes and all skins. The joints of all skins are merged into one skeleton (joints present in several skins count once; at most 128). A mesh node without a skin moves rigidly with the nearest ancestor that is a joint; if it has none, it hangs from the first joint. Its rest position in the scene is kept exactly (mirrored transforms flip the triangle winding). Materials stay per primitive: base color factor × albedo texture, alpha cutoff and vertex colors; every primitive uses its own material, in the live preview and in production. Materials with `alphaMode` `BLEND` (eyes' cornea, eyelashes, hair cards) are drawn after the opaque ones and alpha-blended over them, without writing depth until a final depth-only pass; blending between overlapping BLEND layers follows file order (no sorting). External image files (`uri` next to the `.gltf`) are resolved relative to the model, like embedded and `data:` images. `KHR_texture_transform` on the base color texture (offset, rotation, scale and `texCoord`) is applied once to the UVs on load. The sampler wrap mode is not read: textures are always sampled nearest with REPEAT, so CLAMP/MIRROR look different outside the 0–1 UV range. `KHR_materials_specular` feeds the body's specular map per primitive: `specularFactor` × the alpha of `specularTexture` (sampled with the base-colour UVs; `specularColor*` is not used); in the live preview it drives the highlight. Without the extension a body's specular is zero. Metallic/roughness, normal, occlusion and emissive textures and morph targets are not used; the normal map comes from geometry (metallic/roughness is not converted; a scalar specular cannot reproduce PBR physically).40
40
41
### Static bodies (OBJ, glTF/FBX without skin)41
### Static bodies (OBJ, glTF/FBX without skin)42
42
@@ -208,7 +208,7 @@ The default starter bodies are third-party assets, bundled in `assets/default-bo208
- **Animated walking Male Base Mesh** by assetfactory — https://sketchfab.com/3d-models/animated-walking-male-base-mesh-cf6fd4382d7745468328115b49223d90 — Sketchfab Standard licence.208
- **Animated walking Male Base Mesh** by assetfactory — https://sketchfab.com/3d-models/animated-walking-male-base-mesh-cf6fd4382d7745468328115b49223d90 — Sketchfab Standard licence.209
- **Animated Female Base Mesh** by assetfactory — https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec — Sketchfab Standard licence.209
- **Animated Female Base Mesh** by assetfactory — https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec — Sketchfab Standard licence.210
210
211
Details are in `THIRD_PARTY_NOTICES.md`, which every package ships next to the licence. The synthetic test bodies in `tests/fixtures/bodies/` are CC0.211
The bundled female has its hair removed (and one stray one-key animation); the hair is the bundled female-only equipment preset `female-hair`, rigid on the head joint. Details are in `THIRD_PARTY_NOTICES.md`, which every package ships next to the licence. The synthetic test bodies in `tests/fixtures/bodies/` are CC0.212
212
213
## Tests213
## Tests214
214
@@ -19,7 +19,10 @@ Their licence was checked and approved by Tim Falken for this use.
19
19
- Source: https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec
20
20
- Licence: Sketchfab Standard (https://sketchfab.com/licenses) — under basic restrictions, use worldwide, on all types of media, commercially or not, and in all types of derivative works.
21
21
22
The only change from the downloaded files is the buffer `uri` in each `.gltf`
23
(`scene.bin` → `male.bin` / `female.bin`), matching the renamed `.bin` files.
22
Changes from the downloaded files:
23
24
- Both: the buffer `uri` in each `.gltf` (`scene.bin` → `male.bin` / `female.bin`), matching the renamed `.bin` files.
25
- Female (`scripts/edit_default_female.py`): the stray animation `FemaleArmature|ponytail01MeshAction.001` (one key that resets the armature rotation, so the body lay on its back) is removed; the hair mesh (material `ponytail01`) with its material and texture is removed so hair can be added as equipment; `female.bin` is compacted accordingly.
26
- The removed hair is the bundled equipment preset `assets/default-equipment/female-hair.ppe` (same author, source and licence; `examples/bake_female_hair.rs`): baked rigid to the `head` joint at the rest pose (it was skinned to several bones), with its original texture.
24
27
25
28
The synthetic test bodies in `tests/fixtures/bodies/` are CC0 (see that folder's `LICENSE`).
@@ -19,7 +19,10 @@ Their licence was checked and approved by Tim Falken for this use.19
- Source: https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec19
- Source: https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec20
- Licence: Sketchfab Standard (https://sketchfab.com/licenses) — under basic restrictions, use worldwide, on all types of media, commercially or not, and in all types of derivative works.20
- Licence: Sketchfab Standard (https://sketchfab.com/licenses) — under basic restrictions, use worldwide, on all types of media, commercially or not, and in all types of derivative works.21
21
22
The only change from the downloaded files is the buffer `uri` in each `.gltf`22
Changes from the downloaded files:23
(`scene.bin` → `male.bin` / `female.bin`), matching the renamed `.bin` files.23
24
- Both: the buffer `uri` in each `.gltf` (`scene.bin` → `male.bin` / `female.bin`), matching the renamed `.bin` files.25
- Female (`scripts/edit_default_female.py`): the stray animation `FemaleArmature|ponytail01MeshAction.001` (one key that resets the armature rotation, so the body lay on its back) is removed; the hair mesh (material `ponytail01`) with its material and texture is removed so hair can be added as equipment; `female.bin` is compacted accordingly.26
- The removed hair is the bundled equipment preset `assets/default-equipment/female-hair.ppe` (same author, source and licence; `examples/bake_female_hair.rs`): baked rigid to the `head` joint at the rest pose (it was skinned to several bones), with its original texture.24
27
25
The synthetic test bodies in `tests/fixtures/bodies/` are CC0 (see that folder's `LICENSE`).28
The synthetic test bodies in `tests/fixtures/bodies/` are CC0 (see that folder's `LICENSE`).The contents of this binary file are not shown.
@@ -1,7 +1,7 @@
1
1
{
2
2
"accessors": [
3
3
{
4
"bufferView": 3,
4
"bufferView": 0,
5
5
"componentType": 5126,
6
6
"count": 124,
7
7
"max": [
@@ -17,8 +17,7 @@
17
17
"type": "VEC3"
18
18
},
19
19
{
20
"bufferView": 3,
21
"byteOffset": 1488,
20
"bufferView": 1,
22
21
"componentType": 5126,
23
22
"count": 124,
24
23
"max": [
@@ -48,14 +47,13 @@
48
47
"type": "VEC2"
49
48
},
50
49
{
51
"bufferView": 1,
50
"bufferView": 3,
52
51
"componentType": 5125,
53
52
"count": 576,
54
53
"type": "SCALAR"
55
54
},
56
55
{
57
"bufferView": 3,
58
"byteOffset": 2976,
56
"bufferView": 4,
59
57
"componentType": 5126,
60
58
"count": 524,
61
59
"max": [
@@ -71,8 +69,7 @@
71
69
"type": "VEC3"
72
70
},
73
71
{
74
"bufferView": 3,
75
"byteOffset": 9264,
72
"bufferView": 5,
76
73
"componentType": 5126,
77
74
"count": 524,
78
75
"max": [
@@ -88,8 +85,7 @@
88
85
"type": "VEC3"
89
86
},
90
87
{
91
"bufferView": 2,
92
"byteOffset": 992,
88
"bufferView": 6,
93
89
"componentType": 5126,
94
90
"count": 524,
95
91
"max": [
@@ -103,15 +99,13 @@
103
99
"type": "VEC2"
104
100
},
105
101
{
106
"bufferView": 1,
107
"byteOffset": 2304,
102
"bufferView": 7,
108
103
"componentType": 5125,
109
104
"count": 2940,
110
105
"type": "SCALAR"
111
106
},
112
107
{
113
"bufferView": 3,
114
"byteOffset": 15552,
108
"bufferView": 8,
115
109
"componentType": 5126,
116
110
"count": 552,
117
111
"max": [
@@ -127,8 +121,7 @@
127
121
"type": "VEC3"
128
122
},
129
123
{
130
"bufferView": 3,
131
"byteOffset": 22176,
124
"bufferView": 9,
132
125
"componentType": 5126,
133
126
"count": 552,
134
127
"max": [
@@ -144,8 +137,7 @@
144
137
"type": "VEC3"
145
138
},
146
139
{
147
"bufferView": 2,
148
"byteOffset": 5184,
140
"bufferView": 10,
149
141
"componentType": 5126,
150
142
"count": 552,
151
143
"max": [
@@ -159,15 +151,13 @@
159
151
"type": "VEC2"
160
152
},
161
153
{
162
"bufferView": 1,
163
"byteOffset": 14064,
154
"bufferView": 11,
164
155
"componentType": 5125,
165
156
"count": 3180,
166
157
"type": "SCALAR"
167
158
},
168
159
{
169
"bufferView": 3,
170
"byteOffset": 28800,
160
"bufferView": 12,
171
161
"componentType": 5126,
172
162
"count": 65532,
173
163
"max": [
@@ -183,8 +173,7 @@
183
173
"type": "VEC3"
184
174
},
185
175
{
186
"bufferView": 3,
187
"byteOffset": 815184,
176
"bufferView": 13,
188
177
"componentType": 5126,
189
178
"count": 65532,
190
179
"max": [
@@ -200,8 +189,7 @@
200
189
"type": "VEC3"
201
190
},
202
191
{
203
"bufferView": 2,
204
"byteOffset": 9600,
192
"bufferView": 14,
205
193
"componentType": 5126,
206
194
"count": 65532,
207
195
"max": [
@@ -215,15 +203,13 @@
215
203
"type": "VEC2"
216
204
},
217
205
{
218
"bufferView": 1,
219
"byteOffset": 26784,
206
"bufferView": 15,
220
207
"componentType": 5125,
221
208
"count": 287676,
222
209
"type": "SCALAR"
223
210
},
224
211
{
225
"bufferView": 3,
226
"byteOffset": 1601568,
212
"bufferView": 16,
227
213
"componentType": 5126,
228
214
"count": 9149,
229
215
"max": [
@@ -239,8 +225,7 @@
239
225
"type": "VEC3"
240
226
},
241
227
{
242
"bufferView": 3,
243
"byteOffset": 1711356,
228
"bufferView": 17,
244
229
"componentType": 5126,
245
230
"count": 9149,
246
231
"max": [
@@ -256,8 +241,7 @@
256
241
"type": "VEC3"
257
242
},
258
243
{
259
"bufferView": 2,
260
"byteOffset": 533856,
244
"bufferView": 18,
261
245
"componentType": 5126,
262
246
"count": 9149,
263
247
"max": [
@@ -271,15 +255,13 @@
271
255
"type": "VEC2"
272
256
},
273
257
{
274
"bufferView": 1,
275
"byteOffset": 1177488,
258
"bufferView": 19,
276
259
"componentType": 5125,
277
260
"count": 33396,
278
261
"type": "SCALAR"
279
262
},
280
263
{
281
"bufferView": 3,
282
"byteOffset": 1821144,
264
"bufferView": 20,
283
265
"componentType": 5126,
284
266
"count": 250,
285
267
"max": [
@@ -295,8 +277,7 @@
295
277
"type": "VEC3"
296
278
},
297
279
{
298
"bufferView": 3,
299
"byteOffset": 1824144,
280
"bufferView": 21,
300
281
"componentType": 5126,
301
282
"count": 250,
302
283
"max": [
@@ -312,8 +293,7 @@
312
293
"type": "VEC3"
313
294
},
314
295
{
315
"bufferView": 2,
316
"byteOffset": 607048,
296
"bufferView": 22,
317
297
"componentType": 5126,
318
298
"count": 250,
319
299
"max": [
@@ -327,70 +307,13 @@
327
307
"type": "VEC2"
328
308
},
329
309
{
330
"bufferView": 1,
331
"byteOffset": 1311072,
310
"bufferView": 23,
332
311
"componentType": 5125,
333
312
"count": 1104,
334
313
"type": "SCALAR"
335
314
},
336
315
{
337
"bufferView": 3,
338
"byteOffset": 1827144,
339
"componentType": 5126,
340
"count": 3902,
341
"max": [
342
0.7412804365158081,
343
16.114208221435547,
344
1.2630138397216797
345
],
346
"min": [
347
-0.761985182762146,
348
12.552064895629883,
349
-1.1836838722229004
350
],
351
"type": "VEC3"
352
},
353
{
354
"bufferView": 3,
355
"byteOffset": 1873968,
356
"componentType": 5126,
357
"count": 3902,
358
"max": [
359
0.9999988675117493,
360
0.9993376731872559,
361
0.9998865127563477
362
],
363
"min": [
364
-0.9994397759437561,
365
-0.89373379945755,
366
-0.9994388818740845
367
],
368
"type": "VEC3"
369
},
370
{
371
"bufferView": 2,
372
"byteOffset": 609048,
373
"componentType": 5126,
374
"count": 3902,
375
"max": [
376
0.9869999885559082,
377
0.9937000274658203
378
],
379
"min": [
380
0.013399999588727951,
381
0.010400000028312206
382
],
383
"type": "VEC2"
384
},
385
{
386
"bufferView": 1,
387
"byteOffset": 1315488,
388
"componentType": 5125,
389
"count": 16056,
390
"type": "SCALAR"
391
},
392
{
393
"bufferView": 5,
316
"bufferView": 24,
394
317
"componentType": 5126,
395
318
"count": 54,
396
319
"max": [
@@ -432,13 +355,13 @@
432
355
"type": "MAT4"
433
356
},
434
357
{
435
"bufferView": 0,
358
"bufferView": 25,
436
359
"componentType": 5123,
437
360
"count": 124,
438
361
"type": "VEC4"
439
362
},
440
363
{
441
"bufferView": 4,
364
"bufferView": 26,
442
365
"componentType": 5126,
443
366
"count": 124,
444
367
"max": [
@@ -456,15 +379,13 @@
456
379
"type": "VEC4"
457
380
},
458
381
{
459
"bufferView": 0,
460
"byteOffset": 992,
382
"bufferView": 27,
461
383
"componentType": 5123,
462
384
"count": 524,
463
385
"type": "VEC4"
464
386
},
465
387
{
466
"bufferView": 4,
467
"byteOffset": 1984,
388
"bufferView": 28,
468
389
"componentType": 5126,
469
390
"count": 524,
470
391
"max": [
@@ -482,15 +403,13 @@
482
403
"type": "VEC4"
483
404
},
484
405
{
485
"bufferView": 0,
486
"byteOffset": 5184,
406
"bufferView": 29,
487
407
"componentType": 5123,
488
408
"count": 552,
489
409
"type": "VEC4"
490
410
},
491
411
{
492
"bufferView": 4,
493
"byteOffset": 10368,
412
"bufferView": 30,
494
413
"componentType": 5126,
495
414
"count": 552,
496
415
"max": [
@@ -508,15 +427,13 @@
508
427
"type": "VEC4"
509
428
},
510
429
{
511
"bufferView": 0,
512
"byteOffset": 9600,
430
"bufferView": 31,
513
431
"componentType": 5123,
514
432
"count": 65532,
515
433
"type": "VEC4"
516
434
},
517
435
{
518
"bufferView": 4,
519
"byteOffset": 19200,
436
"bufferView": 32,
520
437
"componentType": 5126,
521
438
"count": 65532,
522
439
"max": [
@@ -534,15 +451,13 @@
534
451
"type": "VEC4"
535
452
},
536
453
{
537
"bufferView": 0,
538
"byteOffset": 533856,
454
"bufferView": 33,
539
455
"componentType": 5123,
540
456
"count": 9149,
541
457
"type": "VEC4"
542
458
},
543
459
{
544
"bufferView": 4,
545
"byteOffset": 1067712,
460
"bufferView": 34,
546
461
"componentType": 5126,
547
462
"count": 9149,
548
463
"max": [
@@ -560,15 +475,13 @@
560
475
"type": "VEC4"
561
476
},
562
477
{
563
"bufferView": 0,
564
"byteOffset": 607048,
478
"bufferView": 35,
565
479
"componentType": 5123,
566
480
"count": 250,
567
481
"type": "VEC4"
568
482
},
569
483
{
570
"bufferView": 4,
571
"byteOffset": 1214096,
484
"bufferView": 36,
572
485
"componentType": 5126,
573
486
"count": 250,
574
487
"max": [
@@ -586,33 +499,7 @@
586
499
"type": "VEC4"
587
500
},
588
501
{
589
"bufferView": 0,
590
"byteOffset": 609048,
591
"componentType": 5123,
592
"count": 3902,
593
"type": "VEC4"
594
},
595
{
596
"bufferView": 4,
597
"byteOffset": 1218096,
598
"componentType": 5126,
599
"count": 3902,
600
"max": [
601
1.0,
602
0.4871094226837158,
603
0.33214032649993896,
604
0.0
605
],
606
"min": [
607
0.3354552686214447,
608
0.0,
609
0.0,
610
0.0
611
],
612
"type": "VEC4"
613
},
614
{
615
"bufferView": 6,
502
"bufferView": 37,
616
503
"componentType": 5126,
617
504
"count": 29,
618
505
"max": [
@@ -624,7 +511,7 @@
624
511
"type": "SCALAR"
625
512
},
626
513
{
627
"bufferView": 8,
514
"bufferView": 38,
628
515
"componentType": 5126,
629
516
"count": 29,
630
517
"max": [
@@ -642,8 +529,7 @@
642
529
"type": "VEC4"
643
530
},
644
531
{
645
"bufferView": 6,
646
"byteOffset": 116,
532
"bufferView": 39,
647
533
"componentType": 5126,
648
534
"count": 48,
649
535
"max": [
@@ -655,8 +541,7 @@
655
541
"type": "SCALAR"
656
542
},
657
543
{
658
"bufferView": 8,
659
"byteOffset": 464,
544
"bufferView": 40,
660
545
"componentType": 5126,
661
546
"count": 48,
662
547
"max": [
@@ -674,8 +559,7 @@
674
559
"type": "VEC4"
675
560
},
676
561
{
677
"bufferView": 6,
678
"byteOffset": 308,
562
"bufferView": 41,
679
563
"componentType": 5126,
680
564
"count": 48,
681
565
"max": [
@@ -687,8 +571,7 @@
687
571
"type": "SCALAR"
688
572
},
689
573
{
690
"bufferView": 8,
691
"byteOffset": 1232,
574
"bufferView": 42,
692
575
"componentType": 5126,
693
576
"count": 48,
694
577
"max": [
@@ -706,8 +589,7 @@
706
589
"type": "VEC4"
707
590
},
708
591
{
709
"bufferView": 6,
710
"byteOffset": 500,
592
"bufferView": 43,
711
593
"componentType": 5126,
712
594
"count": 29,
713
595
"max": [
@@ -719,8 +601,7 @@
719
601
"type": "SCALAR"
720
602
},
721
603
{
722
"bufferView": 8,
723
"byteOffset": 2000,
604
"bufferView": 44,
724
605
"componentType": 5126,
725
606
"count": 29,
726
607
"max": [
@@ -738,8 +619,7 @@
738
619
"type": "VEC4"
739
620
},
740
621
{
741
"bufferView": 6,
742
"byteOffset": 616,
622
"bufferView": 45,
743
623
"componentType": 5126,
744
624
"count": 48,
745
625
"max": [
@@ -751,8 +631,7 @@
751
631
"type": "SCALAR"
752
632
},
753
633
{
754
"bufferView": 8,
755
"byteOffset": 2464,
634
"bufferView": 46,
756
635
"componentType": 5126,
757
636
"count": 48,
758
637
"max": [
@@ -770,8 +649,7 @@
770
649
"type": "VEC4"
771
650
},
772
651
{
773
"bufferView": 6,
774
"byteOffset": 808,
652
"bufferView": 47,
775
653
"componentType": 5126,
776
654
"count": 1,
777
655
"max": [
@@ -783,7 +661,7 @@
783
661
"type": "SCALAR"
784
662
},
785
663
{
786
"bufferView": 7,
664
"bufferView": 48,
787
665
"componentType": 5126,
788
666
"count": 1,
789
667
"max": [
@@ -799,8 +677,7 @@
799
677
"type": "VEC3"
800
678
},
801
679
{
802
"bufferView": 6,
803
"byteOffset": 812,
680
"bufferView": 49,
804
681
"componentType": 5126,
805
682
"count": 48,
806
683
"max": [
@@ -812,8 +689,7 @@
812
689
"type": "SCALAR"
813
690
},
814
691
{
815
"bufferView": 8,
816
"byteOffset": 3232,
692
"bufferView": 50,
817
693
"componentType": 5126,
818
694
"count": 48,
819
695
"max": [
@@ -831,8 +707,7 @@
831
707
"type": "VEC4"
832
708
},
833
709
{
834
"bufferView": 6,
835
"byteOffset": 1004,
710
"bufferView": 51,
836
711
"componentType": 5126,
837
712
"count": 1,
838
713
"max": [
@@ -844,25 +719,23 @@
844
719
"type": "SCALAR"
845
720
},
846
721
{
847
"bufferView": 7,
848
"byteOffset": 12,
722
"bufferView": 52,
849
723
"componentType": 5126,
850
724
"count": 1,
851
725
"max": [
852
726
2.384185791015625e-07,
853
727
0.13778603076934814,
854
-2.9802322387695313e-08
728
-2.9802322387695312e-08
855
729
],
856
730
"min": [
857
731
2.384185791015625e-07,
858
732
0.13778603076934814,
859
-2.9802322387695313e-08
733
-2.9802322387695312e-08
860
734
],
861
735
"type": "VEC3"
862
736
},
863
737
{
864
"bufferView": 6,
865
"byteOffset": 1008,
738
"bufferView": 53,
866
739
"componentType": 5126,
867
740
"count": 29,
868
741
"max": [
@@ -874,8 +747,7 @@
874
747
"type": "SCALAR"
875
748
},
876
749
{
877
"bufferView": 8,
878
"byteOffset": 4000,
750
"bufferView": 54,
879
751
"componentType": 5126,
880
752
"count": 29,
881
753
"max": [
@@ -893,8 +765,7 @@
893
765
"type": "VEC4"
894
766
},
895
767
{
896
"bufferView": 6,
897
"byteOffset": 1124,
768
"bufferView": 55,
898
769
"componentType": 5126,
899
770
"count": 48,
900
771
"max": [
@@ -906,8 +777,7 @@
906
777
"type": "SCALAR"
907
778
},
908
779
{
909
"bufferView": 8,
910
"byteOffset": 4464,
780
"bufferView": 56,
911
781
"componentType": 5126,
912
782
"count": 48,
913
783
"max": [
@@ -925,8 +795,7 @@
925
795
"type": "VEC4"
926
796
},
927
797
{
928
"bufferView": 6,
929
"byteOffset": 1316,
798
"bufferView": 57,
930
799
"componentType": 5126,
931
800
"count": 48,
932
801
"max": [
@@ -938,8 +807,7 @@
938
807
"type": "SCALAR"
939
808
},
940
809
{
941
"bufferView": 8,
942
"byteOffset": 5232,
810
"bufferView": 58,
943
811
"componentType": 5126,
944
812
"count": 48,
945
813
"max": [
@@ -957,8 +825,7 @@
957
825
"type": "VEC4"
958
826
},
959
827
{
960
"bufferView": 6,
961
"byteOffset": 1508,
828
"bufferView": 59,
962
829
"componentType": 5126,
963
830
"count": 29,
964
831
"max": [
@@ -970,8 +837,7 @@
970
837
"type": "SCALAR"
971
838
},
972
839
{
973
"bufferView": 8,
974
"byteOffset": 6000,
840
"bufferView": 60,
975
841
"componentType": 5126,
976
842
"count": 29,
977
843
"max": [
@@ -989,8 +855,7 @@
989
855
"type": "VEC4"
990
856
},
991
857
{
992
"bufferView": 6,
993
"byteOffset": 1624,
858
"bufferView": 61,
994
859
"componentType": 5126,
995
860
"count": 48,
996
861
"max": [
@@ -1002,8 +867,7 @@
1002
867
"type": "SCALAR"
1003
868
},
1004
869
{
1005
"bufferView": 8,
1006
"byteOffset": 6464,
870
"bufferView": 62,
1007
871
"componentType": 5126,
1008
872
"count": 48,
1009
873
"max": [
@@ -1021,8 +885,7 @@
1021
885
"type": "VEC4"
1022
886
},
1023
887
{
1024
"bufferView": 6,
1025
"byteOffset": 1816,
888
"bufferView": 63,
1026
889
"componentType": 5126,
1027
890
"count": 48,
1028
891
"max": [
@@ -1034,8 +897,7 @@
1034
897
"type": "SCALAR"
1035
898
},
1036
899
{
1037
"bufferView": 8,
1038
"byteOffset": 7232,
900
"bufferView": 64,
1039
901
"componentType": 5126,
1040
902
"count": 48,
1041
903
"max": [
@@ -1053,8 +915,7 @@
1053
915
"type": "VEC4"
1054
916
},
1055
917
{
1056
"bufferView": 6,
1057
"byteOffset": 2008,
918
"bufferView": 65,
1058
919
"componentType": 5126,
1059
920
"count": 29,
1060
921
"max": [
@@ -1066,8 +927,7 @@
1066
927
"type": "SCALAR"
1067
928
},
1068
929
{
1069
"bufferView": 8,
1070
"byteOffset": 8000,
930
"bufferView": 66,
1071
931
"componentType": 5126,
1072
932
"count": 29,
1073
933
"max": [
@@ -1085,8 +945,7 @@
1085
945
"type": "VEC4"
1086
946
},
1087
947
{
1088
"bufferView": 6,
1089
"byteOffset": 2124,
948
"bufferView": 67,
1090
949
"componentType": 5126,
1091
950
"count": 1,
1092
951
"max": [
@@ -1098,25 +957,23 @@
1098
957
"type": "SCALAR"
1099
958
},
1100
959
{
1101
"bufferView": 7,
1102
"byteOffset": 24,
960
"bufferView": 68,
1103
961
"componentType": 5126,
1104
962
"count": 1,
1105
963
"max": [
1106
964
8.046627044677734e-07,
1107
965
0.27365753054618835,
1108
2.9802322387695313e-08
966
2.9802322387695312e-08
1109
967
],
1110
968
"min": [
1111
969
8.046627044677734e-07,
1112
970
0.27365753054618835,
1113
2.9802322387695313e-08
971
2.9802322387695312e-08
1114
972
],
1115
973
"type": "VEC3"
1116
974
},
1117
975
{
1118
"bufferView": 6,
1119
"byteOffset": 2128,
976
"bufferView": 69,
1120
977
"componentType": 5126,
1121
978
"count": 29,
1122
979
"max": [
@@ -1128,8 +985,7 @@
1128
985
"type": "SCALAR"
1129
986
},
1130
987
{
1131
"bufferView": 8,
1132
"byteOffset": 8464,
988
"bufferView": 70,
1133
989
"componentType": 5126,
1134
990
"count": 29,
1135
991
"max": [
@@ -1147,8 +1003,7 @@
1147
1003
"type": "VEC4"
1148
1004
},
1149
1005
{
1150
"bufferView": 6,
1151
"byteOffset": 2244,
1006
"bufferView": 71,
1152
1007
"componentType": 5126,
1153
1008
"count": 1,
1154
1009
"max": [
@@ -1160,8 +1015,7 @@
1160
1015
"type": "SCALAR"
1161
1016
},
1162
1017
{
1163
"bufferView": 7,
1164
"byteOffset": 36,
1018
"bufferView": 72,
1165
1019
"componentType": 5126,
1166
1020
"count": 1,
1167
1021
"max": [
@@ -1177,8 +1031,7 @@
1177
1031
"type": "VEC3"
1178
1032
},
1179
1033
{
1180
"bufferView": 6,
1181
"byteOffset": 2248,
1034
"bufferView": 73,
1182
1035
"componentType": 5126,
1183
1036
"count": 28,
1184
1037
"max": [
@@ -1190,8 +1043,7 @@
1190
1043
"type": "SCALAR"
1191
1044
},
1192
1045
{
1193
"bufferView": 8,
1194
"byteOffset": 8928,
1046
"bufferView": 74,
1195
1047
"componentType": 5126,
1196
1048
"count": 28,
1197
1049
"max": [
@@ -1209,8 +1061,7 @@
1209
1061
"type": "VEC4"
1210
1062
},
1211
1063
{
1212
"bufferView": 6,
1213
"byteOffset": 2360,
1064
"bufferView": 75,
1214
1065
"componentType": 5126,
1215
1066
"count": 40,
1216
1067
"max": [
@@ -1222,8 +1073,7 @@
1222
1073
"type": "SCALAR"
1223
1074
},
1224
1075
{
1225
"bufferView": 7,
1226
"byteOffset": 48,
1076
"bufferView": 76,
1227
1077
"componentType": 5126,
1228
1078
"count": 40,
1229
1079
"max": [
@@ -1239,8 +1089,7 @@
1239
1089
"type": "VEC3"
1240
1090
},
1241
1091
{
1242
"bufferView": 6,
1243
"byteOffset": 2520,
1092
"bufferView": 77,
1244
1093
"componentType": 5126,
1245
1094
"count": 48,
1246
1095
"max": [
@@ -1252,8 +1101,7 @@
1252
1101
"type": "SCALAR"
1253
1102
},
1254
1103
{
1255
"bufferView": 8,
1256
"byteOffset": 9376,
1104
"bufferView": 78,
1257
1105
"componentType": 5126,
1258
1106
"count": 48,
1259
1107
"max": [
@@ -1271,8 +1119,7 @@
1271
1119
"type": "VEC4"
1272
1120
},
1273
1121
{
1274
"bufferView": 6,
1275
"byteOffset": 2712,
1122
"bufferView": 79,
1276
1123
"componentType": 5126,
1277
1124
"count": 48,
1278
1125
"max": [
@@ -1284,8 +1131,7 @@
1284
1131
"type": "SCALAR"
1285
1132
},
1286
1133
{
1287
"bufferView": 8,
1288
"byteOffset": 10144,
1134
"bufferView": 80,
1289
1135
"componentType": 5126,
1290
1136
"count": 48,
1291
1137
"max": [
@@ -1303,8 +1149,7 @@
1303
1149
"type": "VEC4"
1304
1150
},
1305
1151
{
1306
"bufferView": 6,
1307
"byteOffset": 2904,
1152
"bufferView": 81,
1308
1153
"componentType": 5126,
1309
1154
"count": 1,
1310
1155
"max": [
@@ -1316,8 +1161,7 @@
1316
1161
"type": "SCALAR"
1317
1162
},
1318
1163
{
1319
"bufferView": 7,
1320
"byteOffset": 528,
1164
"bufferView": 82,
1321
1165
"componentType": 5126,
1322
1166
"count": 1,
1323
1167
"max": [
@@ -1333,8 +1177,7 @@
1333
1177
"type": "VEC3"
1334
1178
},
1335
1179
{
1336
"bufferView": 6,
1337
"byteOffset": 2908,
1180
"bufferView": 83,
1338
1181
"componentType": 5126,
1339
1182
"count": 48,
1340
1183
"max": [
@@ -1346,8 +1189,7 @@
1346
1189
"type": "SCALAR"
1347
1190
},
1348
1191
{
1349
"bufferView": 8,
1350
"byteOffset": 10912,
1192
"bufferView": 84,
1351
1193
"componentType": 5126,
1352
1194
"count": 48,
1353
1195
"max": [
@@ -1365,8 +1207,7 @@
1365
1207
"type": "VEC4"
1366
1208
},
1367
1209
{
1368
"bufferView": 6,
1369
"byteOffset": 3100,
1210
"bufferView": 85,
1370
1211
"componentType": 5126,
1371
1212
"count": 48,
1372
1213
"max": [
@@ -1378,8 +1219,7 @@
1378
1219
"type": "SCALAR"
1379
1220
},
1380
1221
{
1381
"bufferView": 7,
1382
"byteOffset": 540,
1222
"bufferView": 86,
1383
1223
"componentType": 5126,
1384
1224
"count": 48,
1385
1225
"max": [
@@ -1395,8 +1235,7 @@
1395
1235
"type": "VEC3"
1396
1236
},
1397
1237
{
1398
"bufferView": 6,
1399
"byteOffset": 3292,
1238
"bufferView": 87,
1400
1239
"componentType": 5126,
1401
1240
"count": 48,
1402
1241
"max": [
@@ -1408,8 +1247,7 @@
1408
1247
"type": "SCALAR"
1409
1248
},
1410
1249
{
1411
"bufferView": 8,
1412
"byteOffset": 11680,
1250
"bufferView": 88,
1413
1251
"componentType": 5126,
1414
1252
"count": 48,
1415
1253
"max": [
@@ -1427,8 +1265,7 @@
1427
1265
"type": "VEC4"
1428
1266
},
1429
1267
{
1430
"bufferView": 6,
1431
"byteOffset": 3484,
1268
"bufferView": 89,
1432
1269
"componentType": 5126,
1433
1270
"count": 29,
1434
1271
"max": [
@@ -1440,8 +1277,7 @@
1440
1277
"type": "SCALAR"
1441
1278
},
1442
1279
{
1443
"bufferView": 8,
1444
"byteOffset": 12448,
1280
"bufferView": 90,
1445
1281
"componentType": 5126,
1446
1282
"count": 29,
1447
1283
"max": [
@@ -1459,8 +1295,7 @@
1459
1295
"type": "VEC4"
1460
1296
},
1461
1297
{
1462
"bufferView": 6,
1463
"byteOffset": 3600,
1298
"bufferView": 91,
1464
1299
"componentType": 5126,
1465
1300
"count": 38,
1466
1301
"max": [
@@ -1472,8 +1307,7 @@
1472
1307
"type": "SCALAR"
1473
1308
},
1474
1309
{
1475
"bufferView": 8,
1476
"byteOffset": 12912,
1310
"bufferView": 92,
1477
1311
"componentType": 5126,
1478
1312
"count": 38,
1479
1313
"max": [
@@ -1491,8 +1325,7 @@
1491
1325
"type": "VEC4"
1492
1326
},
1493
1327
{
1494
"bufferView": 6,
1495
"byteOffset": 3752,
1328
"bufferView": 93,
1496
1329
"componentType": 5126,
1497
1330
"count": 1,
1498
1331
"max": [
@@ -1504,8 +1337,7 @@
1504
1337
"type": "SCALAR"
1505
1338
},
1506
1339
{
1507
"bufferView": 7,
1508
"byteOffset": 1116,
1340
"bufferView": 94,
1509
1341
"componentType": 5126,
1510
1342
"count": 1,
1511
1343
"max": [
@@ -1521,8 +1353,7 @@
1521
1353
"type": "VEC3"
1522
1354
},
1523
1355
{
1524
"bufferView": 6,
1525
"byteOffset": 3756,
1356
"bufferView": 95,
1526
1357
"componentType": 5126,
1527
1358
"count": 48,
1528
1359
"max": [
@@ -1534,8 +1365,7 @@
1534
1365
"type": "SCALAR"
1535
1366
},
1536
1367
{
1537
"bufferView": 8,
1538
"byteOffset": 13520,
1368
"bufferView": 96,
1539
1369
"componentType": 5126,
1540
1370
"count": 48,
1541
1371
"max": [
@@ -1553,8 +1383,7 @@
1553
1383
"type": "VEC4"
1554
1384
},
1555
1385
{
1556
"bufferView": 6,
1557
"byteOffset": 3948,
1386
"bufferView": 97,
1558
1387
"componentType": 5126,
1559
1388
"count": 29,
1560
1389
"max": [
@@ -1566,8 +1395,7 @@
1566
1395
"type": "SCALAR"
1567
1396
},
1568
1397
{
1569
"bufferView": 8,
1570
"byteOffset": 14288,
1398
"bufferView": 98,
1571
1399
"componentType": 5126,
1572
1400
"count": 29,
1573
1401
"max": [
@@ -1585,8 +1413,7 @@
1585
1413
"type": "VEC4"
1586
1414
},
1587
1415
{
1588
"bufferView": 6,
1589
"byteOffset": 4064,
1416
"bufferView": 99,
1590
1417
"componentType": 5126,
1591
1418
"count": 48,
1592
1419
"max": [
@@ -1598,8 +1425,7 @@
1598
1425
"type": "SCALAR"
1599
1426
},
1600
1427
{
1601
"bufferView": 8,
1602
"byteOffset": 14752,
1428
"bufferView": 100,
1603
1429
"componentType": 5126,
1604
1430
"count": 48,
1605
1431
"max": [
@@ -1617,8 +1443,7 @@
1617
1443
"type": "VEC4"
1618
1444
},
1619
1445
{
1620
"bufferView": 6,
1621
"byteOffset": 4256,
1446
"bufferView": 101,
1622
1447
"componentType": 5126,
1623
1448
"count": 1,
1624
1449
"max": [
@@ -1630,8 +1455,7 @@
1630
1455
"type": "SCALAR"
1631
1456
},
1632
1457
{
1633
"bufferView": 7,
1634
"byteOffset": 1128,
1458
"bufferView": 102,
1635
1459
"componentType": 5126,
1636
1460
"count": 1,
1637
1461
"max": [
@@ -1647,8 +1471,7 @@
1647
1471
"type": "VEC3"
1648
1472
},
1649
1473
{
1650
"bufferView": 6,
1651
"byteOffset": 4260,
1474
"bufferView": 103,
1652
1475
"componentType": 5126,
1653
1476
"count": 48,
1654
1477
"max": [
@@ -1660,8 +1483,7 @@
1660
1483
"type": "SCALAR"
1661
1484
},
1662
1485
{
1663
"bufferView": 8,
1664
"byteOffset": 15520,
1486
"bufferView": 104,
1665
1487
"componentType": 5126,
1666
1488
"count": 48,
1667
1489
"max": [
@@ -1679,8 +1501,7 @@
1679
1501
"type": "VEC4"
1680
1502
},
1681
1503
{
1682
"bufferView": 6,
1683
"byteOffset": 4452,
1504
"bufferView": 105,
1684
1505
"componentType": 5126,
1685
1506
"count": 1,
1686
1507
"max": [
@@ -1692,8 +1513,7 @@
1692
1513
"type": "SCALAR"
1693
1514
},
1694
1515
{
1695
"bufferView": 7,
1696
"byteOffset": 1140,
1516
"bufferView": 106,
1697
1517
"componentType": 5126,
1698
1518
"count": 1,
1699
1519
"max": [
@@ -1709,8 +1529,7 @@
1709
1529
"type": "VEC3"
1710
1530
},
1711
1531
{
1712
"bufferView": 6,
1713
"byteOffset": 4456,
1532
"bufferView": 107,
1714
1533
"componentType": 5126,
1715
1534
"count": 29,
1716
1535
"max": [
@@ -1722,8 +1541,7 @@
1722
1541
"type": "SCALAR"
1723
1542
},
1724
1543
{
1725
"bufferView": 8,
1726
"byteOffset": 16288,
1544
"bufferView": 108,
1727
1545
"componentType": 5126,
1728
1546
"count": 29,
1729
1547
"max": [
@@ -1741,8 +1559,7 @@
1741
1559
"type": "VEC4"
1742
1560
},
1743
1561
{
1744
"bufferView": 6,
1745
"byteOffset": 4572,
1562
"bufferView": 109,
1746
1563
"componentType": 5126,
1747
1564
"count": 48,
1748
1565
"max": [
@@ -1754,8 +1571,7 @@
1754
1571
"type": "SCALAR"
1755
1572
},
1756
1573
{
1757
"bufferView": 8,
1758
"byteOffset": 16752,
1574
"bufferView": 110,
1759
1575
"componentType": 5126,
1760
1576
"count": 48,
1761
1577
"max": [
@@ -1773,8 +1589,7 @@
1773
1589
"type": "VEC4"
1774
1590
},
1775
1591
{
1776
"bufferView": 6,
1777
"byteOffset": 4764,
1592
"bufferView": 111,
1778
1593
"componentType": 5126,
1779
1594
"count": 1,
1780
1595
"max": [
@@ -1786,8 +1601,7 @@
1786
1601
"type": "SCALAR"
1787
1602
},
1788
1603
{
1789
"bufferView": 7,
1790
"byteOffset": 1152,
1604
"bufferView": 112,
1791
1605
"componentType": 5126,
1792
1606
"count": 1,
1793
1607
"max": [
@@ -1803,8 +1617,7 @@
1803
1617
"type": "VEC3"
1804
1618
},
1805
1619
{
1806
"bufferView": 6,
1807
"byteOffset": 4768,
1620
"bufferView": 113,
1808
1621
"componentType": 5126,
1809
1622
"count": 48,
1810
1623
"max": [
@@ -1816,8 +1629,7 @@
1816
1629
"type": "SCALAR"
1817
1630
},
1818
1631
{
1819
"bufferView": 8,
1820
"byteOffset": 17520,
1632
"bufferView": 114,
1821
1633
"componentType": 5126,
1822
1634
"count": 48,
1823
1635
"max": [
@@ -1835,8 +1647,7 @@
1835
1647
"type": "VEC4"
1836
1648
},
1837
1649
{
1838
"bufferView": 6,
1839
"byteOffset": 4960,
1650
"bufferView": 115,
1840
1651
"componentType": 5126,
1841
1652
"count": 29,
1842
1653
"max": [
@@ -1848,8 +1659,7 @@
1848
1659
"type": "SCALAR"
1849
1660
},
1850
1661
{
1851
"bufferView": 8,
1852
"byteOffset": 18288,
1662
"bufferView": 116,
1853
1663
"componentType": 5126,
1854
1664
"count": 29,
1855
1665
"max": [
@@ -1867,8 +1677,7 @@
1867
1677
"type": "VEC4"
1868
1678
},
1869
1679
{
1870
"bufferView": 6,
1871
"byteOffset": 5076,
1680
"bufferView": 117,
1872
1681
"componentType": 5126,
1873
1682
"count": 48,
1874
1683
"max": [
@@ -1880,8 +1689,7 @@
1880
1689
"type": "SCALAR"
1881
1690
},
1882
1691
{
1883
"bufferView": 8,
1884
"byteOffset": 18752,
1692
"bufferView": 118,
1885
1693
"componentType": 5126,
1886
1694
"count": 48,
1887
1695
"max": [
@@ -1899,8 +1707,7 @@
1899
1707
"type": "VEC4"
1900
1708
},
1901
1709
{
1902
"bufferView": 6,
1903
"byteOffset": 5268,
1710
"bufferView": 119,
1904
1711
"componentType": 5126,
1905
1712
"count": 1,
1906
1713
"max": [
@@ -1912,8 +1719,7 @@
1912
1719
"type": "SCALAR"
1913
1720
},
1914
1721
{
1915
"bufferView": 7,
1916
"byteOffset": 1164,
1722
"bufferView": 120,
1917
1723
"componentType": 5126,
1918
1724
"count": 1,
1919
1725
"max": [
@@ -1929,8 +1735,7 @@
1929
1735
"type": "VEC3"
1930
1736
},
1931
1737
{
1932
"bufferView": 6,
1933
"byteOffset": 5272,
1738
"bufferView": 121,
1934
1739
"componentType": 5126,
1935
1740
"count": 48,
1936
1741
"max": [
@@ -1942,8 +1747,7 @@
1942
1747
"type": "SCALAR"
1943
1748
},
1944
1749
{
1945
"bufferView": 8,
1946
"byteOffset": 19520,
1750
"bufferView": 122,
1947
1751
"componentType": 5126,
1948
1752
"count": 48,
1949
1753
"max": [
@@ -1961,8 +1765,7 @@
1961
1765
"type": "VEC4"
1962
1766
},
1963
1767
{
1964
"bufferView": 6,
1965
"byteOffset": 5464,
1768
"bufferView": 123,
1966
1769
"componentType": 5126,
1967
1770
"count": 29,
1968
1771
"max": [
@@ -1974,8 +1777,7 @@
1974
1777
"type": "SCALAR"
1975
1778
},
1976
1779
{
1977
"bufferView": 8,
1978
"byteOffset": 20288,
1780
"bufferView": 124,
1979
1781
"componentType": 5126,
1980
1782
"count": 29,
1981
1783
"max": [
@@ -1993,8 +1795,7 @@
1993
1795
"type": "VEC4"
1994
1796
},
1995
1797
{
1996
"bufferView": 6,
1997
"byteOffset": 5580,
1798
"bufferView": 125,
1998
1799
"componentType": 5126,
1999
1800
"count": 48,
2000
1801
"max": [
@@ -2006,12 +1807,11 @@
2006
1807
"type": "SCALAR"
2007
1808
},
2008
1809
{
2009
"bufferView": 8,
2010
"byteOffset": 20752,
1810
"bufferView": 126,
2011
1811
"componentType": 5126,
2012
1812
"count": 48,
2013
1813
"max": [
2014
0.13546773791313171,
1814
0.1354677379131317,
2015
1815
0.03768495097756386,
2016
1816
0.25654536485671997,
2017
1817
0.9796718955039978
@@ -2025,8 +1825,7 @@
2025
1825
"type": "VEC4"
2026
1826
},
2027
1827
{
2028
"bufferView": 6,
2029
"byteOffset": 5772,
1828
"bufferView": 127,
2030
1829
"componentType": 5126,
2031
1830
"count": 1,
2032
1831
"max": [
@@ -2038,8 +1837,7 @@
2038
1837
"type": "SCALAR"
2039
1838
},
2040
1839
{
2041
"bufferView": 7,
2042
"byteOffset": 1176,
1840
"bufferView": 128,
2043
1841
"componentType": 5126,
2044
1842
"count": 1,
2045
1843
"max": [
@@ -2055,8 +1853,7 @@
2055
1853
"type": "VEC3"
2056
1854
},
2057
1855
{
2058
"bufferView": 6,
2059
"byteOffset": 5776,
1856
"bufferView": 129,
2060
1857
"componentType": 5126,
2061
1858
"count": 43,
2062
1859
"max": [
@@ -2068,8 +1865,7 @@
2068
1865
"type": "SCALAR"
2069
1866
},
2070
1867
{
2071
"bufferView": 8,
2072
"byteOffset": 21520,
1868
"bufferView": 130,
2073
1869
"componentType": 5126,
2074
1870
"count": 43,
2075
1871
"max": [
@@ -2087,8 +1883,7 @@
2087
1883
"type": "VEC4"
2088
1884
},
2089
1885
{
2090
"bufferView": 6,
2091
"byteOffset": 5948,
1886
"bufferView": 131,
2092
1887
"componentType": 5126,
2093
1888
"count": 48,
2094
1889
"max": [
@@ -2100,8 +1895,7 @@
2100
1895
"type": "SCALAR"
2101
1896
},
2102
1897
{
2103
"bufferView": 8,
2104
"byteOffset": 22208,
1898
"bufferView": 132,
2105
1899
"componentType": 5126,
2106
1900
"count": 48,
2107
1901
"max": [
@@ -2119,8 +1913,7 @@
2119
1913
"type": "VEC4"
2120
1914
},
2121
1915
{
2122
"bufferView": 6,
2123
"byteOffset": 6140,
1916
"bufferView": 133,
2124
1917
"componentType": 5126,
2125
1918
"count": 48,
2126
1919
"max": [
@@ -2132,8 +1925,7 @@
2132
1925
"type": "SCALAR"
2133
1926
},
2134
1927
{
2135
"bufferView": 8,
2136
"byteOffset": 22976,
1928
"bufferView": 134,
2137
1929
"componentType": 5126,
2138
1930
"count": 48,
2139
1931
"max": [
@@ -2151,8 +1943,7 @@
2151
1943
"type": "VEC4"
2152
1944
},
2153
1945
{
2154
"bufferView": 6,
2155
"byteOffset": 6332,
1946
"bufferView": 135,
2156
1947
"componentType": 5126,
2157
1948
"count": 48,
2158
1949
"max": [
@@ -2164,8 +1955,7 @@
2164
1955
"type": "SCALAR"
2165
1956
},
2166
1957
{
2167
"bufferView": 8,
2168
"byteOffset": 23744,
1958
"bufferView": 136,
2169
1959
"componentType": 5126,
2170
1960
"count": 48,
2171
1961
"max": [
@@ -2183,8 +1973,7 @@
2183
1973
"type": "VEC4"
2184
1974
},
2185
1975
{
2186
"bufferView": 6,
2187
"byteOffset": 6524,
1976
"bufferView": 137,
2188
1977
"componentType": 5126,
2189
1978
"count": 48,
2190
1979
"max": [
@@ -2196,8 +1985,7 @@
2196
1985
"type": "SCALAR"
2197
1986
},
2198
1987
{
2199
"bufferView": 7,
2200
"byteOffset": 1188,
1988
"bufferView": 138,
2201
1989
"componentType": 5126,
2202
1990
"count": 48,
2203
1991
"max": [
@@ -2213,8 +2001,7 @@
2213
2001
"type": "VEC3"
2214
2002
},
2215
2003
{
2216
"bufferView": 6,
2217
"byteOffset": 6716,
2004
"bufferView": 139,
2218
2005
"componentType": 5126,
2219
2006
"count": 48,
2220
2007
"max": [
@@ -2226,8 +2013,7 @@
2226
2013
"type": "SCALAR"
2227
2014
},
2228
2015
{
2229
"bufferView": 8,
2230
"byteOffset": 24512,
2016
"bufferView": 140,
2231
2017
"componentType": 5126,
2232
2018
"count": 48,
2233
2019
"max": [
@@ -2245,8 +2031,7 @@
2245
2031
"type": "VEC4"
2246
2032
},
2247
2033
{
2248
"bufferView": 6,
2249
"byteOffset": 6908,
2034
"bufferView": 141,
2250
2035
"componentType": 5126,
2251
2036
"count": 29,
2252
2037
"max": [
@@ -2258,8 +2043,7 @@
2258
2043
"type": "SCALAR"
2259
2044
},
2260
2045
{
2261
"bufferView": 8,
2262
"byteOffset": 25280,
2046
"bufferView": 142,
2263
2047
"componentType": 5126,
2264
2048
"count": 29,
2265
2049
"max": [
@@ -2277,8 +2061,7 @@
2277
2061
"type": "VEC4"
2278
2062
},
2279
2063
{
2280
"bufferView": 6,
2281
"byteOffset": 7024,
2064
"bufferView": 143,
2282
2065
"componentType": 5126,
2283
2066
"count": 48,
2284
2067
"max": [
@@ -2290,8 +2073,7 @@
2290
2073
"type": "SCALAR"
2291
2074
},
2292
2075
{
2293
"bufferView": 8,
2294
"byteOffset": 25744,
2076
"bufferView": 144,
2295
2077
"componentType": 5126,
2296
2078
"count": 48,
2297
2079
"max": [
@@ -2309,8 +2091,7 @@
2309
2091
"type": "VEC4"
2310
2092
},
2311
2093
{
2312
"bufferView": 6,
2313
"byteOffset": 7216,
2094
"bufferView": 145,
2314
2095
"componentType": 5126,
2315
2096
"count": 1,
2316
2097
"max": [
@@ -2322,8 +2103,7 @@
2322
2103
"type": "SCALAR"
2323
2104
},
2324
2105
{
2325
"bufferView": 7,
2326
"byteOffset": 1764,
2106
"bufferView": 146,
2327
2107
"componentType": 5126,
2328
2108
"count": 1,
2329
2109
"max": [
@@ -2339,8 +2119,7 @@
2339
2119
"type": "VEC3"
2340
2120
},
2341
2121
{
2342
"bufferView": 6,
2343
"byteOffset": 7220,
2122
"bufferView": 147,
2344
2123
"componentType": 5126,
2345
2124
"count": 29,
2346
2125
"max": [
@@ -2352,8 +2131,7 @@
2352
2131
"type": "SCALAR"
2353
2132
},
2354
2133
{
2355
"bufferView": 8,
2356
"byteOffset": 26512,
2134
"bufferView": 148,
2357
2135
"componentType": 5126,
2358
2136
"count": 29,
2359
2137
"max": [
@@ -2371,8 +2149,7 @@
2371
2149
"type": "VEC4"
2372
2150
},
2373
2151
{
2374
"bufferView": 6,
2375
"byteOffset": 7336,
2152
"bufferView": 149,
2376
2153
"componentType": 5126,
2377
2154
"count": 21,
2378
2155
"max": [
@@ -2384,8 +2161,7 @@
2384
2161
"type": "SCALAR"
2385
2162
},
2386
2163
{
2387
"bufferView": 7,
2388
"byteOffset": 1776,
2164
"bufferView": 150,
2389
2165
"componentType": 5126,
2390
2166
"count": 21,
2391
2167
"max": [
@@ -2401,8 +2177,7 @@
2401
2177
"type": "VEC3"
2402
2178
},
2403
2179
{
2404
"bufferView": 6,
2405
"byteOffset": 7420,
2180
"bufferView": 151,
2406
2181
"componentType": 5126,
2407
2182
"count": 29,
2408
2183
"max": [
@@ -2414,8 +2189,7 @@
2414
2189
"type": "SCALAR"
2415
2190
},
2416
2191
{
2417
"bufferView": 8,
2418
"byteOffset": 26976,
2192
"bufferView": 152,
2419
2193
"componentType": 5126,
2420
2194
"count": 29,
2421
2195
"max": [
@@ -2433,8 +2207,7 @@
2433
2207
"type": "VEC4"
2434
2208
},
2435
2209
{
2436
"bufferView": 6,
2437
"byteOffset": 7536,
2210
"bufferView": 153,
2438
2211
"componentType": 5126,
2439
2212
"count": 48,
2440
2213
"max": [
@@ -2446,8 +2219,7 @@
2446
2219
"type": "SCALAR"
2447
2220
},
2448
2221
{
2449
"bufferView": 8,
2450
"byteOffset": 27440,
2222
"bufferView": 154,
2451
2223
"componentType": 5126,
2452
2224
"count": 48,
2453
2225
"max": [
@@ -2465,8 +2237,7 @@
2465
2237
"type": "VEC4"
2466
2238
},
2467
2239
{
2468
"bufferView": 6,
2469
"byteOffset": 7728,
2240
"bufferView": 155,
2470
2241
"componentType": 5126,
2471
2242
"count": 48,
2472
2243
"max": [
@@ -2478,8 +2249,7 @@
2478
2249
"type": "SCALAR"
2479
2250
},
2480
2251
{
2481
"bufferView": 8,
2482
"byteOffset": 28208,
2252
"bufferView": 156,
2483
2253
"componentType": 5126,
2484
2254
"count": 48,
2485
2255
"max": [
@@ -2497,8 +2267,7 @@
2497
2267
"type": "VEC4"
2498
2268
},
2499
2269
{
2500
"bufferView": 6,
2501
"byteOffset": 7920,
2270
"bufferView": 157,
2502
2271
"componentType": 5126,
2503
2272
"count": 48,
2504
2273
"max": [
@@ -2510,8 +2279,7 @@
2510
2279
"type": "SCALAR"
2511
2280
},
2512
2281
{
2513
"bufferView": 8,
2514
"byteOffset": 28976,
2282
"bufferView": 158,
2515
2283
"componentType": 5126,
2516
2284
"count": 48,
2517
2285
"max": [
@@ -2529,8 +2297,7 @@
2529
2297
"type": "VEC4"
2530
2298
},
2531
2299
{
2532
"bufferView": 6,
2533
"byteOffset": 8112,
2300
"bufferView": 159,
2534
2301
"componentType": 5126,
2535
2302
"count": 48,
2536
2303
"max": [
@@ -2542,8 +2309,7 @@
2542
2309
"type": "SCALAR"
2543
2310
},
2544
2311
{
2545
"bufferView": 8,
2546
"byteOffset": 29744,
2312
"bufferView": 160,
2547
2313
"componentType": 5126,
2548
2314
"count": 48,
2549
2315
"max": [
@@ -2561,8 +2327,7 @@
2561
2327
"type": "VEC4"
2562
2328
},
2563
2329
{
2564
"bufferView": 6,
2565
"byteOffset": 8304,
2330
"bufferView": 161,
2566
2331
"componentType": 5126,
2567
2332
"count": 48,
2568
2333
"max": [
@@ -2574,8 +2339,7 @@
2574
2339
"type": "SCALAR"
2575
2340
},
2576
2341
{
2577
"bufferView": 7,
2578
"byteOffset": 2028,
2342
"bufferView": 162,
2579
2343
"componentType": 5126,
2580
2344
"count": 48,
2581
2345
"max": [
@@ -2591,8 +2355,7 @@
2591
2355
"type": "VEC3"
2592
2356
},
2593
2357
{
2594
"bufferView": 6,
2595
"byteOffset": 8496,
2358
"bufferView": 163,
2596
2359
"componentType": 5126,
2597
2360
"count": 48,
2598
2361
"max": [
@@ -2604,8 +2367,7 @@
2604
2367
"type": "SCALAR"
2605
2368
},
2606
2369
{
2607
"bufferView": 8,
2608
"byteOffset": 30512,
2370
"bufferView": 164,
2609
2371
"componentType": 5126,
2610
2372
"count": 48,
2611
2373
"max": [
@@ -2623,8 +2385,7 @@
2623
2385
"type": "VEC4"
2624
2386
},
2625
2387
{
2626
"bufferView": 6,
2627
"byteOffset": 8688,
2388
"bufferView": 165,
2628
2389
"componentType": 5126,
2629
2390
"count": 48,
2630
2391
"max": [
@@ -2636,8 +2397,7 @@
2636
2397
"type": "SCALAR"
2637
2398
},
2638
2399
{
2639
"bufferView": 8,
2640
"byteOffset": 31280,
2400
"bufferView": 166,
2641
2401
"componentType": 5126,
2642
2402
"count": 48,
2643
2403
"max": [
@@ -2655,8 +2415,7 @@
2655
2415
"type": "VEC4"
2656
2416
},
2657
2417
{
2658
"bufferView": 6,
2659
"byteOffset": 8880,
2418
"bufferView": 167,
2660
2419
"componentType": 5126,
2661
2420
"count": 48,
2662
2421
"max": [
@@ -2668,8 +2427,7 @@
2668
2427
"type": "SCALAR"
2669
2428
},
2670
2429
{
2671
"bufferView": 8,
2672
"byteOffset": 32048,
2430
"bufferView": 168,
2673
2431
"componentType": 5126,
2674
2432
"count": 48,
2675
2433
"max": [
@@ -2687,8 +2445,7 @@
2687
2445
"type": "VEC4"
2688
2446
},
2689
2447
{
2690
"bufferView": 6,
2691
"byteOffset": 9072,
2448
"bufferView": 169,
2692
2449
"componentType": 5126,
2693
2450
"count": 48,
2694
2451
"max": [
@@ -2700,8 +2457,7 @@
2700
2457
"type": "SCALAR"
2701
2458
},
2702
2459
{
2703
"bufferView": 8,
2704
"byteOffset": 32816,
2460
"bufferView": 170,
2705
2461
"componentType": 5126,
2706
2462
"count": 48,
2707
2463
"max": [
@@ -2719,8 +2475,7 @@
2719
2475
"type": "VEC4"
2720
2476
},
2721
2477
{
2722
"bufferView": 6,
2723
"byteOffset": 9264,
2478
"bufferView": 171,
2724
2479
"componentType": 5126,
2725
2480
"count": 48,
2726
2481
"max": [
@@ -2732,8 +2487,7 @@
2732
2487
"type": "SCALAR"
2733
2488
},
2734
2489
{
2735
"bufferView": 7,
2736
"byteOffset": 2604,
2490
"bufferView": 172,
2737
2491
"componentType": 5126,
2738
2492
"count": 48,
2739
2493
"max": [
@@ -2749,8 +2503,7 @@
2749
2503
"type": "VEC3"
2750
2504
},
2751
2505
{
2752
"bufferView": 6,
2753
"byteOffset": 9456,
2506
"bufferView": 173,
2754
2507
"componentType": 5126,
2755
2508
"count": 48,
2756
2509
"max": [
@@ -2762,8 +2515,7 @@
2762
2515
"type": "SCALAR"
2763
2516
},
2764
2517
{
2765
"bufferView": 8,
2766
"byteOffset": 33584,
2518
"bufferView": 174,
2767
2519
"componentType": 5126,
2768
2520
"count": 48,
2769
2521
"max": [
@@ -2781,8 +2533,7 @@
2781
2533
"type": "VEC4"
2782
2534
},
2783
2535
{
2784
"bufferView": 6,
2785
"byteOffset": 9648,
2536
"bufferView": 175,
2786
2537
"componentType": 5126,
2787
2538
"count": 48,
2788
2539
"max": [
@@ -2794,8 +2545,7 @@
2794
2545
"type": "SCALAR"
2795
2546
},
2796
2547
{
2797
"bufferView": 7,
2798
"byteOffset": 3180,
2548
"bufferView": 176,
2799
2549
"componentType": 5126,
2800
2550
"count": 48,
2801
2551
"max": [
@@ -2809,41 +2559,9 @@
2809
2559
7.7604146003723145
2810
2560
],
2811
2561
"type": "VEC3"
2812
},
2813
{
2814
"bufferView": 6,
2815
"byteOffset": 9840,
2816
"componentType": 5126,
2817
"count": 1,
2818
"max": [
2819
0.0
2820
],
2821
"min": [
2822
0.0
2823
],
2824
"type": "SCALAR"
2825
},
2826
{
2827
"bufferView": 8,
2828
"byteOffset": 34352,
2829
"componentType": 5126,
2830
"count": 1,
2831
"max": [
2832
2.1855694143368964e-08,
2833
0.0,
2834
0.0,
2835
1.0
2836
],
2837
"min": [
2838
2.1855694143368964e-08,
2839
0.0,
2840
0.0,
2841
1.0
2842
],
2843
"type": "VEC4"
2844
}
2845
],
2846
"animations": [
2562
}
2563
],
2564
"animations": [
2847
2565
{
2848
2566
"channels": [
2849
2567
{
@@ -3339,6 +3057,21 @@
3339
3057
],
3340
3058
"name": "FemaleArmature|ArmatureAction1",
3341
3059
"samplers": [
3060
{
3061
"input": 37,
3062
"interpolation": "LINEAR",
3063
"output": 38
3064
},
3065
{
3066
"input": 39,
3067
"interpolation": "LINEAR",
3068
"output": 40
3069
},
3070
{
3071
"input": 41,
3072
"interpolation": "LINEAR",
3073
"output": 42
3074
},
3342
3075
{
3343
3076
"input": 43,
3344
3077
"interpolation": "LINEAR",
@@ -3673,123 +3406,946 @@
3673
3406
"input": 175,
3674
3407
"interpolation": "LINEAR",
3675
3408
"output": 176
3676
},
3677
{
3678
"input": 177,
3679
"interpolation": "LINEAR",
3680
"output": 178
3681
},
3682
{
3683
"input": 179,
3684
"interpolation": "LINEAR",
3685
"output": 180
3686
},
3687
{
3688
"input": 181,
3689
"interpolation": "LINEAR",
3690
"output": 182
3691
3409
}
3692
3410
]
3411
}
3412
],
3413
"asset": {
3414
"extras": {
3415
"author": "assetfactory (https://sketchfab.com/assetfactory)",
3416
"license": "SKETCHFAB Standard (https://sketchfab.com/licenses)",
3417
"source": "https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec",
3418
"title": "Animated Female Base Mesh"
3419
},
3420
"generator": "Sketchfab-16.33.0",
3421
"version": "2.0"
3422
},
3423
"bufferViews": [
3424
{
3425
"buffer": 0,
3426
"byteOffset": 0,
3427
"byteLength": 1488,
3428
"target": 34962
3429
},
3430
{
3431
"buffer": 0,
3432
"byteOffset": 1488,
3433
"byteLength": 1488,
3434
"target": 34962
3435
},
3436
{
3437
"buffer": 0,
3438
"byteOffset": 2976,
3439
"byteLength": 992,
3440
"target": 34962
3441
},
3442
{
3443
"buffer": 0,
3444
"byteOffset": 3968,
3445
"byteLength": 2304,
3446
"target": 34963
3447
},
3448
{
3449
"buffer": 0,
3450
"byteOffset": 6272,
3451
"byteLength": 6288,
3452
"target": 34962
3453
},
3454
{
3455
"buffer": 0,
3456
"byteOffset": 12560,
3457
"byteLength": 6288,
3458
"target": 34962
3459
},
3460
{
3461
"buffer": 0,
3462
"byteOffset": 18848,
3463
"byteLength": 4192,
3464
"target": 34962
3465
},
3466
{
3467
"buffer": 0,
3468
"byteOffset": 23040,
3469
"byteLength": 11760,
3470
"target": 34963
3471
},
3472
{
3473
"buffer": 0,
3474
"byteOffset": 34800,
3475
"byteLength": 6624,
3476
"target": 34962
3477
},
3478
{
3479
"buffer": 0,
3480
"byteOffset": 41424,
3481
"byteLength": 6624,
3482
"target": 34962
3483
},
3484
{
3485
"buffer": 0,
3486
"byteOffset": 48048,
3487
"byteLength": 4416,
3488
"target": 34962
3489
},
3490
{
3491
"buffer": 0,
3492
"byteOffset": 52464,
3493
"byteLength": 12720,
3494
"target": 34963
3495
},
3496
{
3497
"buffer": 0,
3498
"byteOffset": 65184,
3499
"byteLength": 786384,
3500
"target": 34962
3501
},
3502
{
3503
"buffer": 0,
3504
"byteOffset": 851568,
3505
"byteLength": 786384,
3506
"target": 34962
3507
},
3508
{
3509
"buffer": 0,
3510
"byteOffset": 1637952,
3511
"byteLength": 524256,
3512
"target": 34962
3513
},
3514
{
3515
"buffer": 0,
3516
"byteOffset": 2162208,
3517
"byteLength": 1150704,
3518
"target": 34963
3519
},
3520
{
3521
"buffer": 0,
3522
"byteOffset": 3312912,
3523
"byteLength": 109788,
3524
"target": 34962
3525
},
3526
{
3527
"buffer": 0,
3528
"byteOffset": 3422700,
3529
"byteLength": 109788,
3530
"target": 34962
3531
},
3532
{
3533
"buffer": 0,
3534
"byteOffset": 3532488,
3535
"byteLength": 73192,
3536
"target": 34962
3537
},
3538
{
3539
"buffer": 0,
3540
"byteOffset": 3605680,
3541
"byteLength": 133584,
3542
"target": 34963
3543
},
3544
{
3545
"buffer": 0,
3546
"byteOffset": 3739264,
3547
"byteLength": 3000,
3548
"target": 34962
3549
},
3550
{
3551
"buffer": 0,
3552
"byteOffset": 3742264,
3553
"byteLength": 3000,
3554
"target": 34962
3555
},
3556
{
3557
"buffer": 0,
3558
"byteOffset": 3745264,
3559
"byteLength": 2000,
3560
"target": 34962
3561
},
3562
{
3563
"buffer": 0,
3564
"byteOffset": 3747264,
3565
"byteLength": 4416,
3566
"target": 34963
3567
},
3568
{
3569
"buffer": 0,
3570
"byteOffset": 3751680,
3571
"byteLength": 3456
3572
},
3573
{
3574
"buffer": 0,
3575
"byteOffset": 3755136,
3576
"byteLength": 992,
3577
"target": 34962
3578
},
3579
{
3580
"buffer": 0,
3581
"byteOffset": 3756128,
3582
"byteLength": 1984,
3583
"target": 34962
3584
},
3585
{
3586
"buffer": 0,
3587
"byteOffset": 3758112,
3588
"byteLength": 4192,
3589
"target": 34962
3590
},
3591
{
3592
"buffer": 0,
3593
"byteOffset": 3762304,
3594
"byteLength": 8384,
3595
"target": 34962
3596
},
3597
{
3598
"buffer": 0,
3599
"byteOffset": 3770688,
3600
"byteLength": 4416,
3601
"target": 34962
3602
},
3603
{
3604
"buffer": 0,
3605
"byteOffset": 3775104,
3606
"byteLength": 8832,
3607
"target": 34962
3608
},
3609
{
3610
"buffer": 0,
3611
"byteOffset": 3783936,
3612
"byteLength": 524256,
3613
"target": 34962
3614
},
3615
{
3616
"buffer": 0,
3617
"byteOffset": 4308192,
3618
"byteLength": 1048512,
3619
"target": 34962
3620
},
3621
{
3622
"buffer": 0,
3623
"byteOffset": 5356704,
3624
"byteLength": 73192,
3625
"target": 34962
3626
},
3627
{
3628
"buffer": 0,
3629
"byteOffset": 5429896,
3630
"byteLength": 146384,
3631
"target": 34962
3632
},
3633
{
3634
"buffer": 0,
3635
"byteOffset": 5576280,
3636
"byteLength": 2000,
3637
"target": 34962
3638
},
3639
{
3640
"buffer": 0,
3641
"byteOffset": 5578280,
3642
"byteLength": 4000,
3643
"target": 34962
3644
},
3645
{
3646
"buffer": 0,
3647
"byteOffset": 5582280,
3648
"byteLength": 116
3649
},
3650
{
3651
"buffer": 0,
3652
"byteOffset": 5582396,
3653
"byteLength": 464
3654
},
3655
{
3656
"buffer": 0,
3657
"byteOffset": 5582860,
3658
"byteLength": 192
3659
},
3660
{
3661
"buffer": 0,
3662
"byteOffset": 5583052,
3663
"byteLength": 768
3664
},
3665
{
3666
"buffer": 0,
3667
"byteOffset": 5583820,
3668
"byteLength": 192
3669
},
3670
{
3671
"buffer": 0,
3672
"byteOffset": 5584012,
3673
"byteLength": 768
3674
},
3675
{
3676
"buffer": 0,
3677
"byteOffset": 5584780,
3678
"byteLength": 116
3679
},
3680
{
3681
"buffer": 0,
3682
"byteOffset": 5584896,
3683
"byteLength": 464
3684
},
3685
{
3686
"buffer": 0,
3687
"byteOffset": 5585360,
3688
"byteLength": 192
3689
},
3690
{
3691
"buffer": 0,
3692
"byteOffset": 5585552,
3693
"byteLength": 768
3694
},
3695
{
3696
"buffer": 0,
3697
"byteOffset": 5586320,
3698
"byteLength": 4
3699
},
3700
{
3701
"buffer": 0,
3702
"byteOffset": 5586324,
3703
"byteLength": 12
3704
},
3705
{
3706
"buffer": 0,
3707
"byteOffset": 5586336,
3708
"byteLength": 192
3709
},
3710
{
3711
"buffer": 0,
3712
"byteOffset": 5586528,
3713
"byteLength": 768
3714
},
3715
{
3716
"buffer": 0,
3717
"byteOffset": 5587296,
3718
"byteLength": 4
3719
},
3720
{
3721
"buffer": 0,
3722
"byteOffset": 5587300,
3723
"byteLength": 12
3724
},
3725
{
3726
"buffer": 0,
3727
"byteOffset": 5587312,
3728
"byteLength": 116
3729
},
3730
{
3731
"buffer": 0,
3732
"byteOffset": 5587428,
3733
"byteLength": 464
3734
},
3735
{
3736
"buffer": 0,
3737
"byteOffset": 5587892,
3738
"byteLength": 192
3739
},
3740
{
3741
"buffer": 0,
3742
"byteOffset": 5588084,
3743
"byteLength": 768
3744
},
3745
{
3746
"buffer": 0,
3747
"byteOffset": 5588852,
3748
"byteLength": 192
3749
},
3750
{
3751
"buffer": 0,
3752
"byteOffset": 5589044,
3753
"byteLength": 768
3754
},
3755
{
3756
"buffer": 0,
3757
"byteOffset": 5589812,
3758
"byteLength": 116
3759
},
3760
{
3761
"buffer": 0,
3762
"byteOffset": 5589928,
3763
"byteLength": 464
3764
},
3765
{
3766
"buffer": 0,
3767
"byteOffset": 5590392,
3768
"byteLength": 192
3769
},
3770
{
3771
"buffer": 0,
3772
"byteOffset": 5590584,
3773
"byteLength": 768
3774
},
3775
{
3776
"buffer": 0,
3777
"byteOffset": 5591352,
3778
"byteLength": 192
3779
},
3780
{
3781
"buffer": 0,
3782
"byteOffset": 5591544,
3783
"byteLength": 768
3784
},
3785
{
3786
"buffer": 0,
3787
"byteOffset": 5592312,
3788
"byteLength": 116
3789
},
3790
{
3791
"buffer": 0,
3792
"byteOffset": 5592428,
3793
"byteLength": 464
3794
},
3795
{
3796
"buffer": 0,
3797
"byteOffset": 5592892,
3798
"byteLength": 4
3799
},
3800
{
3801
"buffer": 0,
3802
"byteOffset": 5592896,
3803
"byteLength": 12
3804
},
3805
{
3806
"buffer": 0,
3807
"byteOffset": 5592908,
3808
"byteLength": 116
3809
},
3810
{
3811
"buffer": 0,
3812
"byteOffset": 5593024,
3813
"byteLength": 464
3814
},
3815
{
3816
"buffer": 0,
3817
"byteOffset": 5593488,
3818
"byteLength": 4
3819
},
3820
{
3821
"buffer": 0,
3822
"byteOffset": 5593492,
3823
"byteLength": 12
3824
},
3825
{
3826
"buffer": 0,
3827
"byteOffset": 5593504,
3828
"byteLength": 112
3829
},
3830
{
3831
"buffer": 0,
3832
"byteOffset": 5593616,
3833
"byteLength": 448
3834
},
3835
{
3836
"buffer": 0,
3837
"byteOffset": 5594064,
3838
"byteLength": 160
3839
},
3840
{
3841
"buffer": 0,
3842
"byteOffset": 5594224,
3843
"byteLength": 480
3844
},
3845
{
3846
"buffer": 0,
3847
"byteOffset": 5594704,
3848
"byteLength": 192
3849
},
3850
{
3851
"buffer": 0,
3852
"byteOffset": 5594896,
3853
"byteLength": 768
3854
},
3855
{
3856
"buffer": 0,
3857
"byteOffset": 5595664,
3858
"byteLength": 192
3859
},
3860
{
3861
"buffer": 0,
3862
"byteOffset": 5595856,
3863
"byteLength": 768
3864
},
3865
{
3866
"buffer": 0,
3867
"byteOffset": 5596624,
3868
"byteLength": 4
3869
},
3870
{
3871
"buffer": 0,
3872
"byteOffset": 5596628,
3873
"byteLength": 12
3874
},
3875
{
3876
"buffer": 0,
3877
"byteOffset": 5596640,
3878
"byteLength": 192
3879
},
3880
{
3881
"buffer": 0,
3882
"byteOffset": 5596832,
3883
"byteLength": 768
3884
},
3885
{
3886
"buffer": 0,
3887
"byteOffset": 5597600,
3888
"byteLength": 192
3889
},
3890
{
3891
"buffer": 0,
3892
"byteOffset": 5597792,
3893
"byteLength": 576
3894
},
3895
{
3896
"buffer": 0,
3897
"byteOffset": 5598368,
3898
"byteLength": 192
3899
},
3900
{
3901
"buffer": 0,
3902
"byteOffset": 5598560,
3903
"byteLength": 768
3904
},
3905
{
3906
"buffer": 0,
3907
"byteOffset": 5599328,
3908
"byteLength": 116
3909
},
3910
{
3911
"buffer": 0,
3912
"byteOffset": 5599444,
3913
"byteLength": 464
3914
},
3915
{
3916
"buffer": 0,
3917
"byteOffset": 5599908,
3918
"byteLength": 152
3919
},
3920
{
3921
"buffer": 0,
3922
"byteOffset": 5600060,
3923
"byteLength": 608
3924
},
3925
{
3926
"buffer": 0,
3927
"byteOffset": 5600668,
3928
"byteLength": 4
3929
},
3930
{
3931
"buffer": 0,
3932
"byteOffset": 5600672,
3933
"byteLength": 12
3934
},
3935
{
3936
"buffer": 0,
3937
"byteOffset": 5600684,
3938
"byteLength": 192
3939
},
3940
{
3941
"buffer": 0,
3942
"byteOffset": 5600876,
3943
"byteLength": 768
3944
},
3945
{
3946
"buffer": 0,
3947
"byteOffset": 5601644,
3948
"byteLength": 116
3949
},
3950
{
3951
"buffer": 0,
3952
"byteOffset": 5601760,
3953
"byteLength": 464
3954
},
3955
{
3956
"buffer": 0,
3957
"byteOffset": 5602224,
3958
"byteLength": 192
3959
},
3960
{
3961
"buffer": 0,
3962
"byteOffset": 5602416,
3963
"byteLength": 768
3964
},
3965
{
3966
"buffer": 0,
3967
"byteOffset": 5603184,
3968
"byteLength": 4
3969
},
3970
{
3971
"buffer": 0,
3972
"byteOffset": 5603188,
3973
"byteLength": 12
3974
},
3975
{
3976
"buffer": 0,
3977
"byteOffset": 5603200,
3978
"byteLength": 192
3979
},
3980
{
3981
"buffer": 0,
3982
"byteOffset": 5603392,
3983
"byteLength": 768
3984
},
3985
{
3986
"buffer": 0,
3987
"byteOffset": 5604160,
3988
"byteLength": 4
3693
3989
},
3694
3990
{
3695
"channels": [
3696
{
3697
"sampler": 0,
3698
"target": {
3699
"node": 8,
3700
"path": "rotation"
3701
}
3702
}
3703
],
3704
"name": "FemaleArmature|ponytail01MeshAction.001",
3705
"samplers": [
3706
{
3707
"input": 183,
3708
"interpolation": "LINEAR",
3709
"output": 184
3710
}
3711
]
3712
}
3713
],
3714
"asset": {
3715
"extras": {
3716
"author": "assetfactory (https://sketchfab.com/assetfactory)",
3717
"license": "SKETCHFAB Standard (https://sketchfab.com/licenses)",
3718
"source": "https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec",
3719
"title": "Animated Female Base Mesh"
3991
"buffer": 0,
3992
"byteOffset": 5604164,
3993
"byteLength": 12
3720
3994
},
3721
"generator": "Sketchfab-16.33.0",
3722
"version": "2.0"
3723
},
3724
"bufferViews": [
3725
3995
{
3726
3996
"buffer": 0,
3727
"byteLength": 640264,
3728
"byteStride": 8,
3729
"name": "shortBufferViews",
3730
"target": 34962
3997
"byteOffset": 5604176,
3998
"byteLength": 116
3731
3999
},
3732
4000
{
3733
4001
"buffer": 0,
3734
"byteLength": 1379712,
3735
"byteOffset": 640264,
3736
"name": "floatBufferViews",
3737
"target": 34963
4002
"byteOffset": 5604292,
4003
"byteLength": 464
3738
4004
},
3739
4005
{
3740
4006
"buffer": 0,
3741
"byteLength": 640264,
3742
"byteOffset": 2019976,
3743
"byteStride": 8,
3744
"name": "floatBufferViews",
3745
"target": 34962
4007
"byteOffset": 5604756,
4008
"byteLength": 192
3746
4009
},
3747
4010
{
3748
4011
"buffer": 0,
3749
"byteLength": 1920792,
3750
"byteOffset": 2660240,
3751
"byteStride": 12,
3752
"name": "floatBufferViews",
3753
"target": 34962
4012
"byteOffset": 5604948,
4013
"byteLength": 768
3754
4014
},
3755
4015
{
3756
4016
"buffer": 0,
3757
"byteLength": 1280528,
3758
"byteOffset": 4581032,
3759
"byteStride": 16,
3760
"name": "floatBufferViews",
3761
"target": 34962
4017
"byteOffset": 5605716,
4018
"byteLength": 4
4019
},
4020
{
4021
"buffer": 0,
4022
"byteOffset": 5605720,
4023
"byteLength": 12
4024
},
4025
{
4026
"buffer": 0,
4027
"byteOffset": 5605732,
4028
"byteLength": 192
4029
},
4030
{
4031
"buffer": 0,
4032
"byteOffset": 5605924,
4033
"byteLength": 768
4034
},
4035
{
4036
"buffer": 0,
4037
"byteOffset": 5606692,
4038
"byteLength": 116
4039
},
4040
{
4041
"buffer": 0,
4042
"byteOffset": 5606808,
4043
"byteLength": 464
4044
},
4045
{
4046
"buffer": 0,
4047
"byteOffset": 5607272,
4048
"byteLength": 192
4049
},
4050
{
4051
"buffer": 0,
4052
"byteOffset": 5607464,
4053
"byteLength": 768
4054
},
4055
{
4056
"buffer": 0,
4057
"byteOffset": 5608232,
4058
"byteLength": 4
4059
},
4060
{
4061
"buffer": 0,
4062
"byteOffset": 5608236,
4063
"byteLength": 12
4064
},
4065
{
4066
"buffer": 0,
4067
"byteOffset": 5608248,
4068
"byteLength": 192
4069
},
4070
{
4071
"buffer": 0,
4072
"byteOffset": 5608440,
4073
"byteLength": 768
4074
},
4075
{
4076
"buffer": 0,
4077
"byteOffset": 5609208,
4078
"byteLength": 116
4079
},
4080
{
4081
"buffer": 0,
4082
"byteOffset": 5609324,
4083
"byteLength": 464
4084
},
4085
{
4086
"buffer": 0,
4087
"byteOffset": 5609788,
4088
"byteLength": 192
4089
},
4090
{
4091
"buffer": 0,
4092
"byteOffset": 5609980,
4093
"byteLength": 768
4094
},
4095
{
4096
"buffer": 0,
4097
"byteOffset": 5610748,
4098
"byteLength": 4
4099
},
4100
{
4101
"buffer": 0,
4102
"byteOffset": 5610752,
4103
"byteLength": 12
4104
},
4105
{
4106
"buffer": 0,
4107
"byteOffset": 5610764,
4108
"byteLength": 172
4109
},
4110
{
4111
"buffer": 0,
4112
"byteOffset": 5610936,
4113
"byteLength": 688
4114
},
4115
{
4116
"buffer": 0,
4117
"byteOffset": 5611624,
4118
"byteLength": 192
4119
},
4120
{
4121
"buffer": 0,
4122
"byteOffset": 5611816,
4123
"byteLength": 768
4124
},
4125
{
4126
"buffer": 0,
4127
"byteOffset": 5612584,
4128
"byteLength": 192
4129
},
4130
{
4131
"buffer": 0,
4132
"byteOffset": 5612776,
4133
"byteLength": 768
4134
},
4135
{
4136
"buffer": 0,
4137
"byteOffset": 5613544,
4138
"byteLength": 192
4139
},
4140
{
4141
"buffer": 0,
4142
"byteOffset": 5613736,
4143
"byteLength": 768
4144
},
4145
{
4146
"buffer": 0,
4147
"byteOffset": 5614504,
4148
"byteLength": 192
4149
},
4150
{
4151
"buffer": 0,
4152
"byteOffset": 5614696,
4153
"byteLength": 576
4154
},
4155
{
4156
"buffer": 0,
4157
"byteOffset": 5615272,
4158
"byteLength": 192
4159
},
4160
{
4161
"buffer": 0,
4162
"byteOffset": 5615464,
4163
"byteLength": 768
4164
},
4165
{
4166
"buffer": 0,
4167
"byteOffset": 5616232,
4168
"byteLength": 116
4169
},
4170
{
4171
"buffer": 0,
4172
"byteOffset": 5616348,
4173
"byteLength": 464
4174
},
4175
{
4176
"buffer": 0,
4177
"byteOffset": 5616812,
4178
"byteLength": 192
4179
},
4180
{
4181
"buffer": 0,
4182
"byteOffset": 5617004,
4183
"byteLength": 768
4184
},
4185
{
4186
"buffer": 0,
4187
"byteOffset": 5617772,
4188
"byteLength": 4
4189
},
4190
{
4191
"buffer": 0,
4192
"byteOffset": 5617776,
4193
"byteLength": 12
4194
},
4195
{
4196
"buffer": 0,
4197
"byteOffset": 5617788,
4198
"byteLength": 116
4199
},
4200
{
4201
"buffer": 0,
4202
"byteOffset": 5617904,
4203
"byteLength": 464
4204
},
4205
{
4206
"buffer": 0,
4207
"byteOffset": 5618368,
4208
"byteLength": 84
4209
},
4210
{
4211
"buffer": 0,
4212
"byteOffset": 5618452,
4213
"byteLength": 252
4214
},
4215
{
4216
"buffer": 0,
4217
"byteOffset": 5618704,
4218
"byteLength": 116
4219
},
4220
{
4221
"buffer": 0,
4222
"byteOffset": 5618820,
4223
"byteLength": 464
4224
},
4225
{
4226
"buffer": 0,
4227
"byteOffset": 5619284,
4228
"byteLength": 192
4229
},
4230
{
4231
"buffer": 0,
4232
"byteOffset": 5619476,
4233
"byteLength": 768
4234
},
4235
{
4236
"buffer": 0,
4237
"byteOffset": 5620244,
4238
"byteLength": 192
4239
},
4240
{
4241
"buffer": 0,
4242
"byteOffset": 5620436,
4243
"byteLength": 768
4244
},
4245
{
4246
"buffer": 0,
4247
"byteOffset": 5621204,
4248
"byteLength": 192
4249
},
4250
{
4251
"buffer": 0,
4252
"byteOffset": 5621396,
4253
"byteLength": 768
4254
},
4255
{
4256
"buffer": 0,
4257
"byteOffset": 5622164,
4258
"byteLength": 192
4259
},
4260
{
4261
"buffer": 0,
4262
"byteOffset": 5622356,
4263
"byteLength": 768
4264
},
4265
{
4266
"buffer": 0,
4267
"byteOffset": 5623124,
4268
"byteLength": 192
4269
},
4270
{
4271
"buffer": 0,
4272
"byteOffset": 5623316,
4273
"byteLength": 576
4274
},
4275
{
4276
"buffer": 0,
4277
"byteOffset": 5623892,
4278
"byteLength": 192
4279
},
4280
{
4281
"buffer": 0,
4282
"byteOffset": 5624084,
4283
"byteLength": 768
3762
4284
},
3763
4285
{
3764
4286
"buffer": 0,
3765
"byteLength": 3456,
3766
"byteOffset": 5861560,
3767
"name": "floatBufferViews"
4287
"byteOffset": 5624852,
4288
"byteLength": 192
3768
4289
},
3769
4290
{
3770
4291
"buffer": 0,
3771
"byteLength": 9844,
3772
"byteOffset": 5865016,
3773
"name": "floatBufferViews"
4292
"byteOffset": 5625044,
4293
"byteLength": 768
3774
4294
},
3775
4295
{
3776
4296
"buffer": 0,
3777
"byteLength": 3756,
3778
"byteOffset": 5874860,
3779
"byteStride": 12,
3780
"name": "floatBufferViews"
4297
"byteOffset": 5625812,
4298
"byteLength": 192
3781
4299
},
3782
4300
{
3783
4301
"buffer": 0,
3784
"byteLength": 34368,
3785
"byteOffset": 5878616,
3786
"byteStride": 16,
3787
"name": "floatBufferViews"
4302
"byteOffset": 5626004,
4303
"byteLength": 768
4304
},
4305
{
4306
"buffer": 0,
4307
"byteOffset": 5626772,
4308
"byteLength": 192
4309
},
4310
{
4311
"buffer": 0,
4312
"byteOffset": 5626964,
4313
"byteLength": 768
4314
},
4315
{
4316
"buffer": 0,
4317
"byteOffset": 5627732,
4318
"byteLength": 192
4319
},
4320
{
4321
"buffer": 0,
4322
"byteOffset": 5627924,
4323
"byteLength": 576
4324
},
4325
{
4326
"buffer": 0,
4327
"byteOffset": 5628500,
4328
"byteLength": 192
4329
},
4330
{
4331
"buffer": 0,
4332
"byteOffset": 5628692,
4333
"byteLength": 768
4334
},
4335
{
4336
"buffer": 0,
4337
"byteOffset": 5629460,
4338
"byteLength": 192
4339
},
4340
{
4341
"buffer": 0,
4342
"byteOffset": 5629652,
4343
"byteLength": 576
3788
4344
}
3789
4345
],
3790
4346
"buffers": [
3791
4347
{
3792
"byteLength": 5912984,
4348
"byteLength": 5630228,
3793
4349
"uri": "female.bin"
3794
4350
}
3795
4351
],
@@ -3805,9 +4361,6 @@
3805
4361
},
3806
4362
{
3807
4363
"uri": "textures/eyelashes03.002_baseColor.png"
3808
},
3809
{
3810
"uri": "textures/ponytail01_baseColor.png"
3811
4364
}
3812
4365
],
3813
4366
"materials": [
@@ -3870,18 +4423,6 @@
3870
4423
"metallicFactor": 0.0,
3871
4424
"roughnessFactor": 0.9159103585
3872
4425
}
3873
},
3874
{
3875
"alphaMode": "BLEND",
3876
"doubleSided": true,
3877
"name": "ponytail01",
3878
"pbrMetallicRoughness": {
3879
"baseColorTexture": {
3880
"index": 4
3881
},
3882
"metallicFactor": 0.0,
3883
"roughnessFactor": 0.6361339584
3884
}
3885
4426
}
3886
4427
],
3887
4428
"meshes": [
@@ -3890,11 +4431,11 @@
3890
4431
"primitives": [
3891
4432
{
3892
4433
"attributes": {
3893
"JOINTS_0": 29,
4434
"JOINTS_0": 25,
3894
4435
"NORMAL": 1,
3895
4436
"POSITION": 0,
3896
4437
"TEXCOORD_0": 2,
3897
"WEIGHTS_0": 30
4438
"WEIGHTS_0": 26
3898
4439
},
3899
4440
"indices": 3,
3900
4441
"material": 0,
@@ -3907,11 +4448,11 @@
3907
4448
"primitives": [
3908
4449
{
3909
4450
"attributes": {
3910
"JOINTS_0": 31,
4451
"JOINTS_0": 27,
3911
4452
"NORMAL": 5,
3912
4453
"POSITION": 4,
3913
4454
"TEXCOORD_0": 6,
3914
"WEIGHTS_0": 32
4455
"WEIGHTS_0": 28
3915
4456
},
3916
4457
"indices": 7,
3917
4458
"material": 1,
@@ -3924,11 +4465,11 @@
3924
4465
"primitives": [
3925
4466
{
3926
4467
"attributes": {
3927
"JOINTS_0": 33,
4468
"JOINTS_0": 29,
3928
4469
"NORMAL": 9,
3929
4470
"POSITION": 8,
3930
4471
"TEXCOORD_0": 10,
3931
"WEIGHTS_0": 34
4472
"WEIGHTS_0": 30
3932
4473
},
3933
4474
"indices": 11,
3934
4475
"material": 2,
@@ -3941,11 +4482,11 @@
3941
4482
"primitives": [
3942
4483
{
3943
4484
"attributes": {
3944
"JOINTS_0": 35,
4485
"JOINTS_0": 31,
3945
4486
"NORMAL": 13,
3946
4487
"POSITION": 12,
3947
4488
"TEXCOORD_0": 14,
3948
"WEIGHTS_0": 36
4489
"WEIGHTS_0": 32
3949
4490
},
3950
4491
"indices": 15,
3951
4492
"material": 3,
@@ -3958,11 +4499,11 @@
3958
4499
"primitives": [
3959
4500
{
3960
4501
"attributes": {
3961
"JOINTS_0": 37,
4502
"JOINTS_0": 33,
3962
4503
"NORMAL": 17,
3963
4504
"POSITION": 16,
3964
4505
"TEXCOORD_0": 18,
3965
"WEIGHTS_0": 38
4506
"WEIGHTS_0": 34
3966
4507
},
3967
4508
"indices": 19,
3968
4509
"material": 3,
@@ -3975,34 +4516,17 @@
3975
4516
"primitives": [
3976
4517
{
3977
4518
"attributes": {
3978
"JOINTS_0": 39,
4519
"JOINTS_0": 35,
3979
4520
"NORMAL": 21,
3980
4521
"POSITION": 20,
3981
4522
"TEXCOORD_0": 22,
3982
"WEIGHTS_0": 40
4523
"WEIGHTS_0": 36
3983
4524
},
3984
4525
"indices": 23,
3985
4526
"material": 4,
3986
4527
"mode": 4
3987
4528
}
3988
4529
]
3989
},
3990
{
3991
"name": "ponytail01Mesh_ponytail01_0",
3992
"primitives": [
3993
{
3994
"attributes": {
3995
"JOINTS_0": 41,
3996
"NORMAL": 25,
3997
"POSITION": 24,
3998
"TEXCOORD_0": 26,
3999
"WEIGHTS_0": 42
4000
},
4001
"indices": 27,
4002
"material": 5,
4003
"mode": 4
4004
}
4005
]
4006
4530
}
4007
4531
],
4008
4532
"nodes": [
@@ -4668,7 +5192,7 @@
4668
5192
],
4669
5193
"translation": [
4670
5194
-4.172325134277344e-07,
4671
0.13778707385063171,
5195
0.1377870738506317,
4672
5196
-6.854534149169922e-07
4673
5197
]
4674
5198
},
@@ -5127,7 +5651,7 @@
5127
5651
1.0
5128
5652
],
5129
5653
"translation": [
5130
2.9802322387695313e-08,
5654
2.9802322387695312e-08,
5131
5655
0.21817153692245483,
5132
5656
4.470348358154297e-08
5133
5657
]
@@ -5192,7 +5716,7 @@
5192
5716
"translation": [
5193
5717
8.940696716308594e-08,
5194
5718
0.32236427068710327,
5195
2.9802322387695313e-08
5719
2.9802322387695312e-08
5196
5720
]
5197
5721
},
5198
5722
{
@@ -5423,9 +5947,7 @@
5423
5947
"name": "Object_74"
5424
5948
},
5425
5949
{
5426
"mesh": 6,
5427
"name": "Object_75",
5428
"skin": 0
5950
"name": "Object_75"
5429
5951
},
5430
5952
{
5431
5953
"name": "ponytail01Mesh",
@@ -5461,7 +5983,7 @@
5461
5983
],
5462
5984
"skins": [
5463
5985
{
5464
"inverseBindMatrices": 28,
5986
"inverseBindMatrices": 24,
5465
5987
"joints": [
5466
5988
10,
5467
5989
21,
@@ -5537,10 +6059,6 @@
5537
6059
{
5538
6060
"sampler": 0,
5539
6061
"source": 3
5540
},
5541
{
5542
"sampler": 0,
5543
"source": 4
5544
6062
}
5545
6063
]
5546
}
6064
}
@@ -1,7 +1,7 @@1
{1
{2
"accessors": [2
"accessors": [3
{3
{4
"bufferView": 3,4
"bufferView": 0,5
"componentType": 5126,5
"componentType": 5126,6
"count": 124,6
"count": 124,7
"max": [7
"max": [@@ -17,8 +17,7 @@17
"type": "VEC3"17
"type": "VEC3"18
},18
},19
{19
{20
"bufferView": 3,20
"bufferView": 1,21
"byteOffset": 1488,22
"componentType": 5126,21
"componentType": 5126,23
"count": 124,22
"count": 124,24
"max": [23
"max": [@@ -48,14 +47,13 @@48
"type": "VEC2"47
"type": "VEC2"49
},48
},50
{49
{51
"bufferView": 1,50
"bufferView": 3,52
"componentType": 5125,51
"componentType": 5125,53
"count": 576,52
"count": 576,54
"type": "SCALAR"53
"type": "SCALAR"55
},54
},56
{55
{57
"bufferView": 3,56
"bufferView": 4,58
"byteOffset": 2976,59
"componentType": 5126,57
"componentType": 5126,60
"count": 524,58
"count": 524,61
"max": [59
"max": [@@ -71,8 +69,7 @@71
"type": "VEC3"69
"type": "VEC3"72
},70
},73
{71
{74
"bufferView": 3,72
"bufferView": 5,75
"byteOffset": 9264,76
"componentType": 5126,73
"componentType": 5126,77
"count": 524,74
"count": 524,78
"max": [75
"max": [@@ -88,8 +85,7 @@88
"type": "VEC3"85
"type": "VEC3"89
},86
},90
{87
{91
"bufferView": 2,88
"bufferView": 6,92
"byteOffset": 992,93
"componentType": 5126,89
"componentType": 5126,94
"count": 524,90
"count": 524,95
"max": [91
"max": [@@ -103,15 +99,13 @@103
"type": "VEC2"99
"type": "VEC2"104
},100
},105
{101
{106
"bufferView": 1,102
"bufferView": 7,107
"byteOffset": 2304,108
"componentType": 5125,103
"componentType": 5125,109
"count": 2940,104
"count": 2940,110
"type": "SCALAR"105
"type": "SCALAR"111
},106
},112
{107
{113
"bufferView": 3,108
"bufferView": 8,114
"byteOffset": 15552,115
"componentType": 5126,109
"componentType": 5126,116
"count": 552,110
"count": 552,117
"max": [111
"max": [@@ -127,8 +121,7 @@127
"type": "VEC3"121
"type": "VEC3"128
},122
},129
{123
{130
"bufferView": 3,124
"bufferView": 9,131
"byteOffset": 22176,132
"componentType": 5126,125
"componentType": 5126,133
"count": 552,126
"count": 552,134
"max": [127
"max": [@@ -144,8 +137,7 @@144
"type": "VEC3"137
"type": "VEC3"145
},138
},146
{139
{147
"bufferView": 2,140
"bufferView": 10,148
"byteOffset": 5184,149
"componentType": 5126,141
"componentType": 5126,150
"count": 552,142
"count": 552,151
"max": [143
"max": [@@ -159,15 +151,13 @@159
"type": "VEC2"151
"type": "VEC2"160
},152
},161
{153
{162
"bufferView": 1,154
"bufferView": 11,163
"byteOffset": 14064,164
"componentType": 5125,155
"componentType": 5125,165
"count": 3180,156
"count": 3180,166
"type": "SCALAR"157
"type": "SCALAR"167
},158
},168
{159
{169
"bufferView": 3,160
"bufferView": 12,170
"byteOffset": 28800,171
"componentType": 5126,161
"componentType": 5126,172
"count": 65532,162
"count": 65532,173
"max": [163
"max": [@@ -183,8 +173,7 @@183
"type": "VEC3"173
"type": "VEC3"184
},174
},185
{175
{186
"bufferView": 3,176
"bufferView": 13,187
"byteOffset": 815184,188
"componentType": 5126,177
"componentType": 5126,189
"count": 65532,178
"count": 65532,190
"max": [179
"max": [@@ -200,8 +189,7 @@200
"type": "VEC3"189
"type": "VEC3"201
},190
},202
{191
{203
"bufferView": 2,192
"bufferView": 14,204
"byteOffset": 9600,205
"componentType": 5126,193
"componentType": 5126,206
"count": 65532,194
"count": 65532,207
"max": [195
"max": [@@ -215,15 +203,13 @@215
"type": "VEC2"203
"type": "VEC2"216
},204
},217
{205
{218
"bufferView": 1,206
"bufferView": 15,219
"byteOffset": 26784,220
"componentType": 5125,207
"componentType": 5125,221
"count": 287676,208
"count": 287676,222
"type": "SCALAR"209
"type": "SCALAR"223
},210
},224
{211
{225
"bufferView": 3,212
"bufferView": 16,226
"byteOffset": 1601568,227
"componentType": 5126,213
"componentType": 5126,228
"count": 9149,214
"count": 9149,229
"max": [215
"max": [@@ -239,8 +225,7 @@239
"type": "VEC3"225
"type": "VEC3"240
},226
},241
{227
{242
"bufferView": 3,228
"bufferView": 17,243
"byteOffset": 1711356,244
"componentType": 5126,229
"componentType": 5126,245
"count": 9149,230
"count": 9149,246
"max": [231
"max": [@@ -256,8 +241,7 @@256
"type": "VEC3"241
"type": "VEC3"257
},242
},258
{243
{259
"bufferView": 2,244
"bufferView": 18,260
"byteOffset": 533856,261
"componentType": 5126,245
"componentType": 5126,262
"count": 9149,246
"count": 9149,263
"max": [247
"max": [@@ -271,15 +255,13 @@271
"type": "VEC2"255
"type": "VEC2"272
},256
},273
{257
{274
"bufferView": 1,258
"bufferView": 19,275
"byteOffset": 1177488,276
"componentType": 5125,259
"componentType": 5125,277
"count": 33396,260
"count": 33396,278
"type": "SCALAR"261
"type": "SCALAR"279
},262
},280
{263
{281
"bufferView": 3,264
"bufferView": 20,282
"byteOffset": 1821144,283
"componentType": 5126,265
"componentType": 5126,284
"count": 250,266
"count": 250,285
"max": [267
"max": [@@ -295,8 +277,7 @@295
"type": "VEC3"277
"type": "VEC3"296
},278
},297
{279
{298
"bufferView": 3,280
"bufferView": 21,299
"byteOffset": 1824144,300
"componentType": 5126,281
"componentType": 5126,301
"count": 250,282
"count": 250,302
"max": [283
"max": [@@ -312,8 +293,7 @@312
"type": "VEC3"293
"type": "VEC3"313
},294
},314
{295
{315
"bufferView": 2,296
"bufferView": 22,316
"byteOffset": 607048,317
"componentType": 5126,297
"componentType": 5126,318
"count": 250,298
"count": 250,319
"max": [299
"max": [@@ -327,70 +307,13 @@327
"type": "VEC2"307
"type": "VEC2"328
},308
},329
{309
{330
"bufferView": 1,310
"bufferView": 23,331
"byteOffset": 1311072,332
"componentType": 5125,311
"componentType": 5125,333
"count": 1104,312
"count": 1104,334
"type": "SCALAR"313
"type": "SCALAR"335
},314
},336
{315
{337
"bufferView": 3,316
"bufferView": 24,338
"byteOffset": 1827144,339
"componentType": 5126,340
"count": 3902,341
"max": [342
0.7412804365158081,343
16.114208221435547,344
1.2630138397216797345
],346
"min": [347
-0.761985182762146,348
12.552064895629883,349
-1.1836838722229004350
],351
"type": "VEC3"352
},353
{354
"bufferView": 3,355
"byteOffset": 1873968,356
"componentType": 5126,357
"count": 3902,358
"max": [359
0.9999988675117493,360
0.9993376731872559,361
0.9998865127563477362
],363
"min": [364
-0.9994397759437561,365
-0.89373379945755,366
-0.9994388818740845367
],368
"type": "VEC3"369
},370
{371
"bufferView": 2,372
"byteOffset": 609048,373
"componentType": 5126,374
"count": 3902,375
"max": [376
0.9869999885559082,377
0.9937000274658203378
],379
"min": [380
0.013399999588727951,381
0.010400000028312206382
],383
"type": "VEC2"384
},385
{386
"bufferView": 1,387
"byteOffset": 1315488,388
"componentType": 5125,389
"count": 16056,390
"type": "SCALAR"391
},392
{393
"bufferView": 5,394
"componentType": 5126,317
"componentType": 5126,395
"count": 54,318
"count": 54,396
"max": [319
"max": [@@ -432,13 +355,13 @@432
"type": "MAT4"355
"type": "MAT4"433
},356
},434
{357
{435
"bufferView": 0,358
"bufferView": 25,436
"componentType": 5123,359
"componentType": 5123,437
"count": 124,360
"count": 124,438
"type": "VEC4"361
"type": "VEC4"439
},362
},440
{363
{441
"bufferView": 4,364
"bufferView": 26,442
"componentType": 5126,365
"componentType": 5126,443
"count": 124,366
"count": 124,444
"max": [367
"max": [@@ -456,15 +379,13 @@456
"type": "VEC4"379
"type": "VEC4"457
},380
},458
{381
{459
"bufferView": 0,382
"bufferView": 27,460
"byteOffset": 992,461
"componentType": 5123,383
"componentType": 5123,462
"count": 524,384
"count": 524,463
"type": "VEC4"385
"type": "VEC4"464
},386
},465
{387
{466
"bufferView": 4,388
"bufferView": 28,467
"byteOffset": 1984,468
"componentType": 5126,389
"componentType": 5126,469
"count": 524,390
"count": 524,470
"max": [391
"max": [@@ -482,15 +403,13 @@482
"type": "VEC4"403
"type": "VEC4"483
},404
},484
{405
{485
"bufferView": 0,406
"bufferView": 29,486
"byteOffset": 5184,487
"componentType": 5123,407
"componentType": 5123,488
"count": 552,408
"count": 552,489
"type": "VEC4"409
"type": "VEC4"490
},410
},491
{411
{492
"bufferView": 4,412
"bufferView": 30,493
"byteOffset": 10368,494
"componentType": 5126,413
"componentType": 5126,495
"count": 552,414
"count": 552,496
"max": [415
"max": [@@ -508,15 +427,13 @@508
"type": "VEC4"427
"type": "VEC4"509
},428
},510
{429
{511
"bufferView": 0,430
"bufferView": 31,512
"byteOffset": 9600,513
"componentType": 5123,431
"componentType": 5123,514
"count": 65532,432
"count": 65532,515
"type": "VEC4"433
"type": "VEC4"516
},434
},517
{435
{518
"bufferView": 4,436
"bufferView": 32,519
"byteOffset": 19200,520
"componentType": 5126,437
"componentType": 5126,521
"count": 65532,438
"count": 65532,522
"max": [439
"max": [@@ -534,15 +451,13 @@534
"type": "VEC4"451
"type": "VEC4"535
},452
},536
{453
{537
"bufferView": 0,454
"bufferView": 33,538
"byteOffset": 533856,539
"componentType": 5123,455
"componentType": 5123,540
"count": 9149,456
"count": 9149,541
"type": "VEC4"457
"type": "VEC4"542
},458
},543
{459
{544
"bufferView": 4,460
"bufferView": 34,545
"byteOffset": 1067712,546
"componentType": 5126,461
"componentType": 5126,547
"count": 9149,462
"count": 9149,548
"max": [463
"max": [@@ -560,15 +475,13 @@560
"type": "VEC4"475
"type": "VEC4"561
},476
},562
{477
{563
"bufferView": 0,478
"bufferView": 35,564
"byteOffset": 607048,565
"componentType": 5123,479
"componentType": 5123,566
"count": 250,480
"count": 250,567
"type": "VEC4"481
"type": "VEC4"568
},482
},569
{483
{570
"bufferView": 4,484
"bufferView": 36,571
"byteOffset": 1214096,572
"componentType": 5126,485
"componentType": 5126,573
"count": 250,486
"count": 250,574
"max": [487
"max": [@@ -586,33 +499,7 @@586
"type": "VEC4"499
"type": "VEC4"587
},500
},588
{501
{589
"bufferView": 0,502
"bufferView": 37,590
"byteOffset": 609048,591
"componentType": 5123,592
"count": 3902,593
"type": "VEC4"594
},595
{596
"bufferView": 4,597
"byteOffset": 1218096,598
"componentType": 5126,599
"count": 3902,600
"max": [601
1.0,602
0.4871094226837158,603
0.33214032649993896,604
0.0605
],606
"min": [607
0.3354552686214447,608
0.0,609
0.0,610
0.0611
],612
"type": "VEC4"613
},614
{615
"bufferView": 6,616
"componentType": 5126,503
"componentType": 5126,617
"count": 29,504
"count": 29,618
"max": [505
"max": [@@ -624,7 +511,7 @@624
"type": "SCALAR"511
"type": "SCALAR"625
},512
},626
{513
{627
"bufferView": 8,514
"bufferView": 38,628
"componentType": 5126,515
"componentType": 5126,629
"count": 29,516
"count": 29,630
"max": [517
"max": [@@ -642,8 +529,7 @@642
"type": "VEC4"529
"type": "VEC4"643
},530
},644
{531
{645
"bufferView": 6,532
"bufferView": 39,646
"byteOffset": 116,647
"componentType": 5126,533
"componentType": 5126,648
"count": 48,534
"count": 48,649
"max": [535
"max": [@@ -655,8 +541,7 @@655
"type": "SCALAR"541
"type": "SCALAR"656
},542
},657
{543
{658
"bufferView": 8,544
"bufferView": 40,659
"byteOffset": 464,660
"componentType": 5126,545
"componentType": 5126,661
"count": 48,546
"count": 48,662
"max": [547
"max": [@@ -674,8 +559,7 @@674
"type": "VEC4"559
"type": "VEC4"675
},560
},676
{561
{677
"bufferView": 6,562
"bufferView": 41,678
"byteOffset": 308,679
"componentType": 5126,563
"componentType": 5126,680
"count": 48,564
"count": 48,681
"max": [565
"max": [@@ -687,8 +571,7 @@687
"type": "SCALAR"571
"type": "SCALAR"688
},572
},689
{573
{690
"bufferView": 8,574
"bufferView": 42,691
"byteOffset": 1232,692
"componentType": 5126,575
"componentType": 5126,693
"count": 48,576
"count": 48,694
"max": [577
"max": [@@ -706,8 +589,7 @@706
"type": "VEC4"589
"type": "VEC4"707
},590
},708
{591
{709
"bufferView": 6,592
"bufferView": 43,710
"byteOffset": 500,711
"componentType": 5126,593
"componentType": 5126,712
"count": 29,594
"count": 29,713
"max": [595
"max": [@@ -719,8 +601,7 @@719
"type": "SCALAR"601
"type": "SCALAR"720
},602
},721
{603
{722
"bufferView": 8,604
"bufferView": 44,723
"byteOffset": 2000,724
"componentType": 5126,605
"componentType": 5126,725
"count": 29,606
"count": 29,726
"max": [607
"max": [@@ -738,8 +619,7 @@738
"type": "VEC4"619
"type": "VEC4"739
},620
},740
{621
{741
"bufferView": 6,622
"bufferView": 45,742
"byteOffset": 616,743
"componentType": 5126,623
"componentType": 5126,744
"count": 48,624
"count": 48,745
"max": [625
"max": [@@ -751,8 +631,7 @@751
"type": "SCALAR"631
"type": "SCALAR"752
},632
},753
{633
{754
"bufferView": 8,634
"bufferView": 46,755
"byteOffset": 2464,756
"componentType": 5126,635
"componentType": 5126,757
"count": 48,636
"count": 48,758
"max": [637
"max": [@@ -770,8 +649,7 @@770
"type": "VEC4"649
"type": "VEC4"771
},650
},772
{651
{773
"bufferView": 6,652
"bufferView": 47,774
"byteOffset": 808,775
"componentType": 5126,653
"componentType": 5126,776
"count": 1,654
"count": 1,777
"max": [655
"max": [@@ -783,7 +661,7 @@783
"type": "SCALAR"661
"type": "SCALAR"784
},662
},785
{663
{786
"bufferView": 7,664
"bufferView": 48,787
"componentType": 5126,665
"componentType": 5126,788
"count": 1,666
"count": 1,789
"max": [667
"max": [@@ -799,8 +677,7 @@799
"type": "VEC3"677
"type": "VEC3"800
},678
},801
{679
{802
"bufferView": 6,680
"bufferView": 49,803
"byteOffset": 812,804
"componentType": 5126,681
"componentType": 5126,805
"count": 48,682
"count": 48,806
"max": [683
"max": [@@ -812,8 +689,7 @@812
"type": "SCALAR"689
"type": "SCALAR"813
},690
},814
{691
{815
"bufferView": 8,692
"bufferView": 50,816
"byteOffset": 3232,817
"componentType": 5126,693
"componentType": 5126,818
"count": 48,694
"count": 48,819
"max": [695
"max": [@@ -831,8 +707,7 @@831
"type": "VEC4"707
"type": "VEC4"832
},708
},833
{709
{834
"bufferView": 6,710
"bufferView": 51,835
"byteOffset": 1004,836
"componentType": 5126,711
"componentType": 5126,837
"count": 1,712
"count": 1,838
"max": [713
"max": [@@ -844,25 +719,23 @@844
"type": "SCALAR"719
"type": "SCALAR"845
},720
},846
{721
{847
"bufferView": 7,722
"bufferView": 52,848
"byteOffset": 12,849
"componentType": 5126,723
"componentType": 5126,850
"count": 1,724
"count": 1,851
"max": [725
"max": [852
2.384185791015625e-07,726
2.384185791015625e-07,853
0.13778603076934814,727
0.13778603076934814,854
-2.9802322387695313e-08728
-2.9802322387695312e-08855
],729
],856
"min": [730
"min": [857
2.384185791015625e-07,731
2.384185791015625e-07,858
0.13778603076934814,732
0.13778603076934814,859
-2.9802322387695313e-08733
-2.9802322387695312e-08860
],734
],861
"type": "VEC3"735
"type": "VEC3"862
},736
},863
{737
{864
"bufferView": 6,738
"bufferView": 53,865
"byteOffset": 1008,866
"componentType": 5126,739
"componentType": 5126,867
"count": 29,740
"count": 29,868
"max": [741
"max": [@@ -874,8 +747,7 @@874
"type": "SCALAR"747
"type": "SCALAR"875
},748
},876
{749
{877
"bufferView": 8,750
"bufferView": 54,878
"byteOffset": 4000,879
"componentType": 5126,751
"componentType": 5126,880
"count": 29,752
"count": 29,881
"max": [753
"max": [@@ -893,8 +765,7 @@893
"type": "VEC4"765
"type": "VEC4"894
},766
},895
{767
{896
"bufferView": 6,768
"bufferView": 55,897
"byteOffset": 1124,898
"componentType": 5126,769
"componentType": 5126,899
"count": 48,770
"count": 48,900
"max": [771
"max": [@@ -906,8 +777,7 @@906
"type": "SCALAR"777
"type": "SCALAR"907
},778
},908
{779
{909
"bufferView": 8,780
"bufferView": 56,910
"byteOffset": 4464,911
"componentType": 5126,781
"componentType": 5126,912
"count": 48,782
"count": 48,913
"max": [783
"max": [@@ -925,8 +795,7 @@925
"type": "VEC4"795
"type": "VEC4"926
},796
},927
{797
{928
"bufferView": 6,798
"bufferView": 57,929
"byteOffset": 1316,930
"componentType": 5126,799
"componentType": 5126,931
"count": 48,800
"count": 48,932
"max": [801
"max": [@@ -938,8 +807,7 @@938
"type": "SCALAR"807
"type": "SCALAR"939
},808
},940
{809
{941
"bufferView": 8,810
"bufferView": 58,942
"byteOffset": 5232,943
"componentType": 5126,811
"componentType": 5126,944
"count": 48,812
"count": 48,945
"max": [813
"max": [@@ -957,8 +825,7 @@957
"type": "VEC4"825
"type": "VEC4"958
},826
},959
{827
{960
"bufferView": 6,828
"bufferView": 59,961
"byteOffset": 1508,962
"componentType": 5126,829
"componentType": 5126,963
"count": 29,830
"count": 29,964
"max": [831
"max": [@@ -970,8 +837,7 @@970
"type": "SCALAR"837
"type": "SCALAR"971
},838
},972
{839
{973
"bufferView": 8,840
"bufferView": 60,974
"byteOffset": 6000,975
"componentType": 5126,841
"componentType": 5126,976
"count": 29,842
"count": 29,977
"max": [843
"max": [@@ -989,8 +855,7 @@989
"type": "VEC4"855
"type": "VEC4"990
},856
},991
{857
{992
"bufferView": 6,858
"bufferView": 61,993
"byteOffset": 1624,994
"componentType": 5126,859
"componentType": 5126,995
"count": 48,860
"count": 48,996
"max": [861
"max": [@@ -1002,8 +867,7 @@1002
"type": "SCALAR"867
"type": "SCALAR"1003
},868
},1004
{869
{1005
"bufferView": 8,870
"bufferView": 62,1006
"byteOffset": 6464,1007
"componentType": 5126,871
"componentType": 5126,1008
"count": 48,872
"count": 48,1009
"max": [873
"max": [@@ -1021,8 +885,7 @@1021
"type": "VEC4"885
"type": "VEC4"1022
},886
},1023
{887
{1024
"bufferView": 6,888
"bufferView": 63,1025
"byteOffset": 1816,1026
"componentType": 5126,889
"componentType": 5126,1027
"count": 48,890
"count": 48,1028
"max": [891
"max": [@@ -1034,8 +897,7 @@1034
"type": "SCALAR"897
"type": "SCALAR"1035
},898
},1036
{899
{1037
"bufferView": 8,900
"bufferView": 64,1038
"byteOffset": 7232,1039
"componentType": 5126,901
"componentType": 5126,1040
"count": 48,902
"count": 48,1041
"max": [903
"max": [@@ -1053,8 +915,7 @@1053
"type": "VEC4"915
"type": "VEC4"1054
},916
},1055
{917
{1056
"bufferView": 6,918
"bufferView": 65,1057
"byteOffset": 2008,1058
"componentType": 5126,919
"componentType": 5126,1059
"count": 29,920
"count": 29,1060
"max": [921
"max": [@@ -1066,8 +927,7 @@1066
"type": "SCALAR"927
"type": "SCALAR"1067
},928
},1068
{929
{1069
"bufferView": 8,930
"bufferView": 66,1070
"byteOffset": 8000,1071
"componentType": 5126,931
"componentType": 5126,1072
"count": 29,932
"count": 29,1073
"max": [933
"max": [@@ -1085,8 +945,7 @@1085
"type": "VEC4"945
"type": "VEC4"1086
},946
},1087
{947
{1088
"bufferView": 6,948
"bufferView": 67,1089
"byteOffset": 2124,1090
"componentType": 5126,949
"componentType": 5126,1091
"count": 1,950
"count": 1,1092
"max": [951
"max": [@@ -1098,25 +957,23 @@1098
"type": "SCALAR"957
"type": "SCALAR"1099
},958
},1100
{959
{1101
"bufferView": 7,960
"bufferView": 68,1102
"byteOffset": 24,1103
"componentType": 5126,961
"componentType": 5126,1104
"count": 1,962
"count": 1,1105
"max": [963
"max": [1106
8.046627044677734e-07,964
8.046627044677734e-07,1107
0.27365753054618835,965
0.27365753054618835,1108
2.9802322387695313e-08966
2.9802322387695312e-081109
],967
],1110
"min": [968
"min": [1111
8.046627044677734e-07,969
8.046627044677734e-07,1112
0.27365753054618835,970
0.27365753054618835,1113
2.9802322387695313e-08971
2.9802322387695312e-081114
],972
],1115
"type": "VEC3"973
"type": "VEC3"1116
},974
},1117
{975
{1118
"bufferView": 6,976
"bufferView": 69,1119
"byteOffset": 2128,1120
"componentType": 5126,977
"componentType": 5126,1121
"count": 29,978
"count": 29,1122
"max": [979
"max": [@@ -1128,8 +985,7 @@1128
"type": "SCALAR"985
"type": "SCALAR"1129
},986
},1130
{987
{1131
"bufferView": 8,988
"bufferView": 70,1132
"byteOffset": 8464,1133
"componentType": 5126,989
"componentType": 5126,1134
"count": 29,990
"count": 29,1135
"max": [991
"max": [@@ -1147,8 +1003,7 @@1147
"type": "VEC4"1003
"type": "VEC4"1148
},1004
},1149
{1005
{1150
"bufferView": 6,1006
"bufferView": 71,1151
"byteOffset": 2244,1152
"componentType": 5126,1007
"componentType": 5126,1153
"count": 1,1008
"count": 1,1154
"max": [1009
"max": [@@ -1160,8 +1015,7 @@1160
"type": "SCALAR"1015
"type": "SCALAR"1161
},1016
},1162
{1017
{1163
"bufferView": 7,1018
"bufferView": 72,1164
"byteOffset": 36,1165
"componentType": 5126,1019
"componentType": 5126,1166
"count": 1,1020
"count": 1,1167
"max": [1021
"max": [@@ -1177,8 +1031,7 @@1177
"type": "VEC3"1031
"type": "VEC3"1178
},1032
},1179
{1033
{1180
"bufferView": 6,1034
"bufferView": 73,1181
"byteOffset": 2248,1182
"componentType": 5126,1035
"componentType": 5126,1183
"count": 28,1036
"count": 28,1184
"max": [1037
"max": [@@ -1190,8 +1043,7 @@1190
"type": "SCALAR"1043
"type": "SCALAR"1191
},1044
},1192
{1045
{1193
"bufferView": 8,1046
"bufferView": 74,1194
"byteOffset": 8928,1195
"componentType": 5126,1047
"componentType": 5126,1196
"count": 28,1048
"count": 28,1197
"max": [1049
"max": [@@ -1209,8 +1061,7 @@1209
"type": "VEC4"1061
"type": "VEC4"1210
},1062
},1211
{1063
{1212
"bufferView": 6,1064
"bufferView": 75,1213
"byteOffset": 2360,1214
"componentType": 5126,1065
"componentType": 5126,1215
"count": 40,1066
"count": 40,1216
"max": [1067
"max": [@@ -1222,8 +1073,7 @@1222
"type": "SCALAR"1073
"type": "SCALAR"1223
},1074
},1224
{1075
{1225
"bufferView": 7,1076
"bufferView": 76,1226
"byteOffset": 48,1227
"componentType": 5126,1077
"componentType": 5126,1228
"count": 40,1078
"count": 40,1229
"max": [1079
"max": [@@ -1239,8 +1089,7 @@1239
"type": "VEC3"1089
"type": "VEC3"1240
},1090
},1241
{1091
{1242
"bufferView": 6,1092
"bufferView": 77,1243
"byteOffset": 2520,1244
"componentType": 5126,1093
"componentType": 5126,1245
"count": 48,1094
"count": 48,1246
"max": [1095
"max": [@@ -1252,8 +1101,7 @@1252
"type": "SCALAR"1101
"type": "SCALAR"1253
},1102
},1254
{1103
{1255
"bufferView": 8,1104
"bufferView": 78,1256
"byteOffset": 9376,1257
"componentType": 5126,1105
"componentType": 5126,1258
"count": 48,1106
"count": 48,1259
"max": [1107
"max": [@@ -1271,8 +1119,7 @@1271
"type": "VEC4"1119
"type": "VEC4"1272
},1120
},1273
{1121
{1274
"bufferView": 6,1122
"bufferView": 79,1275
"byteOffset": 2712,1276
"componentType": 5126,1123
"componentType": 5126,1277
"count": 48,1124
"count": 48,1278
"max": [1125
"max": [@@ -1284,8 +1131,7 @@1284
"type": "SCALAR"1131
"type": "SCALAR"1285
},1132
},1286
{1133
{1287
"bufferView": 8,1134
"bufferView": 80,1288
"byteOffset": 10144,1289
"componentType": 5126,1135
"componentType": 5126,1290
"count": 48,1136
"count": 48,1291
"max": [1137
"max": [@@ -1303,8 +1149,7 @@1303
"type": "VEC4"1149
"type": "VEC4"1304
},1150
},1305
{1151
{1306
"bufferView": 6,1152
"bufferView": 81,1307
"byteOffset": 2904,1308
"componentType": 5126,1153
"componentType": 5126,1309
"count": 1,1154
"count": 1,1310
"max": [1155
"max": [@@ -1316,8 +1161,7 @@1316
"type": "SCALAR"1161
"type": "SCALAR"1317
},1162
},1318
{1163
{1319
"bufferView": 7,1164
"bufferView": 82,1320
"byteOffset": 528,1321
"componentType": 5126,1165
"componentType": 5126,1322
"count": 1,1166
"count": 1,1323
"max": [1167
"max": [@@ -1333,8 +1177,7 @@1333
"type": "VEC3"1177
"type": "VEC3"1334
},1178
},1335
{1179
{1336
"bufferView": 6,1180
"bufferView": 83,1337
"byteOffset": 2908,1338
"componentType": 5126,1181
"componentType": 5126,1339
"count": 48,1182
"count": 48,1340
"max": [1183
"max": [@@ -1346,8 +1189,7 @@1346
"type": "SCALAR"1189
"type": "SCALAR"1347
},1190
},1348
{1191
{1349
"bufferView": 8,1192
"bufferView": 84,1350
"byteOffset": 10912,1351
"componentType": 5126,1193
"componentType": 5126,1352
"count": 48,1194
"count": 48,1353
"max": [1195
"max": [@@ -1365,8 +1207,7 @@1365
"type": "VEC4"1207
"type": "VEC4"1366
},1208
},1367
{1209
{1368
"bufferView": 6,1210
"bufferView": 85,1369
"byteOffset": 3100,1370
"componentType": 5126,1211
"componentType": 5126,1371
"count": 48,1212
"count": 48,1372
"max": [1213
"max": [@@ -1378,8 +1219,7 @@1378
"type": "SCALAR"1219
"type": "SCALAR"1379
},1220
},1380
{1221
{1381
"bufferView": 7,1222
"bufferView": 86,1382
"byteOffset": 540,1383
"componentType": 5126,1223
"componentType": 5126,1384
"count": 48,1224
"count": 48,1385
"max": [1225
"max": [@@ -1395,8 +1235,7 @@1395
"type": "VEC3"1235
"type": "VEC3"1396
},1236
},1397
{1237
{1398
"bufferView": 6,1238
"bufferView": 87,1399
"byteOffset": 3292,1400
"componentType": 5126,1239
"componentType": 5126,1401
"count": 48,1240
"count": 48,1402
"max": [1241
"max": [@@ -1408,8 +1247,7 @@1408
"type": "SCALAR"1247
"type": "SCALAR"1409
},1248
},1410
{1249
{1411
"bufferView": 8,1250
"bufferView": 88,1412
"byteOffset": 11680,1413
"componentType": 5126,1251
"componentType": 5126,1414
"count": 48,1252
"count": 48,1415
"max": [1253
"max": [@@ -1427,8 +1265,7 @@1427
"type": "VEC4"1265
"type": "VEC4"1428
},1266
},1429
{1267
{1430
"bufferView": 6,1268
"bufferView": 89,1431
"byteOffset": 3484,1432
"componentType": 5126,1269
"componentType": 5126,1433
"count": 29,1270
"count": 29,1434
"max": [1271
"max": [@@ -1440,8 +1277,7 @@1440
"type": "SCALAR"1277
"type": "SCALAR"1441
},1278
},1442
{1279
{1443
"bufferView": 8,1280
"bufferView": 90,1444
"byteOffset": 12448,1445
"componentType": 5126,1281
"componentType": 5126,1446
"count": 29,1282
"count": 29,1447
"max": [1283
"max": [@@ -1459,8 +1295,7 @@1459
"type": "VEC4"1295
"type": "VEC4"1460
},1296
},1461
{1297
{1462
"bufferView": 6,1298
"bufferView": 91,1463
"byteOffset": 3600,1464
"componentType": 5126,1299
"componentType": 5126,1465
"count": 38,1300
"count": 38,1466
"max": [1301
"max": [@@ -1472,8 +1307,7 @@1472
"type": "SCALAR"1307
"type": "SCALAR"1473
},1308
},1474
{1309
{1475
"bufferView": 8,1310
"bufferView": 92,1476
"byteOffset": 12912,1477
"componentType": 5126,1311
"componentType": 5126,1478
"count": 38,1312
"count": 38,1479
"max": [1313
"max": [@@ -1491,8 +1325,7 @@1491
"type": "VEC4"1325
"type": "VEC4"1492
},1326
},1493
{1327
{1494
"bufferView": 6,1328
"bufferView": 93,1495
"byteOffset": 3752,1496
"componentType": 5126,1329
"componentType": 5126,1497
"count": 1,1330
"count": 1,1498
"max": [1331
"max": [@@ -1504,8 +1337,7 @@1504
"type": "SCALAR"1337
"type": "SCALAR"1505
},1338
},1506
{1339
{1507
"bufferView": 7,1340
"bufferView": 94,1508
"byteOffset": 1116,1509
"componentType": 5126,1341
"componentType": 5126,1510
"count": 1,1342
"count": 1,1511
"max": [1343
"max": [@@ -1521,8 +1353,7 @@1521
"type": "VEC3"1353
"type": "VEC3"1522
},1354
},1523
{1355
{1524
"bufferView": 6,1356
"bufferView": 95,1525
"byteOffset": 3756,1526
"componentType": 5126,1357
"componentType": 5126,1527
"count": 48,1358
"count": 48,1528
"max": [1359
"max": [@@ -1534,8 +1365,7 @@1534
"type": "SCALAR"1365
"type": "SCALAR"1535
},1366
},1536
{1367
{1537
"bufferView": 8,1368
"bufferView": 96,1538
"byteOffset": 13520,1539
"componentType": 5126,1369
"componentType": 5126,1540
"count": 48,1370
"count": 48,1541
"max": [1371
"max": [@@ -1553,8 +1383,7 @@1553
"type": "VEC4"1383
"type": "VEC4"1554
},1384
},1555
{1385
{1556
"bufferView": 6,1386
"bufferView": 97,1557
"byteOffset": 3948,1558
"componentType": 5126,1387
"componentType": 5126,1559
"count": 29,1388
"count": 29,1560
"max": [1389
"max": [@@ -1566,8 +1395,7 @@1566
"type": "SCALAR"1395
"type": "SCALAR"1567
},1396
},1568
{1397
{1569
"bufferView": 8,1398
"bufferView": 98,1570
"byteOffset": 14288,1571
"componentType": 5126,1399
"componentType": 5126,1572
"count": 29,1400
"count": 29,1573
"max": [1401
"max": [@@ -1585,8 +1413,7 @@1585
"type": "VEC4"1413
"type": "VEC4"1586
},1414
},1587
{1415
{1588
"bufferView": 6,1416
"bufferView": 99,1589
"byteOffset": 4064,1590
"componentType": 5126,1417
"componentType": 5126,1591
"count": 48,1418
"count": 48,1592
"max": [1419
"max": [@@ -1598,8 +1425,7 @@1598
"type": "SCALAR"1425
"type": "SCALAR"1599
},1426
},1600
{1427
{1601
"bufferView": 8,1428
"bufferView": 100,1602
"byteOffset": 14752,1603
"componentType": 5126,1429
"componentType": 5126,1604
"count": 48,1430
"count": 48,1605
"max": [1431
"max": [@@ -1617,8 +1443,7 @@1617
"type": "VEC4"1443
"type": "VEC4"1618
},1444
},1619
{1445
{1620
"bufferView": 6,1446
"bufferView": 101,1621
"byteOffset": 4256,1622
"componentType": 5126,1447
"componentType": 5126,1623
"count": 1,1448
"count": 1,1624
"max": [1449
"max": [@@ -1630,8 +1455,7 @@1630
"type": "SCALAR"1455
"type": "SCALAR"1631
},1456
},1632
{1457
{1633
"bufferView": 7,1458
"bufferView": 102,1634
"byteOffset": 1128,1635
"componentType": 5126,1459
"componentType": 5126,1636
"count": 1,1460
"count": 1,1637
"max": [1461
"max": [@@ -1647,8 +1471,7 @@1647
"type": "VEC3"1471
"type": "VEC3"1648
},1472
},1649
{1473
{1650
"bufferView": 6,1474
"bufferView": 103,1651
"byteOffset": 4260,1652
"componentType": 5126,1475
"componentType": 5126,1653
"count": 48,1476
"count": 48,1654
"max": [1477
"max": [@@ -1660,8 +1483,7 @@1660
"type": "SCALAR"1483
"type": "SCALAR"1661
},1484
},1662
{1485
{1663
"bufferView": 8,1486
"bufferView": 104,1664
"byteOffset": 15520,1665
"componentType": 5126,1487
"componentType": 5126,1666
"count": 48,1488
"count": 48,1667
"max": [1489
"max": [@@ -1679,8 +1501,7 @@1679
"type": "VEC4"1501
"type": "VEC4"1680
},1502
},1681
{1503
{1682
"bufferView": 6,1504
"bufferView": 105,1683
"byteOffset": 4452,1684
"componentType": 5126,1505
"componentType": 5126,1685
"count": 1,1506
"count": 1,1686
"max": [1507
"max": [@@ -1692,8 +1513,7 @@1692
"type": "SCALAR"1513
"type": "SCALAR"1693
},1514
},1694
{1515
{1695
"bufferView": 7,1516
"bufferView": 106,1696
"byteOffset": 1140,1697
"componentType": 5126,1517
"componentType": 5126,1698
"count": 1,1518
"count": 1,1699
"max": [1519
"max": [@@ -1709,8 +1529,7 @@1709
"type": "VEC3"1529
"type": "VEC3"1710
},1530
},1711
{1531
{1712
"bufferView": 6,1532
"bufferView": 107,1713
"byteOffset": 4456,1714
"componentType": 5126,1533
"componentType": 5126,1715
"count": 29,1534
"count": 29,1716
"max": [1535
"max": [@@ -1722,8 +1541,7 @@1722
"type": "SCALAR"1541
"type": "SCALAR"1723
},1542
},1724
{1543
{1725
"bufferView": 8,1544
"bufferView": 108,1726
"byteOffset": 16288,1727
"componentType": 5126,1545
"componentType": 5126,1728
"count": 29,1546
"count": 29,1729
"max": [1547
"max": [@@ -1741,8 +1559,7 @@1741
"type": "VEC4"1559
"type": "VEC4"1742
},1560
},1743
{1561
{1744
"bufferView": 6,1562
"bufferView": 109,1745
"byteOffset": 4572,1746
"componentType": 5126,1563
"componentType": 5126,1747
"count": 48,1564
"count": 48,1748
"max": [1565
"max": [@@ -1754,8 +1571,7 @@1754
"type": "SCALAR"1571
"type": "SCALAR"1755
},1572
},1756
{1573
{1757
"bufferView": 8,1574
"bufferView": 110,1758
"byteOffset": 16752,1759
"componentType": 5126,1575
"componentType": 5126,1760
"count": 48,1576
"count": 48,1761
"max": [1577
"max": [@@ -1773,8 +1589,7 @@1773
"type": "VEC4"1589
"type": "VEC4"1774
},1590
},1775
{1591
{1776
"bufferView": 6,1592
"bufferView": 111,1777
"byteOffset": 4764,1778
"componentType": 5126,1593
"componentType": 5126,1779
"count": 1,1594
"count": 1,1780
"max": [1595
"max": [@@ -1786,8 +1601,7 @@1786
"type": "SCALAR"1601
"type": "SCALAR"1787
},1602
},1788
{1603
{1789
"bufferView": 7,1604
"bufferView": 112,1790
"byteOffset": 1152,1791
"componentType": 5126,1605
"componentType": 5126,1792
"count": 1,1606
"count": 1,1793
"max": [1607
"max": [@@ -1803,8 +1617,7 @@1803
"type": "VEC3"1617
"type": "VEC3"1804
},1618
},1805
{1619
{1806
"bufferView": 6,1620
"bufferView": 113,1807
"byteOffset": 4768,1808
"componentType": 5126,1621
"componentType": 5126,1809
"count": 48,1622
"count": 48,1810
"max": [1623
"max": [@@ -1816,8 +1629,7 @@1816
"type": "SCALAR"1629
"type": "SCALAR"1817
},1630
},1818
{1631
{1819
"bufferView": 8,1632
"bufferView": 114,1820
"byteOffset": 17520,1821
"componentType": 5126,1633
"componentType": 5126,1822
"count": 48,1634
"count": 48,1823
"max": [1635
"max": [@@ -1835,8 +1647,7 @@1835
"type": "VEC4"1647
"type": "VEC4"1836
},1648
},1837
{1649
{1838
"bufferView": 6,1650
"bufferView": 115,1839
"byteOffset": 4960,1840
"componentType": 5126,1651
"componentType": 5126,1841
"count": 29,1652
"count": 29,1842
"max": [1653
"max": [@@ -1848,8 +1659,7 @@1848
"type": "SCALAR"1659
"type": "SCALAR"1849
},1660
},1850
{1661
{1851
"bufferView": 8,1662
"bufferView": 116,1852
"byteOffset": 18288,1853
"componentType": 5126,1663
"componentType": 5126,1854
"count": 29,1664
"count": 29,1855
"max": [1665
"max": [@@ -1867,8 +1677,7 @@1867
"type": "VEC4"1677
"type": "VEC4"1868
},1678
},1869
{1679
{1870
"bufferView": 6,1680
"bufferView": 117,1871
"byteOffset": 5076,1872
"componentType": 5126,1681
"componentType": 5126,1873
"count": 48,1682
"count": 48,1874
"max": [1683
"max": [@@ -1880,8 +1689,7 @@1880
"type": "SCALAR"1689
"type": "SCALAR"1881
},1690
},1882
{1691
{1883
"bufferView": 8,1692
"bufferView": 118,1884
"byteOffset": 18752,1885
"componentType": 5126,1693
"componentType": 5126,1886
"count": 48,1694
"count": 48,1887
"max": [1695
"max": [@@ -1899,8 +1707,7 @@1899
"type": "VEC4"1707
"type": "VEC4"1900
},1708
},1901
{1709
{1902
"bufferView": 6,1710
"bufferView": 119,1903
"byteOffset": 5268,1904
"componentType": 5126,1711
"componentType": 5126,1905
"count": 1,1712
"count": 1,1906
"max": [1713
"max": [@@ -1912,8 +1719,7 @@1912
"type": "SCALAR"1719
"type": "SCALAR"1913
},1720
},1914
{1721
{1915
"bufferView": 7,1722
"bufferView": 120,1916
"byteOffset": 1164,1917
"componentType": 5126,1723
"componentType": 5126,1918
"count": 1,1724
"count": 1,1919
"max": [1725
"max": [@@ -1929,8 +1735,7 @@1929
"type": "VEC3"1735
"type": "VEC3"1930
},1736
},1931
{1737
{1932
"bufferView": 6,1738
"bufferView": 121,1933
"byteOffset": 5272,1934
"componentType": 5126,1739
"componentType": 5126,1935
"count": 48,1740
"count": 48,1936
"max": [1741
"max": [@@ -1942,8 +1747,7 @@1942
"type": "SCALAR"1747
"type": "SCALAR"1943
},1748
},1944
{1749
{1945
"bufferView": 8,1750
"bufferView": 122,1946
"byteOffset": 19520,1947
"componentType": 5126,1751
"componentType": 5126,1948
"count": 48,1752
"count": 48,1949
"max": [1753
"max": [@@ -1961,8 +1765,7 @@1961
"type": "VEC4"1765
"type": "VEC4"1962
},1766
},1963
{1767
{1964
"bufferView": 6,1768
"bufferView": 123,1965
"byteOffset": 5464,1966
"componentType": 5126,1769
"componentType": 5126,1967
"count": 29,1770
"count": 29,1968
"max": [1771
"max": [@@ -1974,8 +1777,7 @@1974
"type": "SCALAR"1777
"type": "SCALAR"1975
},1778
},1976
{1779
{1977
"bufferView": 8,1780
"bufferView": 124,1978
"byteOffset": 20288,1979
"componentType": 5126,1781
"componentType": 5126,1980
"count": 29,1782
"count": 29,1981
"max": [1783
"max": [@@ -1993,8 +1795,7 @@1993
"type": "VEC4"1795
"type": "VEC4"1994
},1796
},1995
{1797
{1996
"bufferView": 6,1798
"bufferView": 125,1997
"byteOffset": 5580,1998
"componentType": 5126,1799
"componentType": 5126,1999
"count": 48,1800
"count": 48,2000
"max": [1801
"max": [@@ -2006,12 +1807,11 @@2006
"type": "SCALAR"1807
"type": "SCALAR"2007
},1808
},2008
{1809
{2009
"bufferView": 8,1810
"bufferView": 126,2010
"byteOffset": 20752,2011
"componentType": 5126,1811
"componentType": 5126,2012
"count": 48,1812
"count": 48,2013
"max": [1813
"max": [2014
0.13546773791313171,1814
0.1354677379131317,2015
0.03768495097756386,1815
0.03768495097756386,2016
0.25654536485671997,1816
0.25654536485671997,2017
0.97967189550399781817
0.9796718955039978@@ -2025,8 +1825,7 @@2025
"type": "VEC4"1825
"type": "VEC4"2026
},1826
},2027
{1827
{2028
"bufferView": 6,1828
"bufferView": 127,2029
"byteOffset": 5772,2030
"componentType": 5126,1829
"componentType": 5126,2031
"count": 1,1830
"count": 1,2032
"max": [1831
"max": [@@ -2038,8 +1837,7 @@2038
"type": "SCALAR"1837
"type": "SCALAR"2039
},1838
},2040
{1839
{2041
"bufferView": 7,1840
"bufferView": 128,2042
"byteOffset": 1176,2043
"componentType": 5126,1841
"componentType": 5126,2044
"count": 1,1842
"count": 1,2045
"max": [1843
"max": [@@ -2055,8 +1853,7 @@2055
"type": "VEC3"1853
"type": "VEC3"2056
},1854
},2057
{1855
{2058
"bufferView": 6,1856
"bufferView": 129,2059
"byteOffset": 5776,2060
"componentType": 5126,1857
"componentType": 5126,2061
"count": 43,1858
"count": 43,2062
"max": [1859
"max": [@@ -2068,8 +1865,7 @@2068
"type": "SCALAR"1865
"type": "SCALAR"2069
},1866
},2070
{1867
{2071
"bufferView": 8,1868
"bufferView": 130,2072
"byteOffset": 21520,2073
"componentType": 5126,1869
"componentType": 5126,2074
"count": 43,1870
"count": 43,2075
"max": [1871
"max": [@@ -2087,8 +1883,7 @@2087
"type": "VEC4"1883
"type": "VEC4"2088
},1884
},2089
{1885
{2090
"bufferView": 6,1886
"bufferView": 131,2091
"byteOffset": 5948,2092
"componentType": 5126,1887
"componentType": 5126,2093
"count": 48,1888
"count": 48,2094
"max": [1889
"max": [@@ -2100,8 +1895,7 @@2100
"type": "SCALAR"1895
"type": "SCALAR"2101
},1896
},2102
{1897
{2103
"bufferView": 8,1898
"bufferView": 132,2104
"byteOffset": 22208,2105
"componentType": 5126,1899
"componentType": 5126,2106
"count": 48,1900
"count": 48,2107
"max": [1901
"max": [@@ -2119,8 +1913,7 @@2119
"type": "VEC4"1913
"type": "VEC4"2120
},1914
},2121
{1915
{2122
"bufferView": 6,1916
"bufferView": 133,2123
"byteOffset": 6140,2124
"componentType": 5126,1917
"componentType": 5126,2125
"count": 48,1918
"count": 48,2126
"max": [1919
"max": [@@ -2132,8 +1925,7 @@2132
"type": "SCALAR"1925
"type": "SCALAR"2133
},1926
},2134
{1927
{2135
"bufferView": 8,1928
"bufferView": 134,2136
"byteOffset": 22976,2137
"componentType": 5126,1929
"componentType": 5126,2138
"count": 48,1930
"count": 48,2139
"max": [1931
"max": [@@ -2151,8 +1943,7 @@2151
"type": "VEC4"1943
"type": "VEC4"2152
},1944
},2153
{1945
{2154
"bufferView": 6,1946
"bufferView": 135,2155
"byteOffset": 6332,2156
"componentType": 5126,1947
"componentType": 5126,2157
"count": 48,1948
"count": 48,2158
"max": [1949
"max": [@@ -2164,8 +1955,7 @@2164
"type": "SCALAR"1955
"type": "SCALAR"2165
},1956
},2166
{1957
{2167
"bufferView": 8,1958
"bufferView": 136,2168
"byteOffset": 23744,2169
"componentType": 5126,1959
"componentType": 5126,2170
"count": 48,1960
"count": 48,2171
"max": [1961
"max": [@@ -2183,8 +1973,7 @@2183
"type": "VEC4"1973
"type": "VEC4"2184
},1974
},2185
{1975
{2186
"bufferView": 6,1976
"bufferView": 137,2187
"byteOffset": 6524,2188
"componentType": 5126,1977
"componentType": 5126,2189
"count": 48,1978
"count": 48,2190
"max": [1979
"max": [@@ -2196,8 +1985,7 @@2196
"type": "SCALAR"1985
"type": "SCALAR"2197
},1986
},2198
{1987
{2199
"bufferView": 7,1988
"bufferView": 138,2200
"byteOffset": 1188,2201
"componentType": 5126,1989
"componentType": 5126,2202
"count": 48,1990
"count": 48,2203
"max": [1991
"max": [@@ -2213,8 +2001,7 @@2213
"type": "VEC3"2001
"type": "VEC3"2214
},2002
},2215
{2003
{2216
"bufferView": 6,2004
"bufferView": 139,2217
"byteOffset": 6716,2218
"componentType": 5126,2005
"componentType": 5126,2219
"count": 48,2006
"count": 48,2220
"max": [2007
"max": [@@ -2226,8 +2013,7 @@2226
"type": "SCALAR"2013
"type": "SCALAR"2227
},2014
},2228
{2015
{2229
"bufferView": 8,2016
"bufferView": 140,2230
"byteOffset": 24512,2231
"componentType": 5126,2017
"componentType": 5126,2232
"count": 48,2018
"count": 48,2233
"max": [2019
"max": [@@ -2245,8 +2031,7 @@2245
"type": "VEC4"2031
"type": "VEC4"2246
},2032
},2247
{2033
{2248
"bufferView": 6,2034
"bufferView": 141,2249
"byteOffset": 6908,2250
"componentType": 5126,2035
"componentType": 5126,2251
"count": 29,2036
"count": 29,2252
"max": [2037
"max": [@@ -2258,8 +2043,7 @@2258
"type": "SCALAR"2043
"type": "SCALAR"2259
},2044
},2260
{2045
{2261
"bufferView": 8,2046
"bufferView": 142,2262
"byteOffset": 25280,2263
"componentType": 5126,2047
"componentType": 5126,2264
"count": 29,2048
"count": 29,2265
"max": [2049
"max": [@@ -2277,8 +2061,7 @@2277
"type": "VEC4"2061
"type": "VEC4"2278
},2062
},2279
{2063
{2280
"bufferView": 6,2064
"bufferView": 143,2281
"byteOffset": 7024,2282
"componentType": 5126,2065
"componentType": 5126,2283
"count": 48,2066
"count": 48,2284
"max": [2067
"max": [@@ -2290,8 +2073,7 @@2290
"type": "SCALAR"2073
"type": "SCALAR"2291
},2074
},2292
{2075
{2293
"bufferView": 8,2076
"bufferView": 144,2294
"byteOffset": 25744,2295
"componentType": 5126,2077
"componentType": 5126,2296
"count": 48,2078
"count": 48,2297
"max": [2079
"max": [@@ -2309,8 +2091,7 @@2309
"type": "VEC4"2091
"type": "VEC4"2310
},2092
},2311
{2093
{2312
"bufferView": 6,2094
"bufferView": 145,2313
"byteOffset": 7216,2314
"componentType": 5126,2095
"componentType": 5126,2315
"count": 1,2096
"count": 1,2316
"max": [2097
"max": [@@ -2322,8 +2103,7 @@2322
"type": "SCALAR"2103
"type": "SCALAR"2323
},2104
},2324
{2105
{2325
"bufferView": 7,2106
"bufferView": 146,2326
"byteOffset": 1764,2327
"componentType": 5126,2107
"componentType": 5126,2328
"count": 1,2108
"count": 1,2329
"max": [2109
"max": [@@ -2339,8 +2119,7 @@2339
"type": "VEC3"2119
"type": "VEC3"2340
},2120
},2341
{2121
{2342
"bufferView": 6,2122
"bufferView": 147,2343
"byteOffset": 7220,2344
"componentType": 5126,2123
"componentType": 5126,2345
"count": 29,2124
"count": 29,2346
"max": [2125
"max": [@@ -2352,8 +2131,7 @@2352
"type": "SCALAR"2131
"type": "SCALAR"2353
},2132
},2354
{2133
{2355
"bufferView": 8,2134
"bufferView": 148,2356
"byteOffset": 26512,2357
"componentType": 5126,2135
"componentType": 5126,2358
"count": 29,2136
"count": 29,2359
"max": [2137
"max": [@@ -2371,8 +2149,7 @@2371
"type": "VEC4"2149
"type": "VEC4"2372
},2150
},2373
{2151
{2374
"bufferView": 6,2152
"bufferView": 149,2375
"byteOffset": 7336,2376
"componentType": 5126,2153
"componentType": 5126,2377
"count": 21,2154
"count": 21,2378
"max": [2155
"max": [@@ -2384,8 +2161,7 @@2384
"type": "SCALAR"2161
"type": "SCALAR"2385
},2162
},2386
{2163
{2387
"bufferView": 7,2164
"bufferView": 150,2388
"byteOffset": 1776,2389
"componentType": 5126,2165
"componentType": 5126,2390
"count": 21,2166
"count": 21,2391
"max": [2167
"max": [@@ -2401,8 +2177,7 @@2401
"type": "VEC3"2177
"type": "VEC3"2402
},2178
},2403
{2179
{2404
"bufferView": 6,2180
"bufferView": 151,2405
"byteOffset": 7420,2406
"componentType": 5126,2181
"componentType": 5126,2407
"count": 29,2182
"count": 29,2408
"max": [2183
"max": [@@ -2414,8 +2189,7 @@2414
"type": "SCALAR"2189
"type": "SCALAR"2415
},2190
},2416
{2191
{2417
"bufferView": 8,2192
"bufferView": 152,2418
"byteOffset": 26976,2419
"componentType": 5126,2193
"componentType": 5126,2420
"count": 29,2194
"count": 29,2421
"max": [2195
"max": [@@ -2433,8 +2207,7 @@2433
"type": "VEC4"2207
"type": "VEC4"2434
},2208
},2435
{2209
{2436
"bufferView": 6,2210
"bufferView": 153,2437
"byteOffset": 7536,2438
"componentType": 5126,2211
"componentType": 5126,2439
"count": 48,2212
"count": 48,2440
"max": [2213
"max": [@@ -2446,8 +2219,7 @@2446
"type": "SCALAR"2219
"type": "SCALAR"2447
},2220
},2448
{2221
{2449
"bufferView": 8,2222
"bufferView": 154,2450
"byteOffset": 27440,2451
"componentType": 5126,2223
"componentType": 5126,2452
"count": 48,2224
"count": 48,2453
"max": [2225
"max": [@@ -2465,8 +2237,7 @@2465
"type": "VEC4"2237
"type": "VEC4"2466
},2238
},2467
{2239
{2468
"bufferView": 6,2240
"bufferView": 155,2469
"byteOffset": 7728,2470
"componentType": 5126,2241
"componentType": 5126,2471
"count": 48,2242
"count": 48,2472
"max": [2243
"max": [@@ -2478,8 +2249,7 @@2478
"type": "SCALAR"2249
"type": "SCALAR"2479
},2250
},2480
{2251
{2481
"bufferView": 8,2252
"bufferView": 156,2482
"byteOffset": 28208,2483
"componentType": 5126,2253
"componentType": 5126,2484
"count": 48,2254
"count": 48,2485
"max": [2255
"max": [@@ -2497,8 +2267,7 @@2497
"type": "VEC4"2267
"type": "VEC4"2498
},2268
},2499
{2269
{2500
"bufferView": 6,2270
"bufferView": 157,2501
"byteOffset": 7920,2502
"componentType": 5126,2271
"componentType": 5126,2503
"count": 48,2272
"count": 48,2504
"max": [2273
"max": [@@ -2510,8 +2279,7 @@2510
"type": "SCALAR"2279
"type": "SCALAR"2511
},2280
},2512
{2281
{2513
"bufferView": 8,2282
"bufferView": 158,2514
"byteOffset": 28976,2515
"componentType": 5126,2283
"componentType": 5126,2516
"count": 48,2284
"count": 48,2517
"max": [2285
"max": [@@ -2529,8 +2297,7 @@2529
"type": "VEC4"2297
"type": "VEC4"2530
},2298
},2531
{2299
{2532
"bufferView": 6,2300
"bufferView": 159,2533
"byteOffset": 8112,2534
"componentType": 5126,2301
"componentType": 5126,2535
"count": 48,2302
"count": 48,2536
"max": [2303
"max": [@@ -2542,8 +2309,7 @@2542
"type": "SCALAR"2309
"type": "SCALAR"2543
},2310
},2544
{2311
{2545
"bufferView": 8,2312
"bufferView": 160,2546
"byteOffset": 29744,2547
"componentType": 5126,2313
"componentType": 5126,2548
"count": 48,2314
"count": 48,2549
"max": [2315
"max": [@@ -2561,8 +2327,7 @@2561
"type": "VEC4"2327
"type": "VEC4"2562
},2328
},2563
{2329
{2564
"bufferView": 6,2330
"bufferView": 161,2565
"byteOffset": 8304,2566
"componentType": 5126,2331
"componentType": 5126,2567
"count": 48,2332
"count": 48,2568
"max": [2333
"max": [@@ -2574,8 +2339,7 @@2574
"type": "SCALAR"2339
"type": "SCALAR"2575
},2340
},2576
{2341
{2577
"bufferView": 7,2342
"bufferView": 162,2578
"byteOffset": 2028,2579
"componentType": 5126,2343
"componentType": 5126,2580
"count": 48,2344
"count": 48,2581
"max": [2345
"max": [@@ -2591,8 +2355,7 @@2591
"type": "VEC3"2355
"type": "VEC3"2592
},2356
},2593
{2357
{2594
"bufferView": 6,2358
"bufferView": 163,2595
"byteOffset": 8496,2596
"componentType": 5126,2359
"componentType": 5126,2597
"count": 48,2360
"count": 48,2598
"max": [2361
"max": [@@ -2604,8 +2367,7 @@2604
"type": "SCALAR"2367
"type": "SCALAR"2605
},2368
},2606
{2369
{2607
"bufferView": 8,2370
"bufferView": 164,2608
"byteOffset": 30512,2609
"componentType": 5126,2371
"componentType": 5126,2610
"count": 48,2372
"count": 48,2611
"max": [2373
"max": [@@ -2623,8 +2385,7 @@2623
"type": "VEC4"2385
"type": "VEC4"2624
},2386
},2625
{2387
{2626
"bufferView": 6,2388
"bufferView": 165,2627
"byteOffset": 8688,2628
"componentType": 5126,2389
"componentType": 5126,2629
"count": 48,2390
"count": 48,2630
"max": [2391
"max": [@@ -2636,8 +2397,7 @@2636
"type": "SCALAR"2397
"type": "SCALAR"2637
},2398
},2638
{2399
{2639
"bufferView": 8,2400
"bufferView": 166,2640
"byteOffset": 31280,2641
"componentType": 5126,2401
"componentType": 5126,2642
"count": 48,2402
"count": 48,2643
"max": [2403
"max": [@@ -2655,8 +2415,7 @@2655
"type": "VEC4"2415
"type": "VEC4"2656
},2416
},2657
{2417
{2658
"bufferView": 6,2418
"bufferView": 167,2659
"byteOffset": 8880,2660
"componentType": 5126,2419
"componentType": 5126,2661
"count": 48,2420
"count": 48,2662
"max": [2421
"max": [@@ -2668,8 +2427,7 @@2668
"type": "SCALAR"2427
"type": "SCALAR"2669
},2428
},2670
{2429
{2671
"bufferView": 8,2430
"bufferView": 168,2672
"byteOffset": 32048,2673
"componentType": 5126,2431
"componentType": 5126,2674
"count": 48,2432
"count": 48,2675
"max": [2433
"max": [@@ -2687,8 +2445,7 @@2687
"type": "VEC4"2445
"type": "VEC4"2688
},2446
},2689
{2447
{2690
"bufferView": 6,2448
"bufferView": 169,2691
"byteOffset": 9072,2692
"componentType": 5126,2449
"componentType": 5126,2693
"count": 48,2450
"count": 48,2694
"max": [2451
"max": [@@ -2700,8 +2457,7 @@2700
"type": "SCALAR"2457
"type": "SCALAR"2701
},2458
},2702
{2459
{2703
"bufferView": 8,2460
"bufferView": 170,2704
"byteOffset": 32816,2705
"componentType": 5126,2461
"componentType": 5126,2706
"count": 48,2462
"count": 48,2707
"max": [2463
"max": [@@ -2719,8 +2475,7 @@2719
"type": "VEC4"2475
"type": "VEC4"2720
},2476
},2721
{2477
{2722
"bufferView": 6,2478
"bufferView": 171,2723
"byteOffset": 9264,2724
"componentType": 5126,2479
"componentType": 5126,2725
"count": 48,2480
"count": 48,2726
"max": [2481
"max": [@@ -2732,8 +2487,7 @@2732
"type": "SCALAR"2487
"type": "SCALAR"2733
},2488
},2734
{2489
{2735
"bufferView": 7,2490
"bufferView": 172,2736
"byteOffset": 2604,2737
"componentType": 5126,2491
"componentType": 5126,2738
"count": 48,2492
"count": 48,2739
"max": [2493
"max": [@@ -2749,8 +2503,7 @@2749
"type": "VEC3"2503
"type": "VEC3"2750
},2504
},2751
{2505
{2752
"bufferView": 6,2506
"bufferView": 173,2753
"byteOffset": 9456,2754
"componentType": 5126,2507
"componentType": 5126,2755
"count": 48,2508
"count": 48,2756
"max": [2509
"max": [@@ -2762,8 +2515,7 @@2762
"type": "SCALAR"2515
"type": "SCALAR"2763
},2516
},2764
{2517
{2765
"bufferView": 8,2518
"bufferView": 174,2766
"byteOffset": 33584,2767
"componentType": 5126,2519
"componentType": 5126,2768
"count": 48,2520
"count": 48,2769
"max": [2521
"max": [@@ -2781,8 +2533,7 @@2781
"type": "VEC4"2533
"type": "VEC4"2782
},2534
},2783
{2535
{2784
"bufferView": 6,2536
"bufferView": 175,2785
"byteOffset": 9648,2786
"componentType": 5126,2537
"componentType": 5126,2787
"count": 48,2538
"count": 48,2788
"max": [2539
"max": [@@ -2794,8 +2545,7 @@2794
"type": "SCALAR"2545
"type": "SCALAR"2795
},2546
},2796
{2547
{2797
"bufferView": 7,2548
"bufferView": 176,2798
"byteOffset": 3180,2799
"componentType": 5126,2549
"componentType": 5126,2800
"count": 48,2550
"count": 48,2801
"max": [2551
"max": [@@ -2809,41 +2559,9 @@2809
7.76041460037231452559
7.76041460037231452810
],2560
],2811
"type": "VEC3"2561
"type": "VEC3"2812
},2562
}2813
{2563
],2814
"bufferView": 6,2564
"animations": [2815
"byteOffset": 9840,2816
"componentType": 5126,2817
"count": 1,2818
"max": [2819
0.02820
],2821
"min": [2822
0.02823
],2824
"type": "SCALAR"2825
},2826
{2827
"bufferView": 8,2828
"byteOffset": 34352,2829
"componentType": 5126,2830
"count": 1,2831
"max": [2832
2.1855694143368964e-08,2833
0.0,2834
0.0,2835
1.02836
],2837
"min": [2838
2.1855694143368964e-08,2839
0.0,2840
0.0,2841
1.02842
],2843
"type": "VEC4"2844
}2845
],2846
"animations": [2847
{2565
{2848
"channels": [2566
"channels": [2849
{2567
{@@ -3339,6 +3057,21 @@3339
],3057
],3340
"name": "FemaleArmature|ArmatureAction1",3058
"name": "FemaleArmature|ArmatureAction1",3341
"samplers": [3059
"samplers": [3060
{3061
"input": 37,3062
"interpolation": "LINEAR",3063
"output": 383064
},3065
{3066
"input": 39,3067
"interpolation": "LINEAR",3068
"output": 403069
},3070
{3071
"input": 41,3072
"interpolation": "LINEAR",3073
"output": 423074
},3342
{3075
{3343
"input": 43,3076
"input": 43,3344
"interpolation": "LINEAR",3077
"interpolation": "LINEAR",@@ -3673,123 +3406,946 @@3673
"input": 175,3406
"input": 175,3674
"interpolation": "LINEAR",3407
"interpolation": "LINEAR",3675
"output": 1763408
"output": 1763676
},3677
{3678
"input": 177,3679
"interpolation": "LINEAR",3680
"output": 1783681
},3682
{3683
"input": 179,3684
"interpolation": "LINEAR",3685
"output": 1803686
},3687
{3688
"input": 181,3689
"interpolation": "LINEAR",3690
"output": 1823691
}3409
}3692
]3410
]3411
}3412
],3413
"asset": {3414
"extras": {3415
"author": "assetfactory (https://sketchfab.com/assetfactory)",3416
"license": "SKETCHFAB Standard (https://sketchfab.com/licenses)",3417
"source": "https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec",3418
"title": "Animated Female Base Mesh"3419
},3420
"generator": "Sketchfab-16.33.0",3421
"version": "2.0"3422
},3423
"bufferViews": [3424
{3425
"buffer": 0,3426
"byteOffset": 0,3427
"byteLength": 1488,3428
"target": 349623429
},3430
{3431
"buffer": 0,3432
"byteOffset": 1488,3433
"byteLength": 1488,3434
"target": 349623435
},3436
{3437
"buffer": 0,3438
"byteOffset": 2976,3439
"byteLength": 992,3440
"target": 349623441
},3442
{3443
"buffer": 0,3444
"byteOffset": 3968,3445
"byteLength": 2304,3446
"target": 349633447
},3448
{3449
"buffer": 0,3450
"byteOffset": 6272,3451
"byteLength": 6288,3452
"target": 349623453
},3454
{3455
"buffer": 0,3456
"byteOffset": 12560,3457
"byteLength": 6288,3458
"target": 349623459
},3460
{3461
"buffer": 0,3462
"byteOffset": 18848,3463
"byteLength": 4192,3464
"target": 349623465
},3466
{3467
"buffer": 0,3468
"byteOffset": 23040,3469
"byteLength": 11760,3470
"target": 349633471
},3472
{3473
"buffer": 0,3474
"byteOffset": 34800,3475
"byteLength": 6624,3476
"target": 349623477
},3478
{3479
"buffer": 0,3480
"byteOffset": 41424,3481
"byteLength": 6624,3482
"target": 349623483
},3484
{3485
"buffer": 0,3486
"byteOffset": 48048,3487
"byteLength": 4416,3488
"target": 349623489
},3490
{3491
"buffer": 0,3492
"byteOffset": 52464,3493
"byteLength": 12720,3494
"target": 349633495
},3496
{3497
"buffer": 0,3498
"byteOffset": 65184,3499
"byteLength": 786384,3500
"target": 349623501
},3502
{3503
"buffer": 0,3504
"byteOffset": 851568,3505
"byteLength": 786384,3506
"target": 349623507
},3508
{3509
"buffer": 0,3510
"byteOffset": 1637952,3511
"byteLength": 524256,3512
"target": 349623513
},3514
{3515
"buffer": 0,3516
"byteOffset": 2162208,3517
"byteLength": 1150704,3518
"target": 349633519
},3520
{3521
"buffer": 0,3522
"byteOffset": 3312912,3523
"byteLength": 109788,3524
"target": 349623525
},3526
{3527
"buffer": 0,3528
"byteOffset": 3422700,3529
"byteLength": 109788,3530
"target": 349623531
},3532
{3533
"buffer": 0,3534
"byteOffset": 3532488,3535
"byteLength": 73192,3536
"target": 349623537
},3538
{3539
"buffer": 0,3540
"byteOffset": 3605680,3541
"byteLength": 133584,3542
"target": 349633543
},3544
{3545
"buffer": 0,3546
"byteOffset": 3739264,3547
"byteLength": 3000,3548
"target": 349623549
},3550
{3551
"buffer": 0,3552
"byteOffset": 3742264,3553
"byteLength": 3000,3554
"target": 349623555
},3556
{3557
"buffer": 0,3558
"byteOffset": 3745264,3559
"byteLength": 2000,3560
"target": 349623561
},3562
{3563
"buffer": 0,3564
"byteOffset": 3747264,3565
"byteLength": 4416,3566
"target": 349633567
},3568
{3569
"buffer": 0,3570
"byteOffset": 3751680,3571
"byteLength": 34563572
},3573
{3574
"buffer": 0,3575
"byteOffset": 3755136,3576
"byteLength": 992,3577
"target": 349623578
},3579
{3580
"buffer": 0,3581
"byteOffset": 3756128,3582
"byteLength": 1984,3583
"target": 349623584
},3585
{3586
"buffer": 0,3587
"byteOffset": 3758112,3588
"byteLength": 4192,3589
"target": 349623590
},3591
{3592
"buffer": 0,3593
"byteOffset": 3762304,3594
"byteLength": 8384,3595
"target": 349623596
},3597
{3598
"buffer": 0,3599
"byteOffset": 3770688,3600
"byteLength": 4416,3601
"target": 349623602
},3603
{3604
"buffer": 0,3605
"byteOffset": 3775104,3606
"byteLength": 8832,3607
"target": 349623608
},3609
{3610
"buffer": 0,3611
"byteOffset": 3783936,3612
"byteLength": 524256,3613
"target": 349623614
},3615
{3616
"buffer": 0,3617
"byteOffset": 4308192,3618
"byteLength": 1048512,3619
"target": 349623620
},3621
{3622
"buffer": 0,3623
"byteOffset": 5356704,3624
"byteLength": 73192,3625
"target": 349623626
},3627
{3628
"buffer": 0,3629
"byteOffset": 5429896,3630
"byteLength": 146384,3631
"target": 349623632
},3633
{3634
"buffer": 0,3635
"byteOffset": 5576280,3636
"byteLength": 2000,3637
"target": 349623638
},3639
{3640
"buffer": 0,3641
"byteOffset": 5578280,3642
"byteLength": 4000,3643
"target": 349623644
},3645
{3646
"buffer": 0,3647
"byteOffset": 5582280,3648
"byteLength": 1163649
},3650
{3651
"buffer": 0,3652
"byteOffset": 5582396,3653
"byteLength": 4643654
},3655
{3656
"buffer": 0,3657
"byteOffset": 5582860,3658
"byteLength": 1923659
},3660
{3661
"buffer": 0,3662
"byteOffset": 5583052,3663
"byteLength": 7683664
},3665
{3666
"buffer": 0,3667
"byteOffset": 5583820,3668
"byteLength": 1923669
},3670
{3671
"buffer": 0,3672
"byteOffset": 5584012,3673
"byteLength": 7683674
},3675
{3676
"buffer": 0,3677
"byteOffset": 5584780,3678
"byteLength": 1163679
},3680
{3681
"buffer": 0,3682
"byteOffset": 5584896,3683
"byteLength": 4643684
},3685
{3686
"buffer": 0,3687
"byteOffset": 5585360,3688
"byteLength": 1923689
},3690
{3691
"buffer": 0,3692
"byteOffset": 5585552,3693
"byteLength": 7683694
},3695
{3696
"buffer": 0,3697
"byteOffset": 5586320,3698
"byteLength": 43699
},3700
{3701
"buffer": 0,3702
"byteOffset": 5586324,3703
"byteLength": 123704
},3705
{3706
"buffer": 0,3707
"byteOffset": 5586336,3708
"byteLength": 1923709
},3710
{3711
"buffer": 0,3712
"byteOffset": 5586528,3713
"byteLength": 7683714
},3715
{3716
"buffer": 0,3717
"byteOffset": 5587296,3718
"byteLength": 43719
},3720
{3721
"buffer": 0,3722
"byteOffset": 5587300,3723
"byteLength": 123724
},3725
{3726
"buffer": 0,3727
"byteOffset": 5587312,3728
"byteLength": 1163729
},3730
{3731
"buffer": 0,3732
"byteOffset": 5587428,3733
"byteLength": 4643734
},3735
{3736
"buffer": 0,3737
"byteOffset": 5587892,3738
"byteLength": 1923739
},3740
{3741
"buffer": 0,3742
"byteOffset": 5588084,3743
"byteLength": 7683744
},3745
{3746
"buffer": 0,3747
"byteOffset": 5588852,3748
"byteLength": 1923749
},3750
{3751
"buffer": 0,3752
"byteOffset": 5589044,3753
"byteLength": 7683754
},3755
{3756
"buffer": 0,3757
"byteOffset": 5589812,3758
"byteLength": 1163759
},3760
{3761
"buffer": 0,3762
"byteOffset": 5589928,3763
"byteLength": 4643764
},3765
{3766
"buffer": 0,3767
"byteOffset": 5590392,3768
"byteLength": 1923769
},3770
{3771
"buffer": 0,3772
"byteOffset": 5590584,3773
"byteLength": 7683774
},3775
{3776
"buffer": 0,3777
"byteOffset": 5591352,3778
"byteLength": 1923779
},3780
{3781
"buffer": 0,3782
"byteOffset": 5591544,3783
"byteLength": 7683784
},3785
{3786
"buffer": 0,3787
"byteOffset": 5592312,3788
"byteLength": 1163789
},3790
{3791
"buffer": 0,3792
"byteOffset": 5592428,3793
"byteLength": 4643794
},3795
{3796
"buffer": 0,3797
"byteOffset": 5592892,3798
"byteLength": 43799
},3800
{3801
"buffer": 0,3802
"byteOffset": 5592896,3803
"byteLength": 123804
},3805
{3806
"buffer": 0,3807
"byteOffset": 5592908,3808
"byteLength": 1163809
},3810
{3811
"buffer": 0,3812
"byteOffset": 5593024,3813
"byteLength": 4643814
},3815
{3816
"buffer": 0,3817
"byteOffset": 5593488,3818
"byteLength": 43819
},3820
{3821
"buffer": 0,3822
"byteOffset": 5593492,3823
"byteLength": 123824
},3825
{3826
"buffer": 0,3827
"byteOffset": 5593504,3828
"byteLength": 1123829
},3830
{3831
"buffer": 0,3832
"byteOffset": 5593616,3833
"byteLength": 4483834
},3835
{3836
"buffer": 0,3837
"byteOffset": 5594064,3838
"byteLength": 1603839
},3840
{3841
"buffer": 0,3842
"byteOffset": 5594224,3843
"byteLength": 4803844
},3845
{3846
"buffer": 0,3847
"byteOffset": 5594704,3848
"byteLength": 1923849
},3850
{3851
"buffer": 0,3852
"byteOffset": 5594896,3853
"byteLength": 7683854
},3855
{3856
"buffer": 0,3857
"byteOffset": 5595664,3858
"byteLength": 1923859
},3860
{3861
"buffer": 0,3862
"byteOffset": 5595856,3863
"byteLength": 7683864
},3865
{3866
"buffer": 0,3867
"byteOffset": 5596624,3868
"byteLength": 43869
},3870
{3871
"buffer": 0,3872
"byteOffset": 5596628,3873
"byteLength": 123874
},3875
{3876
"buffer": 0,3877
"byteOffset": 5596640,3878
"byteLength": 1923879
},3880
{3881
"buffer": 0,3882
"byteOffset": 5596832,3883
"byteLength": 7683884
},3885
{3886
"buffer": 0,3887
"byteOffset": 5597600,3888
"byteLength": 1923889
},3890
{3891
"buffer": 0,3892
"byteOffset": 5597792,3893
"byteLength": 5763894
},3895
{3896
"buffer": 0,3897
"byteOffset": 5598368,3898
"byteLength": 1923899
},3900
{3901
"buffer": 0,3902
"byteOffset": 5598560,3903
"byteLength": 7683904
},3905
{3906
"buffer": 0,3907
"byteOffset": 5599328,3908
"byteLength": 1163909
},3910
{3911
"buffer": 0,3912
"byteOffset": 5599444,3913
"byteLength": 4643914
},3915
{3916
"buffer": 0,3917
"byteOffset": 5599908,3918
"byteLength": 1523919
},3920
{3921
"buffer": 0,3922
"byteOffset": 5600060,3923
"byteLength": 6083924
},3925
{3926
"buffer": 0,3927
"byteOffset": 5600668,3928
"byteLength": 43929
},3930
{3931
"buffer": 0,3932
"byteOffset": 5600672,3933
"byteLength": 123934
},3935
{3936
"buffer": 0,3937
"byteOffset": 5600684,3938
"byteLength": 1923939
},3940
{3941
"buffer": 0,3942
"byteOffset": 5600876,3943
"byteLength": 7683944
},3945
{3946
"buffer": 0,3947
"byteOffset": 5601644,3948
"byteLength": 1163949
},3950
{3951
"buffer": 0,3952
"byteOffset": 5601760,3953
"byteLength": 4643954
},3955
{3956
"buffer": 0,3957
"byteOffset": 5602224,3958
"byteLength": 1923959
},3960
{3961
"buffer": 0,3962
"byteOffset": 5602416,3963
"byteLength": 7683964
},3965
{3966
"buffer": 0,3967
"byteOffset": 5603184,3968
"byteLength": 43969
},3970
{3971
"buffer": 0,3972
"byteOffset": 5603188,3973
"byteLength": 123974
},3975
{3976
"buffer": 0,3977
"byteOffset": 5603200,3978
"byteLength": 1923979
},3980
{3981
"buffer": 0,3982
"byteOffset": 5603392,3983
"byteLength": 7683984
},3985
{3986
"buffer": 0,3987
"byteOffset": 5604160,3988
"byteLength": 43693
},3989
},3694
{3990
{3695
"channels": [3991
"buffer": 0,3696
{3992
"byteOffset": 5604164,3697
"sampler": 0,3993
"byteLength": 123698
"target": {3699
"node": 8,3700
"path": "rotation"3701
}3702
}3703
],3704
"name": "FemaleArmature|ponytail01MeshAction.001",3705
"samplers": [3706
{3707
"input": 183,3708
"interpolation": "LINEAR",3709
"output": 1843710
}3711
]3712
}3713
],3714
"asset": {3715
"extras": {3716
"author": "assetfactory (https://sketchfab.com/assetfactory)",3717
"license": "SKETCHFAB Standard (https://sketchfab.com/licenses)",3718
"source": "https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec",3719
"title": "Animated Female Base Mesh"3720
},3994
},3721
"generator": "Sketchfab-16.33.0",3722
"version": "2.0"3723
},3724
"bufferViews": [3725
{3995
{3726
"buffer": 0,3996
"buffer": 0,3727
"byteLength": 640264,3997
"byteOffset": 5604176,3728
"byteStride": 8,3998
"byteLength": 1163729
"name": "shortBufferViews",3730
"target": 349623731
},3999
},3732
{4000
{3733
"buffer": 0,4001
"buffer": 0,3734
"byteLength": 1379712,4002
"byteOffset": 5604292,3735
"byteOffset": 640264,4003
"byteLength": 4643736
"name": "floatBufferViews",3737
"target": 349633738
},4004
},3739
{4005
{3740
"buffer": 0,4006
"buffer": 0,3741
"byteLength": 640264,4007
"byteOffset": 5604756,3742
"byteOffset": 2019976,4008
"byteLength": 1923743
"byteStride": 8,3744
"name": "floatBufferViews",3745
"target": 349623746
},4009
},3747
{4010
{3748
"buffer": 0,4011
"buffer": 0,3749
"byteLength": 1920792,4012
"byteOffset": 5604948,3750
"byteOffset": 2660240,4013
"byteLength": 7683751
"byteStride": 12,3752
"name": "floatBufferViews",3753
"target": 349623754
},4014
},3755
{4015
{3756
"buffer": 0,4016
"buffer": 0,3757
"byteLength": 1280528,4017
"byteOffset": 5605716,3758
"byteOffset": 4581032,4018
"byteLength": 43759
"byteStride": 16,4019
},3760
"name": "floatBufferViews",4020
{3761
"target": 349624021
"buffer": 0,4022
"byteOffset": 5605720,4023
"byteLength": 124024
},4025
{4026
"buffer": 0,4027
"byteOffset": 5605732,4028
"byteLength": 1924029
},4030
{4031
"buffer": 0,4032
"byteOffset": 5605924,4033
"byteLength": 7684034
},4035
{4036
"buffer": 0,4037
"byteOffset": 5606692,4038
"byteLength": 1164039
},4040
{4041
"buffer": 0,4042
"byteOffset": 5606808,4043
"byteLength": 4644044
},4045
{4046
"buffer": 0,4047
"byteOffset": 5607272,4048
"byteLength": 1924049
},4050
{4051
"buffer": 0,4052
"byteOffset": 5607464,4053
"byteLength": 7684054
},4055
{4056
"buffer": 0,4057
"byteOffset": 5608232,4058
"byteLength": 44059
},4060
{4061
"buffer": 0,4062
"byteOffset": 5608236,4063
"byteLength": 124064
},4065
{4066
"buffer": 0,4067
"byteOffset": 5608248,4068
"byteLength": 1924069
},4070
{4071
"buffer": 0,4072
"byteOffset": 5608440,4073
"byteLength": 7684074
},4075
{4076
"buffer": 0,4077
"byteOffset": 5609208,4078
"byteLength": 1164079
},4080
{4081
"buffer": 0,4082
"byteOffset": 5609324,4083
"byteLength": 4644084
},4085
{4086
"buffer": 0,4087
"byteOffset": 5609788,4088
"byteLength": 1924089
},4090
{4091
"buffer": 0,4092
"byteOffset": 5609980,4093
"byteLength": 7684094
},4095
{4096
"buffer": 0,4097
"byteOffset": 5610748,4098
"byteLength": 44099
},4100
{4101
"buffer": 0,4102
"byteOffset": 5610752,4103
"byteLength": 124104
},4105
{4106
"buffer": 0,4107
"byteOffset": 5610764,4108
"byteLength": 1724109
},4110
{4111
"buffer": 0,4112
"byteOffset": 5610936,4113
"byteLength": 6884114
},4115
{4116
"buffer": 0,4117
"byteOffset": 5611624,4118
"byteLength": 1924119
},4120
{4121
"buffer": 0,4122
"byteOffset": 5611816,4123
"byteLength": 7684124
},4125
{4126
"buffer": 0,4127
"byteOffset": 5612584,4128
"byteLength": 1924129
},4130
{4131
"buffer": 0,4132
"byteOffset": 5612776,4133
"byteLength": 7684134
},4135
{4136
"buffer": 0,4137
"byteOffset": 5613544,4138
"byteLength": 1924139
},4140
{4141
"buffer": 0,4142
"byteOffset": 5613736,4143
"byteLength": 7684144
},4145
{4146
"buffer": 0,4147
"byteOffset": 5614504,4148
"byteLength": 1924149
},4150
{4151
"buffer": 0,4152
"byteOffset": 5614696,4153
"byteLength": 5764154
},4155
{4156
"buffer": 0,4157
"byteOffset": 5615272,4158
"byteLength": 1924159
},4160
{4161
"buffer": 0,4162
"byteOffset": 5615464,4163
"byteLength": 7684164
},4165
{4166
"buffer": 0,4167
"byteOffset": 5616232,4168
"byteLength": 1164169
},4170
{4171
"buffer": 0,4172
"byteOffset": 5616348,4173
"byteLength": 4644174
},4175
{4176
"buffer": 0,4177
"byteOffset": 5616812,4178
"byteLength": 1924179
},4180
{4181
"buffer": 0,4182
"byteOffset": 5617004,4183
"byteLength": 7684184
},4185
{4186
"buffer": 0,4187
"byteOffset": 5617772,4188
"byteLength": 44189
},4190
{4191
"buffer": 0,4192
"byteOffset": 5617776,4193
"byteLength": 124194
},4195
{4196
"buffer": 0,4197
"byteOffset": 5617788,4198
"byteLength": 1164199
},4200
{4201
"buffer": 0,4202
"byteOffset": 5617904,4203
"byteLength": 4644204
},4205
{4206
"buffer": 0,4207
"byteOffset": 5618368,4208
"byteLength": 844209
},4210
{4211
"buffer": 0,4212
"byteOffset": 5618452,4213
"byteLength": 2524214
},4215
{4216
"buffer": 0,4217
"byteOffset": 5618704,4218
"byteLength": 1164219
},4220
{4221
"buffer": 0,4222
"byteOffset": 5618820,4223
"byteLength": 4644224
},4225
{4226
"buffer": 0,4227
"byteOffset": 5619284,4228
"byteLength": 1924229
},4230
{4231
"buffer": 0,4232
"byteOffset": 5619476,4233
"byteLength": 7684234
},4235
{4236
"buffer": 0,4237
"byteOffset": 5620244,4238
"byteLength": 1924239
},4240
{4241
"buffer": 0,4242
"byteOffset": 5620436,4243
"byteLength": 7684244
},4245
{4246
"buffer": 0,4247
"byteOffset": 5621204,4248
"byteLength": 1924249
},4250
{4251
"buffer": 0,4252
"byteOffset": 5621396,4253
"byteLength": 7684254
},4255
{4256
"buffer": 0,4257
"byteOffset": 5622164,4258
"byteLength": 1924259
},4260
{4261
"buffer": 0,4262
"byteOffset": 5622356,4263
"byteLength": 7684264
},4265
{4266
"buffer": 0,4267
"byteOffset": 5623124,4268
"byteLength": 1924269
},4270
{4271
"buffer": 0,4272
"byteOffset": 5623316,4273
"byteLength": 5764274
},4275
{4276
"buffer": 0,4277
"byteOffset": 5623892,4278
"byteLength": 1924279
},4280
{4281
"buffer": 0,4282
"byteOffset": 5624084,4283
"byteLength": 7683762
},4284
},3763
{4285
{3764
"buffer": 0,4286
"buffer": 0,3765
"byteLength": 3456,4287
"byteOffset": 5624852,3766
"byteOffset": 5861560,4288
"byteLength": 1923767
"name": "floatBufferViews"3768
},4289
},3769
{4290
{3770
"buffer": 0,4291
"buffer": 0,3771
"byteLength": 9844,4292
"byteOffset": 5625044,3772
"byteOffset": 5865016,4293
"byteLength": 7683773
"name": "floatBufferViews"3774
},4294
},3775
{4295
{3776
"buffer": 0,4296
"buffer": 0,3777
"byteLength": 3756,4297
"byteOffset": 5625812,3778
"byteOffset": 5874860,4298
"byteLength": 1923779
"byteStride": 12,3780
"name": "floatBufferViews"3781
},4299
},3782
{4300
{3783
"buffer": 0,4301
"buffer": 0,3784
"byteLength": 34368,4302
"byteOffset": 5626004,3785
"byteOffset": 5878616,4303
"byteLength": 7683786
"byteStride": 16,4304
},3787
"name": "floatBufferViews"4305
{4306
"buffer": 0,4307
"byteOffset": 5626772,4308
"byteLength": 1924309
},4310
{4311
"buffer": 0,4312
"byteOffset": 5626964,4313
"byteLength": 7684314
},4315
{4316
"buffer": 0,4317
"byteOffset": 5627732,4318
"byteLength": 1924319
},4320
{4321
"buffer": 0,4322
"byteOffset": 5627924,4323
"byteLength": 5764324
},4325
{4326
"buffer": 0,4327
"byteOffset": 5628500,4328
"byteLength": 1924329
},4330
{4331
"buffer": 0,4332
"byteOffset": 5628692,4333
"byteLength": 7684334
},4335
{4336
"buffer": 0,4337
"byteOffset": 5629460,4338
"byteLength": 1924339
},4340
{4341
"buffer": 0,4342
"byteOffset": 5629652,4343
"byteLength": 5763788
}4344
}3789
],4345
],3790
"buffers": [4346
"buffers": [3791
{4347
{3792
"byteLength": 5912984,4348
"byteLength": 5630228,3793
"uri": "female.bin"4349
"uri": "female.bin"3794
}4350
}3795
],4351
],@@ -3805,9 +4361,6 @@3805
},4361
},3806
{4362
{3807
"uri": "textures/eyelashes03.002_baseColor.png"4363
"uri": "textures/eyelashes03.002_baseColor.png"3808
},3809
{3810
"uri": "textures/ponytail01_baseColor.png"3811
}4364
}3812
],4365
],3813
"materials": [4366
"materials": [@@ -3870,18 +4423,6 @@3870
"metallicFactor": 0.0,4423
"metallicFactor": 0.0,3871
"roughnessFactor": 0.91591035854424
"roughnessFactor": 0.91591035853872
}4425
}3873
},3874
{3875
"alphaMode": "BLEND",3876
"doubleSided": true,3877
"name": "ponytail01",3878
"pbrMetallicRoughness": {3879
"baseColorTexture": {3880
"index": 43881
},3882
"metallicFactor": 0.0,3883
"roughnessFactor": 0.63613395843884
}3885
}4426
}3886
],4427
],3887
"meshes": [4428
"meshes": [@@ -3890,11 +4431,11 @@3890
"primitives": [4431
"primitives": [3891
{4432
{3892
"attributes": {4433
"attributes": {3893
"JOINTS_0": 29,4434
"JOINTS_0": 25,3894
"NORMAL": 1,4435
"NORMAL": 1,3895
"POSITION": 0,4436
"POSITION": 0,3896
"TEXCOORD_0": 2,4437
"TEXCOORD_0": 2,3897
"WEIGHTS_0": 304438
"WEIGHTS_0": 263898
},4439
},3899
"indices": 3,4440
"indices": 3,3900
"material": 0,4441
"material": 0,@@ -3907,11 +4448,11 @@3907
"primitives": [4448
"primitives": [3908
{4449
{3909
"attributes": {4450
"attributes": {3910
"JOINTS_0": 31,4451
"JOINTS_0": 27,3911
"NORMAL": 5,4452
"NORMAL": 5,3912
"POSITION": 4,4453
"POSITION": 4,3913
"TEXCOORD_0": 6,4454
"TEXCOORD_0": 6,3914
"WEIGHTS_0": 324455
"WEIGHTS_0": 283915
},4456
},3916
"indices": 7,4457
"indices": 7,3917
"material": 1,4458
"material": 1,@@ -3924,11 +4465,11 @@3924
"primitives": [4465
"primitives": [3925
{4466
{3926
"attributes": {4467
"attributes": {3927
"JOINTS_0": 33,4468
"JOINTS_0": 29,3928
"NORMAL": 9,4469
"NORMAL": 9,3929
"POSITION": 8,4470
"POSITION": 8,3930
"TEXCOORD_0": 10,4471
"TEXCOORD_0": 10,3931
"WEIGHTS_0": 344472
"WEIGHTS_0": 303932
},4473
},3933
"indices": 11,4474
"indices": 11,3934
"material": 2,4475
"material": 2,@@ -3941,11 +4482,11 @@3941
"primitives": [4482
"primitives": [3942
{4483
{3943
"attributes": {4484
"attributes": {3944
"JOINTS_0": 35,4485
"JOINTS_0": 31,3945
"NORMAL": 13,4486
"NORMAL": 13,3946
"POSITION": 12,4487
"POSITION": 12,3947
"TEXCOORD_0": 14,4488
"TEXCOORD_0": 14,3948
"WEIGHTS_0": 364489
"WEIGHTS_0": 323949
},4490
},3950
"indices": 15,4491
"indices": 15,3951
"material": 3,4492
"material": 3,@@ -3958,11 +4499,11 @@3958
"primitives": [4499
"primitives": [3959
{4500
{3960
"attributes": {4501
"attributes": {3961
"JOINTS_0": 37,4502
"JOINTS_0": 33,3962
"NORMAL": 17,4503
"NORMAL": 17,3963
"POSITION": 16,4504
"POSITION": 16,3964
"TEXCOORD_0": 18,4505
"TEXCOORD_0": 18,3965
"WEIGHTS_0": 384506
"WEIGHTS_0": 343966
},4507
},3967
"indices": 19,4508
"indices": 19,3968
"material": 3,4509
"material": 3,@@ -3975,34 +4516,17 @@3975
"primitives": [4516
"primitives": [3976
{4517
{3977
"attributes": {4518
"attributes": {3978
"JOINTS_0": 39,4519
"JOINTS_0": 35,3979
"NORMAL": 21,4520
"NORMAL": 21,3980
"POSITION": 20,4521
"POSITION": 20,3981
"TEXCOORD_0": 22,4522
"TEXCOORD_0": 22,3982
"WEIGHTS_0": 404523
"WEIGHTS_0": 363983
},4524
},3984
"indices": 23,4525
"indices": 23,3985
"material": 4,4526
"material": 4,3986
"mode": 44527
"mode": 43987
}4528
}3988
]4529
]3989
},3990
{3991
"name": "ponytail01Mesh_ponytail01_0",3992
"primitives": [3993
{3994
"attributes": {3995
"JOINTS_0": 41,3996
"NORMAL": 25,3997
"POSITION": 24,3998
"TEXCOORD_0": 26,3999
"WEIGHTS_0": 424000
},4001
"indices": 27,4002
"material": 5,4003
"mode": 44004
}4005
]4006
}4530
}4007
],4531
],4008
"nodes": [4532
"nodes": [@@ -4668,7 +5192,7 @@4668
],5192
],4669
"translation": [5193
"translation": [4670
-4.172325134277344e-07,5194
-4.172325134277344e-07,4671
0.13778707385063171,5195
0.1377870738506317,4672
-6.854534149169922e-075196
-6.854534149169922e-074673
]5197
]4674
},5198
},@@ -5127,7 +5651,7 @@5127
1.05651
1.05128
],5652
],5129
"translation": [5653
"translation": [5130
2.9802322387695313e-08,5654
2.9802322387695312e-08,5131
0.21817153692245483,5655
0.21817153692245483,5132
4.470348358154297e-085656
4.470348358154297e-085133
]5657
]@@ -5192,7 +5716,7 @@5192
"translation": [5716
"translation": [5193
8.940696716308594e-08,5717
8.940696716308594e-08,5194
0.32236427068710327,5718
0.32236427068710327,5195
2.9802322387695313e-085719
2.9802322387695312e-085196
]5720
]5197
},5721
},5198
{5722
{@@ -5423,9 +5947,7 @@5423
"name": "Object_74"5947
"name": "Object_74"5424
},5948
},5425
{5949
{5426
"mesh": 6,5950
"name": "Object_75"5427
"name": "Object_75",5428
"skin": 05429
},5951
},5430
{5952
{5431
"name": "ponytail01Mesh",5953
"name": "ponytail01Mesh",@@ -5461,7 +5983,7 @@5461
],5983
],5462
"skins": [5984
"skins": [5463
{5985
{5464
"inverseBindMatrices": 28,5986
"inverseBindMatrices": 24,5465
"joints": [5987
"joints": [5466
10,5988
10,5467
21,5989
21,@@ -5537,10 +6059,6 @@5537
{6059
{5538
"sampler": 0,6060
"sampler": 0,5539
"source": 36061
"source": 35540
},5541
{5542
"sampler": 0,5543
"source": 45544
}6062
}5545
]6063
]5546
}6064
}The contents of this binary file are not shown.
@@ -0,0 +1,133 @@
1
#![allow(clippy::needless_range_loop)]
2
//! Bakes the hair of Tim's original "Animated Female Base Mesh" into the
3
//! bundled rigid equipment preset `female-hair` (design.md, t1019u): the hair
4
//! primitive (material ponytail01, last primitive) is skinned once at the rest
5
//! pose, expressed in the rest-pose space of the `head` joint, written as
6
//! OBJ + MTL + PNG, imported with the normal OBJ importer and bound to `head`
7
//! of the edited default female with zero offset.
8
//! Usage: bake_female_hair ORIGINAL_FEMALE.gltf HAIR_TEXTURE.png EDITED_FEMALE.gltf OUT.ppe
9
use paperdoll_renderer::{equipment, preview};
10
use std::io::Write;
11
12
fn inverse(m: [f32; 16]) -> [f32; 16] {
13
let mut a = [[0f64; 8]; 4];
14
for r in 0..4 {
15
for c in 0..4 {
16
a[r][c] = m[c * 4 + r] as f64;
17
}
18
a[r][4 + r] = 1.;
19
}
20
for c in 0..4 {
21
let p = (c..4)
22
.max_by(|&x, &y| a[x][c].abs().total_cmp(&a[y][c].abs()))
23
.unwrap();
24
a.swap(c, p);
25
let d = a[c][c];
26
for k in 0..8 {
27
a[c][k] /= d;
28
}
29
for r in 0..4 {
30
if r != c {
31
let f = a[r][c];
32
for k in 0..8 {
33
a[r][k] -= f * a[c][k];
34
}
35
}
36
}
37
}
38
let mut out = [0f32; 16];
39
for r in 0..4 {
40
for c in 0..4 {
41
out[c * 4 + r] = a[r][4 + c] as f32;
42
}
43
}
44
out
45
}
46
fn apply(m: &[f32; 16], p: [f32; 3], w: f32) -> [f32; 3] {
47
[0, 1, 2].map(|i| m[i] * p[0] + m[4 + i] * p[1] + m[8 + i] * p[2] + m[12 + i] * w)
48
}
49
50
fn main() -> Result<(), Box<dyn std::error::Error>> {
51
let a: Vec<String> = std::env::args().skip(1).collect();
52
let body = preview::load_body_file(std::path::Path::new(&a[0]))?;
53
let hair = body.surfaces.last().ok_or("no surfaces")?;
54
let bones: Vec<[f32; 16]> = (0..body.joint_nodes.len())
55
.map(|j| {
56
preview::mul(
57
preview::rest_joint_world(&body, j).unwrap(),
58
body.inverse_binds[j],
59
)
60
})
61
.collect();
62
let head = body
63
.joint_names
64
.iter()
65
.position(|n| n.to_ascii_lowercase().starts_with("head"))
66
.ok_or("no head joint")?;
67
let head_world = preview::animated_joint_world(&body, "", 0.0, head).ok_or("head")?;
68
let to_head = inverse(head_world);
69
let idx = &body.indices[hair.first..hair.first + hair.count];
70
let mut used: Vec<u32> = idx.to_vec();
71
used.sort_unstable();
72
used.dedup();
73
let map: std::collections::HashMap<u32, usize> =
74
used.iter().enumerate().map(|(i, v)| (*v, i + 1)).collect();
75
let dir = tempdir();
76
let mut obj = std::fs::File::create(dir.join("female-hair.obj"))?;
77
writeln!(obj, "# Hair of \"Animated Female Base Mesh\" by assetfactory (Sketchfab Standard), baked rigid to {}", body.joint_names[head])?;
78
writeln!(obj, "mtllib female-hair.mtl\nusemtl hair")?;
79
for v in &used {
80
let i = *v as usize;
81
let mut m = [0f32; 16];
82
for (j, w) in body.joints[i].iter().zip(body.weights[i]) {
83
for k in 0..16 {
84
m[k] += bones[*j as usize][k] * w;
85
}
86
}
87
let p = apply(&to_head, apply(&m, body.positions[i], 1.), 1.);
88
let n = apply(&to_head, apply(&m, body.normals[i], 0.), 0.);
89
let l = (n[0] * n[0] + n[1] * n[1] + n[2] * n[2]).sqrt().max(1e-9);
90
let uv = body.uvs[i];
91
writeln!(obj, "v {} {} {}", p[0], p[1], p[2])?;
92
writeln!(obj, "vt {} {}", uv[0], 1. - uv[1])?;
93
writeln!(obj, "vn {} {} {}", n[0] / l, n[1] / l, n[2] / l)?;
94
}
95
for t in idx.chunks_exact(3) {
96
let f = [map[&t[0]], map[&t[1]], map[&t[2]]];
97
writeln!(
98
obj,
99
"f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}",
100
f[0], f[1], f[2]
101
)?;
102
}
103
drop(obj);
104
std::fs::write(
105
dir.join("female-hair.mtl"),
106
"newmtl hair\nKd 1 1 1\nmap_Kd female-hair.png\n",
107
)?;
108
std::fs::copy(&a[1], dir.join("female-hair.png"))?;
109
let edited = preview::load_body_file(std::path::Path::new(&a[2]))?;
110
let mut preset = equipment::Preset::new("female-hair".into());
111
preset.applies = [false, true];
112
preset.provenance = "Hair of \"Animated Female Base Mesh\" by assetfactory, https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec, Sketchfab Standard licence. Baked rigid to the head joint at the rest pose (was skinned to several bones).".into();
113
let part = equipment::import_obj(&mut preset, &dir.join("female-hair.obj"))?;
114
let head_edited = edited
115
.joint_names
116
.iter()
117
.position(|n| n == &body.joint_names[head])
118
.ok_or("head missing in edited body")?;
119
preset.bind(1, &edited, part, head_edited)?;
120
std::fs::write(&a[3], preset.encode()?)?;
121
println!(
122
"hair: {} vertices, {} triangles, bound to {}",
123
used.len(),
124
idx.len() / 3,
125
body.joint_names[head]
126
);
127
Ok(())
128
}
129
fn tempdir() -> std::path::PathBuf {
130
let d = std::env::temp_dir().join(format!("bake-hair-{}", std::process::id()));
131
std::fs::create_dir_all(&d).unwrap();
132
d
133
}
@@ -0,0 +1,133 @@1
#![allow(clippy::needless_range_loop)]2
//! Bakes the hair of Tim's original "Animated Female Base Mesh" into the3
//! bundled rigid equipment preset `female-hair` (design.md, t1019u): the hair4
//! primitive (material ponytail01, last primitive) is skinned once at the rest5
//! pose, expressed in the rest-pose space of the `head` joint, written as6
//! OBJ + MTL + PNG, imported with the normal OBJ importer and bound to `head`7
//! of the edited default female with zero offset.8
//! Usage: bake_female_hair ORIGINAL_FEMALE.gltf HAIR_TEXTURE.png EDITED_FEMALE.gltf OUT.ppe9
use paperdoll_renderer::{equipment, preview};10
use std::io::Write;11
12
fn inverse(m: [f32; 16]) -> [f32; 16] {13
let mut a = [[0f64; 8]; 4];14
for r in 0..4 {15
for c in 0..4 {16
a[r][c] = m[c * 4 + r] as f64;17
}18
a[r][4 + r] = 1.;19
}20
for c in 0..4 {21
let p = (c..4)22
.max_by(|&x, &y| a[x][c].abs().total_cmp(&a[y][c].abs()))23
.unwrap();24
a.swap(c, p);25
let d = a[c][c];26
for k in 0..8 {27
a[c][k] /= d;28
}29
for r in 0..4 {30
if r != c {31
let f = a[r][c];32
for k in 0..8 {33
a[r][k] -= f * a[c][k];34
}35
}36
}37
}38
let mut out = [0f32; 16];39
for r in 0..4 {40
for c in 0..4 {41
out[c * 4 + r] = a[r][4 + c] as f32;42
}43
}44
out45
}46
fn apply(m: &[f32; 16], p: [f32; 3], w: f32) -> [f32; 3] {47
[0, 1, 2].map(|i| m[i] * p[0] + m[4 + i] * p[1] + m[8 + i] * p[2] + m[12 + i] * w)48
}49
50
fn main() -> Result<(), Box<dyn std::error::Error>> {51
let a: Vec<String> = std::env::args().skip(1).collect();52
let body = preview::load_body_file(std::path::Path::new(&a[0]))?;53
let hair = body.surfaces.last().ok_or("no surfaces")?;54
let bones: Vec<[f32; 16]> = (0..body.joint_nodes.len())55
.map(|j| {56
preview::mul(57
preview::rest_joint_world(&body, j).unwrap(),58
body.inverse_binds[j],59
)60
})61
.collect();62
let head = body63
.joint_names64
.iter()65
.position(|n| n.to_ascii_lowercase().starts_with("head"))66
.ok_or("no head joint")?;67
let head_world = preview::animated_joint_world(&body, "", 0.0, head).ok_or("head")?;68
let to_head = inverse(head_world);69
let idx = &body.indices[hair.first..hair.first + hair.count];70
let mut used: Vec<u32> = idx.to_vec();71
used.sort_unstable();72
used.dedup();73
let map: std::collections::HashMap<u32, usize> =74
used.iter().enumerate().map(|(i, v)| (*v, i + 1)).collect();75
let dir = tempdir();76
let mut obj = std::fs::File::create(dir.join("female-hair.obj"))?;77
writeln!(obj, "# Hair of \"Animated Female Base Mesh\" by assetfactory (Sketchfab Standard), baked rigid to {}", body.joint_names[head])?;78
writeln!(obj, "mtllib female-hair.mtl\nusemtl hair")?;79
for v in &used {80
let i = *v as usize;81
let mut m = [0f32; 16];82
for (j, w) in body.joints[i].iter().zip(body.weights[i]) {83
for k in 0..16 {84
m[k] += bones[*j as usize][k] * w;85
}86
}87
let p = apply(&to_head, apply(&m, body.positions[i], 1.), 1.);88
let n = apply(&to_head, apply(&m, body.normals[i], 0.), 0.);89
let l = (n[0] * n[0] + n[1] * n[1] + n[2] * n[2]).sqrt().max(1e-9);90
let uv = body.uvs[i];91
writeln!(obj, "v {} {} {}", p[0], p[1], p[2])?;92
writeln!(obj, "vt {} {}", uv[0], 1. - uv[1])?;93
writeln!(obj, "vn {} {} {}", n[0] / l, n[1] / l, n[2] / l)?;94
}95
for t in idx.chunks_exact(3) {96
let f = [map[&t[0]], map[&t[1]], map[&t[2]]];97
writeln!(98
obj,99
"f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}",100
f[0], f[1], f[2]101
)?;102
}103
drop(obj);104
std::fs::write(105
dir.join("female-hair.mtl"),106
"newmtl hair\nKd 1 1 1\nmap_Kd female-hair.png\n",107
)?;108
std::fs::copy(&a[1], dir.join("female-hair.png"))?;109
let edited = preview::load_body_file(std::path::Path::new(&a[2]))?;110
let mut preset = equipment::Preset::new("female-hair".into());111
preset.applies = [false, true];112
preset.provenance = "Hair of \"Animated Female Base Mesh\" by assetfactory, https://sketchfab.com/3d-models/animated-female-base-mesh-52fc9c15cf3e49d2a5a9cee6444964ec, Sketchfab Standard licence. Baked rigid to the head joint at the rest pose (was skinned to several bones).".into();113
let part = equipment::import_obj(&mut preset, &dir.join("female-hair.obj"))?;114
let head_edited = edited115
.joint_names116
.iter()117
.position(|n| n == &body.joint_names[head])118
.ok_or("head missing in edited body")?;119
preset.bind(1, &edited, part, head_edited)?;120
std::fs::write(&a[3], preset.encode()?)?;121
println!(122
"hair: {} vertices, {} triangles, bound to {}",123
used.len(),124
idx.len() / 3,125
body.joint_names[head]126
);127
Ok(())128
}129
fn tempdir() -> std::path::PathBuf {130
let d = std::env::temp_dir().join(format!("bake-hair-{}", std::process::id()));131
std::fs::create_dir_all(&d).unwrap();132
d133
}@@ -1,5 +1,5 @@
1
1
//! Actual native end-to-end batch smoke; no GUI input automation or preview delays.
2
//! Usage: production_fixture ROOT MALE.(glb|fbx) FEMALE.(glb|fbx) male|female WIDTH HEIGHT FPS [equipment] [--height-milli=N] [--center-milli=N]
2
//! Usage: production_fixture ROOT MALE.(glb|fbx) FEMALE.(glb|fbx) male|female WIDTH HEIGHT FPS [equipment|default-hair|default-body] [--height-milli=N] [--center-milli=N]
3
3
use eframe::App;
4
4
use paperdoll_renderer::{
5
5
editor::EditorApp,
@@ -48,15 +48,25 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
48
48
let a = std::env::args().skip(1).collect::<Vec<_>>();
49
49
if a.len() < 7 {
50
50
return Err(
51
"ROOT MALE FEMALE male|female WIDTH HEIGHT FPS [equipment] [--height-milli=N] [--center-milli=N]".into(),
51
"ROOT MALE FEMALE male|female WIDTH HEIGHT FPS [equipment|default-hair|default-body] [--height-milli=N] [--center-milli=N]".into(),
52
52
);
53
53
}
54
let root = PathBuf::from(&a[0]);
54
let mut root = PathBuf::from(&a[0]);
55
55
let mut s = Session::new();
56
s.install_new_project(&root)?;
57
for (sex, index) in [(Sex::Male, 1), (Sex::Female, 2)] {
58
let path = adopt_file(&root, &PathBuf::from(&a[index]), "assets/body")?;
59
s.set_body_path(sex, path);
56
// `default-hair`: a real "Nieuw project" (bundled bodies + female-hair
57
// preset, t1019u) in ROOT/Starter; MALE/FEMALE are ignored.
58
let default_hair = a.get(7).is_some_and(|v| v == "default-hair");
59
let default_project = default_hair || a.get(7).is_some_and(|v| v == "default-body");
60
if default_project {
61
std::fs::create_dir_all(&root)?;
62
s.install_named_project(&root, "Starter")?;
63
root = root.join("Starter");
64
} else {
65
s.install_new_project(&root)?;
66
for (sex, index) in [(Sex::Male, 1), (Sex::Female, 2)] {
67
let path = adopt_file(&root, &PathBuf::from(&a[index]), "assets/body")?;
68
s.set_body_path(sex, path);
69
}
60
70
}
61
71
s.set_render(a[4].parse()?, a[5].parse()?, a[6].parse()?);
62
72
let sex = match a[3].as_str() {
@@ -65,6 +75,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
65
75
_ => return Err("invalid sex".into()),
66
76
};
67
77
let equipment = a.get(7).is_some_and(|v| v == "equipment");
78
let open_equipment = equipment || default_hair;
68
79
if let Some(value) = a.iter().find_map(|v| v.strip_prefix("--height-milli=")) {
69
80
s.opened.as_mut().unwrap().document.render.framing[usize::from(sex == Sex::Female)]
70
81
.height_milli = value.parse()?;
@@ -111,7 +122,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
111
122
Box::new(move |_| {
112
123
let mut editor = EditorApp::default();
113
124
editor.open_path(root2.join("character.ppd"));
114
if equipment {
125
if open_equipment {
115
126
editor.open_equipment_configuration(0, sex);
116
127
} else {
117
128
editor.open_body_configuration(sex);
@@ -1,5 +1,5 @@1
//! Actual native end-to-end batch smoke; no GUI input automation or preview delays.1
//! Actual native end-to-end batch smoke; no GUI input automation or preview delays.2
//! Usage: production_fixture ROOT MALE.(glb|fbx) FEMALE.(glb|fbx) male|female WIDTH HEIGHT FPS [equipment] [--height-milli=N] [--center-milli=N]2
//! Usage: production_fixture ROOT MALE.(glb|fbx) FEMALE.(glb|fbx) male|female WIDTH HEIGHT FPS [equipment|default-hair|default-body] [--height-milli=N] [--center-milli=N]3
use eframe::App;3
use eframe::App;4
use paperdoll_renderer::{4
use paperdoll_renderer::{5
editor::EditorApp,5
editor::EditorApp,@@ -48,15 +48,25 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {48
let a = std::env::args().skip(1).collect::<Vec<_>>();48
let a = std::env::args().skip(1).collect::<Vec<_>>();49
if a.len() < 7 {49
if a.len() < 7 {50
return Err(50
return Err(51
"ROOT MALE FEMALE male|female WIDTH HEIGHT FPS [equipment] [--height-milli=N] [--center-milli=N]".into(),51
"ROOT MALE FEMALE male|female WIDTH HEIGHT FPS [equipment|default-hair|default-body] [--height-milli=N] [--center-milli=N]".into(),52
);52
);53
}53
}54
let root = PathBuf::from(&a[0]);54
let mut root = PathBuf::from(&a[0]);55
let mut s = Session::new();55
let mut s = Session::new();56
s.install_new_project(&root)?;56
// `default-hair`: a real "Nieuw project" (bundled bodies + female-hair57
for (sex, index) in [(Sex::Male, 1), (Sex::Female, 2)] {57
// preset, t1019u) in ROOT/Starter; MALE/FEMALE are ignored.58
let path = adopt_file(&root, &PathBuf::from(&a[index]), "assets/body")?;58
let default_hair = a.get(7).is_some_and(|v| v == "default-hair");59
s.set_body_path(sex, path);59
let default_project = default_hair || a.get(7).is_some_and(|v| v == "default-body");60
if default_project {61
std::fs::create_dir_all(&root)?;62
s.install_named_project(&root, "Starter")?;63
root = root.join("Starter");64
} else {65
s.install_new_project(&root)?;66
for (sex, index) in [(Sex::Male, 1), (Sex::Female, 2)] {67
let path = adopt_file(&root, &PathBuf::from(&a[index]), "assets/body")?;68
s.set_body_path(sex, path);69
}60
}70
}61
s.set_render(a[4].parse()?, a[5].parse()?, a[6].parse()?);71
s.set_render(a[4].parse()?, a[5].parse()?, a[6].parse()?);62
let sex = match a[3].as_str() {72
let sex = match a[3].as_str() {@@ -65,6 +75,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {65
_ => return Err("invalid sex".into()),75
_ => return Err("invalid sex".into()),66
};76
};67
let equipment = a.get(7).is_some_and(|v| v == "equipment");77
let equipment = a.get(7).is_some_and(|v| v == "equipment");78
let open_equipment = equipment || default_hair;68
if let Some(value) = a.iter().find_map(|v| v.strip_prefix("--height-milli=")) {79
if let Some(value) = a.iter().find_map(|v| v.strip_prefix("--height-milli=")) {69
s.opened.as_mut().unwrap().document.render.framing[usize::from(sex == Sex::Female)]80
s.opened.as_mut().unwrap().document.render.framing[usize::from(sex == Sex::Female)]70
.height_milli = value.parse()?;81
.height_milli = value.parse()?;@@ -111,7 +122,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {111
Box::new(move |_| {122
Box::new(move |_| {112
let mut editor = EditorApp::default();123
let mut editor = EditorApp::default();113
editor.open_path(root2.join("character.ppd"));124
editor.open_path(root2.join("character.ppd"));114
if equipment {125
if open_equipment {115
editor.open_equipment_configuration(0, sex);126
editor.open_equipment_configuration(0, sex);116
} else {127
} else {117
editor.open_body_configuration(sex);128
editor.open_body_configuration(sex);@@ -0,0 +1,105 @@
1
#!/usr/bin/env python3
2
"""Asset edit of Tim's "Animated Female Base Mesh" for the bundled default
3
female (design.md, t1018u/t1020u): drop the stray animation that resets the
4
armature rotation and the hair mesh (material ponytail01) with its material,
5
texture, image and data, then compact the .bin. Usage: SRC_DIR DST_DIR"""
6
import json, os, shutil, sys
7
8
src, dst = sys.argv[1], sys.argv[2]
9
g = json.load(open(os.path.join(src, "female.gltf")))
10
blob = open(os.path.join(src, g["buffers"][0]["uri"]), "rb").read()
11
12
g["animations"] = [a for a in g["animations"] if "ponytail" not in a["name"]]
13
hair_mat = next(i for i, m in enumerate(g["materials"]) if m.get("name") == "ponytail01")
14
hair_meshes = {i for i, m in enumerate(g["meshes"]) if any(p.get("material") == hair_mat for p in m["primitives"])}
15
assert len(hair_meshes) == 1 and all(p.get("material") == hair_mat for p in g["meshes"][next(iter(hair_meshes))]["primitives"])
16
for n in g["nodes"]:
17
if n.get("mesh") in hair_meshes:
18
del n["mesh"]
19
n.pop("skin", None)
20
21
def remap(items, keep):
22
new = {old: i for i, old in enumerate(keep)}
23
return [items[i] for i in keep], new
24
25
# meshes
26
keep = [i for i in range(len(g["meshes"])) if i not in hair_meshes]
27
g["meshes"], m_map = remap(g["meshes"], keep)
28
for n in g["nodes"]:
29
if "mesh" in n: n["mesh"] = m_map[n["mesh"]]
30
# materials / textures / images
31
keep = [i for i in range(len(g["materials"])) if i != hair_mat]
32
used_tex = set()
33
def textures_of(m):
34
out = []
35
def walk(o):
36
if isinstance(o, dict):
37
if "index" in o and set(o) & {"index"} and ("texCoord" in o or len(o) <= 3): out.append(o)
38
for v in o.values(): walk(v)
39
elif isinstance(o, list):
40
for v in o: walk(v)
41
walk(m); return out
42
g["materials"], mat_map = remap(g["materials"], keep)
43
for m in g["meshes"]:
44
for p in m["primitives"]:
45
if "material" in p: p["material"] = mat_map[p["material"]]
46
refs = [r for m in g["materials"] for r in textures_of(m)]
47
tkeep = sorted({r["index"] for r in refs})
48
g["textures"], t_map = remap(g["textures"], tkeep)
49
for r in refs: r["index"] = t_map[r["index"]]
50
ikeep = sorted({t["source"] for t in g["textures"]})
51
dropped_images = [g["images"][i]["uri"] for i in range(len(g["images"])) if i not in ikeep]
52
g["images"], i_map = remap(g["images"], ikeep)
53
for t in g["textures"]: t["source"] = i_map[t["source"]]
54
# accessors still referenced
55
used_acc = set()
56
for m in g["meshes"]:
57
for p in m["primitives"]:
58
used_acc |= set(p["attributes"].values())
59
if "indices" in p: used_acc.add(p["indices"])
60
for t in p.get("targets", []): used_acc |= set(t.values())
61
for s in g.get("skins", []):
62
if "inverseBindMatrices" in s: used_acc.add(s["inverseBindMatrices"])
63
for a in g["animations"]:
64
for s in a["samplers"]: used_acc |= {s["input"], s["output"]}
65
akeep = sorted(used_acc)
66
g["accessors"], a_map = remap(g["accessors"], akeep)
67
for m in g["meshes"]:
68
for p in m["primitives"]:
69
p["attributes"] = {k: a_map[v] for k, v in p["attributes"].items()}
70
if "indices" in p: p["indices"] = a_map[p["indices"]]
71
for s in g.get("skins", []):
72
if "inverseBindMatrices" in s: s["inverseBindMatrices"] = a_map[s["inverseBindMatrices"]]
73
for a in g["animations"]:
74
for s in a["samplers"]: s["input"], s["output"] = a_map[s["input"]], a_map[s["output"]]
75
# compact bin: every kept accessor gets its own tightly packed buffer view
76
# (the source packs all meshes into a few shared views).
77
comp = {5120: 1, 5121: 1, 5122: 2, 5123: 2, 5125: 4, 5126: 4}
78
ncomp = {"SCALAR": 1, "VEC2": 2, "VEC3": 3, "VEC4": 4, "MAT4": 16}
79
assert not any("bufferView" in im for im in g["images"])
80
out = bytearray(); views = []
81
for a in g["accessors"]:
82
if "bufferView" not in a: continue
83
v = g["bufferViews"][a["bufferView"]]
84
size = comp[a["componentType"]] * ncomp[a["type"]]
85
stride = v.get("byteStride", size)
86
base = v.get("byteOffset", 0) + a.get("byteOffset", 0)
87
data = b"".join(blob[base + k * stride: base + k * stride + size] for k in range(a["count"]))
88
while len(out) % 4: out.append(0)
89
nv = {"buffer": 0, "byteOffset": len(out), "byteLength": len(data)}
90
if "target" in v: nv["target"] = v["target"]
91
views.append(nv); out += data
92
a["bufferView"] = len(views) - 1; a.pop("byteOffset", None)
93
g["bufferViews"] = views
94
g["buffers"][0]["byteLength"] = len(out)
95
g["buffers"][0]["uri"] = "female.bin"
96
os.makedirs(os.path.join(dst, "textures"), exist_ok=True)
97
json.dump(g, open(os.path.join(dst, "female.gltf"), "w"), indent=2)
98
open(os.path.join(dst, "female.bin"), "wb").write(out)
99
for im in g["images"]:
100
shutil.copyfile(os.path.join(src, im["uri"]), os.path.join(dst, im["uri"]))
101
for im in dropped_images:
102
p = os.path.join(dst, im)
103
if os.path.exists(p): os.remove(p)
104
shutil.copyfile(os.path.join(src, "license.txt"), os.path.join(dst, "license.txt"))
105
print("bin", len(blob), "->", len(out), "dropped images", dropped_images)
@@ -0,0 +1,105 @@1
#!/usr/bin/env python32
"""Asset edit of Tim's "Animated Female Base Mesh" for the bundled default3
female (design.md, t1018u/t1020u): drop the stray animation that resets the4
armature rotation and the hair mesh (material ponytail01) with its material,5
texture, image and data, then compact the .bin. Usage: SRC_DIR DST_DIR"""6
import json, os, shutil, sys7
8
src, dst = sys.argv[1], sys.argv[2]9
g = json.load(open(os.path.join(src, "female.gltf")))10
blob = open(os.path.join(src, g["buffers"][0]["uri"]), "rb").read()11
12
g["animations"] = [a for a in g["animations"] if "ponytail" not in a["name"]]13
hair_mat = next(i for i, m in enumerate(g["materials"]) if m.get("name") == "ponytail01")14
hair_meshes = {i for i, m in enumerate(g["meshes"]) if any(p.get("material") == hair_mat for p in m["primitives"])}15
assert len(hair_meshes) == 1 and all(p.get("material") == hair_mat for p in g["meshes"][next(iter(hair_meshes))]["primitives"])16
for n in g["nodes"]:17
if n.get("mesh") in hair_meshes:18
del n["mesh"]19
n.pop("skin", None)20
21
def remap(items, keep):22
new = {old: i for i, old in enumerate(keep)}23
return [items[i] for i in keep], new24
25
# meshes26
keep = [i for i in range(len(g["meshes"])) if i not in hair_meshes]27
g["meshes"], m_map = remap(g["meshes"], keep)28
for n in g["nodes"]:29
if "mesh" in n: n["mesh"] = m_map[n["mesh"]]30
# materials / textures / images31
keep = [i for i in range(len(g["materials"])) if i != hair_mat]32
used_tex = set()33
def textures_of(m):34
out = []35
def walk(o):36
if isinstance(o, dict):37
if "index" in o and set(o) & {"index"} and ("texCoord" in o or len(o) <= 3): out.append(o)38
for v in o.values(): walk(v)39
elif isinstance(o, list):40
for v in o: walk(v)41
walk(m); return out42
g["materials"], mat_map = remap(g["materials"], keep)43
for m in g["meshes"]:44
for p in m["primitives"]:45
if "material" in p: p["material"] = mat_map[p["material"]]46
refs = [r for m in g["materials"] for r in textures_of(m)]47
tkeep = sorted({r["index"] for r in refs})48
g["textures"], t_map = remap(g["textures"], tkeep)49
for r in refs: r["index"] = t_map[r["index"]]50
ikeep = sorted({t["source"] for t in g["textures"]})51
dropped_images = [g["images"][i]["uri"] for i in range(len(g["images"])) if i not in ikeep]52
g["images"], i_map = remap(g["images"], ikeep)53
for t in g["textures"]: t["source"] = i_map[t["source"]]54
# accessors still referenced55
used_acc = set()56
for m in g["meshes"]:57
for p in m["primitives"]:58
used_acc |= set(p["attributes"].values())59
if "indices" in p: used_acc.add(p["indices"])60
for t in p.get("targets", []): used_acc |= set(t.values())61
for s in g.get("skins", []):62
if "inverseBindMatrices" in s: used_acc.add(s["inverseBindMatrices"])63
for a in g["animations"]:64
for s in a["samplers"]: used_acc |= {s["input"], s["output"]}65
akeep = sorted(used_acc)66
g["accessors"], a_map = remap(g["accessors"], akeep)67
for m in g["meshes"]:68
for p in m["primitives"]:69
p["attributes"] = {k: a_map[v] for k, v in p["attributes"].items()}70
if "indices" in p: p["indices"] = a_map[p["indices"]]71
for s in g.get("skins", []):72
if "inverseBindMatrices" in s: s["inverseBindMatrices"] = a_map[s["inverseBindMatrices"]]73
for a in g["animations"]:74
for s in a["samplers"]: s["input"], s["output"] = a_map[s["input"]], a_map[s["output"]]75
# compact bin: every kept accessor gets its own tightly packed buffer view76
# (the source packs all meshes into a few shared views).77
comp = {5120: 1, 5121: 1, 5122: 2, 5123: 2, 5125: 4, 5126: 4}78
ncomp = {"SCALAR": 1, "VEC2": 2, "VEC3": 3, "VEC4": 4, "MAT4": 16}79
assert not any("bufferView" in im for im in g["images"])80
out = bytearray(); views = []81
for a in g["accessors"]:82
if "bufferView" not in a: continue83
v = g["bufferViews"][a["bufferView"]]84
size = comp[a["componentType"]] * ncomp[a["type"]]85
stride = v.get("byteStride", size)86
base = v.get("byteOffset", 0) + a.get("byteOffset", 0)87
data = b"".join(blob[base + k * stride: base + k * stride + size] for k in range(a["count"]))88
while len(out) % 4: out.append(0)89
nv = {"buffer": 0, "byteOffset": len(out), "byteLength": len(data)}90
if "target" in v: nv["target"] = v["target"]91
views.append(nv); out += data92
a["bufferView"] = len(views) - 1; a.pop("byteOffset", None)93
g["bufferViews"] = views94
g["buffers"][0]["byteLength"] = len(out)95
g["buffers"][0]["uri"] = "female.bin"96
os.makedirs(os.path.join(dst, "textures"), exist_ok=True)97
json.dump(g, open(os.path.join(dst, "female.gltf"), "w"), indent=2)98
open(os.path.join(dst, "female.bin"), "wb").write(out)99
for im in g["images"]:100
shutil.copyfile(os.path.join(src, im["uri"]), os.path.join(dst, im["uri"]))101
for im in dropped_images:102
p = os.path.join(dst, im)103
if os.path.exists(p): os.remove(p)104
shutil.copyfile(os.path.join(src, "license.txt"), os.path.join(dst, "license.txt"))105
print("bin", len(blob), "->", len(out), "dropped images", dropped_images)@@ -32,10 +32,6 @@ pub const FILES: &[(&str, &[u8])] = &[
32
32
"female/textures/material_baseColor.png",
33
33
include_bytes!("../assets/default-bodies/female/textures/material_baseColor.png"),
34
34
),
35
(
36
"female/textures/ponytail01_baseColor.png",
37
include_bytes!("../assets/default-bodies/female/textures/ponytail01_baseColor.png"),
38
),
39
35
(
40
36
"male/license.txt",
41
37
include_bytes!("../assets/default-bodies/male/license.txt"),
@@ -60,3 +56,8 @@ pub const FILES: &[(&str, &[u8])] = &[
60
56
61
57
pub const MALE_MODEL: &str = "assets/body/male/male.gltf";
62
58
pub const FEMALE_MODEL: &str = "assets/body/female/female.gltf";
59
60
/// Bundled female hair equipment preset (t1019u), baked by
61
/// `examples/bake_female_hair.rs`; written into every new project.
62
pub const FEMALE_HAIR_PRESET: &str = "presets/female-hair.ppe";
63
pub const FEMALE_HAIR_PPE: &[u8] = include_bytes!("../assets/default-equipment/female-hair.ppe");
@@ -32,10 +32,6 @@ pub const FILES: &[(&str, &[u8])] = &[32
"female/textures/material_baseColor.png",32
"female/textures/material_baseColor.png",33
include_bytes!("../assets/default-bodies/female/textures/material_baseColor.png"),33
include_bytes!("../assets/default-bodies/female/textures/material_baseColor.png"),34
),34
),35
(36
"female/textures/ponytail01_baseColor.png",37
include_bytes!("../assets/default-bodies/female/textures/ponytail01_baseColor.png"),38
),39
(35
(40
"male/license.txt",36
"male/license.txt",41
include_bytes!("../assets/default-bodies/male/license.txt"),37
include_bytes!("../assets/default-bodies/male/license.txt"),@@ -60,3 +56,8 @@ pub const FILES: &[(&str, &[u8])] = &[60
56
61
pub const MALE_MODEL: &str = "assets/body/male/male.gltf";57
pub const MALE_MODEL: &str = "assets/body/male/male.gltf";62
pub const FEMALE_MODEL: &str = "assets/body/female/female.gltf";58
pub const FEMALE_MODEL: &str = "assets/body/female/female.gltf";59
60
/// Bundled female hair equipment preset (t1019u), baked by61
/// `examples/bake_female_hair.rs`; written into every new project.62
pub const FEMALE_HAIR_PRESET: &str = "presets/female-hair.ppe";63
pub const FEMALE_HAIR_PPE: &[u8] = include_bytes!("../assets/default-equipment/female-hair.ppe");@@ -548,6 +548,10 @@ impl EditorApp {
548
548
self.session.active_body = Some(sex);
549
549
self.session.show_equipment(index);
550
550
self.equipment_part = 0;
551
self.controls.sex = match sex {
552
Sex::Male => PreviewSex::Male,
553
Sex::Female => PreviewSex::Female,
554
};
551
555
}
552
556
553
557
fn begin(&mut self, intent: Intent) {
@@ -548,6 +548,10 @@ impl EditorApp {548
self.session.active_body = Some(sex);548
self.session.active_body = Some(sex);549
self.session.show_equipment(index);549
self.session.show_equipment(index);550
self.equipment_part = 0;550
self.equipment_part = 0;551
self.controls.sex = match sex {552
Sex::Male => PreviewSex::Male,553
Sex::Female => PreviewSex::Female,554
};551
}555
}552
556
553
fn begin(&mut self, intent: Intent) {557
fn begin(&mut self, intent: Intent) {@@ -325,7 +325,8 @@ impl Session {
325
325
pub fn install_named_project(&mut self, parent: &Path, name: &str) -> Result<(), String> {
326
326
let dir = crate::project::new_project_dir(parent, name)?;
327
327
let opened = create_default_project_named(&dir, name.trim()).map_err(|e| e.to_string())?;
328
self.install_opened(opened);
328
// install_loaded also reads the bundled equipment preset(s).
329
self.install_loaded(opened);
329
330
self.ok("Project aangemaakt, met de standaardlichamen in assets/body/male en female.");
330
331
Ok(())
331
332
}
@@ -467,6 +468,16 @@ pub fn create_default_project_named(
467
468
}
468
469
opened.document.male_model = Some(crate::default_bodies::MALE_MODEL.to_string());
469
470
opened.document.female_model = Some(crate::default_bodies::FEMALE_MODEL.to_string());
471
// Bundled female hair preset (t1019u), listed in the equipment presets.
472
let path = checked_project_path(root, crate::default_bodies::FEMALE_HAIR_PRESET)
473
.map_err(|error| ProjectError::Validation(vec![error]))?;
474
if !path.exists() {
475
write_bytes(&path, crate::default_bodies::FEMALE_HAIR_PPE)?;
476
}
477
opened
478
.document
479
.equipment_presets
480
.push(crate::default_bodies::FEMALE_HAIR_PRESET.to_string());
470
481
save_project(&opened)?;
471
482
Ok(opened)
472
483
}
@@ -867,6 +878,40 @@ mod tests {
867
878
"{model} textures"
868
879
);
869
880
}
881
// The bundled female hair preset is listed, female-only, and at rest
882
// sits on the head of the default female (t1019u).
883
assert_eq!(
884
fs::read(root.join(crate::default_bodies::FEMALE_HAIR_PRESET)).unwrap(),
885
crate::default_bodies::FEMALE_HAIR_PPE
886
);
887
let hair = session
888
.equipment
889
.iter()
890
.find_map(|item| item.preset.as_ref().filter(|p| p.name == "female-hair"))
891
.expect("female-hair preset in the equipment list");
892
assert_eq!(hair.applies, [false, true]);
893
let female =
894
crate::preview::load_body_file(&root.join(crate::default_bodies::FEMALE_MODEL))
895
.unwrap();
896
let controls = crate::preview::PreviewControls {
897
clip_name: String::new(),
898
..Default::default()
899
};
900
let layers = crate::equipment::layers(hair, 1, &female, &controls).unwrap();
901
assert_eq!(layers.len(), 1);
902
let (mut lo, mut hi) = (f32::MAX, f32::MIN);
903
for p in &layers[0].mesh.positions {
904
let m = &layers[0].model;
905
let y = m[1] * p[0] + m[5] * p[1] + m[9] * p[2] + m[13];
906
lo = lo.min(y);
907
hi = hi.max(y);
908
}
909
// Tim's original female with hair has rest top Y 1.621 m (the hair);
910
// the baked rigid hair must reach exactly that, the ponytail ~1.27 m.
911
assert!(
912
(hi - 1.621).abs() < 0.002 && (1.2..1.35).contains(&lo),
913
"hair Y {lo}..{hi}"
914
);
870
915
// The saved manifest reopens with the same bodies.
871
916
let reopened = crate::project::open_project(&root.join("character.ppd")).unwrap();
872
917
assert_eq!(
@@ -325,7 +325,8 @@ impl Session {325
pub fn install_named_project(&mut self, parent: &Path, name: &str) -> Result<(), String> {325
pub fn install_named_project(&mut self, parent: &Path, name: &str) -> Result<(), String> {326
let dir = crate::project::new_project_dir(parent, name)?;326
let dir = crate::project::new_project_dir(parent, name)?;327
let opened = create_default_project_named(&dir, name.trim()).map_err(|e| e.to_string())?;327
let opened = create_default_project_named(&dir, name.trim()).map_err(|e| e.to_string())?;328
self.install_opened(opened);328
// install_loaded also reads the bundled equipment preset(s).329
self.install_loaded(opened);329
self.ok("Project aangemaakt, met de standaardlichamen in assets/body/male en female.");330
self.ok("Project aangemaakt, met de standaardlichamen in assets/body/male en female.");330
Ok(())331
Ok(())331
}332
}@@ -467,6 +468,16 @@ pub fn create_default_project_named(467
}468
}468
opened.document.male_model = Some(crate::default_bodies::MALE_MODEL.to_string());469
opened.document.male_model = Some(crate::default_bodies::MALE_MODEL.to_string());469
opened.document.female_model = Some(crate::default_bodies::FEMALE_MODEL.to_string());470
opened.document.female_model = Some(crate::default_bodies::FEMALE_MODEL.to_string());471
// Bundled female hair preset (t1019u), listed in the equipment presets.472
let path = checked_project_path(root, crate::default_bodies::FEMALE_HAIR_PRESET)473
.map_err(|error| ProjectError::Validation(vec![error]))?;474
if !path.exists() {475
write_bytes(&path, crate::default_bodies::FEMALE_HAIR_PPE)?;476
}477
opened478
.document479
.equipment_presets480
.push(crate::default_bodies::FEMALE_HAIR_PRESET.to_string());470
save_project(&opened)?;481
save_project(&opened)?;471
Ok(opened)482
Ok(opened)472
}483
}@@ -867,6 +878,40 @@ mod tests {867
"{model} textures"878
"{model} textures"868
);879
);869
}880
}881
// The bundled female hair preset is listed, female-only, and at rest882
// sits on the head of the default female (t1019u).883
assert_eq!(884
fs::read(root.join(crate::default_bodies::FEMALE_HAIR_PRESET)).unwrap(),885
crate::default_bodies::FEMALE_HAIR_PPE886
);887
let hair = session888
.equipment889
.iter()890
.find_map(|item| item.preset.as_ref().filter(|p| p.name == "female-hair"))891
.expect("female-hair preset in the equipment list");892
assert_eq!(hair.applies, [false, true]);893
let female =894
crate::preview::load_body_file(&root.join(crate::default_bodies::FEMALE_MODEL))895
.unwrap();896
let controls = crate::preview::PreviewControls {897
clip_name: String::new(),898
..Default::default()899
};900
let layers = crate::equipment::layers(hair, 1, &female, &controls).unwrap();901
assert_eq!(layers.len(), 1);902
let (mut lo, mut hi) = (f32::MAX, f32::MIN);903
for p in &layers[0].mesh.positions {904
let m = &layers[0].model;905
let y = m[1] * p[0] + m[5] * p[1] + m[9] * p[2] + m[13];906
lo = lo.min(y);907
hi = hi.max(y);908
}909
// Tim's original female with hair has rest top Y 1.621 m (the hair);910
// the baked rigid hair must reach exactly that, the ponytail ~1.27 m.911
assert!(912
(hi - 1.621).abs() < 0.002 && (1.2..1.35).contains(&lo),913
"hair Y {lo}..{hi}"914
);870
// The saved manifest reopens with the same bodies.915
// The saved manifest reopens with the same bodies.871
let reopened = crate::project::open_project(&root.join("character.ppd")).unwrap();916
let reopened = crate::project::open_project(&root.join("character.ppd")).unwrap();872
assert_eq!(917
assert_eq!(