Skip to content

docs: track Web Components 0.22.0 — engine 2.22.0 and budgeted splat LOD - #1177

Merged
willeastcott merged 2 commits into
mainfrom
docs-web-components-0-22-0
Sep 4, 2026
Merged

docs: track Web Components 0.22.0 — engine 2.22.0 and budgeted splat LOD#1177
willeastcott merged 2 commits into
mainfrom
docs-web-components-0-22-0

Conversation

@willeastcott

Copy link
Copy Markdown
Contributor

Tracks library 0.22.0. 0.20.0 and 0.21.0 were already documented (#1167, #1172, #1174, #1175), so this is the 0.21.0 → 0.22.0 delta — effectively one library commit with user-facing effect, the Engine 2.22 compatibility update.

Engine pin → 2.22.0

ENGINE_VERSION in LiveExample/shell.js, plus the camera-controls.mjs helper URL inside the seven fences that load it, in both locales — 14 files, a single URL form before and after. Confirmed served by jsDelivr at the new pin before editing. PWC_VERSION → 0.22.0.

Splat LOD is now budgeted

Engine 2.22 stops choosing Gaussian splat LOD per splat by distance thresholds and instead chooses globally against a scene-wide splat budget. So:

Element Removed Added
<pc-gsplat> lod-base-distance, lod-multiplier lod-falloff (exponent 0–8, default 1)
<pc-scene> gsplat-splat-budget (default 1,000,000), gsplat-lod-mode (error / distance)

Rather than just moving table rows, pc-gsplat gains a Level of Detail section that lays out the split — the knob that sets the budget lives on the scene, the knobs that spend it live on the splat — in one table with a combined example. Two facts in it come from the engine's own GSplatParams docs: a budget larger than the scene resolves every node at its finest level, and there is no off switch — a non-positive budget warns and keeps the default rather than lifting the cap. It also says what none of this touches: a plain .ply, .sog or .splat with no LOD levels always renders in full.

The removed attributes appeared only in the two pc-gsplat table rows — no fence used them. Japanese pages mirror everything, and the pc-scene rows in both locales cross-link the new section.

Verification

All at the new pins:

  • Tables audited by script, not by eye — gsplat, scene, collision, rigid-body and screen against observedAttributes and cached defaults. Names and defaults match.
  • 31/31 tags resolve against the library's golden TAGS list; 31 fences byte-identical en/ja apart from translated comments; single engine URL form; npm run lint clean over 1344 files; npm run build clean for en + ja (so the new #level-of-detail anchor resolves in both).
  • All 31 live examples boot at engine 2.22.0 / library 0.22.0. The one report was the documented cold-start artifact — the first page a fresh Chrome loads loses its jsDelivr fetch at any pin — and the same URL passed on the 13 other pages that use it.
  • Rendering checked across the engine bump, since a console-clean example can still look wrong:
Page 2.21.4 2.22.0
pc-render, pc-light baseline pixel-identical
pc-model acne-free acne-free
pc-gsplat 183,913 non-clear px (23.5%) 183,913 non-clear px (23.5%), empty console

The pc-gsplat row is the one that matters — it is the page whose engine internals actually changed. The scene's gsplat parameters were also observed wired through with the attributes absent: lodMode: "error", splatBudget: 1000000 at 2.22.0, against a bare splatBudget: 0 at 2.21.4.

For the reviewer

  • On the removed attributes: anyone with lod-base-distance / lod-multiplier in their markup gets no warning on 0.22.0 — an unknown attribute is simply ignored — so their LOD tuning silently disappears. Per the pre-1.0 convention the manual describes current behavior only and does not call this out as a change; the new section is where an upgrading reader lands. Say the word if you would rather have an explicit migration note.
  • The first splat probe came back blank at both pins and looked like a regression. It was not: the cold-start fetch failure took the local .sog down along with the helper script, because a single-page probe in a fresh Chrome is always the first page. A warm-up load before the measured one fixed the probe; nothing in the release needed fixing. Recorded in my notes so the next engine bump does not rediscover it.

Fixes #

I confirm I have read the contributing guidelines.

🤖 Generated with Claude Code

0.20.0 and 0.21.0 were already documented (#1167, #1172, #1174, #1175),
so this is the 0.21.0 -> 0.22.0 delta, which is one library commit with
user-facing effect: the update for Engine 2.22 compatibility (#458).

The engine pin moves from 2.21.4 to 2.22.0. That is ENGINE_VERSION in
LiveExample/shell.js and the camera-controls helper URL inside the seven
fences that load it, in both locales - fourteen files, one URL form
before and after, confirmed served by jsDelivr before anything was
edited. PWC_VERSION moves to 0.22.0.

Gaussian splat LOD is no longer a per-splat distance schedule. Engine
2.22 chooses LOD levels globally against a scene-wide splat budget, so
pc-gsplat loses lod-base-distance and lod-multiplier and gains
lod-falloff (an exponent, 0 to 8, default 1), while pc-scene gains
gsplat-splat-budget (default 1,000,000) and gsplat-lod-mode (error or
distance). The two pages could each just grow or lose table rows, but a
reader would then have to work out for themselves why the knob that
sets the budget lives on the scene and the knob that spends it lives on
the splat, so pc-gsplat gains a Level of Detail section that lays the
split out in one table with a combined example. Two facts in it come
from the engine's GSplatParams documentation rather than the library's:
a budget larger than the scene resolves every node at its finest level,
and there is no way to switch budgeted selection off - a non-positive
budget warns and keeps the default rather than lifting the cap. The
section also says what none of this touches: a plain .ply, .sog or
.splat with no LOD levels always renders in full.

The removed attributes appeared only in the two pc-gsplat table rows;
no fence used them. The Japanese pages mirror every change, and the
pc-scene rows in both locales cross-link the new section.

Verification, all at the new pins:

- The gsplat, scene, collision, rigid-body and screen tables were
  audited against observedAttributes and the elements' cached defaults
  by script, not by eye; names and defaults match.
- 31/31 tags resolve against the library's golden list; 31 fences are
  byte-identical en/ja apart from translated comments, with a single
  engine URL form; lint is clean over 1344 files; the build is clean for
  en and ja, so the new level-of-detail anchor resolves in both.
- All 31 live examples boot at engine 2.22.0 / library 0.22.0. The one
  report was the documented cold-start artifact - the first page a fresh
  Chrome loads loses its jsDelivr fetch at any pin - and the same URL
  passed on the thirteen other pages that use it.
- Rendering was checked across the engine bump, because a console-clean
  example can still look wrong: pc-render and pc-light are pixel-
  identical at 2.21.4 and 2.22.0, pc-model is acne-free at both, and
  pc-gsplat - the page whose engine internals actually changed - draws
  183,913 non-clear pixels (23.5% of the frame) at both pins with an
  empty console. The scene's gsplat parameters were also observed wired
  through with the attributes absent: lodMode error and splatBudget
  1,000,000 at 2.22.0, against a bare splatBudget of 0 at 2.21.4.

Worth recording: the first splat probe came back blank at both pins and
looked like a regression. It was the cold-start fetch failure taking the
local .sog down along with the helper script, since a single-page probe
in a fresh Chrome is always the first page. A warm-up load before the
measured one fixed the probe; nothing in the release needed fixing.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The Level of Detail section said a streamed splat is exported "alongside
a .lod-meta.json". Both halves were wrong. The engine's octree parser
matches on the basename being exactly lod-meta.json - a plain filename,
not a dotfile and not an extension - and the Splat Streaming example
points its pc-asset src straight at .../v1/lod-meta.json. So the file is
what the asset IS, not a sidecar beside it; the splat data then streams
in on demand. The leading dot came from the library's JSDoc, which spells
it .lod-meta.json in the same style as .ply and .sog, and was copied
without checking. Corrected in both locales.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The version pin bump and the accompanying en/ja documentation updates for budget-based splat LOD appear consistent and complete within the changed files.

Pull request overview

Updates the PlayCanvas Developer Site’s Web Components documentation and embedded live examples to track @playcanvas/web-components 0.22.0 and PlayCanvas Engine 2.22.0, and documents the new budget-based Gaussian splat LOD behavior introduced with the engine compatibility bump.

Changes:

  • Bump the shared LiveExample pins to Engine 2.22.0 and Web Components 0.22.0.
  • Update camera-controls.mjs helper script URLs in the affected live-example fences to the new engine pin (en + ja).
  • Document the new Gaussian splat LOD controls: add gsplat-* attributes to <pc-scene>, replace <pc-gsplat> distance-threshold attributes with lod-falloff, and add a dedicated “Level of Detail” section (en + ja).
File summaries
File Description
src/components/LiveExample/shell.js Bumps global pins for all embedded live examples (Engine + Web Components).
docs/user-manual/web-components/tags/pc-sky.md Updates helper script URL in the live example to Engine 2.22.0.
docs/user-manual/web-components/tags/pc-scene.md Documents new scene-level Gaussian splat LOD/budget attributes.
docs/user-manual/web-components/tags/pc-node.md Updates helper script URL in the live example to Engine 2.22.0.
docs/user-manual/web-components/tags/pc-model.md Updates helper script URL in the live example to Engine 2.22.0.
docs/user-manual/web-components/tags/pc-gsplat.md Replaces removed LOD attributes, adds budget-based LOD documentation, updates helper script URL.
docs/user-manual/web-components/tags/pc-asset.md Updates helper script URL in the live example to Engine 2.22.0.
docs/user-manual/web-components/tags/pc-anim.md Updates helper script URL in the live example to Engine 2.22.0.
docs/user-manual/web-components/tags/pc-anim-clip.md Updates helper script URL in the live example to Engine 2.22.0.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-sky.md JA mirror: updates helper script URL in the live example to Engine 2.22.0.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-scene.md JA mirror: documents new scene-level Gaussian splat LOD/budget attributes.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-node.md JA mirror: updates helper script URL in the live example to Engine 2.22.0.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-model.md JA mirror: updates helper script URL in the live example to Engine 2.22.0.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-gsplat.md JA mirror: replaces removed LOD attributes, adds budget-based LOD documentation, updates helper script URL.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-asset.md JA mirror: updates helper script URL in the live example to Engine 2.22.0.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-anim.md JA mirror: updates helper script URL in the live example to Engine 2.22.0.
i18n/ja/docusaurus-plugin-content-docs/current/user-manual/web-components/tags/pc-anim-clip.md JA mirror: updates helper script URL in the live example to Engine 2.22.0.
Review details
  • Files reviewed: 17/17 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@willeastcott
willeastcott merged commit 979a747 into main Sep 4, 2026
4 checks passed
@willeastcott
willeastcott deleted the docs-web-components-0-22-0 branch September 4, 2026 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants