| NVIDIA PhysX | |
|---|---|
| 종류 | 실시간 물리 엔진 |
| 개발 | NVIDIA (전신 AGEIA) |
| 언어 | C++ (GPU 가속: CUDA) |
| 라이선스 | BSD-3 (오픈소스화) |
| 가속 | CPU 및 NVIDIA GPU |
| 분야 | 게임·로보틱스·시뮬레이션 |
| 플랫폼 | Windows·Linux·콘솔 등 |
1. 개요[편집]
한때는 물리 계산을 하려고 별도의 확장 카드를 사야 했던 시절이 있었다.
PhysX는 NVIDIA가 개발·유지하는 실시간 물리 엔진으로, 강체·연체·유체·천 시뮬레이션을 다루며 NVIDIA GPU에서의 가속을 특징으로 한다. 게임의 실시간 물리 표현을 담당하는 대표적 미들웨어 중 하나로, 상용 게임 엔진에 널리 통합되어 있다. 파괴되는 벽, 나부끼는 망토, 흩날리는 파편이 화면을 채울 때 그 뒤에서 계산을 돌리는 것이 바로 이런 물리 엔진이다.
이름의 “PhysX”는 물리(Physics)에서 왔고, X는 그냥 멋있어 보이라고 붙은 것에 가깝다. 2000년대 게임 미들웨어 작명의 국룰이었다.
2. 역사: 전용 카드에서 GPU로[편집]
PhysX의 시작은 AGEIA라는 회사였다. 이들은 물리 계산 전용 가속 하드웨어인 PPU(Physics Processing Unit), 즉 “PhysX 카드”를 판매하려 했다. GPU가 그래픽을 전담하듯 물리도 전용 칩에 맡기자는 발상이었다. 야심 찬 시도였지만, 물리 효과 하나 보자고 추가 카드를 사는 소비자는 많지 않았다.
2008년, NVIDIA가 AGEIA를 인수하면서 판이 바뀌었다. NVIDIA는 PhysX의 계산을 자사 GPU의 범용 연산 능력(CUDA) 위에서 돌리도록 재구성했다. 전용 카드가 필요 없어지고, 이미 그래픽 카드를 꽂은 게이머라면 물리 가속을 덤으로 얻게 된 것이다. 하드웨어 회사가 소프트웨어 미들웨어를 인수해 자사 GPU의 판매 논리로 흡수한, 전략적으로 영리한 인수였다.
이후 NVIDIA는 PhysX SDK를 여러 버전에 걸쳐 발전시켰고, 상당 부분을 오픈소스로 공개했다. 근래에는 로보틱스·산업 시뮬레이션을 겨냥한 상위 플랫폼의 물리 백엔드로도 쓰이며, 게임을 넘어 전산과학적 시뮬레이션 영역으로 발을 넓혔다.
3. GPU 가속의 원리[편집]
PhysX가 GPU에서 빠른 이유는 물리 계산의 상당 부분이 병렬화하기 좋은 구조이기 때문이다. 수천 개의 파편, 수만 개의 파티클 시스템 입자, 넓은 천의 수많은 질점은 서로 비슷한 계산을 독립적으로 수행한다. 이런 대량의 동종 연산은 수천 개 코어를 가진 GPU가 CPU보다 압도적으로 잘 처리한다.
특히 이득이 큰 영역은 다음과 같다.
- 입자 기반 유체 — SPH(평활 입자 유체동역학) 계열의 유체는 수많은 입자의 상호작용을 매 스텝 계산하는데, 이 구조가 GPU 병렬화와 궁합이 좋다.
- 천 시뮬레이션 — 질량-스프링 그물의 각 질점을 병렬로 갱신하고, 위치 기반 동역학(PBD) 방식으로 제약을 반복 만족시킨다.
- 대규모 파편 — 벽이 부서지며 흩어지는 수천 개 조각의 강체 동역학을 동시에 굴린다.
반면 강체 간 접촉 해석처럼 순차적 의존성이 강한 계산은 GPU 병렬화 이득이 상대적으로 작아, 실제 엔진은 CPU와 GPU에 작업을 나눠 배치하는 하이브리드 구조를 취한다.
4. 강체와 제약[편집]
화려한 GPU 효과와 별개로, 게임플레이에 직접 영향을 주는 핵심은 견실한 강체 동역학이다. 캐릭터가 밟고 서는 바닥, 밀리는 상자, 굴러가는 통은 모두 강체로 표현되며, 매 프레임 충돌 감지와 접촉 응답을 거쳐 갱신된다.
물체들을 관절로 엮는 것은 제약 해결기의 몫이다. 경첩·구형 관절·모터가 달린 관절을 조합해 문·차량 서스펜션·로봇 팔을 만든다. PhysX는 이 조건들을 반복적으로 만족시키는 솔버를 사용하는데, 시간 적분에는 안정성을 우선하는 반음적 방식을 쓴다. 실시간 물리에서는 룽게-쿠타법 같은 고차 정확도 적분보다, 큰 시간 간격에서도 폭발하지 않는 안정성이 훨씬 중요하기 때문이다.1
접촉이 많은 장면(예: 상자 수백 개를 쌓아 올린 더미)은 물리 엔진의 난제로 꼽힌다. 제약이 서로 얽혀 반복 수렴이 느려지고, 물체가 미세하게 떨거나 서서히 파고드는(jitter, sinking) 현상이 나타나기 쉽다. 이를 억제하기 위해 접촉 안정화와 sleep(정지 판정) 같은 기법이 동원된다.
5. 활용과 라이벌 구도[편집]
PhysX의 최대 강점은 NVIDIA GPU 생태계와의 밀착과 상용 게임 엔진 통합이다. 널리 쓰이는 여러 게임 엔진이 PhysX를 강체 물리 백엔드로 채택해 왔기에, 수많은 게임이 자기도 모르게 PhysX 위에서 돌아갔다. 대규모 파괴·입자·천 효과가 필요한 프로젝트에서 특히 강력한 선택지다.
경쟁 상대로는 오픈소스 Bullet과 상용 Havok 등이 거론된다. Bullet이 완전 오픈소스·크로스 플랫폼·연구 친화성으로 승부한다면, PhysX는 GPU 하드웨어 가속과 대규모 실시간 효과에서 우위를 점한다. 다만 PhysX도 상당 부분 오픈소스로 공개되면서 둘의 경계는 예전만큼 뚜렷하지 않다. 요약하면 “NVIDIA GPU를 깔고 화려하게 부수고 싶다”면 PhysX, “플랫폼과 라이선스에서 완전한 자유가 필요하다”면 Bullet이라는 구도다.
물리 엔진은 어디까지나 실시간성을 위해 물리를 근사한다는 점을 잊으면 안 된다. 게임에서 멋져 보이는 물리와 실제 세계의 물리는 다르며, 정량적 정확도가 필요한 공학 시뮬레이션이라면 검증 및 확인을 거친 전용 해석 코드가 따로 필요하다.2 게임의 폭발은 재미를 위한 것이지, 전산유체역학 논문을 위한 것이 아니다.