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
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
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
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
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
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
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
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 transparencyCollapse 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 dissipatingCamera 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 โ
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 โ
Multiple Building Types
- Residential
- Commercial
- Industrial
- Historical
Advanced Physics
- Rebar deformation
- Material fatigue
- Wind effects
- Aftershocks
Environmental Effects
- Surrounding buildings
- Street damage
- Underground effects
- Tsunami (coastal)
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 testingTotal 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 โ
cd c:/Users/josep/Documents/GitHub/HoloScript
mkdir -p packages/demos/earthquake
cd packages/demos/earthquake
# Create package structure
pnpm initFirst 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!