All Projects
Core / Production In Progress

Star Wars – 3D Lightsaber Simulation

Interactive 3D Animation

01 — Project Overview

A browser-native Star Wars weapon simulator with physics-accurate hilt rotation, volumetric blade glow, and Web Audio ignition sounds — built using only GSAP, SVG, and the Web Audio API.

Solo Developer — concept, engineering, and animation direction.

Stack

GSAPReactNext.jsTypeScriptHTML5CSS3
Private / Offline

02 — The Problem

Goal

Explore how far browser-native animation can replicate a cinematic, physics-based 3D experience without WebGL or Three.js.

User Issue

Most interactive 3D web experiences require heavy WebGL runtimes. I wanted to prove that DOM + GSAP could rival them in visual fidelity for specific use cases.

03 — The Process

01

SVG over Canvas

SVG paths allow lossless hilt geometry with zero rasterization cost, making zoom and rotation perfectly smooth at any DPI.

02

GSAP Physics Timeline

Used GSAP's timeline scrubbing and custom easing to create inertial hilt rotation that reacts believably to user input.

03

Web Audio for Immersion

Mapped ignition and retraction sounds to animation progress using the Web Audio API, creating near-zero latency feedback.

Key Challenge

Simulating volumetric blade glow without WebGL. Solved using layered CSS filter effects and animated box-shadow pulsing with GSAP.

snippet
// Blade glow pulse via GSAP + CSS filters
gsap.to(blade, {
  filter: 'drop-shadow(0 0 18px #5ef) drop-shadow(0 0 42px #5ef)',
  duration: 0.3, ease: 'power2.out'
});

04 — The Solution

A cinematic, entirely browser-native lightsaber simulator with full hilt rotation, volumetric blade, and audio sync. No WebGL. No external 3D engine.

05 — Results & Learnings

Impact

Demonstrated that GSAP + SVG can produce cinematic-grade interactive experiences with sub-100ms response times, without any 3D library overhead.

Learnings

Learned the ceiling of CSS filter compositing for glow effects and how to architect GSAP timelines that respond in real-time to user-driven state changes.

What I'd do differently

Would explore WebGL instancing for multi-lightsaber scenes while keeping the GSAP controller layer for state management.