Skip to content

threedim: PrimitiveCloud point-cloud / Gaussian-splat family (from #2109 stack)#2123

Open
jcelerier wants to merge 4 commits into
planf/objectsfrom
planf2/pointcloud
Open

threedim: PrimitiveCloud point-cloud / Gaussian-splat family (from #2109 stack)#2123
jcelerier wants to merge 4 commits into
planf/objectsfrom
planf2/pointcloud

Conversation

@jcelerier

Copy link
Copy Markdown
Member

The PrimitiveCloud point-cloud / Gaussian-splat family — the last piece of the 3D-object work, deferred from #2122 because its build wiring is more involved.

Stacked on #2122; retargets as the stack merges.

What it adds

  • PrimitiveCloud: a PLY parser, a .splat binary reader, an SPZ codec for compressed 3D Gaussian splats (via new spz + zstd submodules), a scene-from-cloud node, and a format override.
  • TagAs helper, and asset-loader routing for .ply / .splat / .spz.

Kept, not retired (per the "keep both" decision)

The upstream 3D branch deletes the old Splat/ render node in favour of this family; here it is preserved — the Splat render node and Splat loader remain registered alongside PrimitiveCloud.

Notes

The earlier deferral cited three blockers; two dissolved once built from the branch tip rather than an intermediate commit (the Gfx::FormatRegistry reference is an empty-stub include at tip, unused), and the libspz -fPIC link failure was from applying the zstd build wiring incompletely — the complete 3rdparty/zstd.cmake + redirect + spz stub build cleanly.

Validation

  • Builds cleanly (spz/zstd vendored, PIC-correct).
  • ctest: 17/17.
  • Process sweep under ASAN + UBSan: the new point-cloud model is constructed and round-tripped — 0 memory errors, 0 undefined-behavior in score's own code, 0 crashes.

🤖 Generated with Claude Code

@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from 2b22ce2 to 3f31f9d Compare July 17, 2026 03:29
@jcelerier
jcelerier force-pushed the planf/objects branch 2 times, most recently from eb14ad5 to 899f99b Compare July 17, 2026 11:58
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from 3f31f9d to ebeb8f4 Compare July 17, 2026 11:58
jcelerier added a commit that referenced this pull request Jul 17, 2026
… flush

test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg
+ the PrimitiveCloud parsers, compiled straight into the test (plugin is
-fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers +
scene helpers. ObjectGallery: explicit llvm profile flush on _Exit +
SEGV/ABRT so coverage runs of the render-regression harness still emit
.profraw (atop this branch's render-regression mode).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from ebeb8f4 to fc9ac65 Compare July 17, 2026 14:10
jcelerier added a commit that referenced this pull request Jul 17, 2026
… flush

test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg
+ the PrimitiveCloud parsers, compiled straight into the test (plugin is
-fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers +
scene helpers. ObjectGallery: explicit llvm profile flush on _Exit +
SEGV/ABRT so coverage runs of the render-regression harness still emit
.profraw (atop this branch's render-regression mode).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from fc9ac65 to ec5deba Compare July 17, 2026 14:29
jcelerier added a commit that referenced this pull request Jul 17, 2026
… flush

test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg
+ the PrimitiveCloud parsers, compiled straight into the test (plugin is
-fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers +
scene helpers. ObjectGallery: explicit llvm profile flush on _Exit +
SEGV/ABRT so coverage runs of the render-regression harness still emit
.profraw (atop this branch's render-regression mode).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch 2 times, most recently from 7855239 to ef58365 Compare July 18, 2026 13:37
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from ef58365 to da52f0e Compare July 18, 2026 14:17
@jcelerier
jcelerier force-pushed the planf/objects branch 2 times, most recently from 3d06f50 to 3fe10b1 Compare July 18, 2026 14:23
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from da52f0e to c067bbe Compare July 18, 2026 14:23
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch 2 times, most recently from 337c225 to 5c1950c Compare July 19, 2026 03:14
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from 5c1950c to f22647e Compare July 19, 2026 21:59
@jcelerier
jcelerier force-pushed the planf/objects branch 2 times, most recently from df39bc1 to c59c898 Compare July 20, 2026 23:09
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from f22647e to c19744e Compare July 20, 2026 23:09
@jcelerier
jcelerier force-pushed the planf2/pointcloud branch from c19744e to 2e67992 Compare July 21, 2026 04:55
Adds the point-cloud objects: a PLY parser, a .splat binary reader, an SPZ
codec (compressed 3D Gaussian splats, via the new spz + zstd submodules),
a scene-from-cloud node and a format override, plus the TagAs helper. The
asset loader routes .ply/.splat/.spz through them.

The existing Splat render node and Splat loader are kept alongside the new
family rather than retired, so both remain available.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
ObjectGallery --render <name>   : add one object, route its texture output to
                                  an offscreen window, play, and exit 0 if it
                                  rendered a full run without crashing (a
                                  render-path crash kills the process, which
                                  the driver attributes to that object).
render-sweep.sh [filter]        : run --render for each object on BOTH GL
                                  backends (llvmpipe and the machine's GPU via
                                  X11) and tally crashes.

Texture objects (ISF, images, model display, ...) render clean on both
backends. Two follow-ups: geometry-only objects need a display chain (they
currently abort when run standalone), and the offscreen readback does not yet
composite the routed texture so the non-blank check is informational.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
ObjectGallery gains a --shader <file> mode: it loads a shader tester
(.fs/.frag/.glsl as an ISF Shader, .cs/.comp/.csf as a Compute Shader) into a
process, routes its texture output to an offscreen window and renders it,
exiting non-zero if it fails to compile or crashes.

csf-sweep.sh drives that over the csf-examples corpus on BOTH GL backends
(llvmpipe and the machine's GPU via X11). On the csf-testers set, 100/121
shaders render on both backends; the remaining 21 are geometry-producing
compute shaders that need a downstream raster stage to display (see the
corpus's tests.txt) — chaining them is the next step.

Also fixes the sweep drivers to pass per-backend env via `env`, since bash
does not treat VAR=val from an expanded "$@" as assignments.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg
+ the PrimitiveCloud parsers, compiled straight into the test (plugin is
-fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers +
scene helpers. ObjectGallery: explicit llvm profile flush on _Exit +
SEGV/ABRT so coverage runs of the render-regression harness still emit
.profraw (atop this branch's render-regression mode).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
@coveralls

Copy link
Copy Markdown

Coverage Status

Coverage is 18.609%planf2/pointcloud into planf/objects. No base build found for planf/objects.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants