ExplorXR

XR Daily: Steam Frame Gets Color Passthrough

By Toni Tan · · 11 min read

A $149 Camera Turns Steam Frame’s Weakest Spec Into Its Best

Steam Frame ships with monochrome passthrough, 1.3 megapixels per eye with a configurable tint, which UploadVR rates as sharper than Quest 2 and clearly blurrier than Quest 3. Arcturus Vision, a startup Valve has been working with since the 2020 depth-correct passthrough mode on Index, is selling a fix for $149. The Arcturus Vision Camera weighs 10 grams and mounts to Steam Frame’s PCIe expansion port, the same connector that can drive two 2.5 Gbps cameras. Inside are two 32 megapixel Sony RGB sensors spaced 64mm apart, close to average IPD.

Passthrough uses roughly a quarter of that sensor resolution and runs in two modes: full resolution at 2,464 x 2,464 per eye (6MP) up to 72Hz with 60Hz as the default, or half resolution at 1,232 x 1,232 (1.5MP) up to an experimental 144Hz. That puts it at 6.1MP per eye, just under Vision Pro’s 6.5MP and well past Quest 3’s 4MP. It upgrades passthrough automatically in the home environment and in mixed reality titles including Cubism, Puzzling Places, and Table Space. Arcturus warns that higher refresh rates can flicker or band under artificial lighting, so that mode is best saved for daylight. Background: how passthrough works.

The more interesting half is capture. The camera records 2,464 x 2,464 per eye 10-bit HLG HDR stereoscopic video at 60fps, or 1,232 x 1,232 at 120fps, and unlike every other standalone headset it writes the tracked pose of the headset for each frame. That enables Stabilized Immersive Playback, where the footage itself moves around you to match the pose it was captured from. UploadVR’s David Heaney called it the best way he has seen first-person 3D video presented in VR.

Pose-per-frame is also exactly what a Gaussian splatting pipeline needs, since reconstruction lives or dies on camera calibration. Arcturus Vision Gaussian XR is an on-device viewer for PLY and SOG files, so you can load splats on Frame and look around them, but there is no Horizon Hyperscape equivalent here: generating a splat still means an open-source pipeline on a Linux workstation with an Nvidia GPU. The catch is battery, since passthrough and capture both drain an already tight power budget. See also how Gaussian splatting works.

→ UploadVR


Godot 4.8 dev 6 Lands Screen-Space Contact Shadows and an XR Projection Camera

Godot 4.8 dev 6 arrived on September 15, less than a week after dev 5, and the reason is unglamorous: dev 5 shipped with startup crashes on macOS and failed to upload to the Google Play Store, both fixed in this snapshot. The headline rendering feature is screen-space contact shadows for directional lights, implemented by Rudolph Bester from Bend Studio’s published approach. It writes an R8 shadow texture for each directional light in the scene and blends it with the existing shadow maps, which gives you contact darkening under props without paying for a higher resolution shadow cascade.

For XR developers the notable line in the release notes is the multi-layer projection camera, which landed in this build. Godot also flags a known regression: OpenXR Spatial Container integration broke starting with that change, and the fix is still under investigation. If you depend on spatial containers, this snapshot is not the one to test with. There are Android XR editor bug fixes, a Vulkan swap chain fix for swapped swappy_mode cases, a Metal startup crash fix, a GDScript syntax highlighting performance improvement for large scripts, and a new long_press property on InputEventScreenTouch. Twenty-eight contributors submitted 56 fixes, and as always on dev snapshots, back up your project before opening it. Background: Godot maintenance releases for XR.

→ Godot Engine


Godot’s Renderer Team Shows the Unglamorous Work Behind 28 to 83 FPS

Clay John published a walkthrough of how renderer optimization actually happens at Godot, and it is a better tutorial than most talks. The methodology is four steps repeated: find the hotspot, understand why it is there, investigate solutions, then re-measure. He is explicit that intuition fails in both directions. A branch that skips work can stop the compiler from vectorizing a loop. Caching a value that is expensive to compute twice can slow you down if the real bottleneck is memory reads.

Case study one started with a bug report from Aurélien Condomines, who was building Heidi’s Legacy: Mountains Calling and hit a wall around 20 animated characters. He was animating Polygon2D vertices with an AnimationPlayer inside a Viewport on a Sprite3D, a legitimate technique for 2D animation in a 3D world. Superluminal showed 4.6 ms in AnimationMixer, 15.7 ms in Polygon2D::_notification(), and 11.7 ms drawing, of which 3.3 ms went to creating vertex arrays and 5 ms to freeing them, leaving only 3.4 ms of actual rendering. The mesh was being rebuilt every frame because its vertices changed on the CPU. The fix reuses the existing mesh and re-uploads vertex data through Godot’s low-level API, roughly tripling animated Polygon2D performance, dropping a frame from 35 ms to 13 ms and taking the test scene from 28 FPS to 83 FPS. He deliberately skipped partial mesh updates, because in that scene every vertex animates every frame, so the bookkeeping would cost more than it saves.

Case study two is one of those findings that should be pinned. Asilkan was profiling Godot’s shader compilation on D3D12, which runs GDShader to GLSL to SPIRV and then transpiles SPIRV to DXIL through Mesa’s NIR converter. Threads were stalling in the transpile step because they were all waiting on the OS for heap memory from one global allocator. Giving each thread its own heap cut 11 seconds of load time in the TPS demo. If you maintain a renderer or a graphics pipeline, that is a free win sitting in your profiler.

→ Godot Engine


A Writer Shipped a Quest Store Game in Eight Days Without Knowing C#

Craig Storm, who writes for UploadVR, had never built a VR app. He does not know C#, had minimal Unity experience, and had never built a Quest APK or gone through Meta’s submission process. He started Punchable Face on Saturday, September 5, working on an M2 MacBook Air with a Quest 3 running Unity 6.3 LTS, the OpenXR plugin, and Meta XR SDK components. He used ChatGPT to plan, Codex to make code changes and modify the Unity project, GPT-5.6 Sol at medium reasoning for daily work and GPT-6 Astra Medium when a persistent XR positioning bug turned out to involve several interacting parts of the XR setup, including the XR Origin camera offset. Meshy generated 3D mockups for the two characters.

The loop is the story: prompt, wait, build, put the headset on, take it off, describe what feels wrong, repeat. He notes how often he reverted changes that were technically correct, because a punch felt weak or a glove attached to his hand looked wrong. He judged everything from inside the headset, which is exactly where AI coding agents have no eyes. Punchable Face went live on the Meta Quest Store on September 13 for $1.99, eight days after he started, with much of that time spent on family and life rather than sitting in Unity.

He is careful about what it proves. He still cannot write the app from scratch, and on a larger project the questions about architecture, performance, and maintainability would get harder fast. His next VR project will use tools that give agents more direct access to Unity and to a running XR application. Read that as the near-term direction for XR dev tooling: generation is cheap, and the competitive skill becomes knowing what good feels like in a headset and being able to describe it.

→ UploadVR


Late-’90s Enemy AI Has a Rule Modern Shooters Forgot

80 Level interviewed Replicant D6, the solo developer of Agent 64: Spies Never Die, about recreating the enemy behavior of late-’90s console shooters. The implementation is Unity with almost entirely custom logic, including hand-written state machines, and no third-party plugin. Enemies react to your objectives, reprioritize targets based on objective state and difficulty, and can even change allegiances mid-level.

Asked what modern developers should take from that era, his answer is one sentence worth keeping: always give the player a heads-up, always give them an opportunity to react before taking damage, and it should always feel possible to finish a level without being hit. That is a readability constraint on AI design, not a difficulty setting.

It maps almost directly onto first-person VR, where you cannot see what is behind you, your FOV is limited by optics, and an untelegraphed hit reads as a hardware problem rather than a gameplay one. Telegraphed windups, audible tells, and generous reaction windows do more for VR combat feel than any amount of enemy complexity.

→ 80 Level


XPRIZE Puts $3.5 Million Behind Optimistic Sci-Fi, and Immersive Studios Are in the Hunt

The Future Vision XPRIZE drew more than 2,500 submissions asking filmmakers to build hopeful science fiction instead of dystopia: a trailer of up to three minutes plus a treatment depicting technology solving real problems. Five finalists present in Los Angeles on September 25 to judges including Neil deGrasse Tyson, Neal Stephenson, Mira Lane, and Rod Roddenberry. The rewards top $3.5 million, with the grand prize pairing $100,000 for screenplay development with a $2.5 million equity investment to produce the feature, plus a separate $100,000 Audience Choice Award split across five projects by public vote.

One of the case studies is Zero One Creative, a London creative technology studio founded in 2023 by Ashkan Dabbagh, James Elkin, and Rupert Aspden, whose background spans film, VFX, and immersive media. Its concept, Fermi Explorer, follows a scientist preserving an 80,000 year old spacecraft carrying messages meant to restart human expansion. The ship is not invented: the Fermi Explorer Mission, co-founded by Starcloud CEO Philip Johnston, plans to launch a small spacecraft toward Alpha Centauri before the end of 2029 on a budget under $15 million, with a transit time of roughly 80,000 years.

Two things to note for anyone building immersive content. First, this is equity investment attached to a development award, not a grant, so the winner gives up a stake in the film. Second, the studios entering this space are the same ones building virtual production and immersive tooling, which means XR craft is leaking into physical production pipelines rather than competing with them.

→ 80 Level


Quick Bites

  • V8’s Oilpan garbage collection post resurfaced on Hacker News, and it remains the best explainer on treating a tangled C++ and JavaScript object graph as a single heap through cross-component tracing. The library was being extracted from Blink into V8 so other embedders can use it, which is the same memory pressure that bites browser-based and mixed native XR runtimes. → V8
  • A Blender rig shows how expressive Valve’s Deadlock characters can be. Animator zombielord999 built the rig for Mina Ha on top of Blender Studio’s Project Storm, sourced the model from Open3DLab, and hand-keyed the animation from reference, with a public release possibly coming. → 80 Level
  • Tomb Raider: Legacy of Atlantis episode 9 covers creature combat. The interesting technical note: crocodiles in this remake can now transition between land and water, where previous entries locked them to one or the other, and Natla’s mercenaries actively take cover and flank. → 80 Level
  • Primal Rumble’s beta is open. The Play XD and Impact Inked card battler runs in VR and mixed reality, where your room becomes an arena populated by collectible creatures called Primals, and the beta feeds player feedback into launch. → UploadVR

Background reading

The explainers behind today's stories, if you want the fundamentals first.

Related reading