Skip to content

chore(deps): update sceneview to v4.60.0 - #7696

Merged
renovate[bot] merged 1 commit into
mainfrom
renovate/sceneview
Oct 20, 2026
Merged

renovate[bot] merged 1 commit into
mainfrom
renovate/sceneview

Conversation

@renovate

@renovate renovate Bot commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
io.github.sceneview:sceneview 4.56.0 → 4.60.0 age adoption passing confidence
io.github.sceneview:sceneview-compose 4.56.0 → 4.60.0 age adoption passing confidence
io.github.sceneview:arsceneview 4.56.0 → 4.60.0 age adoption passing confidence

Release Notes

sceneview/sceneview (io.github.sceneview:sceneview)

v4.60.0

Added
  • Demo app: tap a piece of furniture in a scan's replay to read its size (#​4485). In the replay of a Room Scan, a single tap on an object lights the points it is made of, draws a box round it and writes its length, depth and height in metres next to it. A tap on another object picks that one; a tap on the floor, on a wall or in the void clears it. The room stops turning by itself as soon as a finger touches it, and does not start again while a box is shown — a double-tap still reframes it; orbit, pan and pinch are unchanged and the box follows them. The box is worked out on the phone from the points the scan already stored — no model, no download: the floor and the walls are set aside, the object is grown from the tapped point, and the box is the tightest rectangle round its footprint. A wall the scan saw too little of to recognise is cut away from the furniture standing against it, and gives no box by itself. Anything longer than two thirds of the room (never more than three metres) gets "Too big for one box" instead of a wrong size; a shard of depth noise — under 30 × 20 cm, or less than 0.2 m² of seen surface — gets no box and does not hide the furniture behind it. A tap a fingertip beside a thin object (a lamp's pole) finds it, and a plant, too sparse to grow through, is boxed with a looser net. A sliver under 30 cm deep that the scan cut off a larger piece of furniture (a daybed seen in two passes a few centimetres apart) is joined back to it before the box is drawn, while a thin object standing alone — a console, a wall shelf — keeps its own box, and so does a small object next to larger furniture: the join never makes a box longer than 1.5 m, or than the sliver itself by more than 30 cm, unless what it adds only carries the sliver on along its own length, as the two halves of a sideboard scanned in two passes do. The box stays selected through a visit to the Camera view and back, and when it would be drawn under the replay's Camera card or the map's stats card the view slides just enough to show it, with its dimensions placed beside those cards, never under them. The label appears where it will stay — it is placed for the end of that slide, not moved there afterwards — and a box that an orbit, a pan or a pinch has turned under the cards or the dock is slid back into view once the finger has let go and the spin has died. On a small phone, where the cards and the dock leave only a narrow band of the view, the box is brought whole into the room beside the Camera card — the view steps back and the box is drawn smaller rather than left with a corner behind a card, the "Build 3D model" pill or the dock. Known limits: the sizes are those of the part the scan saw, so a sofa scanned from one side reads short; two pieces of furniture standing against each other can come out as one box; a piece of furniture longer than two thirds of its room is refused rather than measured; the camera view of the replay has no picking — its 3D thumbnail opens the 3D view, where it works.
Fixed
  • Demo app: Back from an AR demo no longer redraws the AR launcher as "Checking…" and asks ARCore again inside the exit animation. The launcher comes back with the answer it already had. The ARCore check now runs after the 350 ms transition, so it no longer adds main-thread work to the transition's first frames (#​4461).
  • 3D Scan: Back while "Saving scan…" leaves at once, and the scan is still saved (#​4500). Back used to do nothing until the scan was built, which can take a while on a long scan. Now the screen closes right away, the scan goes on building in the background, "Your scans" shows "Saving scan…" until it lands in the list, and a room of a whole home still joins that home's summary. If the save fails after you left, the list says so.
  • 3D Scan: the list of scans no longer scrolls under the status bar and the title (#​4535). The landing, the "What are you scanning?" page and the whole-home summary cut their content at the bottom edge of the header, in light and dark.
  • Demo settings sheets keep their controls off the navigation bar, and Finger Drawing strokes keep their thickness to the ends (#​4504). At the sheet's low position, or while it is dragged, the row the window edge cut — Finger Drawing's Thickness slider — sat on the gesture bar or under the 3-button bar. The sheet's content now stops at the top of the navigation bar wherever the sheet rests, and touches in that strip go to the system, in every demo. A Finger Drawing stroke no longer thins to half its width over its last few millimetres: it keeps the thickness the finger gave it and ends in a full round cap.
  • Bug report: file paths, links and e-mail addresses in the app log are masked before the report leaves the phone (#​4526). The log a report carries could name a file you picked — cannot load content://…/My flat.spz, a FileNotFoundException on /storage/emulated/0/Download/… — and the GitHub issue it pre-fills is public. content:// and file:// locations, paths under your storage and the app's per-user data, document ids, e-mail addresses, URL credentials and query strings, and the name of a model you opened with SceneView now read <redacted> in the GitHub issue, the share text and the attached file, while tags, timestamps, stack traces and the file extension stay. A new "Preview the attached report" link in the sheet shows exactly what is sent.
  • "Share report" in the demo's bug report opens the share sheet on the first tap (#​4528). The 1,200-line app log used to ride in the share text, a ~600 KB intent that Android refused without a word. The log now travels as an attached sceneview-bug-report.txt through the app's existing file provider, and the share text keeps a summary of at most 16,000 characters: the note, the device and app details, and the AR tracking block.
  • The bug report keeps its AR tracking block for the whole session (#​4529). The demo now keeps its latest 60 AR tracking lines in memory as they are logged, instead of reading them back from a log buffer that ARCore fills in under a minute. The log buffer is only read when that history is empty.
  • AR Placement: the "No surface found" card keeps its side margins in Wall mode (#​4531). In Wall mode, the room dollhouse, the pool, Cloud Anchors and the comparison screens, the card went from one edge of the screen to the other. It now keeps the same margin as in Place mode, in light and dark.
  • AR Placement: "Place" in the mode selector reopens the Place session (#​4531). Coming back from Free pose or One call used to open the model picker again, with the first model selected. Place now opens its camera with the model and the surface you had chosen. The picker is still under Back and the Models button.
  • The 3D Scan replay follows the Settings sheet (#​4564). Opening Settings draws the room smaller and higher, into the space left above the sheet, on the 3D and Map tabs alike; closing it brings back exactly the picture that was there before, eased both ways at the sheet's pace.
  • 3D Scan: tapping a long, low piece of furniture against a wall (a sideboard, a TV unit, a bench) that the scan drew in two passes now boxes the whole piece, instead of only the half under the finger. Two pieces standing apart still get a box each. (#​4565)
  • "Browse online models" reopens on the models it already loaded (#​4622). The demo's gallery used to forget its feeds when you left it, so every visit waited on the network again behind a spinner. It now opens on the last models each source returned and refreshes them in the background; a refresh that fails keeps them on screen. On a first visit, "Trending in 3D" shows two placeholder tiles shaped like its cards instead of a lone dot.
  • Demo app, 2D in 3D: one scene instead of two hidden tabs (#​4624). The Inspect / Media switch at the bottom was easy to miss, so half the demo went unseen. The rocket with its live Compose card now stands in front of a small gallery wall that holds the framed picture (ImageNode), the streamed clip (VideoNode), the turning badge (BillboardNode) and their labels (TextNode). Play / Pause sits in the dock; Face camera and Always on top are in the settings sheet. Old ?tab=media links still open the demo.
  • Demo app, Animation: a real stage and smooth clip changes (#​4624). The fox no longer floats on a grey void under a black band: it walks on the same themed floor and sky as the other demos, in light and dark. Switching clips cross-fades for about half a second instead of snapping, and the "blend 0%" debug line is gone until you actually blend.
  • Demo app: an Object scan stays an object scan after it is saved (#​4683). A saved scan now records whether it was a Room or an Object scan. Scans saved before this change read as Room. A reopened object scan does not show room measurements, floor coverage, the Map view or a floor plan in its export sheet. A scan file (.svscan) now records the scope, so an object scan shared and opened again stays an object; files without it open as a room, as before. Without raw depth, an object scan now applies its arm's-length cutoff to ARCore's feature points and planes, so walls across the room no longer end up in the scan. This needs no new permission. A room survey that finishes after a new home scan has started is no longer added to the new home.

v4.59.0

Added
  • Demo app: know what a shared 3D Scan contains (#​4332). Share, from a scan's menu, now opens a sheet that shows the size of the file and says what it reveals before it leaves the phone. Camera photos can be left out; the sheet then says the 3D surfaces and points still show the room. A scan without photos opens on a clear empty Camera view, and a sheet closed without sending leaves no copy in the cache.
  • Demo — 3D Scan scans an object, a room or a whole home (#​4647). The scan now starts by asking what you are scanning and remembers your choice. Object mode keeps only depth within 1.5 m, takes photos more often and builds a finer model. Whole home goes room by room in one session: finish a room, walk to the next one with capture paused, and the summary shows each room's plan and measurements plus a total.
Changed
  • Demo app: shorter placement and 3D Scan actions. 3D Scan uses Place in AR, Share and Close; placement screens use 3D, Try again and Move slowly.
  • Demo app: an exported 3D Scan model is lighter and rests on its floor (#​4334). The 3D model you save or share from Export scan is now a lighter copy of the scan's surface — about 100,000 triangles, resting on its floor and centred — so other 3D viewers open it. Preparing it takes a few seconds the first time; the model on screen keeps its full detail. On a phone too short of memory to lighten it, the full model is written instead, and the sheet says so.
Fixed
  • The 3D Scan replay's floor grid reads at a glance (#​4040). A line every 25 cm and a stronger one every metre, about twice as wide and two to three times as opaque as before, on the light and the dark stage alike. The grid stays whole under the room and fades out over 3 m past its corners, like the ground grid of Polycam or Reality Composer, so it gives the camera path its scale with no hard edge, and still sits under the points, the path and the dimensions.
  • Android demo render tests: the emulator references match the demos as they ship again (refs #​4448). Nine CI references under render-goldens-swangle/ predated changes merged since 2026-10-17. Those changes are the full-screen button (#​4596), the PBR Neutral tone mapper (#​4595), the studio finishes on Geometry Primitives (#​4666) and the "Performance Test" title on the Debug Overlay demo (#​4626). Each new reference was checked by eye before it replaced the old one.
  • Android demo render tests: the Model Viewer CI reference shows the studio showroom (refs #​4448). Since #​4580 the Model Viewer opens in a white photo studio, but the emulator golden still held the old dark stage, so modelViewerDemo_default_state failed on 99.7 % of its pixels. The reference under render-goldens-swangle/ is now the showroom render.
  • 3D Scan keeps one copy of a scan opened from the share sheet, and a scan without photos gets a real thumbnail (#​4680). Picking "Open in SceneView" from the demo's own share sheet starts a second app window while the first still shows 3D Scan; both read the shared file and it was listed twice. A file now goes only to the window it was sent to, and opening the same file again (same SHA-256) opens the scan it already made instead of adding a copy. A scan kept without photos shows its points seen from above, with the path walked, instead of an empty square.

v4.58.0

Added
  • Demo app: Finger Drawing, a new demo to paint in 3D with one finger (#​4082). Each stroke is a smooth, round tube of glossy paint, thicker where your finger slows down. Turn the stage with Orbit and the next stroke lies on a new plane, so a few strokes from a few angles make a small sculpture. Pick one of five colours and a thickness, undo the last stroke or clear the stage. An AR mode paints the same strokes an arm's reach in front of the phone and hangs them on ARCore anchors, so they stay in the room while you walk around them. When the phone loses its place, after a trip to the home screen for instance, the app says how to bring the drawing back, and a new stroke is always painted where you can see it. The colour and thickness you picked follow you between the 3D and AR modes.
  • android-demo: a 3D Scan now has a floor plan, opened from its export sheet ("Floor plan · PDF · to scale, with areas and volume"). It gives the room's survey — floor area, length × width, perimeter, ceiling height, volume and the length of each wall — a rooms table with each room's area and volume and the plan's total, and a dimensioned floor plan drawn to scale, shared as an A4 PDF or as a few lines of text. The walls are measured where the scan saw them, not on the extent of what it saw: a wall seen on less than half its length is dashed and its length marked "≈", every measured figure carries the spread it was read with, and when fewer than two pairs of facing walls were seen the plan gives no area, no volume and no total, and says what to scan. Indicative plan, not a certified measurement — the screen, the PDF and the text all say so (#​4540).
  • android-demo: the floor area is read with the same shoelace as the Measure demo (measureFloorArea), so one outline gives one figure in both demos (#​4540).
  • android-demo: 3D Scan's live room figure (width × depth) stops at the walls. ARCore grows a floor plane past the wall it meets, and a stray floor patch under the real floor could hide the floor above it: either way the room read up to twice its area. A floor that overflows a wall is now cut at that wall, and the floor is taken where most of it was found, not at its lowest patch (#​4540).
  • Demo app: Pool in the garden, a real-size pool dug into your lawn (#​4571). A new AR demo places an in-ground pool on your lawn at its real size — 6 × 3, 8 × 4 or 10 × 5 m, 1.2 to 1.5 m deep — and the grass stays in front of it everywhere but the opening, so it looks dug into the ground. Clear water with moving ripples and light patterns on the bottom, a stone edge, Roman steps, four liner colours, and a night mode: the garden goes dark and two underwater lamps light the pool. Drag to move it, twist to turn it; pinching never changes its size.
  • arsceneview: dig content into the real ground, and keep a placed object at real size (#​4571). ARCameraStream.isOccluderMeshEnabled draws the camera feed first, so a mesh using MaterialLoader.createOcclusionInstance(), ordered with ARCameraStream.OCCLUDER_PRIORITY, keeps the real world on screen in front of content modelled below the ground or behind a wall. AutoPlacementState.allowsScaling = false makes the pinch, scaleTo and the double-tap leave a placed object at its real size while drag and twist still move and turn it. Both default to the previous behaviour.
  • Demo app (Android and iOS): searches are measured. A query typed in the Home demo filter or in Explore's online catalogs logs GA4's standard search event once the field has been still for 1.5 s, or when a result is opened: search_term (lowercased, cut to 50 characters, emails, links, long numbers and phone numbers replaced by (redacted) on the device), surface (samples or models) and result_bucket. The privacy policy, the Play Data safety form (In-app search history) and the iOS privacy manifest (Search History) declare it.
  • SceneView Labs in the Android demo app (#​4617). New features that still need testing on real phones can ship behind a Labs switch, off by default. Your first report sent from Send feedback unlocks Labs on the spot. The Labs card sits under the Home hero, a deep link to a Labs demo opens an explainer until you join, and About lets you switch Labs off. Reports now include the Labs state.
  • Cinematic camera: CameraShot, CameraTransition, CameraPath, CameraAnimator and CinematicCameraManipulator in io.github.sceneview.camera (#​4631). A shot is an orbit around a target, so a move between two shots goes around the subject, not through it. CameraPath.reveal(home) is the entrance of a scan or a model, CameraPath.tour(home) a slow lap that loops without a seam, animator.flyTo(home.copy(elevationDegrees = 84f)) the dollhouse-to-floor-plan move, and a fly-to another room pulls back at mid-flight so it never cuts through a wall. Every move is a function of time, lands exactly, and a touch interrupts it and hands the gesture camera the speed it had. The design behind it, for the 3D Scan live coverage and result cinematics, is in docs/design/3d-scan-cinematics.md.
  • Demo: 3D Scan shows what is scanned and what is not, and its result presents itself (#​4631). While scanning, and in the replay, a heading-up coverage map in the corner keeps you fixed below its middle and turns the room under you: the floor cells the scan has (0.25 m cells) are filled, the rest of the room's estimated floor (the floor planes and the covered cells, hulled) is hatched as still to scan, the edge of what is covered is outlined and the path walked is drawn; it reads Floor NN % covered of that same floor. The capture's one coaching line now also says "Move slower" when the phone moves faster than depth keeps up, and where to point when a walk adds nothing for three seconds. The result screen opens on a cinematic reveal (high, wide and to the side, craning down onto the model over 2.8 s), its dock switches 3D and Plan with one continuous camera move, and a Tour pill flies the camera around the scan; every move is the new io.github.sceneview.camera API, and a touch takes the camera over at the speed the move had.
  • Every 3D viewer of the demo shares one ground grid and one opening move (#​4651). The Model Viewer, its showroom and the Explore viewer draw an endless metric grid on their floor that follows the zoom in powers of ten and fades with distance, Blender-viewport style, with no visible edge; its line colours are the new stage-grid-minor / stage-grid-major tokens, light and dark. When a model appears the camera flies onto the framing over motion-entrance (700 ms, expressive ease) instead of cutting to it, a double-tap zoom eases on the same curve, and the first touch takes the camera over mid-move without a jump.
  • Gestures coast after release (#​4653). A flick keeps the camera orbiting, panning or zooming, and keeps an edited node sliding along its surface, turning or growing, then slows to a stop like a native list fling; a new touch stops it. rememberCameraManipulator(inertia = Inertia.None) and Node.editingInertia = Inertia.None opt out. AR objects stay on their plane while coasting and re-anchor where they come to rest.
Changed
  • Android AR: ARSceneView now draws every detected surface, not only the one in the centre of the screen (#​4307). The default plane renderer used to be the textured grid in PlaneRendererMode.RENDER_CENTER. The dots renderer that replaces it always defaulted to RENDER_ALL, so an app that never picked a renderer now shows all the floors, walls and ceilings ARCore tracks. ARSceneView has no parameter to go back to the centre-only behaviour. A PlaneRenderer that you build and drive yourself still accepts planeRendererMode = PlaneRenderer.PlaneRendererMode.RENDER_CENTER. To hide the surfaces entirely, pass planeRenderer = false.
  • Android AR: one plane renderer, and a wall no longer looks like a floor (#​4307). ARSceneView (and the ARScene alias) now always draws detected surfaces with the dots renderer that used to be the opt-in PlaneRendererV2, and the mark says what the surface is: round white dots on floors and tables, upright blue dashes on staggered rows on walls, hollow warm rings on ceilings. The shape differs as well as the colour, so the difference holds in a dark room, in daylight and for a colour-blind user. Every mark sits in a soft dark halo, so it stays readable on a white wall or a sunlit floor. No public API is removed: planeRendererVersion is still accepted and ignored, and the old names keep compiling and linking (see below).
  • Android AR: small slivers are no longer drawn as surfaces (#​4307). A wall under 0.40 m × 0.20 m or a horizontal surface under 0.20 m × 0.10 m is skipped until it grows, which removes the short-lived patches ARCore reports on bags, door edges and furniture fronts. A floor polygon that ARCore extends underneath an object is still drawn across it: hiding that needs depth occlusion, not a size filter.
  • Android AR: the second plane renderer and its switch are deprecated (#​4307). ARSceneView(planeRendererVersion = …) and ARScene(planeRendererVersion = …) are deprecated and ignored: both values draw with PlaneRenderer, so delete the argument. PlaneRendererV2 and PlaneVisualizerV2 are deprecated aliases that forward to PlaneRenderer and PlaneVisualizer; PlaneRendererBase and its Version enum are deprecated. On PlaneRenderer, maxHitTestPerSecond is deprecated for maxUpdatesPerSecond, planeTexture is a deprecated 1 × 1 placeholder (no longer sampled), viewSize is unused, and MATERIAL_TEXTURE / MATERIAL_COLOR no longer name material parameters (use MATERIAL_GRID_TINT). The textured-grid drawing itself and the bundled textures/plane_renderer.png are gone: two renderers side by side meant every AR sample picked one and the two drifted apart.
  • sceneview-compose on desktop now runs on JDK 21, down from JDK 22, with no JVM flag (#​4423). filament-kmp 0.7+ calls Filament over JNI instead of Project Panama (FFM), so the desktop viewer no longer needs JDK 22 or --enable-native-access=ALL-UNNAMED. The new floor is JDK 21, not 17: the kotlin-math library that sceneview-compose exposes ships JDK 21 bytecode, and on JDK 17 it fails with UnsupportedClassVersionError. The desktop demo and CI now use the repo's single JDK 21.
  • sceneview-compose on desktop moves to filament-kmp 0.7.3 (#​4518). The desktop viewer now runs on Filament 1.77.3 (was 1.77.1 through filament-kmp 0.6.0). Same material version, no API change; Android, iOS and web are untouched.
  • arsceneview-depth-ml moves to LiteRT 2.3.0 (#​4519). LiteRT now ships as three AARs (litert, litert-api, litert-gpu); the module declares litert-gpu so DepthAnythingV2Estimator(backend = Backend.Gpu) keeps its OpenCL/OpenGL accelerator, now on armeabi-v7a too. Native code per ABI: arm64-v8a ≈ 9.4 MB, x86_64 ≈ 12.2 MB, armeabi-v7a ≈ 6.3 MB. No API change.
  • Android demo: every model opens in a studio showroom, like the website's viewer (#​4580). In the light theme the Model Viewer is a white photo studio. In the dark theme it is a charcoal showroom with a pool of light under the subject. Both match /view on the website and use the same lighting maps. The floor fades into the wall with no visible line, and the subject casts a soft contact shadow. The camera height depends on the subject: low for a car, higher for furniture, tabletop height for a phone or a sneaker. Catalogue cars and phones now face the camera when they open. "Showroom" is the first choice in the Lighting sheet, and Reset brings it back. As on the website, the floor shows a faint mirror reflection of the subject's lower part; it is turned off on low-memory phones. The orbit can no longer dip below the floor's horizon.
  • A Codex delegate can now build what it writes. codex-delegate.sh implement used to run Codex
    under plain workspace-write — no network, nothing writable outside the worktree — so it could
    neither resolve Maven nor run ./gradlew. It now runs under a Codex permission profile: outbound
    network, a dedicated Gradle home (~/.gradle-codex) that shares the real dependency cache
    read-only through GRADLE_RO_DEP_CACHE, and writable Android, Kotlin/Native, Maven, Xcode and
    SwiftPM caches. Because network plus read-anywhere is an exfiltration path, the profile also
    read-denies the secrets on the machine: other worktrees' local.properties,
    ~/.gradle/gradle.properties (never handed over — it holds the publishing and signing keys),
    ~/.m2/settings.xml, gh/npm/ssh/gpg configuration and the Claude and Codex credentials.
    Measured on codex-cli 0.163.0: :sceneview-core:androidTest ran 929 tests green inside the
    delegate, while reading the main checkout's local.properties answered "Operation not permitted".
  • SceneView Demo store listings speak the words developers search for. The Play title and the
    App Store name becomes "SceneView Demo: 3D & AR SDK". The Play short description names Jetpack
    Compose and ARCore, the iOS subtitle names SwiftUI and RealityKit, and the iOS keywords add usdz,
    gltf and augmented reality instead of repeating words the name already carries. "3MF" and
    "radiance fields" leave the descriptions. The text reaches the stores with the next minor release.
  • React Native lockfiles no longer pull in sprintf-js (#​4594). The advisory GHSA-hp3w-g68c-fv3c has no patched release, so a scoped npm override moves js-yaml's CLI-only argparse dependency to 2.0.1, which drops sprintf-js from both the package and the demo dependency trees. No package version change.
  • createView now tone-maps with PBR Neutral instead of Filmic, so base colours display as
    authored.
    Filmic's shoulder bleached light and pastel colours and its toe crushed darks:
    measured on the demo's brand ramp, a light blue (#A4C1FF) kept 40–57 % of its chroma and a
    lilac (#D2A8FF) 45–65 %, the "washed-out" pink and blue of every 3D demo. Khronos PBR Neutral
    is the identity up to 0.76 and only compresses what is brighter: 90–99 % of the chroma survives.
    createARView keeps Filmic (the camera-stream materials invert it), and SplatNode now inverts
    whichever of the two its view uses. To get the old look back:
    view.colorGrading = ColorGrading.Builder().toneMapper(ToneMapper.Filmic()).build(engine).
    The web viewer keeps Filmic — Filament's JavaScript bindings have no PBR Neutral tone mapper.
  • Demo: the Materials studio linearises its sRGB colours. Car Paint, Velvet, Glazed Ceramic,
    Crystal and Signal Glow handed sRGB bytes to a linear baseColor and rendered as pastels; the
    measured metals keep their linear reflectance. The home hero and Cosmos keep Filmic, the curve
    their look was tuned on.
  • Demo app: four AR cards leave the catalogue for the samples that already do their job (42 to 38 cards).
    Depth Collider is now On your table, the AR mode of Rolling Balls: Drop, Drop 5 and Reset
    throw balls in the tray's rubber colours that bounce off a real table through depth. Scene
    Geometry is now a Colour buildings & terrain switch in the Streetscape mode of Geospatial
    Anchors. AR Fog leaves for Lighting; the SDK's ARFogNode is unchanged. The old links
    (ar-depth-collider, ar-scene-mesh, ar-fog) still open the screen that took their place.
    ML Kit Object Labels loses its card but keeps its screen and its link ar-ml-object-label:
    it is Point & Ask's on-device fallback on phones without Google AICore, so Point & Ask is
    never a dead end there.
  • iOS demo: Lighting Lab is folded into Lighting, like on Android (#​4613). Lighting now has an environment intensity slider, a sky toggle and local reflections (a reflection probe with an adjustable area). Lighting Lab leaves the catalogue, and the old lighting-lab link opens Lighting.
  • Demo app: the AR Image, Plane Renderer V2, AR Depth of Field and One-Call AR demos place a real product at its real size instead of the Khronos Toy Car: a SMEG toaster, an IKEA NOCKEBY sofa, a Nike Air Jordan 1 and a KitchenAid stand mixer. The products come from the HD pack and are fetched on Wi-Fi; on mobile data a pill offers the download, size first. (#​4614)
  • Catalogue: the KitchenAid stand mixer measures 23 × 36 × 39 cm, like the real one, instead of 53 cm deep: the hosted model no longer has its power cord trailing on the counter, which counted in its size on /view and in the Android demos. (#​4614)
  • android-demo — Geometry Primitives: the seven shapes now open in studio finishes instead of one flat tint: a mirror-chrome sphere, polished gold torus, satin copper capsule, satin aluminium cylinder, glazed ceramic cone and clear-coated lacquer on the cube and the plane, so the studio light shows up as reflections and highlights. Settings has Studio finishes / One material: the Metallic and Roughness sliders still drive one shared material, and dragging either one switches to it (#​4623).
  • Demo app: Rerun AR Replay is now 3D Scan, with Pause, Finish and a review before saving (#​4627). The demo listed as "Rerun AR Replay", whose start screen said "Room Scan", is called 3D Scan on Android and iOS: in the demo list, on its screens and in both store descriptions. The Android capture shows one compact line ("Scanning · 0:42", the points captured from zero), one coaching line, Pause and Finish; the clock stops while the scan is paused or tracking is lost. Finish opens a review where Keep scanning returns to the same capture and Save scan writes it. A failed build or save stays on screen with Try again, and discarding it asks first. Back during a capture pauses it and asks whether to keep scanning, save or discard. Saved scans and .svscan files open as before.
  • Demo app: 3D Scan's live view follows you like a navigation app (#​4628). While you scan, the coloured point cloud now fills the screen over a dimmed camera, so what is scanned shows in its real colours and what is still missing shows on the camera behind it. The view stands just behind and above the phone and turns with it, heading-up: the way you face is always the top of the screen, and a marker shows where you are. Drag or pinch to look around, and Recenter brings the view back on you. The big 3D card that covered the top half of the screen is gone.
  • 3D Scan ends on your model, kept on the phone (#​4633). In the Android demo app, Finish now opens the finished 3D model straight away: still, framed to fit the room, with its name (tap to rename), Recenter, View in AR and Export. The camera path, photos, timeline and the separate "Build 3D model" step are gone. The model is saved with the scan, so it reopens as it was, even after the app restarts. If only part of the surface can be built, you see the scan's coloured points instead. Export now leads with the 3D model as a GLB file to save or share, and the PLY, SVSCAN and RRD files are made only when you ask for them, under More formats.
  • CI stops paying for advisory legs on every push (#​4635). Xcode 27 previews, Maestro Android and the demo render goldens run nightly or on dispatch; artifacts are kept 3 to 7 days; required lint analyzes the Android demo and its library dependencies once.
  • Dead code removed from the Android demo and tooling (#​4636). 144 unused demo strings, the Windows GenerateFilamat.bat / GenerateKtx.bat scripts and six unused internal Vector3 mutators are gone; try-demo.sh builds :samples:android-demo again.
  • arsceneview tests now check behaviour instead of reading source text, so renames and file splits no longer fail them.
  • SDK and sample tests with behavioural coverage no longer parse Kotlin source text, so refactors do not fail on formatting or file layout.
  • CI skips iOS legs when only unused asset entries change, skips nightly legs whose inputs did not change, and shares one Gradle cache written from main.
  • README and the showcase page invite testers: record a demo, report what breaks, and unlock SceneView Labs.
  • Demo app: three AR samples now show what they do (#​4649). AR Depth of Field becomes
    Portrait focus: the sneaker stays sharp while the room behind it blurs, the focus
    follows the sneaker as you walk, a tap on the room focuses there (with a focus ring), and an
    Original | Portrait switch compares before and after. People Occlusion says what it
    needs (Scene Semantics and Depth, a person in front of the model, best outdoors) and shows a
    live status: off, starting, no person in view, or person detected. Image Stabilization
    moves to SceneView Labs, with a card that says the difference is subtle.
Fixed
  • Point & Ask no longer dead-ends silently on a phone that supports Gemini Nano (#​2648). A model AICore was already downloading is now followed with a percent and a progress bar instead of an endless spinner; a failed download offers "Retry download"; "unavailable" names its reason (no AICore, AICore still setting up, AICore too old, check failed or timed out) and always offers "Check again", an AICore update where it can help, and the on-device AR Object Labels demo as a fallback, with no cloud model. The availability check and the first answer token are time-boxed, AICore setup codes 601/606 are retryable, and every visible state is logged under adb logcat -s PointAndAsk.
  • Demo: Measure is rebuilt from scratch around three modes — Distance, Wall and Room (#​3509). A centre reticle snaps to placed points, plane corners and edges, and to vertical and level guides, with a haptic tick and a chip naming the lock. Segments draw themselves and carry camera-facing labels sized by distance, in metric or imperial by locale. Wall mode takes the two ends of a wall on the floor, then raises a translucent wall to the aimed height; Room mode traces the floor (corners square themselves), closes it, and raises every wall to the ceiling, with floor area, perimeter and wall area. Undo steps back one action at a time, and Share sends the dimensions as text. The geometry, snapping, undo flow, units and share text are pure Kotlin under unit tests; accuracy on a real phone is still to be measured (needs-device).
  • Android AR: the old plane renderer held on to the materials of planes that were gone (#​4307). It kept the two material instances of every plane it had ever drawn until the AR view itself was destroyed, so a long session over a changing room only grew. The single renderer that remains owns each plane's instances together with its mesh and releases them when the plane goes away.
  • Demo app: the placed sofa stays movable once the surfaces fade (#​4307). The "Plane Renderer V2" demo is now Surfaces: after the first tap the surfaces fade but the sofa can still be dragged, turned with two fingers, pinched, or put elsewhere with a tap; the surfaces come back for the length of a drag; Surfaces and Reset stay in the dock; and the status line stops spinning as soon as a surface is found. The old ar-plane-renderer-v2 link still opens it.
  • SceneView / ARSceneView: replacing the environment no longer reads a destroyed skybox (#​4330). rememberEnvironment(key = …) destroys the previous environment as soon as its key changes, but the scene only received the new one a dispatch later, and Filament reads the skybox it replaces: a segfault in Scene.setSkybox on some swaps (a dark/light toggle that changes a colour skybox, an HDR picked from a list). The scene now lets go of an environment's skybox and indirect light before the environment is destroyed, and takes the next one in the same pass.
  • Android demo: a replayed 3D Scan sits whole inside the screen, its dimensions included (#​4306, #​4413). The 3D view frames the box of what the scan drew, the sizes written outside the walls included, in the part of the screen the controls leave free, in portrait and landscape. Left alone it sways gently in front of the room; a pinch, a drag or a pan can no longer put the camera inside the cloud, under the floor or far from the room. The tracking aids (trail, frusta, live points) are toned down so the room reads first.
  • Android demo: the 3D Scan replay gives the screen back to the room (#​4379). One thin timeline bar sits above the dock (play, scrubber, clock), and a tap on the room hides it with the header. The layers, their figures and the room's size moved into the settings sheet. A phone on its side gets its own layout, with no card over the room.
  • Android demo: 3D Scan's room size holds steady (#​4328). A size ARCore finds for a few frames and takes back is not shown, a smaller reading is held five seconds before it replaces a larger one, and the top bar and the dimensions on the floor always name the same room.
  • Android demo: 3D Scan shows one point count (#​4413). The live count included points seen only once, which a saved scan drops (32k live, 5.6k stored). The live count and the saved scan now count the same points.
  • Android demo: the Map view keeps its sizes readable (#​4413). Seen from above, a wall, the path or the points could hide a size written on the floor. They are now drawn over the rest of the scan.
  • Android demo: the status-bar icons stay white over a 3D or camera screen after a rotation or a theme switch (#​4413).
  • Demo app: Settings opens a visible sheet on demos without their own controls (#​4539). On AR Surfaces, the AR View tab, AR Face, Hand Tracking, Object Labels and Orbital AR, the sheet held only Send feedback and QA mode, so Material 3 kept a single open position and the sheet stayed below the bottom edge. It now opens fully.
  • Demo app: 3D Scan floor plan no longer shrinks a room to an interior partition. A short wall in the middle of the room used to be read as the room's edge; only walls on the floor's edge, or spanning most of a side, now bound the room.
  • Demo app: a very large 3D Scan opens its floor plan without running out of memory. The survey grid is capped at 48 MiB; past that the survey reads "not measured" instead of crashing.
  • Android demo: every 3D and AR sample now has a full-screen control (#​4558). A button at the top right of each demo hides the title, the dock, the cards and panels and the system bars, so the scene gets the whole screen. One exit button in the corner, or system Back, brings everything back. It lives once in DemoScaffold, so every sample gets it.
  • Web viewer (sceneview.js, behind /view, /open, the playground and the web demo): ten site models that rendered black, empty or not at all now show. Embedded EXT_texture_webp images are re-encoded to PNG before Filament.js reads the file (guitar, Canon EOS RP, DJI Mavic 3, JBL Tour One M3, motorcycle helmet, school backpack). Quantized positions (KHR_mesh_quantization with meshopt) get their real bounding box, so the Rolex and the Vibe sneaker are framed at their size instead of as a speck. A skin over 256 joints is split per mesh instead of failing to parse, and a skinned model at rest shows its bind pose instead of its raw mesh. When loadModel() is called again before the previous file is shown, the newest call wins and the older one rejects with an AbortError, whichever file finishes downloading first, and it stops transcoding textures as soon as it is replaced. On the home page, tapping a model chip while the first model is still loading now shows the tapped model instead of falling back to the still poster. The MCP 3D viewer widget no longer shows "was replaced by a later loadModel() call" when the host re-renders it mid-load (a theme change, new tool output), and a model that loads clears any earlier error. A model that stores several quantized meshes with the same raw box no longer logs a false "kept a wrong bounding box" warning (the home page's Night Circuit). The playground's Web multi-model snippet now creates one viewer per model, since a second loadModel() on a viewer replaces the first. The playground offers three.js's Expressive Robot (CC0) instead of Kindred, whose source file is broken (hair and tail sit far above the body). The web demo shows the Switch OLED, opening on its screen, instead of a Sketchfab diorama with a blue backdrop. Both older files stay published (#​4566).
  • Website home: no more lag from a film nobody sees (#​4581). The night-circuit film now pauses while it is scrolled out of view and picks up where it was when it comes back. Before, it kept drawing about 30 frames a second off screen and halved the frame rate of the code sample below it. A stage whose WebGL context is lost, after a GPU reset for instance, now goes back to its poster and its load button instead of staying "Live" on an empty canvas.
  • Android demo home: the night-circuit hero no longer strobes or washes out.
    • The SCENEVIEW screens, the pit neon and the venue's power-up now flicker gently at under 3 flashes a second.
    • The high-beam flashes are softer.
    • The headlight glare dims when the camera faces the nose.
    • The first frame no longer shows the venue at full power.
    • On a fast fling the camera now eases after the scroll instead of snapping to it (#​4582).
  • Website home: the hero film no longer freezes after a scroll away (#​4584 follow-up). The 20-second limit on motion now counts only the time a stage is on screen. Before, a visitor who scrolled away 2 seconds into the night-circuit film and came back 20 seconds later found it frozen where they had left it, on a Play button. A stage that lost its 3D context and was started again no longer keeps the previous viewer in memory. A load that fails late no longer tears down a viewer the visitor started again in the meantime.
  • The demo's animated character is now the CC0 Quaternius Ranger instead of the three.js Soldier, a Mixamo character that was credited as CC0 (#​4586). The Ranger is built from three free Quaternius packs (Modular Character Outfits - Fantasy, Universal Base Characters and the Universal Animation Library), all CC0, and carries five clips: Idle, Walk, Run, Sprint and Dance. It replaces the Soldier in the Model Viewer, the Animation demo, the AR placement picker, the keyless Park scene and the TV viewer, with re-rendered thumbnails and a corrected credits list.
  • VideoNode and ViewNode show their source colours again under the PBR Neutral default.
    Their materials still pre-applied Filament's inverseTonemapSRGB(), which only inverts Filmic,
    so after createView switched to PBR Neutral a video or a 2D-in-3D card displayed darker than
    its source (a mid grey came out darker). video_texture, video_texture_chroma_key,
    view_texture_lit and view_texture_unlit now invert whichever tone mapper the node's view
    uses: Filmic in a createARView view, PBR Neutral otherwise.
  • Bright saturated colours stay saturated in videos, cards and splats. PBR Neutral desaturates
    highlights, so a colour like #FF0000 has no exact inverse, and the capped inverse turned it
    into a pastel (255, 212, 212). The shared inverse is still exact for every colour the curve can
    produce. For the others it now balances the peak against the curve's desaturation: red shows
    (235, 13, 13), and no colour lands more than 20 steps (of 255) away.
  • Demo: the 2D-in-3D Inspect card shows its authored swatch colours. The card is now an unlit
    ViewNode; lit, it took the scene light and its amber swatch read as ochre.
  • Android demo: the 3D Scan replay reads at a glance (#​4597).
    The camera path is one blue, faint to strong, instead of a purple-to-blue ramp, and it ends on the frustum's colour: path and photos read as the camera's. The settings sheet is the legend — each layer row draws what it shows (the path's stroke, a frustum, a floor and a wall, a few points) over a line that says it. The camera's photos have their own switch, apart from the path, so a long recording's frusta can be hidden; the Anchors row, which a room scan never fills, is gone.
    The Camera view draws the reconstructed points and planes over each recorded frame, seen from that frame's pose through the recording's lens.
    The replay's room dimensions read in metres, the floor plan's units, instead of feet under a US locale. Back from a floor plan opened on the replay returns to the replay, not to the result.
  • Model Viewer: picking a catalogue model shows a 3D model you can pinch and spin, and the zoom
    no longer leaks from one model to the next.
    A catalogue entry with no bundled stand-in (AirPods,
    IKEA KALLAX, every product shelf) showed only its card's still render until the user found and
    tapped the HD pill — so pinch, drag and "Spin scene" visibly did nothing. Picking one now fetches
    its own file on Wi-Fi straight away (never on mobile data, where the pill still offers "Download
    now", size first). The pinch/slider distance is an absolute number of metres and was kept across
    picks: a pinch-out on the earbuds left the next helmet a small speck. It now resets when a new
    model reaches the stage; a camera_distance deep link still applies to the first model.
  • Demo: Cosmos's controls now always show the current scene and never fade out (#​4601). The four scenes moved out of the dock into an opaque Galaxy | Star | Burst | Flow switch above it, its checked segment following the voyage, so a near miss next to Settings no longer opens the settings sheet and dims the whole bar. The unlabeled rocket became a labeled Autoplay play/pause item. The 3D scenes and their transitions are unchanged.
  • Demo app: Home keeps its place, its chips jump to a section, and Lighting Lab is part of Lighting (#​4603). Coming back to Home from a sample, from Browse online models or from another tab now lands where the list was, instead of at the top. The chips under Browse online models no longer filter the catalogue down to one category; each one scrolls to its section, so every sample stays on the page. Lighting Lab and Lighting showed the same helmet twice: the lab's controls (environment intensity, sky switch, local reflections, contact shading, fog with its colours, edge smoothing, dithering) now sit in Lighting under every rig, and old lighting-lab, reflection-probes, post-processing and fog links open Lighting.
  • Demo app: the Body Tracker no longer freezes the camera feed, and it is now a Squat Coach (#​4604). Pose detection used to run on the thread that draws the camera, through a JPEG encode and decode and a blocking MediaPipe call, several times a second. The camera image is now converted straight from YUV on a background thread, MediaPipe runs in live-stream mode and answers asynchronously, and a frame is skipped rather than queued while a detection is still running. The screen counts squats from the knee angle, says "Lower" when a rep is not deep enough, and shows the count large enough to read from across the room.
  • Demo: Model Viewer plays one animation clip at a time (#​4610). An animated character with several clips (the Soldier's Idle, Run, TPose and Walk) played all of them at once and stood in a blended, broken pose. It now opens on its Idle clip, or its first one, and the Animate menu picks the single clip that plays.
  • The website's home hero film no longer strobes (#​4587). The high-beam double flash is now two soft 0.45 s pulses instead of a ×3.5 burst. The headlights dim when the camera faces the car, so the glare no longer whitens the frame. The pit neon flickers ten times over 1.2 s, never below 60 %, where it used to toggle 28 times a second. The values match the Android demo's hero (#​4583). A replay no longer jumps at 14 s.
  • *Website and docs: a calmer top bar and smoother scroll on the home page (#​4612).

[!IMPORTANT]
✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Dependency update label Oct 20, 2026
@renovate
renovate Bot enabled auto-merge October 20, 2026 21:36
@github-actions github-actions Bot added the chore label Oct 20, 2026
@renovate
renovate Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit adc0288 Oct 20, 2026
19 checks passed
@renovate
renovate Bot deleted the renovate/sceneview branch October 20, 2026 21:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore dependencies Dependency update

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants