github bigmak94/AstroQuest v0.21
AstroQuest 0.21

latest release: v0.21.1
5 hours ago

The Quest 3 on its own: steadier, lighter on its GPU, and without the black squares in the right eye. On the PC: two fixes in the launcher and a native Linux build.

The Quest 3 on its own: what was done for speed

A week of measuring on the headset, frame by frame. In short: the game now runs at a steady 30 frames a second everywhere, and what was won on the GPU goes into the size of the picture.

  • 30 frames a second throughout. Before, the emulator also tried 45 frames a second and larger pictures whenever there seemed to be room, and took them back seconds later; those changes were most of what was felt as slowdowns. Now the frame rate stays at 30 and only the picture's size follows what the GPU manages, from 816x870 to 1200x1280 an eye: a step up only after four seconds with room to spare, a step down at once. The display runs at 90 Hz by default (every frame shown three times); 120 Hz is a choice in the start-up menu.

  • Less work for the GPU in every frame, each measured in the same views with and without it, taking turns in one run:

    • the game's constants reach its shaders the way the Quest's GPU reads them fastest (as uniform buffers): 13 to 14% less GPU time a frame;
    • the copy of the two eyes into the picture handed to the headset no longer clears it first, nor decodes and re-encodes every pixel it reads: 1.2 ms (5%) less;
    • the GPU driver compiles the game's shaders without "preambles": 2.6% less;
    • the edge smoothing (FXAA) only in the middle of the view, where the picture is shaded finely: 3% less;
    • the draws that write nothing (the game's tests of what is in view) are left out: 1.6% less;
    • in the levels whose sun is black, its shadow maps are no longer drawn.

    Together these take about a fifth off a frame of the first level at the same size.

  • Less work for the processor in every draw: the emulator recognises the pipelines and textures it has set up before instead of working them out again for each draw. The thread that hands the game's drawing to the GPU takes a fifth less time in 3-2 and a quarter less in the world select.

  • A start-up menu with what costs the most. Up and down choose a line, left and right change it, and the choices are remembered:

    • Detail further away: Lighter (the default) shows the game's simpler models from a third of its distances and draws the sun's shadows in maps a quarter the size. A sixth less GPU time in level 3-2, and side by side hard to tell apart. As on the console leaves them as they are.
    • Foveated rendering: Off, Low, Medium (the default), High, Very High. The edges of the picture, where the lenses show less, are shaded in blocks of 2x2 pixels (and 4x4 at Very High). With Lighter and Medium, a frame of 3-2 takes 14.3 instead of 20.1 ms of the GPU.
    • Picture enlarged with: the game draws its scene smaller than the picture and enlarges it. With FSR 1 (the default) AMD's FSR 1 does that inside the game's own last pass, for crisper edges, at about 0.65 ms a frame. The game's own keeps its plain enlargement.
    • Display refresh rate: 90 Hz (the default) or 120 Hz.
  • The first start after installing compiles the game's shaders once: expect some stutter in the first minutes of that session. The driver keeps what it compiled for the sessions after.

The resolution is still low. Even with all of this, the picture on the Quest 3 on its own stays well below the PlayStation 4's and the PC version's: the Quest 3's mobile GPU is too weak to draw this game through an emulator at more than 816x870 to 1200x1280 an eye at 30 frames a second. FSR 1 makes the edges crisper, but it cannot add detail that was never drawn. For the full picture, play it on a PC and stream it to the headset (see the README).

Fixed

  • Black squares in the right eye (#19), for a second or two, right after Continue and in levels. The game draws both eyes into one depth buffer, and the emulator cleared it for the right eye straight after the left eye had drawn into it, without making the GPU wait in between. The Quest's GPU driver then let some of the left eye's depth land on the cleared buffer, block by block, and where it did the right eye's sky was not drawn. A drawing pass that clears its target now waits for the ones before it, at no measurable cost.
  • The robot's cry for help in 3-2, heard at full strength all over the level: after a hitch, frames were given time steps longer than the game can take, and the robot that hangs tied up in that level ended up nowhere, so its cry no longer faded with distance. A frame's step is now at most 1/30 of a second; below 30 frames a second the game slows down instead.
  • The card with the controls no longer comes up as the game starts; pressing OPTIONS (the left menu button on the Touch controllers) still shows it.
  • The start-up menu stands still in the room instead of following your head.
  • A missing or broken param.sfo in the game's folder: the app now says so before it starts the emulator, which used to stop on it (#31).

On the PC

  • A game package that stopped unpacking partway (#28): in an AstroQuest folder with a long path, PkgTool stopped a few seconds in and the message wrongly blamed an encrypted package. Packages are now unpacked where their paths stay short, and a path that is still too long is named as such.
  • 80 frames a second and smaller pictures in the launcher (#22): for the Rift S, and the console's own eye sizes 816, 960 and 1200 for a PC that cannot hold more.
  • Native Linux: the OpenXR host builds and runs on Linux (pull request #27 by @justinlindh, thanks!). See "Linux, native build" in README-PC-VR.md.
  • The emulator's changes above that are not the Quest's own (the shortcuts for every draw, the wait before a clearing pass) are in the PC's build too.

Files

  • AstroQuest-0.21-Quest3.apk: the app for the Quest 3 (adb install -r; it installs over 0.20 and keeps your saves).
  • AstroQuest-0.21-PC-VR-Windows.zip: the PC version; unzip it into a folder with a short path and start Play Astro Bot VR.bat.

How to install and play is in the README, and the measurements behind every change are in README-QUEST-VR.md. Tried before this went out: the same code played on a Quest 3 (the world select and the first level, the black squares gone), the measurements made on the headset, the PC launcher's tests, and both files checked one by one. The PC package was not started in a game before release; if something is wrong there, an issue with pc-vr\user\log\shad_log.txt helps.

Don't miss a new AstroQuest release

NewReleases is sending notifications on new releases.