Skip to content

Specify SOG version 3 in full, with version 2 on its own page - #1336

Open
slimbuck wants to merge 58 commits into
mainfrom
sog-v3-spec
Open

slimbuck wants to merge 58 commits into
mainfrom
sog-v3-spec

Conversation

@slimbuck

@slimbuck slimbuck commented Nov 6, 2026 •

Copy link
Copy Markdown
Member

Builds on #1335 with the full SOG version 3 spec as it now stands in SplatTransform's v3 writer and the engine, and moves version 2 to its own page. Keeps #1335's Reading SOG Blind Data section and the Anti-Aliasing page, and links to them from the spec.

SOG spec (version 3):

  • Opacity above 1: the recommended opaque-core profile renderers draw it with (the constants for any cutoff, and the engine's at 2√2σ), and the PLY opacity_excess conversion rule
  • Blind data: the exact rules for field names as shader identifiers (unique and non-empty after conversion), and at most 10 blind textures for WebGL2
  • model (§3.8): how renderers should treat antialiased scenes (training filter instead of the dilation, opacity factor applied before the over-unity profile) and 2DGS
  • extras (§4) and comments (§5), both new in version 3
  • SH basis and evaluation (§3.5.1), color space (§3.4.1), and the coordinate frame (stored as in 3DGS PLY files, rotate 180° about z for a y-up world), which the old page described incorrectly
  • Encoding notes, a changes-from-version-2 table, and the 1-band palette width (192) and v3 palette labels (R,G,B) fixed
  • Version 2 is specified on its own page (sog-v2.md), added to the sidebar

Other pages:

  • Streamed SOG: extras and comments (only with version 3 chunks), model readers prefer over the chunks', LOD errors marked as legacy
  • SplatTransform CLI reference: the SOG v3 options (--sog-version, --sog-blind, --sog-extras, --sh-palette-size), --no-compensation, --aa-filter-size, and comment pass-through
  • PLY and Anti-Aliasing: Postshot's real anti-aliasing comment is comment postshot.anti_aliasing=1 (checked against Postshot v1.0.110–v1.1.69 exports), not antialiased 1
  • Work Buffer Format: blind data link updated to the new section anchor

All of it in English and Japanese. Japanese headings carry their English anchors, so links resolve in both languages. A full build of both locales passes; the only broken-anchor warnings are two existing ones on unrelated Japanese pages.

Engine follow-ups:

  • The engine's PLY parser (isAntiAliased in src/framework/parsers/ply.js) also looks for antialiased 1, so Postshot anti-aliased PLYs currently load without compensation. The fix is on slimbuck/engine fix-postshot-aa-flag, and should land before 2.24 ships so the PLY and Anti-Aliasing pages hold.
  • The Anti-Aliasing page and the SOG spec now give antiAliasFilterSize's default as 0.1 (Mip-Splatting's filter); the engine default needs to change from 0.3 to match.

#1335 noted that SplatTransform's v3 writer still wrote blind offset and min / max: it now writes the layout specified here (fields in order, range).

I confirm I have read the contributing guidelines.

🤖 Generated with Claude Code

Martin Valigursky and others added 30 commits October 6, 2026 10:13
…tegory

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… at lights-and-shadows

Adds a Shadow Bounds section to the Shadows page for LightComponent#shadowBounds, and updates the example links of the light and shadow examples, which moved from graphics to lights-and-shadows in the examples browser. Japanese translations updated to match.
Explains physical render and compute passes and the frame graph, and documents the
engine's frame passes: the pass classes and their lifecycle, camera passes, RenderPass,
RenderPassShaderQuad, RenderPassForward and ComputePass. The CameraFrame custom render
passes page is folded into it, with a redirect to Camera Passes.
Replaces the compose shader and extending CameraFrame pages with two pages on
CameraFrameEffect: Custom Effects covers the composition and its compose slots,
the built-in effects with their ids, slots and order, writing, registering and
parameterizing an effect, debug views, chunk overrides and effect scripts for
the Editor. Effects with Passes covers the stages of the camera frame, the frame
resources, creating and rebuilding passes, per-frame values and resolving the
scene. Lens Flare and Dynamic Sky get pages of their own.

The camera frame overview lists the effects added since, and its Custom Post
Processing section points to the new pages and to Camera Passes, in English and
Japanese. The removed pages redirect to their replacements, and the sidebar and
the Engine LLM index link the new pages.
The sky and the flat clouds render for each XR view, while the volumetric
clouds render once for the view of the camera and streak where the view of an
eye extends past it. Add an XR section recommending the flat clouds in XR, and
narrow the limitation to the volumetric clouds.
…panese

Adds Japanese versions of the Frame Graph section and of the Custom Effects,
Effects with Passes, Lens Flare, Dynamic Sky and Auto Exposure pages, with the
headings keeping their English anchors so links into them resolve. Brings the
Japanese camera frame overview and HDR Rendering pages up to date with the TAA
upscaling, SMAA, debug view and effect script sections, and labels the Frame
Graph and Render Passes sidebar categories.
The engine now has a dynamicSkyEffect script, from dynamic-sky.mjs. Add a
section on it to the Dynamic Sky page, with a script of your own animating the
time of day, list it in the effect scripts of the HDR Rendering page, and drop
the note that the dynamic sky has no Editor script, in English and Japanese.
Mark the legacy script-based post effects as deprecated on the post effects
landing page, the legacy index, the six effect pages and the four tutorials
built on them, in English and Japanese. The legacy index gets a table of the
CameraFrame replacement for each legacy script.
…paths

[Merge after engine 2.24 release] Point CameraFrame example embeds at the camera-frame category
[Merge after engine 2.24 release] Document devicerestorefailed for a failed device recovery
[Merge after engine 2.24 release] Document compute shader access to the scene depth and color maps
…ads-docs

[Merge after engine 2.24 release] Document dispatching compute shaders for a number of threads
Martin Valigursky and others added 17 commits November 2, 2026 10:59
[Merge after engine 2.24 release] Document planar reflections on the Environment Lighting page
…-docs

[Merge after engine 2.24 release] Deprecate the legacy post effects
Picks up CI on pull requests to every branch (#1325).
Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
…PIs (#1329)

engine#9937 renames MeshInstance#castShadow/receiveShadow to castShadows/receiveShadows,
AnimComponent#findAnimationLayer to findLayer and PIXELFORMAT_111110F to PIXELFORMAT_RG11B10F,
keeping the old names as deprecated aliases. Use the new names in the manual, en and ja, and
link receiveShadows, which the API reference now documents.

Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
…1331)

The Camera Controls page gets a Mouse Buttons section covering the actions of
the left, middle and right buttons, reserving a button for the application,
and dragging the ground like a map with groundPan. The page and the three
first-app tutorials said the right button pans, but the middle button pans and
the right button looks. Japanese pages are updated alongside.

Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
…1328)

Documents the mipmap filters and the planar reflection changes of playcanvas/engine#9932, in English and Japanese: the Gaussian mipmaps of the planar renderer and its TAA jitter, the mipmaps of the scene color map, and the mipmapFilter option of render target textures.

Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
* Add an Add-on Libraries section to the engine manual

A new Add-on Libraries section under PlayCanvas Engine collects the libraries
used alongside the engine: an overview page, and a page each for Spine, 3D Tiles
with 3DTilesRendererJS, tweening with playcanvas-tween, and loaders.gl.

The Spine page moves here from 2D, which keeps a link to it. The tweening
tutorial moves here as the Tween page, updated for the UMD and ESM builds of
playcanvas-tween. The old URLs redirect to the new pages. Japanese pages are
updated alongside.

* List the Add-on Libraries pages in the engine llms index

The index linked the Spine page at its old 2D URL, which the llms plugin
rejects, and did not list the new pages. A new Add-on libraries section lists
the overview and its four pages, with Spine moved there from Animation.

---------

Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
…ry split (#1334)

Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
The SOG format spec now covers versions 2 and 3, both supported, with a table of the differences
and the version-specific parts marked: the exponential-map orientation, squared opacity up to
1.5625, a 4th SH band, 24-bit palette labels and per-gaussian blind data.

The Work Buffer Format page shows how a copy modifier reads blind fields through
getBlind_<name>() and SOG_BLIND_<name>, with the Blind Data example, and Streamed SOG notes that
chunks may be either version. English and Japanese.

Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
The SOG page now specifies version 3 in full: the exponential-map rotations, opacity as a (b / 204)² byte up to 1.5625 and the opaque-core profile renderers draw it with, 4 SH bands and 24-bit palette labels with the SH basis and evaluation, typed blind fields packed in order with the shader-name rules, how renderers treat antialiased scenes, the color space and coordinate frame, and the version 3 `extras` and `comments`. Version 2 moves to its own page. It fixes the 1-band palette width (192, not 96) and links blind data to Reading SOG Blind Data and antialiased scenes to Anti-Aliasing.

Streamed SOG gains `comments` and marks LOD errors as legacy, the SplatTransform CLI reference covers the new SOG and rendering options, and the PLY and Anti-Aliasing pages give Postshot's real anti-aliasing comment, `postshot.anti_aliasing=1` (English and Japanese).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Japanese SOG page now follows the English version 3 spec, with English anchors on every heading so links resolve in both languages, and version 2 gets its own Japanese page. The Japanese Streamed SOG page and SplatTransform CLI reference gain the same changes as the English ones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Anti-Aliasing page now gives `antiAliasFilterSize`'s default as 0.1, Mip-Splatting's filter, which Brush, LichtFeld Studio and Spirula train with, and its example sets 0.3 for gsplat's anti-aliased mode. The SOG spec gives 0.1 as the default in both PlayCanvas and SplatTransform. English and Japanese.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ault

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 4 in --filter-harmonics

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from claude/engine-2-24-docs to main November 9, 2026 16:56

This branch was successfully deployed

1 active deployment
Preview — 79bd0646 Deployed Nov 9, 2026 by vercel[bot]
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