update assimp lib

This commit is contained in:
marauder2k7 2024-12-09 20:22:47 +00:00
parent 03a348deb7
commit d3f8fee74e
1725 changed files with 196314 additions and 62009 deletions

View file

@ -0,0 +1,15 @@
# LICENSE file for the model: Animated Morph Cube
All files in this directory tree are licensed as indicated below.
* All files directly associated with the model including all text, image and binary files:
* [CC0 1.0 Universal]("https://creativecommons.org/publicdomain/zero/1.0/legalcode") [SPDX license identifier: "CC0-1.0"]
* This file and all other metadocumentation files including "metadata.json":
* [Creative Commons Attribtution 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
Full license text of these licenses are available at the links above
#### Generated by modelmetadata

View file

@ -0,0 +1,12 @@
## Screenshot
![screenshot](screenshot/screenshot.gif)
## Description
The cube contains two morph targets in it:
* **`thin`** : moves the vertices so that it becomes super-thin
* **`angle`** : moves the vertices so that it forms a ramp
The animation loops, morphing between these two states.

View file

@ -0,0 +1,36 @@
# Animated Morph Cube
## Tags
[core](../../Models-core.md), [testing](../../Models-testing.md)
## Summary
Demonstrates a simple cube with two simple morph targets and an animation that transitions between them both.
## Operations
* [Display](https://github.khronos.org/glTF-Sample-Viewer-Release/?model=https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/AnimatedMorphCube/glTF-Binary/AnimatedMorphCube.glb) in SampleViewer
* [Download GLB](https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/AnimatedMorphCube/glTF-Binary/AnimatedMorphCube.glb)
* [Model Directory](./)
## Screenshot
![screenshot](screenshot/screenshot.gif)
## Description
The cube contains two morph targets in it:
* **`thin`** : moves the vertices so that it becomes super-thin
* **`angle`** : moves the vertices so that it forms a ramp
The animation loops, morphing between these two states.
## Legal
© 2017, Public. [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/legalcode)
- Microsoft for Everything
#### Assembled by modelmetadata

View file

@ -0,0 +1,282 @@
{
"accessors": [
{
"bufferView": 0,
"componentType": 5126,
"count": 24,
"type": "VEC3"
},
{
"bufferView": 1,
"componentType": 5126,
"count": 24,
"type": "VEC4"
},
{
"bufferView": 2,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"max": [
0.0100000035,
0.0100000035,
0.01
],
"min": [
-0.0100000044,
-0.0100000054,
-0.01
]
},
{
"bufferView": 3,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"name": "thin"
},
{
"bufferView": 4,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"max": [
0.0,
0.01893253,
0.0
],
"min": [
0.0,
0.0,
0.0
],
"name": "thin"
},
{
"bufferView": 5,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"name": "thin"
},
{
"bufferView": 6,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"name": "angle"
},
{
"bufferView": 7,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"max": [
0.0,
0.0198908355,
0.0
],
"min": [
0.0,
0.0,
0.0
],
"name": "angle"
},
{
"bufferView": 8,
"componentType": 5126,
"count": 24,
"type": "VEC3",
"name": "angle"
},
{
"bufferView": 9,
"componentType": 5123,
"count": 36,
"type": "SCALAR"
},
{
"bufferView": 10,
"componentType": 5126,
"count": 127,
"type": "SCALAR",
"max": [
4.19999743
],
"min": [
0.0
]
},
{
"bufferView": 11,
"componentType": 5126,
"count": 254,
"type": "SCALAR"
}
],
"animations": [
{
"channels": [
{
"sampler": 0,
"target": {
"node": 0,
"path": "weights"
}
}
],
"samplers": [
{
"input": 10,
"interpolation": "LINEAR",
"output": 11
}
],
"name": "Square"
}
],
"asset": {
"generator": "glTF Tools for Unity",
"version": "2.0"
},
"bufferViews": [
{
"buffer": 0,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 288,
"byteLength": 384
},
{
"buffer": 0,
"byteOffset": 672,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 960,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 1248,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 1536,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 1824,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 2112,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 2400,
"byteLength": 288
},
{
"buffer": 0,
"byteOffset": 2688,
"byteLength": 72
},
{
"buffer": 0,
"byteOffset": 2760,
"byteLength": 508
},
{
"buffer": 0,
"byteOffset": 3268,
"byteLength": 1016
}
],
"buffers": [
{
"uri": "AnimatedMorphCube.bin",
"byteLength": 4284
}
],
"meshes": [
{
"primitives": [
{
"attributes": {
"NORMAL": 0,
"TANGENT": 1,
"POSITION": 2
},
"indices": 9,
"material": 0,
"targets": [
{
"NORMAL": 3,
"POSITION": 4,
"TANGENT": 5
},
{
"NORMAL": 6,
"POSITION": 7,
"TANGENT": 8
}
]
}
],
"weights": [
0.0,
0.0
],
"name": "Cube"
}
],
"materials": [
{
"pbrMetallicRoughness": {
"baseColorFactor": [
0.6038274,
0.6038274,
0.6038274,
1.0
],
"metallicFactor": 0.0,
"roughnessFactor": 0.5
},
"name": "Material"
}
],
"nodes": [
{
"mesh": 0,
"rotation": [
0.0,
0.7071067,
-0.7071068,
0.0
],
"scale": [
100.0,
100.0,
100.0
],
"name": "AnimatedMorphCube"
}
],
"scene": 0,
"scenes": [
{
"nodes": [
0
]
}
]
}

View file

@ -0,0 +1,20 @@
# Animated Morph Sphere
## Screenshot
![screenshot](screenshot/screenshot.gif)
## Description
The sphere contains two morph targets in it:
* **`blob`** : moves the vertices so that it becomes a somewhat amorphous fat, blob shape.
* **`ship`** : moves the vertices so that it looks a bit like a spaceship, the goal being
to just make it a much more complicated morph example than the [cube](../AnimatedMorphCube/README.md).
The animation loops, morphing between these two states.
## License Information
[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)](http://creativecommons.org/publicdomain/zero/1.0/)
To the extent possible under law, Microsoft has waived all copyright and related or neighboring rights to this asset.

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,276 @@
{
"accessors": [
{
"bufferView": 0,
"componentType": 5126,
"count": 1876,
"type": "VEC3"
},
{
"bufferView": 1,
"componentType": 5126,
"count": 1876,
"type": "VEC4"
},
{
"bufferView": 2,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"max": [
0.009999998,
0.009999991,
0.01
],
"min": [
-0.0100000026,
-0.0100000035,
-0.01
]
},
{
"bufferView": 3,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"name": "Ship"
},
{
"bufferView": 4,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"max": [
0.0313265175,
0.0226246975,
0.008465132
],
"min": [
-0.0313265137,
-0.022857653,
0.0
],
"name": "Ship"
},
{
"bufferView": 5,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"name": "Ship"
},
{
"bufferView": 6,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"name": "Blob"
},
{
"bufferView": 7,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"max": [
0.008781092,
0.0,
0.0
],
"min": [
-0.008781091,
-0.0007655843,
0.0
],
"name": "Blob"
},
{
"bufferView": 8,
"componentType": 5126,
"count": 1876,
"type": "VEC3",
"name": "Blob"
},
{
"bufferView": 9,
"componentType": 5123,
"count": 2880,
"type": "SCALAR"
},
{
"bufferView": 10,
"componentType": 5126,
"count": 217,
"type": "SCALAR",
"max": [
7.19999456
],
"min": [
0.0
]
},
{
"bufferView": 11,
"componentType": 5126,
"count": 434,
"type": "SCALAR"
}
],
"animations": [
{
"channels": [
{
"sampler": 0,
"target": {
"node": 0,
"path": "weights"
}
}
],
"samplers": [
{
"input": 10,
"interpolation": "LINEAR",
"output": 11
}
],
"name": "Globe"
}
],
"asset": {
"generator": "glTF Tools for Unity",
"version": "2.0"
},
"bufferViews": [
{
"buffer": 0,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 22512,
"byteLength": 30016
},
{
"buffer": 0,
"byteOffset": 52528,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 75040,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 97552,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 120064,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 142576,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 165088,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 187600,
"byteLength": 22512
},
{
"buffer": 0,
"byteOffset": 210112,
"byteLength": 5760
},
{
"buffer": 0,
"byteOffset": 215872,
"byteLength": 868
},
{
"buffer": 0,
"byteOffset": 216740,
"byteLength": 1736
}
],
"buffers": [
{
"uri": "AnimatedMorphSphere.bin",
"byteLength": 218476
}
],
"meshes": [
{
"primitives": [
{
"attributes": {
"NORMAL": 0,
"TANGENT": 1,
"POSITION": 2
},
"indices": 9,
"material": 0,
"targets": [
{
"NORMAL": 3,
"POSITION": 4,
"TANGENT": 5
},
{
"NORMAL": 6,
"POSITION": 7,
"TANGENT": 8
}
]
}
],
"weights": [
0.0,
0.0
],
"name": "Sphere"
}
],
"materials": [
{
"pbrMetallicRoughness": {
"metallicFactor": 0.0,
"roughnessFactor": 0.5
},
"name": "No Name"
}
],
"nodes": [
{
"mesh": 0,
"rotation": [
0.0,
0.7071067,
-0.7071068,
0.0
],
"scale": [
100.0,
100.0,
100.0
],
"name": "AnimatedMorphSphere"
}
],
"scene": 0,
"scenes": [
{
"nodes": [
0
]
}
]
}

View file

@ -0,0 +1,17 @@
# LICENSE file for the model: Morph-Primitives Test
All files in this directory tree are licensed as indicated below.
* All files directly associated with the model including all text, image and binary files:
* [CC BY 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
* [CC BY 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
* This file and all other metadocumentation files including "metadata.json":
* [Creative Commons Attribtution 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
Full license text of these licenses are available at the links above
#### Generated by modelmetadata

View file

@ -0,0 +1,21 @@
## Screenshot
![screenshot](screenshot/screenshot.jpg)
## Description
This model contains a simple mesh with two primitives: A larger red primitive displays a grid covering 3 of the 4 quadrants of the model's area, followed by a smaller green primitive covering the last quadrant.
Each primitive has a morph target that creates an elevated area within these quadrants. The model's only mesh contains a `weights: [0.5]` instruction that should cause these morph targets to be applied at half strength, raising the center of the model as shown in the screenshot above.
## Common Problems
If the entire model appears perfectly flat, it is likely that the morph targets have not been applied as requested.
If the red area or green area is missing, particularly in the Draco-compressed version of this model, it could indicate a problem with decompression or with support of multiple primitives within a single mesh.
## Author
Model by [@ft-lab](https://github.com/ft-lab).

View file

@ -0,0 +1,50 @@
# Morph-Primitives Test
## Tags
[core](../../Models-core.md), [testing](../../Models-testing.md)
## Summary
Tests a morph target on multiple primitives.
## Operations
* [Display](https://github.khronos.org/glTF-Sample-Viewer-Release/?model=https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/MorphPrimitivesTest/glTF-Binary/MorphPrimitivesTest.glb) in SampleViewer
* [Download GLB](https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/MorphPrimitivesTest/glTF-Binary/MorphPrimitivesTest.glb)
* [Model Directory](./)
## Screenshot
![screenshot](screenshot/screenshot.jpg)
## Description
This model contains a simple mesh with two primitives: A larger red primitive displays a grid covering 3 of the 4 quadrants of the model's area, followed by a smaller green primitive covering the last quadrant.
Each primitive has a morph target that creates an elevated area within these quadrants. The model's only mesh contains a `weights: [0.5]` instruction that should cause these morph targets to be applied at half strength, raising the center of the model as shown in the screenshot above.
## Common Problems
If the entire model appears perfectly flat, it is likely that the morph targets have not been applied as requested.
If the red area or green area is missing, particularly in the Draco-compressed version of this model, it could indicate a problem with decompression or with support of multiple primitives within a single mesh.
## Author
Model by [@ft-lab](https://github.com/ft-lab).
## Legal
© 2018, ft-lab. [CC BY 4.0 International](https://creativecommons.org/licenses/by/4.0/legalcode)
- ft-lab for Everything
© 2020, Frank Galligan. [CC BY 4.0 International](https://creativecommons.org/licenses/by/4.0/legalcode)
- Frank Galligan for DRACO compression
#### Assembled by modelmetadata

View file

@ -0,0 +1,331 @@
{
"asset": {
"generator": "glTF Converter for Shade3D",
"version": "2.0",
"extras": {
"title": "multiple_primitives",
"author": "ft-lab",
"license": "CC BY-4.0 (https://creativecommons.org/licenses/by/4.0/)"
}
},
"accessors": [
{
"bufferView": 0,
"componentType": 5123,
"count": 72,
"type": "SCALAR",
"byteOffset": 0
},
{
"bufferView": 1,
"componentType": 5126,
"count": 21,
"type": "VEC3",
"byteOffset": 0
},
{
"bufferView": 2,
"componentType": 5126,
"count": 21,
"type": "VEC3",
"max": [
0.5,
0,
0.5
],
"min": [
-0.5,
0,
-0.5
],
"byteOffset": 0
},
{
"bufferView": 3,
"componentType": 5126,
"count": 21,
"type": "VEC2",
"byteOffset": 0
},
{
"bufferView": 4,
"componentType": 5126,
"count": 21,
"type": "VEC3",
"max": [
0,
0.20000000298023224,
0
],
"min": [
0,
0,
0
],
"byteOffset": 0
},
{
"bufferView": 5,
"componentType": 5123,
"count": 24,
"type": "SCALAR",
"byteOffset": 0
},
{
"bufferView": 6,
"componentType": 5126,
"count": 9,
"type": "VEC3",
"byteOffset": 0
},
{
"bufferView": 7,
"componentType": 5126,
"count": 9,
"type": "VEC3",
"max": [
0.5,
0,
0
],
"min": [
0,
0,
-0.5
],
"byteOffset": 0
},
{
"bufferView": 8,
"componentType": 5126,
"count": 9,
"type": "VEC2",
"byteOffset": 0
},
{
"bufferView": 9,
"componentType": 5126,
"count": 9,
"type": "VEC3",
"max": [
0,
0.20000000298023224,
0
],
"min": [
0,
0,
0
],
"byteOffset": 0
}
],
"bufferViews": [
{
"buffer": 0,
"byteOffset": 0,
"byteLength": 144,
"target": 34963
},
{
"buffer": 0,
"byteOffset": 144,
"byteLength": 252,
"target": 34962,
"byteStride": 12
},
{
"buffer": 0,
"byteOffset": 396,
"byteLength": 252,
"target": 34962,
"byteStride": 12
},
{
"buffer": 0,
"byteOffset": 648,
"byteLength": 168,
"target": 34962,
"byteStride": 8
},
{
"buffer": 0,
"byteOffset": 816,
"byteLength": 252,
"target": 34962,
"byteStride": 12
},
{
"buffer": 0,
"byteOffset": 1068,
"byteLength": 48,
"target": 34963
},
{
"buffer": 0,
"byteOffset": 1116,
"byteLength": 108,
"target": 34962,
"byteStride": 12
},
{
"buffer": 0,
"byteOffset": 1224,
"byteLength": 108,
"target": 34962,
"byteStride": 12
},
{
"buffer": 0,
"byteOffset": 1332,
"byteLength": 72,
"target": 34962,
"byteStride": 8
},
{
"buffer": 0,
"byteOffset": 1404,
"byteLength": 108,
"target": 34962,
"byteStride": 12
}
],
"buffers": [
{
"name": "MorphPrimitivesTest",
"byteLength": 1512,
"uri": "MorphPrimitivesTest.bin"
}
],
"images": [
{
"name": "uv_texture.jpg",
"mimeType": "image/jpeg",
"uri": "uv_texture.jpg"
}
],
"materials": [
{
"pbrMetallicRoughness": {
"baseColorFactor": [
1,
0,
0,
1
],
"baseColorTexture": {
"index": 0,
"texCoord": 0
},
"metallicFactor": 0,
"roughnessFactor": 1
},
"name": "red",
"emissiveFactor": [
0,
0,
0
],
"alphaMode": "OPAQUE",
"doubleSided": false
},
{
"pbrMetallicRoughness": {
"baseColorFactor": [
0,
1,
0,
1
],
"baseColorTexture": {
"index": 0,
"texCoord": 0
},
"metallicFactor": 0,
"roughnessFactor": 1
},
"name": "green",
"emissiveFactor": [
0,
0,
0
],
"alphaMode": "OPAQUE",
"doubleSided": false
}
],
"meshes": [
{
"weights": [
0.5
],
"name": "mesh",
"primitives": [
{
"attributes": {
"NORMAL": 1,
"POSITION": 2,
"TEXCOORD_0": 3
},
"indices": 0,
"material": 0,
"targets": [
{
"POSITION": 4
}
],
"mode": 4
},
{
"attributes": {
"POSITION": 7,
"NORMAL": 6,
"TEXCOORD_0": 8
},
"indices": 5,
"material": 1,
"targets": [
{
"POSITION": 9
}
],
"mode": 4
}
]
}
],
"nodes": [
{
"children": [
1
],
"name": "ルートパート"
},
{
"mesh": 0,
"name": "mesh"
}
],
"samplers": [
{
"minFilter": 9729,
"wrapS": 10497,
"wrapT": 10497
}
],
"scenes": [
{
"nodes": [
0
],
"name": "Scene"
}
],
"textures": [
{
"sampler": 0,
"source": 0
}
],
"scene": 0
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View file

@ -0,0 +1,15 @@
# LICENSE file for the model: Morph Stress Test
All files in this directory tree are licensed as indicated below.
* All files directly associated with the model including all text, image and binary files:
* [CC BY 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
* This file and all other metadocumentation files including "metadata.json":
* [Creative Commons Attribtution 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
Full license text of these licenses are available at the links above
#### Generated by modelmetadata

View file

@ -0,0 +1,62 @@
## Screenshot
![screenshot](screenshot/screenshot_large.png)
## Description
This model has a base mesh, plus eight morph targets. The base and each of the morph targets has
both a POSITION and a NORMAL accessor, resulting in no less than 18 vertex attributes being requested
by a typical implementation. This number can be too high for many realtime graphics systems, and
the client runtime may take steps to limit the overall number of morph targets and/or limit the
number of active morph targets.
As such, this model is not expected to render correctly everywhere. Instead, it pushes the limits
to see how many morph targets can move at once before problems become apparent.
## Animations
Three animations are included:
---
### "Individuals"
![Individuals animation](screenshot/Anim_Individuals.gif)
Each morph target is exercised one at a time, and returns to zero strength before the next one
starts to move. This offers runtimes the best chance of success, as vertex attributes need only
be allocated for one morph target at a time. Even so, systems that pre-allocate morph target
attributes may place an upper limit here, allowing only some of the test blocks to move.
---
### "TheWave"
![Wave animation](screenshot/Anim_TheWave.gif)
This animation tests a wave of morph targets being activated simultaneously. This does require
a high number of vertex attributes to be available. If glitches in movement are observed,
continue on to the "Pulse" animation for closer inspection.
---
### "Pulse"
![Pulse animation](screenshot/Anim_Pulse.gif)
This is the most stressful test, with all 8 morph targets reaching full strength before any
begin to subside. Some runtimes may place limits on how many morph targets can be active at
once, resulting in a distinctive visual pattern here: Only the first N test blocks will
appear to move, where N is the number of simultaneous active morph targets allowed. Test
blocks on the right will remain frozen in the starting position until the first few blocks
on the left have returned to rest. After the blocks on the left have returned to rest, they
could relinquish their vertex attributes to blocks on the right, allowing those blocks to
"catch up" to their assigned positions in the animation.
It is also possible that there could be a hard limit on the number of morph targets, regardless
of whether they are active or not. In this case, only the first N blocks will move at all,
and the remainder will be frozen the entire time.
---
## Implementation Notes
BabylonJS has shared some technical details of their "Infinite Morph Targets" implementation
in [this YouTube video](https://www.youtube.com/watch?v=LBPRmGgU0PE).

View file

@ -0,0 +1,87 @@
# Morph Stress Test
## Tags
[core](../../Models-core.md), [testing](../../Models-testing.md)
## Summary
Tests up to 8 morph targets.
## Operations
* [Display](https://github.khronos.org/glTF-Sample-Viewer-Release/?model=https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/MorphStressTest/glTF-Binary/MorphStressTest.glb) in SampleViewer
* [Download GLB](https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/MorphStressTest/glTF-Binary/MorphStressTest.glb)
* [Model Directory](./)
## Screenshot
![screenshot](screenshot/screenshot_large.png)
## Description
This model has a base mesh, plus eight morph targets. The base and each of the morph targets has
both a POSITION and a NORMAL accessor, resulting in no less than 18 vertex attributes being requested
by a typical implementation. This number can be too high for many realtime graphics systems, and
the client runtime may take steps to limit the overall number of morph targets and/or limit the
number of active morph targets.
As such, this model is not expected to render correctly everywhere. Instead, it pushes the limits
to see how many morph targets can move at once before problems become apparent.
## Animations
Three animations are included:
---
### "Individuals"
![Individuals animation](screenshot/Anim_Individuals.gif)
Each morph target is exercised one at a time, and returns to zero strength before the next one
starts to move. This offers runtimes the best chance of success, as vertex attributes need only
be allocated for one morph target at a time. Even so, systems that pre-allocate morph target
attributes may place an upper limit here, allowing only some of the test blocks to move.
---
### "TheWave"
![Wave animation](screenshot/Anim_TheWave.gif)
This animation tests a wave of morph targets being activated simultaneously. This does require
a high number of vertex attributes to be available. If glitches in movement are observed,
continue on to the "Pulse" animation for closer inspection.
---
### "Pulse"
![Pulse animation](screenshot/Anim_Pulse.gif)
This is the most stressful test, with all 8 morph targets reaching full strength before any
begin to subside. Some runtimes may place limits on how many morph targets can be active at
once, resulting in a distinctive visual pattern here: Only the first N test blocks will
appear to move, where N is the number of simultaneous active morph targets allowed. Test
blocks on the right will remain frozen in the starting position until the first few blocks
on the left have returned to rest. After the blocks on the left have returned to rest, they
could relinquish their vertex attributes to blocks on the right, allowing those blocks to
"catch up" to their assigned positions in the animation.
It is also possible that there could be a hard limit on the number of morph targets, regardless
of whether they are active or not. In this case, only the first N blocks will move at all,
and the remainder will be frozen the entire time.
---
## Implementation Notes
BabylonJS has shared some technical details of their "Infinite Morph Targets" implementation
in [this YouTube video](https://www.youtube.com/watch?v=LBPRmGgU0PE).
## Legal
© 2021, Analytical Graphics, Inc.. [CC BY 4.0 International](https://creativecommons.org/licenses/by/4.0/legalcode)
- Ed Mackey for Everything
#### Assembled by modelmetadata

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

View file

@ -0,0 +1,999 @@
{
"asset" : {
"copyright" : "CC-BY 4.0 Copyright 2021 Analytical Graphics, Inc. Model and Textures by Ed Mackey.",
"generator" : "Khronos glTF Blender I/O v1.5.13",
"version" : "2.0"
},
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
0
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "Main"
}
],
"animations" : [
{
"channels" : [
{
"sampler" : 0,
"target" : {
"node" : 0,
"path" : "weights"
}
}
],
"name" : "Individuals",
"samplers" : [
{
"input" : 42,
"interpolation" : "LINEAR",
"output" : 43
}
]
},
{
"channels" : [
{
"sampler" : 0,
"target" : {
"node" : 0,
"path" : "weights"
}
}
],
"name" : "TheWave",
"samplers" : [
{
"input" : 44,
"interpolation" : "LINEAR",
"output" : 45
}
]
},
{
"channels" : [
{
"sampler" : 0,
"target" : {
"node" : 0,
"path" : "weights"
}
}
],
"name" : "Pulse",
"samplers" : [
{
"input" : 46,
"interpolation" : "LINEAR",
"output" : 47
}
]
}
],
"materials" : [
{
"doubleSided" : true,
"name" : "Base",
"occlusionTexture" : {
"index" : 0,
"texCoord" : 1
},
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 1
},
"metallicFactor" : 0,
"roughnessFactor" : 0.4000000059604645
}
},
{
"doubleSided" : true,
"name" : "TestMaterial",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 2
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
}
],
"meshes" : [
{
"extras" : {
"targetNames" : [
"Key 1",
"Key 2",
"Key 3",
"Key 4",
"Key 5",
"Key 6",
"Key 7",
"Key 8"
]
},
"name" : "Cube",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
},
"indices" : 4,
"material" : 0,
"targets" : [
{
"POSITION" : 5,
"NORMAL" : 6
},
{
"POSITION" : 7,
"NORMAL" : 8
},
{
"POSITION" : 9,
"NORMAL" : 10
},
{
"POSITION" : 11,
"NORMAL" : 12
},
{
"POSITION" : 13,
"NORMAL" : 14
},
{
"POSITION" : 15,
"NORMAL" : 16
},
{
"POSITION" : 17,
"NORMAL" : 18
},
{
"POSITION" : 19,
"NORMAL" : 20
}
]
},
{
"attributes" : {
"POSITION" : 21,
"NORMAL" : 22,
"TEXCOORD_0" : 23,
"TEXCOORD_1" : 24
},
"indices" : 25,
"material" : 1,
"targets" : [
{
"POSITION" : 26,
"NORMAL" : 27
},
{
"POSITION" : 28,
"NORMAL" : 29
},
{
"POSITION" : 30,
"NORMAL" : 31
},
{
"POSITION" : 32,
"NORMAL" : 33
},
{
"POSITION" : 34,
"NORMAL" : 35
},
{
"POSITION" : 36,
"NORMAL" : 37
},
{
"POSITION" : 38,
"NORMAL" : 39
},
{
"POSITION" : 40,
"NORMAL" : 41
}
]
}
],
"weights" : [
0,
0,
0,
0,
0,
0,
0,
0
]
}
],
"textures" : [
{
"sampler" : 0,
"source" : 0
},
{
"sampler" : 0,
"source" : 1
},
{
"sampler" : 0,
"source" : 2
}
],
"images" : [
{
"mimeType" : "image/png",
"name" : "Base_AO",
"uri" : "Base_AO.png"
},
{
"mimeType" : "image/png",
"name" : "TinyGrid",
"uri" : "TinyGrid.png"
},
{
"mimeType" : "image/png",
"name" : "ColorSwatches",
"uri" : "ColorSwatches.png"
}
],
"accessors" : [
{
"bufferView" : 0,
"componentType" : 5126,
"count" : 24,
"max" : [
2,
0,
0.5
],
"min" : [
-2,
-0.10000002384185791,
-0.5
],
"type" : "VEC3"
},
{
"bufferView" : 1,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 24,
"type" : "VEC2"
},
{
"bufferView" : 3,
"componentType" : 5126,
"count" : 24,
"type" : "VEC2"
},
{
"bufferView" : 4,
"componentType" : 5123,
"count" : 36,
"type" : "SCALAR"
},
{
"bufferView" : 5,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 6,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 7,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 8,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 9,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 10,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 11,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 12,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 13,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 14,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 15,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 16,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 17,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 18,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 19,
"componentType" : 5126,
"count" : 24,
"max" : [
0,
0,
0
],
"min" : [
0,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 20,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 21,
"componentType" : 5126,
"count" : 1504,
"max" : [
1.875,
0.5,
0.25
],
"min" : [
-1.875,
0,
-0.25
],
"type" : "VEC3"
},
{
"bufferView" : 22,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 23,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC2"
},
{
"bufferView" : 24,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC2"
},
{
"bufferView" : 25,
"componentType" : 5123,
"count" : 7200,
"type" : "SCALAR"
},
{
"bufferView" : 26,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.04999995231628418,
1,
0
],
"min" : [
-0.04999995231628418,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 27,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 28,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.04999995231628418,
1,
0
],
"min" : [
-0.04999995231628418,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 29,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 30,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.050000011920928955,
1,
0
],
"min" : [
-0.050000011920928955,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 31,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 32,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.050000011920928955,
1,
0
],
"min" : [
-0.04999999701976776,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 33,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 34,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.04999999701976776,
1,
0
],
"min" : [
-0.050000011920928955,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 35,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 36,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.050000011920928955,
1,
0
],
"min" : [
-0.050000011920928955,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 37,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 38,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.04999995231628418,
1,
0
],
"min" : [
-0.04999995231628418,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 39,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 40,
"componentType" : 5126,
"count" : 1504,
"max" : [
0.04999995231628418,
1,
0
],
"min" : [
-0.04999995231628418,
0,
0
],
"type" : "VEC3"
},
{
"bufferView" : 41,
"componentType" : 5126,
"count" : 1504,
"type" : "VEC3"
},
{
"bufferView" : 42,
"componentType" : 5126,
"count" : 281,
"max" : [
9.366666666666667
],
"min" : [
0.03333333333333333
],
"type" : "SCALAR"
},
{
"bufferView" : 43,
"componentType" : 5126,
"count" : 2248,
"type" : "SCALAR"
},
{
"bufferView" : 44,
"componentType" : 5126,
"count" : 59,
"max" : [
1.9666666666666666
],
"min" : [
0.03333333333333333
],
"type" : "SCALAR"
},
{
"bufferView" : 45,
"componentType" : 5126,
"count" : 472,
"type" : "SCALAR"
},
{
"bufferView" : 46,
"componentType" : 5126,
"count" : 191,
"max" : [
6.366666666666666
],
"min" : [
0.03333333333333333
],
"type" : "SCALAR"
},
{
"bufferView" : 47,
"componentType" : 5126,
"count" : 1528,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 288
},
{
"buffer" : 0,
"byteLength" : 192,
"byteOffset" : 576
},
{
"buffer" : 0,
"byteLength" : 192,
"byteOffset" : 768
},
{
"buffer" : 0,
"byteLength" : 72,
"byteOffset" : 960
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 1032
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 1320
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 1608
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 1896
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 2184
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 2472
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 2760
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 3048
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 3336
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 3624
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 3912
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 4200
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 4488
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 4776
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 5064
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 5352
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 5640
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 23688
},
{
"buffer" : 0,
"byteLength" : 12032,
"byteOffset" : 41736
},
{
"buffer" : 0,
"byteLength" : 12032,
"byteOffset" : 53768
},
{
"buffer" : 0,
"byteLength" : 14400,
"byteOffset" : 65800
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 80200
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 98248
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 116296
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 134344
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 152392
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 170440
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 188488
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 206536
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 224584
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 242632
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 260680
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 278728
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 296776
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 314824
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 332872
},
{
"buffer" : 0,
"byteLength" : 18048,
"byteOffset" : 350920
},
{
"buffer" : 0,
"byteLength" : 1124,
"byteOffset" : 368968
},
{
"buffer" : 0,
"byteLength" : 8992,
"byteOffset" : 370092
},
{
"buffer" : 0,
"byteLength" : 236,
"byteOffset" : 379084
},
{
"buffer" : 0,
"byteLength" : 1888,
"byteOffset" : 379320
},
{
"buffer" : 0,
"byteLength" : 764,
"byteOffset" : 381208
},
{
"buffer" : 0,
"byteLength" : 6112,
"byteOffset" : 381972
}
],
"samplers" : [
{
"magFilter" : 9729,
"minFilter" : 9987
}
],
"buffers" : [
{
"byteLength" : 388084,
"uri" : "MorphStressTest.bin"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

View file

@ -0,0 +1,15 @@
# LICENSE file for the model: Simple Morph
All files in this directory tree are licensed as indicated below.
* All files directly associated with the model including all text, image and binary files:
* [CC0 1.0 Universal]("https://creativecommons.org/publicdomain/zero/1.0/legalcode") [SPDX license identifier: "CC0-1.0"]
* This file and all other metadocumentation files including "metadata.json":
* [Creative Commons Attribtution 4.0 International]("https://creativecommons.org/licenses/by/4.0/legalcode") [SPDX license identifier: "CC-BY-4.0"]
Full license text of these licenses are available at the links above
#### Generated by modelmetadata

View file

@ -0,0 +1,17 @@
## Screenshot
![screenshot](screenshot/screenshot.png)
## Notes
This is an example of a glTF asset that uses morph targets, as described in the
[Simple Morph Target](https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_017_SimpleMorphTarget.md)
section of the glTF tutorial.
## Data layout
The following image shows the data layout of this sample:
![simpleMorphStructure](screenshot/simpleMorphStructure.png)

View file

@ -0,0 +1,41 @@
# Simple Morph
## Tags
[core](../../Models-core.md), [testing](../../Models-testing.md)
## Summary
A triangle with a morph animation applied
## Operations
* [Display](https://github.khronos.org/glTF-Sample-Viewer-Release/?model=https://raw.GithubUserContent.com/KhronosGroup/glTF-Sample-Assets/main/./Models/SimpleMorph/glTF/SimpleMorph.gltf) in SampleViewer
* [Model Directory](./)
## Screenshot
![screenshot](screenshot/screenshot.png)
## Notes
This is an example of a glTF asset that uses morph targets, as described in the
[Simple Morph Target](https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_017_SimpleMorphTarget.md)
section of the glTF tutorial.
## Data layout
The following image shows the data layout of this sample:
![simpleMorphStructure](screenshot/simpleMorphStructure.png)
## Legal
© 2017, Public. [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/legalcode)
- javagl for Everything
#### Assembled by modelmetadata

View file

@ -0,0 +1,189 @@
{
"scene" : 0,
"scenes":[
{
"nodes":[
0
]
}
],
"nodes":[
{
"mesh":0
}
],
"meshes":[
{
"primitives":[
{
"attributes":{
"POSITION":1
},
"targets":[
{
"POSITION":2
},
{
"POSITION":3
}
],
"indices":0
}
],
"weights":[
0.5,
0.5
]
}
],
"animations":[
{
"samplers":[
{
"input":4,
"interpolation":"LINEAR",
"output":5
}
],
"channels":[
{
"sampler":0,
"target":{
"node":0,
"path":"weights"
}
}
]
}
],
"buffers":[
{
"uri" : "simpleMorphGeometry.bin",
"byteLength":116
},
{
"uri" : "simpleMorphAnimation.bin",
"byteLength":60
}
],
"bufferViews":[
{
"buffer":0,
"byteOffset":0,
"byteLength":6,
"target":34963
},
{
"buffer":0,
"byteOffset":8,
"byteLength":108,
"byteStride":12,
"target":34962
},
{
"buffer":1,
"byteOffset":0,
"byteLength":20
},
{
"buffer":1,
"byteOffset":20,
"byteLength":40
}
],
"accessors":[
{
"bufferView":0,
"byteOffset":0,
"componentType":5123,
"count":3,
"type":"SCALAR",
"max":[
2
],
"min":[
0
]
},
{
"bufferView":1,
"byteOffset":0,
"componentType":5126,
"count":3,
"type":"VEC3",
"max":[
1.0,
0.5,
0.0
],
"min":[
0.0,
0.0,
0.0
]
},
{
"bufferView":1,
"byteOffset":36,
"componentType":5126,
"count":3,
"type":"VEC3",
"max":[
0.0,
1.0,
0.0
],
"min":[
-1.0,
0.0,
0.0
]
},
{
"bufferView":1,
"byteOffset":72,
"componentType":5126,
"count":3,
"type":"VEC3",
"max":[
1.0,
1.0,
0.0
],
"min":[
0.0,
0.0,
0.0
]
},
{
"bufferView":2,
"byteOffset":0,
"componentType":5126,
"count":5,
"type":"SCALAR",
"max":[
4.0
],
"min":[
0.0
]
},
{
"bufferView":3,
"byteOffset":0,
"componentType":5126,
"count":10,
"type":"SCALAR",
"max":[
1.0
],
"min":[
0.0
]
}
],
"asset":{
"version":"2.0"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

View file

@ -0,0 +1,16 @@
# glTF 3D model reference images
## AnimatedMorphCube
<img alt="AnimatedMorphCube" src="screenshots/AnimatedMorphCube.gif" width=180 />
## AnimatedMorphSphere
<img alt="AnimatedMorphSphere" src="screenshots/AnimatedMorphSphere.gif" width=180 />
## MorphPrimitivesTest
<img alt="MorphPrimitivesTest" src="screenshots/MorphPrimitivesTest.gif" width=180 />
## MorphStressTest
<img alt="MorphStressTest" src="screenshots/MorphStressTest_cycle_animations.gif" width=180 />
## SimpleMorph
<img alt="SimpleMorph" src="screenshots/SimpleMorph.gif" width=180 />

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB