불 시뮬레이션 + 액체 조각 시뮬레이션 + 커스텀 RT 렌더러
요약
컴퓨트 셰이더 기반의 불 시뮬레이션과 희소 복셀 그리드를 활용한 액체 시뮬레이션을 포함한 물리 샌드박스 게임 개발 과정을 소개합니다. 불 시뮬레이션은 RBGS 압력 솔버와 레이마칭을 사용하며, 액체 시뮬레이션은 지속적인 형태 유지를 위해 서피스 넷(surface nets) 방식을 채택했습니다. 또한, 커스텀 레이 트레이싱(RT) 렌더러를 구축하여 고성능의 물리 효과를 구현하고 있습니다.
핵심 포인트
- 컴퓨트 셰이더를 활용한 복잡한 불 시뮬레이션(점화, 이류, 열 확산 등) 구현
- 256^3 희소 복셀 그리드(sparse voxel grid) 및 RBGS 압력 솔버 사용
- 액체의 지속성을 위해 레이마칭 대신 서피스 넷(surface nets) 메싱 방식 선택
- GPU 구동 파티클과 커스텀 RT 렌더러를 통한 고성능 물리 시뮬레이션 환경 구축
저는 현재 매우 물리 샌드박스(physics sandbox)적인 게임을 작업 중입니다.
이 게임의 실제 게임플레이가 무엇이 될지는 저도 잘 모르겠습니다. 시뮬레이션 스택을 직접 구축하는 것에 완전히 매료되어 버렸기 때문입니다.
불 시뮬레이션 (fire sim)은 상당히 복잡하며 컴퓨트 셰이더 (compute shaders) 기반입니다. 점화 (ignition), 이류 (advection), 속도 (velocity), 열 확산 (thermal diffusion), 복사 냉각 (radiative cooling) 등을 기반으로 작동합니다. 또한 다양한 유형의 연료와 재질을 지원합니다. 저는 256^3 희소 복셀 그리드 (sparse voxel grid) 상에서 RBGS 압력 솔버 (pressure solver)를 사용하고 있습니다. 비주얼은 레이마칭 (raymarching) 셰이더를 사용합니다.
이것만 단독으로 실행했을 때는 놀라울 정도로 성능이 잘 나와서, 제 컴퓨터에서는 큰 폭발이 일어나는 중에도 약 250 fps 밑으로 떨어지지 않았습니다. 영상에서는 다른 시스템들이 함께 실행되는 결합된 부하 때문에 모두 약 70 fps로 구동되고 있습니다.
액체 시뮬레이션 (liquid sim) 또한 희소 복셀 그리드 (sparse voxel grid)를 사용하며 (이제 인생의 모든 것이 희소 복셀 그리드 아닌가요?), GPU 구동 파티클 (GPU driven particles) (여기 영상에서는 약 15k 개의 활성 파티클 범위에 있습니다)과 실제 액체를 메싱 (meshing)하기 위한 서피스 넷 (surface nets)을 사용합니다.
제가 레이마칭 (raymarching) 대신 특별히 서피스 넷 (surface nets)을 선택한 이유는, 액체가 게임 월드에서 "얼어붙어" 지속되기를 원했기 때문에 기존의 모든 빛/그림자/반사 스택과 상호작용할 수 있는 더 쉬운 방법이 필요했기 때문입니다.
이 장면은 커스텀 RT (ray tracing) 기반 렌더러에서 실행되고 있지만, 그것은 지금 다루지 않을 완전히 다른 이야기입니다. 제가 말할 수 있는 전부는, 어떤 사람들은 스스로를 파괴하는 성향이 있어서 빌트인 (built-in) RP를 사용했다는 것뿐입니다. 빌트인은 지난 10년 동안 셰이더를 만들면서 저를 실망시킨 적이 없습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 r/Unity3D (top/week)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기