A scene is an entry in the open registry LabScenes, shown on a plate: a flat lit disc, the package's own small sky with the sun at one hour, and a frame clock. Headless each camera (lab_shot, lab_shot_at) settles and is written as build/lab/<scene>/<shot>.png (a stored PNG, written here); in a window N and P step through them. tools/lab/run.sh and sheet.py make the contact sheet; tools/lab/plate_build.py makes plate/. ludic.render3d gains r3d_plate_mode (no terrain, grass or water is made) and r3d_sky_path. quit() in a program with no frame loop links. The example takes ~120 MB resident, 417 MiB peak footprint. Reseed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
209 lines
No EOL
2.7 KiB
JSON
209 lines
No EOL
2.7 KiB
JSON
{
|
|
"asset": {
|
|
"version": "2.0",
|
|
"generator": "ludic tools/lab/plate_build.py"
|
|
},
|
|
"scene": 0,
|
|
"scenes": [
|
|
{
|
|
"nodes": [
|
|
0
|
|
]
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"name": "probe",
|
|
"mesh": 0
|
|
}
|
|
],
|
|
"meshes": [
|
|
{
|
|
"name": "probe",
|
|
"primitives": [
|
|
{
|
|
"attributes": {
|
|
"POSITION": 0,
|
|
"NORMAL": 1,
|
|
"TEXCOORD_0": 2
|
|
},
|
|
"indices": 3,
|
|
"material": 0
|
|
},
|
|
{
|
|
"attributes": {
|
|
"POSITION": 4,
|
|
"NORMAL": 5,
|
|
"TEXCOORD_0": 6
|
|
},
|
|
"indices": 7,
|
|
"material": 1
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"materials": [
|
|
{
|
|
"name": "probe_box",
|
|
"pbrMetallicRoughness": {
|
|
"baseColorTexture": {
|
|
"index": 0
|
|
},
|
|
"metallicRoughnessTexture": {
|
|
"index": 2
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "probe_ball",
|
|
"pbrMetallicRoughness": {
|
|
"baseColorTexture": {
|
|
"index": 1
|
|
},
|
|
"metallicRoughnessTexture": {
|
|
"index": 2
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"textures": [
|
|
{
|
|
"source": 0
|
|
},
|
|
{
|
|
"source": 1
|
|
},
|
|
{
|
|
"source": 2
|
|
}
|
|
],
|
|
"images": [
|
|
{
|
|
"uri": "probe_box.png"
|
|
},
|
|
{
|
|
"uri": "probe_ball.png"
|
|
},
|
|
{
|
|
"uri": "probe_arm.png"
|
|
}
|
|
],
|
|
"buffers": [
|
|
{
|
|
"uri": "probe.bin",
|
|
"byteLength": 31152
|
|
}
|
|
],
|
|
"bufferViews": [
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 0,
|
|
"byteLength": 288
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 288,
|
|
"byteLength": 288
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 576,
|
|
"byteLength": 192
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 768,
|
|
"byteLength": 144
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 912,
|
|
"byteLength": 6732
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 7644,
|
|
"byteLength": 6732
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 14376,
|
|
"byteLength": 4488
|
|
},
|
|
{
|
|
"buffer": 0,
|
|
"byteOffset": 18864,
|
|
"byteLength": 12288
|
|
}
|
|
],
|
|
"accessors": [
|
|
{
|
|
"bufferView": 0,
|
|
"componentType": 5126,
|
|
"count": 24,
|
|
"type": "VEC3",
|
|
"min": [
|
|
-0.4,
|
|
0.0,
|
|
-0.4
|
|
],
|
|
"max": [
|
|
0.4,
|
|
0.8,
|
|
0.4
|
|
]
|
|
},
|
|
{
|
|
"bufferView": 1,
|
|
"componentType": 5126,
|
|
"count": 24,
|
|
"type": "VEC3"
|
|
},
|
|
{
|
|
"bufferView": 2,
|
|
"componentType": 5126,
|
|
"count": 24,
|
|
"type": "VEC2"
|
|
},
|
|
{
|
|
"bufferView": 3,
|
|
"componentType": 5125,
|
|
"count": 36,
|
|
"type": "SCALAR"
|
|
},
|
|
{
|
|
"bufferView": 4,
|
|
"componentType": 5126,
|
|
"count": 561,
|
|
"type": "VEC3",
|
|
"min": [
|
|
-0.3,
|
|
0.8,
|
|
-0.3
|
|
],
|
|
"max": [
|
|
0.3,
|
|
1.4000000000000001,
|
|
0.3
|
|
]
|
|
},
|
|
{
|
|
"bufferView": 5,
|
|
"componentType": 5126,
|
|
"count": 561,
|
|
"type": "VEC3"
|
|
},
|
|
{
|
|
"bufferView": 6,
|
|
"componentType": 5126,
|
|
"count": 561,
|
|
"type": "VEC2"
|
|
},
|
|
{
|
|
"bufferView": 7,
|
|
"componentType": 5125,
|
|
"count": 3072,
|
|
"type": "SCALAR"
|
|
}
|
|
]
|
|
} |