NOMO.asia

나는 최근 취미로 Chrono Engine 이라는 오픈소스 시뮬레이션 툴에 대해 공부하고 있는데, 이 툴의 소개글 중 physics-based modelling and simulation 이라는 설명이 있었다. 우리나라 말로 다시 적으면 물리 기반 모델링 및 시뮬레이션 정도가 되겠다.

내가 의아했던 부분은 이 툴이 시뮬레이션 툴로 사용되고 있음에도 굳이 "물리 기반"이라는 표현을 썼다는 것이다. 시뮬레이션 툴이라면 당연히 물리 기반이어야 하는것이 아닌가? 만약 이 툴이 그래픽 작업을 위한 툴이라면 물리 기반이라는 단어를 씀으로써 이 툴이 물리 수식을 기반으로 한다는 것을 강조할 수 있었을텐데 왜 그것도 아니면서 물리 기반이라는 표현을 썼을까? 그러니까 내 의문은, 물론 이런 표현을 써도 상관은 없겠지만 굳이 왜 썼냐는 것이다.

그런데 자료를 찾다보니 실제 다른 시뮬레이션 툴이 자기 자신을 소개할 때도 Physics-based Simulation 이라는 표현을 사용하는 경우가 있었다. 시뮬레이션 툴은 물리 엔진의 일종이었고, 시뮬레이션 툴에 물리 기반이라는 표현을 사용하는 것은 이상한 것이 아니었다.

그래서 물리 기반이 뭔지, 물리 기반 모델링이 뭔지에 대해 찾아보았다. 따로 명확한 정의가 없어서 이곳저곳에서 긁어모은 것들이라 다수의 뇌피셜이 포함되어있다.

물리 기반이란 무엇일까?

"물리 기반"이라는 용어를 직접 정의해보자면 실제 물리계를 설명할 수 있는 수식이나 법칙들을 기반으로 하는 것, 예를들어 뉴턴역학, 열역학과 같은 학문 또는 키르히호프의 법칙, 보일의 법칙 등과 같은 것을 기반으로 하는 것 정도로 정리할 수 있을 것 같다.

정확한 기준은 없지만 이러한 수식을 직접 사용하지 않더라도 실제 물리 법칙을 어느정도 모사한다면 "물리 기반"이라는 표현을 쓰는 경우도 있다. 실제로는 이런 경우가 더 많다.

물리 기반이라는 표현을 쓰는 경우

통계 또는 유사식을 사용해 묘사하는 경우의 반대를 표현하기 위해서

어떤 현상을 실험으로 얻은 수식, 경험식이나 통계를 바탕으로 묘사하는 경우(empirical-statistical method)가 있다. 이 방법이 고전적이거나 대표적인 방법일 경우, 이와 반대되는 방법으로 물리적인 수식을 이용한 방법(physics-based method)이라는 것을 상대적으로 강조하기 위하여 물리 기반이라는 표현을 쓴다.

지질학, 해양학, 기후학, 수문학(Hydrology) 등의 분야에서 이러한 의도로 물리 기반이라는 표현이 사용되는 경우를 보았다.

3D 렌더러의 레거시 렌더링과 반대되는 물리 기반 렌더링

3D 렌더링의 경우, 과거 빛이나 그림자에 대한 묘사를 실제 물리적 수식을 바탕으로 한 연산을 통해 표현하는 것은 불가능했으므로 적은 연산으로 그럴싸하게 보이도록 하는 것을 목표로 했다(Legacy Rendering).

그 뒤 물리 기반 렌더링(Physically Based Rendering) 이라는 방법이 등장하며 표면 재질, 거칠기 등을 고려하게 되었고, 열역학 제 1법칙인 에너지 보존 법칙에 따라 반사된 빛이 기존 빛보다 밝을 수 없다는 원칙이 세워졌다.

비록 후자에 해당하는 물리 기반 렌더링도 실제 빛의 현상을 나타내는 수식을 바탕으로 하는 것은 아니고 기존과 마찬가지로 그럴싸하게 현실처럼 보이도록 한다는 것은 변하지 않았으나, 기존 방법보다 현실에 더욱 가까운 빛 표현을 구현했다는 점에서 물리 기반 이라는 표현을 사용하는 듯하다.

게임, 3D 애니메이션 툴에서 실제 물리 현상을 모사할 때

게임, 3D 애니메이션 등에서 어떠한 물체의 운동이나 현상을 표현할 때, 대부분의 경우에는 현실처럼 "보이기만" 하면 된다. 그냥 그럴싸하게 보이기만 하면 충분한데 굳이 비싼 비용을 들여 현실에서의 응답을 그대로 재현할 필요는 없다는 소리이다.

물리 엔진 등을 사용했다고 하더라도 물리 엔진이 게임 플레이에까지 영향을 미치는 경우는 그리 많지 않고, 게임 엔진은 실시간 시뮬레이션 도구의 일종인데다 정확도가 그리 중요하지 않은만큼 수식과 물리 현상의 많은 부분이 무시되거나 간소화된다.

하지만 간혹, 자동차 경주나 항공기 시뮬레이션과 같이 실제 운동이나 현상이 중요하고, 이를 실제와 유사하게 모사했을 때 물리 기반이라는 표현을 쓰는 경우가 있다.

다(多, Multi)물리계를 표현하고 싶을 때

다물리계를 강조하고 싶을 때 앞에 다(多, multi) 를 붙여서 multi-physics (model) based 라는 표현을 쓰는 경우가 있다.

스케마틱 모델링 방식을 강조하고 싶을 때

Simulink 같은 Block 기반 모델링 방식이 아닌, Simscape 나 Modelica 와 같은 스케마틱 모델링 방식을 사용한 것을 물리 기반이라고 부르는 경우가 있다.

실제 물리 현상을 모사한 경우 - 물리 기반이라는 표현을 사용하여 신뢰를 주기 위해서 (뇌피셜)

위의 모든 것을 종합해도 굳이 physics based 라는 표현을 굳이 시뮬레이션 툴에까지 사용해야 할 이유는 없다. 시뮬레이션 툴이 물리 현상을 반영해야 하는 것은 아주 당연한 것이니까. 하지만 그럼에도 physics based 라는 표현을 쓰는 이유는, 실제 물리 현상을 묘사했다는 표현을 강조하여 신뢰감을 주기 위해서가 아닌가라는게 내 생각이다.

앞서 언급한 Chrono Engine 의 경우, 예제를 실행시켜보면 1 Step 을 해석할 때 단 한 번의 Solving 으로 푸는 경우가 꽤 있었다. 그러니까 Step size 가 고정되어 있었다는 경우가 꽤 있었다. 물론 이것은 솔버 설정으로 조절할 수 있지만 많은 예제가 이런 솔버 옵션을 기본으로 택했는데, 이러한 설정은 단순히 그래픽을 연출하기 위한 용도의 물리 엔진에서 주로 사용되는 설정이다.

Step size 가 고정되었을 때 생길 수 있는 문제점은 갑작스럽게 큰 힘이나 접촉이 발생하였을 때 이상 거동을 보이거나 정확도가 낮아질 수 있다는 점, 그리고 접촉 판단에 문제가 생길 수 있다는 점 등 매우 다양하다. 하지만 이것을 모델링 기법 등으로 큰 문제만 없이 넘어가게 하면, 이러한 경우만 제외하고는 어느정도 그럴싸해보이는 결과를 가져올 수 있다. 나는 예전에는 해석의 정확도가 무조건 우선이라고 생각했었는데, 지금은 해석의 목적에 따라 정확도와 해석 시간을 적당히 타협하는게 중요하다는 것을 알았다.

여하튼, 이러한 점에서 Chrono Engine 은 단순히 그래픽을 묘사하는 목적의 물리 엔진으로 생각될 수도 있으니, 실제 시뮬레이션 툴로 사용될 수 있다는 의미로 물리 기반이라는 표현을 사용한 것이 아닐까? 확실한 것은 직접 포럼에 물어보는 것일테니 나중에 시간이 되면 글을 잘 적어서 한 번 남겨봐야겠다.