Skip to content

Week 5: Earthquake Building Collapse Demo ๐Ÿข๐Ÿ’ฅ โ€‹

Goal: Create a spectacular earthquake simulation with a collapsing multi-story building Target: 50K debris particles @ 60 FPS with GPU acceleration Duration: Week 5 of Month 2


๐ŸŽฏ Demo Objectives โ€‹

Visual Impact โ€‹

  • โœ… Multi-story building (5-10 floors)
  • โœ… Progressive structural collapse
  • โœ… 50K+ debris particles
  • โœ… Realistic physics simulation
  • โœ… Camera shake effects
  • โœ… Dust particle effects
  • โœ… Sound effects (optional)

Technical Requirements โ€‹

  • โœ… Integration with GPU physics system
  • โœ… Fracture physics for building destruction
  • โœ… Real-time particle spawning
  • โœ… 60 FPS performance
  • โœ… Interactive controls (trigger earthquake, adjust intensity)

User Experience โ€‹

  • โœ… Spectacular visual showcase
  • โœ… Demonstrates GPU physics capabilities
  • โœ… Educational value (structural engineering)
  • โœ… Shareable demo (video recording)

๐Ÿ—๏ธ Architecture Design โ€‹

System Components โ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚     Earthquake Demo System              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚             โ”‚             โ”‚
    โ–ผ             โ–ผ             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚Building โ”‚  โ”‚Fracture โ”‚  โ”‚Camera   โ”‚
โ”‚Model    โ”‚  โ”‚Physics  โ”‚  โ”‚Effects  โ”‚
โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
     โ”‚            โ”‚            โ”‚
     โ–ผ            โ–ผ            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   GPU Physics Engine (existing)     โ”‚
โ”‚   โ€ข 50K particles                   โ”‚
โ”‚   โ€ข Spatial grid collision          โ”‚
โ”‚   โ€ข Instanced rendering             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Component Breakdown โ€‹

1. Building Model

  • Procedural building generation
  • Multi-floor structure (5-10 floors)
  • Structural elements (beams, columns, floors)
  • Material properties (concrete, steel)
  • Weak points for realistic collapse

2. Fracture Physics

  • Progressive structural failure
  • Beam/column destruction
  • Floor collapse propagation
  • Debris spawning on fracture
  • Connection breaking

3. Debris Particles

  • 50K GPU-accelerated particles
  • Various sizes (small chunks to large slabs)
  • Realistic mass distribution
  • Collision with ground and other debris
  • Settling and rest states

4. Camera Effects

  • Earthquake shake (procedural noise)
  • Dynamic FOV changes
  • Follow-cam during collapse
  • Slow-motion option
  • Multiple camera angles

5. Visual Effects

  • Dust particle clouds
  • Debris trails
  • Impact effects
  • Material properties (color coding)

๐Ÿ“‹ Implementation Plan โ€‹

Phase 1: Building Structure (Day 1-2) โ€‹

Task 1.1: Procedural Building Generator

typescript
interface BuildingConfig {
  floors: number; // 5-10
  floorHeight: number; // 3.0m
  width: number; // 20m
  depth: number; // 20m
  columnsPerSide: number; // 4
  beamsPerFloor: number; // 12
}

class ProceduralBuilding {
  generateStructure(config: BuildingConfig): BuildingStructure;
  getStructuralElements(): StructuralElement[];
  getWeakPoints(): WeakPoint[];
}

Task 1.2: Structural Elements

typescript
interface StructuralElement {
  type: 'column' | 'beam' | 'floor';
  position: vec3;
  dimensions: vec3;
  material: 'concrete' | 'steel';
  health: number; // 0-100%
  connections: number[]; // Connected element IDs
  mass: number;
}

interface WeakPoint {
  elementId: number;
  failureThreshold: number;
  failureMode: 'snap' | 'bend' | 'crush';
}

Task 1.3: Building Mesh

  • Generate visual mesh for building
  • Instanced rendering for structural elements
  • Color coding by material/stress
  • LOD for performance

Deliverable: ProceduralBuilding.ts (300 lines)

Phase 2: Fracture Physics (Day 2-3) โ€‹

Task 2.1: Structural Analysis

typescript
interface StructuralAnalysis {
  calculateStress(element: StructuralElement): number;
  propagateFailure(failedElement: number): number[];
  updateConnections(brokenElements: number[]): void;
  isStable(element: StructuralElement): boolean;
}

class FracturePhysics {
  analyzeStructure(building: BuildingStructure): void;
  simulateEarthquake(intensity: number, duration: number): void;
  updateStructuralIntegrity(dt: number): void;
  getFailedElements(): StructuralElement[];
}

Task 2.2: Progressive Collapse

  • Top-down or bottom-up collapse
  • Chain reaction of failures
  • Realistic collapse patterns
  • Timing and sequencing

Task 2.3: Debris Spawning

typescript
interface DebrisSpawnConfig {
  sourceElement: StructuralElement;
  particleCount: number;
  sizeRange: [number, number];
  velocityRange: [number, number];
  angularVelocity: boolean;
}

class DebrisSpawner {
  spawnFromElement(config: DebrisSpawnConfig): Particle[];
  updateParticlePool(): void;
  getActiveDebris(): Particle[];
}

Deliverable: FracturePhysics.ts (400 lines)

Phase 3: GPU Integration (Day 3-4) โ€‹

Task 3.1: Particle System Integration

typescript
class EarthquakeSimulation {
  private gpuPhysics: ComputePipeline;
  private spatialGrid: SpatialGrid;
  private renderer: InstancedRenderer;
  private building: ProceduralBuilding;
  private fracture: FracturePhysics;

  async initialize(): Promise<void>;
  update(dt: number): void;
  render(camera: CameraParams): void;
}

Task 3.2: Debris Particle Upload

  • Convert structural elements to GPU particles
  • Upload debris to GPU buffers
  • Manage particle lifecycle (spawn/destroy)
  • Track active particle count

Task 3.3: Performance Optimization

  • Batch debris spawning (avoid frame spikes)
  • Particle pooling
  • Sleep state for settled debris
  • Culling off-screen debris

Deliverable: EarthquakeSimulation.ts (350 lines)

Phase 4: Camera & Effects (Day 4-5) โ€‹

Task 4.1: Camera Shake

typescript
interface CameraShake {
  intensity: number; // 0-10
  frequency: number; // Hz
  duration: number; // seconds
  falloff: 'linear' | 'exponential';
}

class CameraController {
  applyEarthquakeShake(config: CameraShake): void;
  updateShake(dt: number): vec3;
  smoothTransition(target: CameraParams, duration: number): void;
}

Task 4.2: Visual Effects

  • Dust particle system (separate from debris)
  • Impact flash effects
  • Debris trails
  • Screen effects (optional)

Task 4.3: Multiple Camera Modes

  • Fixed camera (overview)
  • Follow camera (track collapse)
  • Cinematic camera (pre-scripted path)
  • Free camera (user controlled)

Deliverable: CameraEffects.ts (250 lines)

Phase 5: Demo Scene & UI (Day 5-6) โ€‹

Task 5.1: Interactive Demo

typescript
interface EarthquakeControls {
  triggerEarthquake(): void;
  setIntensity(value: number): void;
  resetBuilding(): void;
  toggleSlowMotion(): void;
  changeCamera(mode: CameraMode): void;
}

class EarthquakeDemoScene {
  setupUI(): void;
  handleInput(): void;
  updateSimulation(dt: number): void;
  render(): void;
}

Task 5.2: UI Controls

  • Earthquake trigger button
  • Intensity slider (1-10)
  • Reset button
  • Camera mode selector
  • FPS counter
  • Particle count display
  • Slow-motion toggle

Task 5.3: Visual Polish

  • Loading screen
  • Instructions overlay
  • Stats display
  • Recording mode (optional)

Deliverable: EarthquakeDemoScene.ts (300 lines)

Phase 6: Testing & Polish (Day 6-7) โ€‹

Task 6.1: Performance Testing

  • 50K particles @ 60 FPS validation
  • Memory usage monitoring
  • Garbage collection profiling
  • Frame time consistency

Task 6.2: Visual Refinement

  • Material colors and textures
  • Lighting adjustments
  • Dust effect tuning
  • Camera shake calibration

Task 6.3: User Testing

  • Controls intuitive?
  • Visual impact sufficient?
  • Performance acceptable?
  • Educational value clear?

Deliverable: Test report + refinements


๐ŸŽจ Visual Design โ€‹

Building Appearance โ€‹

Floor 10: โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 9:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 8:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 7:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 6:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 5:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 4:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 3:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 2:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Floor 1:  โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“โ–“
Ground:   โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Materials:
- Concrete: Gray (#808080)
- Steel: Dark gray (#404040)
- Debris: Gradient based on material
- Dust: Light gray with transparency

Collapse Sequence โ€‹

T=0s:   Building intact
        โ””โ”€ Earthquake starts (ground shake)

T=1s:   Weak points begin to fail
        โ””โ”€ First cracks appear
        โ””โ”€ Minor debris falls

T=2s:   First column failure
        โ””โ”€ Floor above begins to sag
        โ””โ”€ Debris spawning increases

T=3s:   Progressive collapse begins
        โ””โ”€ Chain reaction of failures
        โ””โ”€ Major debris clouds

T=4s:   Multiple floors collapsing
        โ””โ”€ Massive particle spawning
        โ””โ”€ Ground impacts

T=5s:   Final collapse
        โ””โ”€ Building fully down
        โ””โ”€ Debris settling

T=6-10s: Settling phase
         โ””โ”€ Particles coming to rest
         โ””โ”€ Dust slowly dissipating

Camera Angles โ€‹

Angle 1: Overview (Default)

  • Position: (30, 20, 30)
  • Target: Building center
  • FOV: 60ยฐ
  • Shows entire collapse

Angle 2: Street Level

  • Position: (50, 2, 0)
  • Target: Building base
  • FOV: 70ยฐ
  • Ground-level perspective

Angle 3: Top-Down

  • Position: (0, 80, 0)
  • Target: Building center
  • FOV: 45ยฐ
  • Architectural view

Angle 4: Cinematic

  • Dynamic path following collapse
  • Variable FOV for impact
  • Slow-motion capable

๐Ÿงช Testing Strategy โ€‹

Performance Benchmarks โ€‹

typescript
interface PerformanceTarget {
  targetFPS: 60;
  maxParticles: 50000;
  maxFrameTime: 16.67; // ms
  memoryLimit: 100; // MB
}

interface PerformanceMetrics {
  averageFPS: number;
  minFPS: number;
  maxFrameTime: number;
  particleCount: number;
  memoryUsage: number;
}

Test Scenarios โ€‹

Test 1: Baseline Performance

  • Empty scene (building only, no collapse)
  • Should maintain 60 FPS
  • Memory: ~20 MB

Test 2: Partial Collapse

  • 10K particles active
  • Should maintain 60 FPS
  • Memory: ~40 MB

Test 3: Full Collapse

  • 50K particles active
  • Target: 60 FPS (min 55 FPS acceptable)
  • Memory: ~80 MB

Test 4: Stress Test

  • 100K particles (double target)
  • Should maintain 30+ FPS
  • Memory: ~150 MB

Quality Checks โ€‹

Visual Quality

  • โœ… Building looks realistic
  • โœ… Collapse is believable
  • โœ… Debris behavior natural
  • โœ… Camera shake feels right
  • โœ… Dust effects enhance realism

Physics Accuracy

  • โœ… Structural failures make sense
  • โœ… Debris falls realistically
  • โœ… Collisions work properly
  • โœ… Particles settle naturally

User Experience

  • โœ… Controls are intuitive
  • โœ… Demo is impressive
  • โœ… Performance is smooth
  • โœ… Loading is quick

๐Ÿ“ฆ Deliverables Checklist โ€‹

Code (Week 5) โ€‹

  • [ ] ProceduralBuilding.ts (300 lines)
  • [ ] FracturePhysics.ts (400 lines)
  • [ ] EarthquakeSimulation.ts (350 lines)
  • [ ] CameraEffects.ts (250 lines)
  • [ ] EarthquakeDemoScene.ts (300 lines)
  • [ ] Tests: Earthquake.test.ts (200 lines)
  • Total: ~1,800 lines

Documentation โ€‹

  • [ ] Architecture overview
  • [ ] User guide
  • [ ] API documentation
  • [ ] Performance analysis
  • Total: ~400 lines

Demo Assets โ€‹

  • [ ] HTML demo page
  • [ ] Interactive controls
  • [ ] Multiple camera angles
  • [ ] Recording capability (optional)

Testing โ€‹

  • [ ] Performance benchmarks
  • [ ] Visual quality checks
  • [ ] User experience validation
  • [ ] Cross-browser testing

๐ŸŽฏ Success Criteria โ€‹

Must Have (MVP) โ€‹

  • โœ… 50K particles @ 60 FPS
  • โœ… Building collapse animation
  • โœ… GPU physics integration
  • โœ… Interactive controls
  • โœ… Camera shake effects

Should Have โ€‹

  • โœ… Multiple camera angles
  • โœ… Dust particle effects
  • โœ… Slow-motion mode
  • โœ… Reset functionality
  • โœ… Performance stats

Nice to Have โ€‹

  • ๐ŸŽฏ Sound effects
  • ๐ŸŽฏ Video recording
  • ๐ŸŽฏ Configurable building (floors, size)
  • ๐ŸŽฏ Different collapse patterns
  • ๐ŸŽฏ Damage visualization (stress colors)

๐Ÿ”ฎ Future Enhancements โ€‹

Post-Week 5 โ€‹

  1. Multiple Building Types

    • Residential
    • Commercial
    • Industrial
    • Historical
  2. Advanced Physics

    • Rebar deformation
    • Material fatigue
    • Wind effects
    • Aftershocks
  3. Environmental Effects

    • Surrounding buildings
    • Street damage
    • Underground effects
    • Tsunami (coastal)
  4. Educational Mode

    • Structural engineering lessons
    • Safety information
    • Historical earthquakes
    • Building codes

๐Ÿ“Š Project Timeline โ€‹

Day 1-2: Building Structure
  โ”œโ”€ Procedural building generator
  โ”œโ”€ Structural elements
  โ””โ”€ Visual mesh

Day 2-3: Fracture Physics
  โ”œโ”€ Structural analysis
  โ”œโ”€ Progressive collapse
  โ””โ”€ Debris spawning

Day 3-4: GPU Integration
  โ”œโ”€ Particle system integration
  โ”œโ”€ Performance optimization
  โ””โ”€ Debris lifecycle

Day 4-5: Camera & Effects
  โ”œโ”€ Camera shake
  โ”œโ”€ Visual effects
  โ””โ”€ Multiple camera modes

Day 5-6: Demo Scene & UI
  โ”œโ”€ Interactive controls
  โ”œโ”€ UI implementation
  โ””โ”€ Visual polish

Day 6-7: Testing & Polish
  โ”œโ”€ Performance testing
  โ”œโ”€ Visual refinement
  โ””โ”€ User testing

Total Duration: 7 days (Week 5)


๐Ÿ’ก Technical Considerations โ€‹

Memory Management โ€‹

  • Particle pooling to avoid GC
  • Reuse debris particles when possible
  • Clear settled particles (beyond view)
  • Efficient buffer management

Performance Optimization โ€‹

  • Batch debris spawning (max 1K/frame)
  • Sleep state for settled debris
  • Frustum culling for off-screen particles
  • LOD for building elements

Physics Accuracy โ€‹

  • Realistic material properties
  • Proper mass distribution
  • Accurate collision response
  • Energy conservation

Visual Quality โ€‹

  • Appropriate debris sizes
  • Realistic dust effects
  • Smooth camera motion
  • Clear visual feedback

๐Ÿš€ Getting Started โ€‹

Prerequisites โ€‹

  • โœ… GPU acceleration system (Phase 1-3)
  • โœ… WebGPU-capable browser
  • โœ… HoloScript development environment
  • โœ… Test data for structural analysis

Initial Setup โ€‹

bash
cd c:/Users/josep/Documents/GitHub/HoloScript
mkdir -p packages/demos/earthquake
cd packages/demos/earthquake

# Create package structure
pnpm init

First Implementation Step โ€‹

Start with ProceduralBuilding.ts - the foundation for everything else.


Ready to begin Week 5! ๐Ÿข๐Ÿ’ฅ

Let's create a spectacular earthquake demo that showcases the power of GPU-accelerated physics!

Released under the MIT License.