SANDBLAST SIMULATOR XR

Sandblast training simulator using Unity6 URP17

Sponsored Client Project
Selected by Harvard XR 2025 Conference

Our team created a VR sandblasting training simulation to offer hands-on practice beyond the constraints of physical lab access. Built in Unity for Meta Quest, it provides safe and scalable industrial skill training through immersive interaction.


Feature Overview

Tech Art Scope

As the player performing sandblasting, they get the mill scale gradually come off to unveal the metal surface underneath the rust...

UV-driven Mask Blending | Core Feature

Hover Highlight Feedback

Angle-Driven Interaction Logic

Coverage Calculation


Key Challenge Ⅰ

What we want to achieve and the challenge we are facing

The goal of the simulation was not only to reproduce the sandblasting process visually, but to let users feel the gradual removal of material, as mill scale breaks away and clean metal is revealed underneath.
However, no one on the team had direct sandblasting experience, which meant that the challenge was not simply recreating visuals, but identifying what feedback and interaction cues can actually drive perceived realism for training purposes.

Approach

From TA's perspective

[Blasting Site Visit]

Instead of relying solely on visual references, we visited a sandblast facility to study how operators read surface changes. This allowed us to understand what kind of cues actually communicate progress in a real industrial context.

[Parameter Extraction & Design]

We first summarized the key factors that affect blasting results: angle, pressure, nozzle type, sand type, surface coverage, etc.
As TA of the team, I then abstracted them into controllable parameters like shape, size, power, hardness, angle input and noise intensity, so the team could align on the same logic and easily adjust values later without rebuilding the effect.

[Feedback System Design]

Based on these parameters, I designed and authored the core sandblasting shader with the following components:

· Highlight cues: Guide player focus and make interaction intent clear for both players and designers
· Parameter-driven nozzle control: The shader reacts to how the player holds and tilts the controller, changing the blast's shape, spread and intensity in real time
· Mask progression: Gradually reveals clean metal through dynamic erosion blending instead of a one-time texture swap
· Coverage feedback: Real-time progress tracking for user and testing readability

Turning those real-world cues into a tunable feedback system gave us something concrete to adjust and build on, instead of just guessing or locking the look in a fixed visual

[Performance Budgeting]

Under Meta Quest constraints, I guided the team to prioritize shader clarity and interaction responsiveness over purely decorative effects, redistributing GPU budget to ensure our feedback system remained consistent in both visual quality and performance.
(Light cost control | Texture budget allocation | Batching | Shader simplification)


Key Challenge Ⅱ

What we want to achieve and the challenge we are facing

Another key challenge was to map real-time sandblasting interaction from world space to UV space in a stable, readable way so that brush effects could be visualized, recorded, and adjusted instead of being a one-off shader effect.

Approach

From TA's perspective

Detect the brush position in world space, then project it onto the UV map through a custom shader so the effect can be drawn, visualized and adjusted like a texture

Next, upgrade the mask from a symmetric circle to a direction-aware ellipse, so when the player tilts the nozzle, the blast area stretches accordingly, just like real sandblasting behavior.

But how to achieve that?

I designed a function to generate a rotatable 3D ellipsoid mask. It smoothly fades based on how far a point is from the ellipsoid's surface.
Key steps:
· Get the direction from center to current point
· Rotate this direction to match a custom axis
· Estimate ellipsoid boundary in that direction
· Compare real distance to the boundary
· Use smoothstep to return a soft mask value (from 0 to 1)

This approach allows for highly flexible and directional masking in shaders


Role

Technical Artist
VR Developer

About

DATE | Jan - Apr 2025
PLATFORM | Meta Quest
TOOL | Unity URP
· Shader · XR Toolkit

Client
aliciaruiqi@gmail.com