Skip to content

v4.55.0

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Oct 23:48
· 3 commits to main since this release
38f1837

v4.55.0 — 2026-10-10

Fixed

  • Android: a rendered frame no longer calls onFrame on every plain node of the scene (#4451). SceneView and ARSceneView handed each frame to every root, and Node.onFrame recurses into every child: one virtual call, one time-step computation and one child iteration per node and per frame, for a tree where most nodes have nothing to do. Each scene now walks its tree once, keeps the calls that walk made — a smooth transform to advance, an onFrame callback or a library hook to invoke — in the order it made them, and replays that list until the tree or one of those slots changes. Measured on the Debug Overlay stress scene (1,064 nodes, debug build, emulator): 0.78 ms per frame before, 0.006 ms after. The gain is for nodes whose class does not override onFrame — shapes, lights, images, text, plain Nodes. A node type that overrides it — ModelNode, SplatNode, or one of your own — is still called on every frame, in full, and still reaches its children through super.onFrame, exactly as before; since a ModelNode parents every node of its glTF, a scene made of models is walked as much as it was. Two visible differences, both for a change made from inside an onFrame callback: a callback set on another node, or a node attached, now gets its first tick on the next frame (it used to get it on the same frame only when that node happened to come later in the walk); and a sibling detached or destroyed by an earlier sibling's callback is no longer ticked one last time on that frame.
  • ARSceneView no longer leaves a refused camera unexplained (Android) — a system dialog dismissed with Back was reported as a permanent denial and sent to system settings, although asking again would have worked; the built-in card now says "Grant camera access" for it and keeps "Open settings" for a dialog Android has really stopped showing. A new ARSceneView(onCameraPermissionStateChanged = …) callback tells the host when the session is waiting for the camera, so its own loading chrome can step aside instead of covering the card — the black stage of #4452. AutoPlacementScene and PlacementScene use it themselves: their "Getting ready" coaching no longer sits on top of the card. A request whose answer never arrives ends on the card as well, a request Android cancels before showing it (another permission being asked, a rotation) is no longer counted as a refusal, a grant takes the card down on its own, and nothing — a late answer, a permission state the host kept — can start a session once the scene has left composition. Libraries compiled against the previous ARSceneView signature keep linking (#4452)
  • Android demo: a screen is "ready" once its models are on it, and a failed load says so (#4459, #4460) — Secondary Camera, Camera & Gestures, Lighting, Lighting Lab, Fog, Materials and Splat Preview named their viewport "Scene ready" after the first presented frames, so TalkBack and the render tests were told the scene was there while the stage was still empty. The signal now waits for the model instances, their textures, the environment and the decoded splat, then for the frame that carries them to be drawn. A model, environment or splat that fails to load shows a "Part of this scene could not load" card on the stage instead of an empty one, and one still loading after 30 s shows "Still loading part of this scene…" until it lands; Secondary Camera and Lighting no longer swallow the error. The camera-permission card is no longer announced as "Scene ready".
  • Android demo: the 3D scan opens framed and composited, in one step (#4459) — Splat Preview drew an empty stage while the file decoded, then swapped the camera onto the scan once it was open, and lifted its loading cover without waiting for the scan's points to be sorted for that camera. On a slow renderer the scan could be seen with its translucent points blended in the wrong order, then change a few seconds later. The stage is now only drawn once the file is open, with the camera already on the scan, and the cover stays up ("Opening the scan…") until the points are sorted for the view.
  • android-demo: coming back from an AR demo, the launcher no longer decodes every card preview again on the main thread, and a card no longer lays out the captions of its whole row each time it is built — both are kept in memory and reused (#4461).
  • Demo app: going back from an AR demo reaches the AR list sooner (#4461). The AR tab built every one of its demo cards at once, on the frame that starts the way back, so the app held still for well over a second. It now builds only the rows on screen, like the Showcase does, which takes about half a second off the wait on a Pixel 4a.
  • Security: patched transitive npm dependencies in the MCP servers and the React Native package and demo. The lockfiles of sceneview-mcp and its rerun, interior and gaming packages now resolve proxy-addr 2.0.8, @modelcontextprotocol/sdk 1.32.1 and sharp 0.35.5; those of @sceneview-sdk/react-native and the React Native demo resolve handlebars 4.7.10, shell-quote 1.12.0 and compression 1.8.2. Only lockfiles change — no dependency range, no version — so nothing published changes until the next release of each package.