XREAL
Vision
🧐

물리엔진은 어떻게 만들어지나요?

3D 게임을 해보신 분들이라면 누구나, 가상 환경에서도 물체가 하늘에 떠있지 않고 마치 중력의 영향을 받아 아래로 떨어지는 힘을 받는다는 것을 알고 계실 것입니다. 또 내가 컨트롤하는 물체가 다른 물체와 서로 충돌할 때, 두 물체의 이동 속도와 경로가 바뀌는 양상이 현실과 너무 꼭 닮아서, 어떻게 내가 주는 임의의 입력값에 일일이 대응하는 물리적 반응을 정확하게 구현해 낼 수 있는지 궁금하셨던 분도 많으셨을 텐데요. 이 모든 것의 정답은 ‘물리엔진’에 있습니다.
물리엔진이 실제 게임에서 동작하는 흐름(https://bluekid.tistory.com/12)
물리엔진이란 가상환경에서도 물체가 현실처럼 운동할 수 있도록 자연의 여러 중요한 물리법칙들을 코드로 구현해 놓은, 일종의 소프트웨어 라이브러리/를 말합니다. 물리엔진은 물체의 현재 운동상태를 입력값으로 받아 즉각적으로 물리법칙을 계산하고, 그 결과로 바로 직후의 물체의 운동상태를 결정하는데요. 이렇게 계산한 결과를 그래픽 렌더링 엔진에 전달하여 운동이 시각적으로 자연스럽게 그려질 수 있도록 합니다.
물론 인간이 자연의 모든 비밀을 알 수는 없기 때문에 모든 물리법칙을 완벽하게 알 수는 없지만 눈으로 보이는 세계의 운동은 대부분 뉴턴에 의한 운동법칙들로 충분히 설명이 가능합니다.
관성의 법칙: 물체에 외력이 작용하지 않는 한, 물체는 현재의 운동상태를 유지하려 한다.
가속도의 법칙: 물체의 가속도는 물체의 힘에 비례하고, 가속도의 방향은 힘의 방향이다.
작용-반작용의 법칙: 물체에 힘이 작용하면 크기가 같은 힘이 반대 방향으로 작용한다.
(출처: 백낙훈, 물리엔진의 소개)
물리엔진이 주요하게 구현하는 것은 ‘강체(rigid body)들이 힘을 받았을 때 어떻게 운동하는지’, 그리고 그들간의 ‘충돌 상황에서 어떤 일이 발생하는지’ 입니다. 여기서 강체란 외부에서 어떠한 힘을 가해도 모양과 크기가 변하지 않는 물체로, 현실에서는 존재하지 않지만 물리엔진에서는 연산의 편의를 위해 대부분의 객체를 강체로 가정합니다. 강체 동역학과 충돌에 대한 계산은 모든 물리엔진에서 기본적으로 지원되며, 모델에 따라 강체가 아닌 유체나 변형체, 혹은 물체의 파괴 등에 대한 연산을 특징적으로 지원하기도 합니다.
그렇다면 구체적으로 어떤 물리법칙들이 어떻게 사용되는지, 각 상황마다 변수가 되는 것은 어떤 요소인지 간단한 예시를 통해 살펴봅시다. 위에서 제시한 뉴턴의 세 가지 물리법칙 중에서 물리엔진의 구현에 있어 가장 핵심이 되는 것은 제 2법칙, F = m x a (힘 = 질량 x 가속도) 입니다. 그러나 매 프레임마다 실시간으로 물체의 움직임을 계산해야 하므로 이 식을 적절히 변형하여 가장 계산량이 적은 식으로 대치하여 사용하게 되는데요. 그렇게 나온 식이 아래 그램에서 ‘물리엔진’ 박스 안의 두 식이며, 이 때 v는 속력, w는 각속도, I는 관성계의 설정을 의미합니다.
결론적으로 이 관계식을 통해, 우리는 ‘이전 프레임의 물체의 위치(x), 방향(q), 운동량(P), 각운동량(L)을 이용하여 이후 프레임의 x, q, P, L값’을 결정할 수 있게 되는 것입니다.
물리엔진 이전의 가상 환경에서 물체의 움직임은, 특정 상황에 대해 미리 설정된 운동을 그대로 재생하는 방식이었으므로 정확히 같은 움직임이 여러 번 반복되는 상황이 종종 발생하였습니다. 이는 실세계에서는 잘 일어나지 않는 일이므로 다소 부자연스럽게 느껴지곤 했습니다. 그러나 물리엔진에 기반한 가상환경에서는 같은 상황, 가령 같은 계단에서 같은 플레이어가 굴러떨어지는 상황이라 하더라도 서로 조금씩 다른 조건에 의해 각 시행마다 서로 다른 자세 및 방향으로 떨어지게 되고 이를 통해 현실성을 보다 높일 수 있습니다.
플레이어가 넘어지는 위치, 시간 등의 미세한 차이에 의해 각각 다른 방식으로 떨어진다. (https://bluekid.tistory.com/12)
물리엔진은 게임 뿐만 아니라 영화의 CG부분이나 가상 실험이나 모의 비행 등의 시뮬레이션 상황, 인터랙티브 미디어아트 등에 다양하게 활용되고 있습니다. CPU의 성능이 점점 발전하면서 복잡한 물리연산을 실시간으로 처리할 수 있게 되고, 그와 더불어 그래픽 처리를 담당하는 GPU도 빠른 속도로 발전하면서 물리엔진은 점점 더 널리 사용되고 있는데요. 다양한 물리엔진의 화려한 활약상이 정말 기대됩니다.
(작성자: 김보령)
참고자료:
하유종, 박경주, ‘물리엔진에 관한 고찰: 실시간 물리 기술을 중심으로’, 한국게임학회 논문지
백낙훈, ‘물리엔진의 소개’, 한국 CAD/CAM 학회지
백낙훈, ‘게임물리의 개요’, 정보처리학회지