Carmack’s App Reviews are back. In his second review in his new series, Oculus Consulting CTO and VR guru John Carmack shares his (brutally honest) feedback on Racket NX, a game that challenges the limits of what you can do with a racket and ball in VR.
If you’d like to have Carmack review your Oculus Quest game or application, please complete this form.
Racket NX App Review
Unlike most of my review targets, Racket NX is an established title in the store and already has a significant user base. Overall, it is already a high quality product that looks and plays great, but I still have some suggestions for improvement.
Startup
Time-to-fun is an important subliminal factor for games. Racket NX takes about 50 seconds from clicking on the app in Shell to smacking a ball with your paddle, assuming rapidly jumping through the UI. In contrast, Beat Saber takes about 16 seconds. This makes a difference to me when choosing something to play.
Using a system splash screen instead of a Unity splash screen helps a little now, and will help more in the future when we allow higher startup clock speeds when it is up. This should stay up until you are ready to render your first interactive frame.
Every developer needs to make their own decision about the value of warning acknowledgment screens, but it is undeniable that after some small number of app launches, the screen is not read and considered before just aiming for the button to make it go away.
There is an argument to be made for launching some apps directly into the last sub-menu you were in. If you were working through solo-advanced, being just a single click after launch away from having another go at a level can be a good feel. This is in tension with being able to deliver new feature / content news at a launch splash page, but occasionally resetting to main may be a good tradeoff.
The extended build-the-arena animation and energy ramp up should probably be sped up quite a bit.
User Interface
The UI in Racket NX is a well-done example of “fancy graphics UI,” with buttons composed of multiple 3D layers and actual modeled geometry with shaders. I wouldn’t suggest changing it at this point, but I don’t advocate for putting a lot of effort into it on new projects; it does deliver some good “delight” the first time users see it, but that goes away pretty quickly, and any poor fundamental behavior stays forever.
The modeled toggle buttons in settings require a distinct press-flip-release behavior, which is less effective than just making them flip-on-press. The turnable volume knobs are non-standard, but pretty effective, and the subtle extra effort for the off click did make me smile.
The “OST / Mine” toggle switch in settings shows render sort order problems where it overlaps with the more distant main menu panel.
In general, panels should be a bit farther away, so they aren’t confused as being “touchable” for control instead of pointing controlled, and so they match the designed focal distance of the headsets at around four feet.
Long pointer beams that extend past the UI surfaces that they might interact with often cause depth confusion or eye strain when they go behind translucent panels. A fairly short pointer beam and an “impact cursor” is usually a good plan, but if you want a full length pointer beam, consider connecting all of your UI panels and filling in the spaces between them to make a “target hull” that surrounds the user and constrains the pointer.
Slow growth scaling as the active highlight for a UI panel gives a “mushy” feel to the interface. It is better to give crisp visual feedback (as well as audio and haptic) the very frame that state changes—a discontinuous size change, a new element made visible, an instant color change, etc.
I’m guessing that a distance field rendering tech is being used for most of the UI. This has the advantage of keeping everything crisp no matter how close you get to it, but turns into more stair-step aliasing when it is shrunk down. To avoid that, everything should be made as low-res as possible—icons and panel borders can be far lower resolution than they would be as a conventional texture and still look good up close, while not degrading until much more distant. It is a more fundamental problem for text; if you need to present passages of text that are longer than just a heading, it is often better to use a conventional texture (ideally with a supersampling shader, but trilinear filtered as a baseline).
For consistency across applications and as an informative cue, UI should generally have a visible “back” button, rather than relying on just the controller button behavior. Labeling the controller button on the model in your hand is helpful, but not sufficient. The label is also upside down for a right handed controller.
The lava planet background shows a fair amount of aliasing; I’m not sure if it is all a fancy fragment shader that would need analytic filtering, or a result of a texture without mip maps. The very bright lava background sometimes makes some of the floating UI a bit harder to read, and partially transparent blending over the background winds up looking subtly wrong because the rendering is not done with high dynamic range—values saturate at 255, then get dimmed down, rather than being way-out-of-scale, and possibly still saturating at 255 after being partially blended over. I generally recommend avoiding translucency in VR because you don’t have the ability to focus your eyes at different depths in our headsets, but avoiding blending saturation is a side benefit.
Gameplay
Swinging a racket is a play mechanic that perfectly suits VR’s strengths and weaknesses—you get the full fidelity of arbitrary hand placement, with all the possible skill growth, while avoiding any interaction with simulated “solid” surfaces.
I am not a tennis or ping pong player, so I am often frustrated with my lack of accuracy while playing, but there are definitely moments of badassery that feel great.
It is a matter of taste, but in general, I don’t love a slowly decreasing energy bar as the primary game mechanic. I feel like I am constantly “bleeding out” and “failing” rather than “failing to succeed.” It might be good to make the “Zen Mode” play style or other alternatives more prominent.
Despite falling energy being so central to the gameplay, I often didn’t know exactly what I was at, since the energy bar was not always fully in view. Maybe replicating it on top as well as the bottom of the field, and/or indicating it on your racket with shading or graphics would help.
I think there is a large benefit to be had by getting much more aggressive with audio synthesis to let players localize the ball position entirely from audio. As a new player, not knowing exactly where the ball was came up fairly often. At the limit, an expert player should be able to close their eyes and still hit the ball every time it comes their way. You might even make a bonus multiplier for hitting a ball you didn’t even see coming—“no look return.”
High quality HRTF based 3D spatialization of a rich ball sound would be a baseline, but you could go significantly farther. Doppler effect exaggerated by a factor of several over reality would give you a very strong signal on the trajectory of the ball, which is probably even more important than the absolute position. The spectral character of the sound could be smoothly changed as it moves from wall to center, giving a much stronger signal for distance than just volume falloff.
You would want a relative volume knob for ball audio, since it might annoy existing experienced players or people that just want to listen to the music more.
Pausing the game with the oculus button in single player leaves a lot of audio and some animations playing, and I was sometimes able to have the ball still in-play with the Oculus menu up. The controller paddle should be completely hidden when paused, not just frozen in place.
There is something not right with orientation / recentering / stick yaw across headset mounts; I was often in a situation where recentering wouldn’t return me to the straight-ahead view.
Multiplayer was fun, and the space scorpion avatars were still oddly expressive and endearing when animated by a live person. The multiplayer avatar badges need mip maps; they are loaded as very high res images, then displayed tiny with a lot of aliasing.
I missed having a “friends” tab on the scoreboards, since I knew I had several friends also playing the game. Taking advantage of Oculus notifications for friends overtaking your score would likely add some engagement.
I had hoped that the spectator camera option would also apply to recording videos; is it strictly for casting? I also tried to do a mixed reality capture, without success—I had heard it worked at one point, but apparently not in the current version.
If you’d like to have Carmack review your Oculus Quest game or application, please complete this form.
Quest
Unity
Did you find this page helpful?
Explore more
New to the Meta Horizon Store from App Lab? Here are Tips for Overcoming 5 Key Challenges
Explore the top five issues developers encounter when making the switch from App Lab to the Meta Horizon Store and gain solutions to navigate these challenges successfully.
Build Faster and Smarter with GenAI Tools in Meta Horizon Worlds
GenAI tools in the Meta Horizon Worlds desktop editor are now available to creators in the US, UK and Canada. Explore how new features like Mesh Generation can greatly reduce the time it takes to build worlds for mixed reality and mobile.