← All work Mixed reality

Shardbreaker

A mixed reality arcade game for Meta Quest 3. The headset scans your room, then crystals appear on your actual walls. Every one you break adds three seconds to a countdown that never stops.

Role
Solo developer, technical artist
Engine
Unreal Engine 5 (Blueprints, HLSL)
Platform
Meta Quest 3, passthrough MR
Context
SCAD, ARVR 440
Year
2024
Breakdown

4 problems, 4 answers.

Problem 01

Spawn crystals procedurally on the real walls of whatever room the player is in.

Approach

The room comes in through Meta's scene anchors. A MixedRealityAnchorActor lets me spawn a custom actor on any detected surface: wall, floor, table.

All spawning lives in a BPC_GameManager component on the VR pawn. Its Spawn Crystals event calls Get Random Wall, which picks from a WallAndLocation map (wall reference to location), then Random Location Switcher picks a point on that wall.

When a crystal is destroyed, the same spawn event is bound to fire again, and the score updater runs. Spawning and scoring stay in one manager, so the game logic reads as one graph.

Crystal manager blueprint: random wall selection, location switching and the respawn bindingClick to enlarge
Problem 02

Build a shield with a highly customizable pattern that dissolves along the pattern itself.

Approach

The pattern is written in HLSL inside a Custom node: for loops, branches and trig functions give me a pattern I can tune far beyond what a texture would allow.

The dissolve noise is its own material function so the outer shield material can reuse it. A noise texture drives the dissolve, and the dissolve flows along the pattern rather than across it.

A radial gradient controls the fill direction, so the shield closes inward from the rim.

Shield material: HLSL custom node, dissolve function and radial fillClick to enlarge
Problem 03

Put a UI on the player's palm that shows everything needed to play.

Approach

A widget blueprint shows best score, current score and time. The timer updates each second and writes the countdown to the widget.

The radial timer is a user interface material with a single completion parameter. The remaining seconds are normalized from the 0 to 60 range into that parameter, so the ring and the number always agree.

Wrist UI widget and the radial timer materialClick to enlarge
Problem 04

Add a smoke effect for the moment a crystal spawns in.

Approach

The emitter bursts a handful of spheres outward with a smoke material. The dust material is world aligned so the texture never reads as repeating across cards.

UV distortion is panned and rotated to give the dust a natural dispersal, and world position offset adds subtle bumps to each sphere so no two cards look alike.

Contact

Let's build something you can stand inside.

Available for XR development and technical art work. Email is the fastest way to reach me.