Write the Session 1 spec (pose to splat rendering) #14
Notifications
Due Date
No due date set.
Depends on
#3 Research: WebGL2 splat viewer performance inside iOS WKWebView
lars/splat-indoor-navigation
#6 Research: native / RN gaussian splat rendering without a WebView
lars/splat-indoor-navigation
#7 Decide: the pose contract — shape, units, site frame
lars/splat-indoor-navigation
#8 Capture the office-room splat and verify it loads
lars/splat-indoor-navigation
#11 Decide: success gates and the measurement protocol
lars/splat-indoor-navigation
#12 Prototype: does a rendered-splat route view read as navigation?
lars/splat-indoor-navigation
#16 Measure the RN → WebView pose-bridge latency
lars/splat-indoor-navigation
#17 Decide: does orientation bypass the bridge via DeviceOrientationEvent in the WebView?
lars/splat-indoor-navigation
Reference: lars/splat-indoor-navigation#14
Reference in New Issue
Block a user
Question
Write the Session 1 spec as markdown in the repo, executable cold by two devs.
Must contain: hypothesis, the chosen viewer and splat format with versions pinned, the RN <-> WebView pose channel design, the coordinate-alignment method (and how alignment residual is measured on a held-out point), the rendered-vs-real validation protocol, the fake-navigation walkthrough, gates with named fallbacks, deliverables, and how the presentation decision from the prototype ticket shapes the UI.
Cites the pose contract rather than restating it. Closing this ticket means the spec is written and handed off — not that the session has run.
Part of the wayfinder map #1.
Inputs from #3 for this spec.
@sparkjsdev/spark2.1.0, MIT, WebGL2-only), assets as SOG or SPZ..RADLoD streaming exists for anything beyond room scale.@mkkellogg/GaussianSplats3Ddefaults toSharedArrayBuffer, which requires COOP/COEP headers you cannot set on a bundled WebView page. Either disable that path or don't pick that viewer.Architecture inputs, corrected and expanded (see #3 addendum 3, #6 addendum 2).
postMessagefor rare control events; its Fabric path is run-loop-gated, uncoalesced, and unbounded.ARSessionandWKWebViewand injecting fromsession(_:didUpdate:)withcompletionHandler: nil— Mozilla's WebXR Viewer's design. #16 will say whether the delta justifies it.window.__setPoseonce; pass 7 float literals, neverJSON.stringifyper frame; never route pose through React state.react-native-webviewnpmlatestis 14.0.1 (16.0.0 isnext, legacy arch removed); requires RN 0.76+ and iOS 15.1+..ply/ compressed.ply/.splat/ SOG — and note Spark cannot run outside a WebView (Vite-only worker import, mandatory Rust WASM, no Hermes WebAssembly), which is itself part of why the WebView is the right host.Live alternative worth one paragraph in the spec's "why not native" section: Babylon React Native 2.0.5 genuinely renders splats natively on iOS and Android via a C++
sortSplats. It loses on Expo support (disclaimed), RN version lag (0.81.6 vs 0.87), a legacy view under new-arch interop, and Hermes format gaps (SPZ v4 rejected, SOG crashes). Record it as measured-and-rejected, not unconsidered.