Skip to content

haelime/GPUBoidsSimulation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GPU Boids Simulation

한국어 | English

한국어

프로젝트 소개

Unity Compute Shader와 GPU Instancing을 활용해 대규모 Boids 군집 시뮬레이션을 실시간으로 구동하는 프로젝트입니다. CPU 중심 구현에서 발생하는 병목(개체 수 증가 시 프레임 하락)을 GPU 병렬 처리로 완화하는 데 초점을 맞췄습니다.

데모

GPU Boids Demo

문제 정의와 목표

  • 목표: 수천~수만 개 에이전트를 실시간으로 업데이트하고 인터랙티브하게 제어
  • 제약: 시뮬레이션 계산 + 렌더링 + 입력 반영을 프레임 단위로 동시에 처리
  • 해결 방향
    • Boids 핵심 계산을 Compute Shader로 이동
    • 보이드 상태를 GPU 메모리에 유지해 CPU-GPU 왕복 최소화
    • DrawMeshInstancedIndirect로 대량 인스턴스 렌더링 오버헤드 완화

성능/확장성

장점

  • CPU per-instance 업데이트를 제거해 개체 수 증가에 유리
  • 시뮬레이션과 렌더링을 GPU 중심으로 일관되게 구성
  • 입력 상호작용이 있어도 파이프라인 단순성 유지

현재 한계

  • 이웃 탐색은 본질적으로 O(n^2) 성격
  • 보이드 수 증가에 따라 GPU 연산량이 급격히 증가
  • 우클릭 입력이 카메라 회전과 겹칠 수 있음

개선 아이디어

  • Uniform Grid / Spatial Hash로 이웃 후보군 축소
  • Compute 단계 분리(해시 생성/정렬/근접 탐색)
  • LOD 기반 원거리 단순화 렌더링
  • 인게임 벤치마크(Boid 수/FPS 자동 스윕) 추가

트러블슈팅

  • 이슈: 개체 수 증가 시 CPU 루프 기반 구현에서 프레임 하락
  • 대응: Boid 상태를 ComputeBuffer로 전환하고 GPU에서 힘 계산/적분 수행
  • 이슈: 인스턴스 수 증가에 따른 CPU Draw Call 오버헤드
  • 대응: DrawMeshInstancedIndirect 도입으로 드로우 호출 수 고정
  • 이슈: 파라미터 변경 즉시 반영 시 버퍼 재할당 타이밍 문제
  • 대응: Boid 수 변경은 Reset 시점에 반영하도록 분리

English

Large-scale boid flocking simulation built with Unity Compute Shaders and GPU indirect instancing.

Demo

Highlights

  • Two-pass GPU simulation: ForceCS + IntegrateCS
  • GPU-driven rendering via DrawMeshInstancedIndirect
  • Real-time controls: boid count, speed, behavior weights, pause/reset
  • Interactive mouse attract/repel behavior

Run

  1. Open the project with Unity 6000.2.6f2.
  2. Open Assets/Scenes/Main.unity.
  3. Press Play.

About

highly optimized 3D boids

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors