feat(ludic.lab): the visual lab as a package - a scene on a plate, never a world
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>
This commit is contained in:
parent
cc930a114f
commit
b401f7acc1
35 changed files with 4184 additions and 2986 deletions
BIN
packages/ludic.lab/plate/plate.bin
Normal file
BIN
packages/ludic.lab/plate/plate.bin
Normal file
Binary file not shown.
129
packages/ludic.lab/plate/plate.gltf
Normal file
129
packages/ludic.lab/plate/plate.gltf
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
{
|
||||
"asset": {
|
||||
"version": "2.0",
|
||||
"generator": "ludic tools/lab/plate_build.py"
|
||||
},
|
||||
"scene": 0,
|
||||
"scenes": [
|
||||
{
|
||||
"nodes": [
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"name": "plate",
|
||||
"mesh": 0
|
||||
}
|
||||
],
|
||||
"meshes": [
|
||||
{
|
||||
"name": "plate",
|
||||
"primitives": [
|
||||
{
|
||||
"attributes": {
|
||||
"POSITION": 0,
|
||||
"NORMAL": 1,
|
||||
"TEXCOORD_0": 2
|
||||
},
|
||||
"indices": 3,
|
||||
"material": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"materials": [
|
||||
{
|
||||
"name": "plate",
|
||||
"pbrMetallicRoughness": {
|
||||
"baseColorTexture": {
|
||||
"index": 0
|
||||
},
|
||||
"metallicRoughnessTexture": {
|
||||
"index": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"textures": [
|
||||
{
|
||||
"source": 0
|
||||
},
|
||||
{
|
||||
"source": 1
|
||||
}
|
||||
],
|
||||
"images": [
|
||||
{
|
||||
"uri": "plate_diff.png"
|
||||
},
|
||||
{
|
||||
"uri": "plate_arm.png"
|
||||
}
|
||||
],
|
||||
"buffers": [
|
||||
{
|
||||
"uri": "plate.bin",
|
||||
"byteLength": 4256
|
||||
}
|
||||
],
|
||||
"bufferViews": [
|
||||
{
|
||||
"buffer": 0,
|
||||
"byteOffset": 0,
|
||||
"byteLength": 1164
|
||||
},
|
||||
{
|
||||
"buffer": 0,
|
||||
"byteOffset": 1164,
|
||||
"byteLength": 1164
|
||||
},
|
||||
{
|
||||
"buffer": 0,
|
||||
"byteOffset": 2328,
|
||||
"byteLength": 776
|
||||
},
|
||||
{
|
||||
"buffer": 0,
|
||||
"byteOffset": 3104,
|
||||
"byteLength": 1152
|
||||
}
|
||||
],
|
||||
"accessors": [
|
||||
{
|
||||
"bufferView": 0,
|
||||
"componentType": 5126,
|
||||
"count": 97,
|
||||
"type": "VEC3",
|
||||
"min": [
|
||||
-20.0,
|
||||
0.0,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
20.0,
|
||||
0.0,
|
||||
20.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"bufferView": 1,
|
||||
"componentType": 5126,
|
||||
"count": 97,
|
||||
"type": "VEC3"
|
||||
},
|
||||
{
|
||||
"bufferView": 2,
|
||||
"componentType": 5126,
|
||||
"count": 97,
|
||||
"type": "VEC2"
|
||||
},
|
||||
{
|
||||
"bufferView": 3,
|
||||
"componentType": 5125,
|
||||
"count": 288,
|
||||
"type": "SCALAR"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
packages/ludic.lab/plate/plate_arm.png
Normal file
BIN
packages/ludic.lab/plate/plate_arm.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 B |
BIN
packages/ludic.lab/plate/plate_diff.png
Normal file
BIN
packages/ludic.lab/plate/plate_diff.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 843 B |
BIN
packages/ludic.lab/plate/probe.bin
Normal file
BIN
packages/ludic.lab/plate/probe.bin
Normal file
Binary file not shown.
209
packages/ludic.lab/plate/probe.gltf
Normal file
209
packages/ludic.lab/plate/probe.gltf
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
packages/ludic.lab/plate/probe_arm.png
Normal file
BIN
packages/ludic.lab/plate/probe_arm.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 B |
BIN
packages/ludic.lab/plate/probe_ball.png
Normal file
BIN
packages/ludic.lab/plate/probe_ball.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 B |
BIN
packages/ludic.lab/plate/probe_box.png
Normal file
BIN
packages/ludic.lab/plate/probe_box.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 B |
5
packages/ludic.lab/plate/sky.hdr
Normal file
5
packages/ludic.lab/plate/sky.hdr
Normal file
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue