An award-winning surgical training simulation featuring real-time soft body physics, accurate tissue deformation, and bleeding mechanics for neurosurgery education.
1st
Best Project Award
90Hz
Physics Update Rate
100%
Anatomical Accuracy
Train
Surgeon Ready
// The Challenge
Neurosurgery requires delicate handling of extremely soft brain tissue. The core challenge was to simulate non-linear soft body deformation, incision, and bleeding in real-time on standalone VR hardware, where performance budgets are tight.
Standard rigid-body physics were insufficient. We needed a custom solution to calculate vertex displacement based on tool pressure without dropping below the critical 72 FPS threshold required for comfortable VR.
// Development Process
Converting real patient MRI/CT scans into optimized 3D meshes
Developing the vertex deformation algorithm for tissue interaction
Programming scalpels, forceps, and suction tools with collision logic
Designing intuitive hand-tracking and controller interactions
User testing with medical students and neurosurgeons
// Key Features
Custom vertex-based deformation system that allows the brain mesh to compress and rebound realistically when pressed by surgical tools, mimicking the viscoelastic properties of organic matter.
Particle-based bleeding system that reacts to incision depth and location. Includes suction tool mechanics to clear the surgical field, adding a layer of urgency and realism to the training.
A suite of interactive tools including scalpels, bipolars, and microscopic cameras. Each tool has specific physics interactions, haptic feedback profiles, and sound effects.
Optimized for stereoscopic rendering in VR to provide accurate depth perception, which is critical for neurosurgery where millimeters matter.
// Technical Stack
// Conceptual: Vertex displacement logic for tissue deformation
void DeformMesh(Vector3 contactPoint, float force)
{
Vector3[] vertices = mesh.vertices;
for (int i = 0; i < vertices.Length; i++)
{
float dist = Vector3.Distance(vertices[i], contactPoint);
if (dist < impactRadius)
{
// Calculate falloff and displacement vector
float falloff = 1 - (dist / impactRadius);
Vector3 pushDir = (vertices[i] - contactPoint).normalized;
vertices[i] += pushDir * force * falloff * elasticity;
}
}
mesh.vertices = vertices;
mesh.RecalculateNormals(); // Update lighting
}