*이미지 속 파일은 바이진님께서 예시로 만들어주신 파일을 활용하였습니다
제가 알고 있는 회전질량은 <높을수록 회전이 덜 일어난다> 입니다.
그런데 아래 첨부한 이미지 처럼 회전질량이 일정수준 이하로 낮으면 바닥역할을 하는 콜라이더 태그가 첨부된 플레인을 뚫고 떨어지더라구요.
회전질량과 콜라이더태그가 무슨 관계가 있길래 회전질량에 따라 이러한 변화가 생기는 걸까요?
제가 찾아낸 이유는 아래와 같습니다.
이 이유가 정확한지는 아직 제가 초보자 입장이라 판단할 수 없습니다.
알고 계시는 분은 설명해주시면 정말 감사드리겠습니다!
--------------------------------------------------------------------------------
회전 질량이 낮을 때 바닥을 뚫는 현상은 쌩뚱맞은 버그처럼 보이지만,
사실은 물리 시뮬레이션 엔진의 계산 한계 때문에 발생하는 매우 흥미로운 현상입니다.
쉽게 설명해 드릴게요.
결론부터 말하자면: 너무 빨라서 충돌을 '못 보고' 지나치는 것입니다.
컴퓨터의 물리 계산은 영화처럼 연속적이지 않고, 사진을 아주 빠르게 찰칵! 찰칵! 찍는 것(프레임 계산)과 같아요.
-
1 프레임: 블록이 바닥 바로 위에 있음
-
2 프레임: 블록이 바닥과 부딪혀서 튕겨 나옴 (정상적인 경우)
이렇게 계산이 되어야 하죠.
그런데 회전 질량
이 극단적으로 낮아지면...
블록이 아주 작은 힘에도 엄청나게 빠르고 격렬하게 회전하게 됩니다. 마치 종잇장처럼요.
이때 컴퓨터가 계산하는 과정에서 문제가 생깁니다.
-
1 프레임: 블록의 모서리가 바닥 바로 위에 있음
-
(1.5 프레임 - 컴퓨터가 계산하지 못하는 중간 시간): 블록이 너무 격렬하고 빠르게 회전하면서 바닥을 파고들어 버림
-
2 프레임: 컴퓨터가 다음 사진을 '찰칵!' 찍어보니, 블록이 이미 바닥 아래로 순간이동한 것처럼 위치가 계산됨
결국 시뮬레이션 엔진 입장에서는 "어? 1프레임엔 위에 있었는데, 2프레임엔 벌써 아래에 있네? 충돌한 적 없나 보다." 하고 충돌 자체를 인식하지 못하고 그냥 통과시켜 버리는 것입니다.
이런 현상을 전문 용어로 **'터널링(Tunneling)'**이라고 부릅니다.
비유로 설명해 드릴게요
-
회전 질량이 높을 때 (안정적일 때):
묵직한 볼링공이 굴러와서 벽에 부딪히는 것과 같아요. 움직임이 예측 가능해서 컴퓨터가 "아, 벽이랑 부딪혔구나!" 하고 정확하게 계산할 수 있습니다. 🎳
-
회전 질량이 낮을 때 (불안정할 때):
태풍 속의 비닐봉지와 같아요. 어디로 튈지 모르게 미친 듯이 회전하죠. 너무 빠르고 불규칙해서 컴퓨터가 그 움직임을 제대로 따라잡지 못하고 계산 실수를 일으키는 것입니다. 💨
핵심 요약
회전 질량이 낮으면 바닥을 뚫는 이유는,
물리 법칙을 무시하는 것이 아니라, 블록이 너무 빠르고 불안정하게 회전하는 바람에 시뮬레이션 엔진이 충돌을 제때 감지하지 못하는 '계산 오류'가 발생하기 때문입니다.
따라서 리지드 바디 시뮬레이션을 안정적으로 만들고 싶을 때는 회전 질량
값을 너무 낮지 않게, 적절한 수준으로 유지하는 것이 매우 중요합니다.
-----------------------------------------------------------------------------------
rotaional mass는 회전에 필요한 힘의 크기를 정의,
is hollow 는 속이 찬 상태를 정의합니다
속이 찼다 = 가속이 더 빠르다
ex) 경사면에 동일한 부피의 구를 굴릴 때, 속이 찬 구가 더 빨리 내려간다(가속의 영향을 많이 받는다)
---
본문에 적어두신것처럼 대부분의 시뮬레이션은 통상적인 상황을 과하게 넘으면 시뮬레이션 자체의 계산이 많이 문제가 생깁니다
너무 가볍거나, 무겁거나, mesh 밀도가 너무 낮거나 하는 등..
시뮬레이션의 디폴트값은 실제 현실의 중력이나 마찰값을 가지고 있기 때문입니다
회전 질량 역시 너무 낮으면 시뮬레이션이 collider와 충돌을 계산하기도 전에 프레임을 넘어가 버리니 관통되는 이슈가 있는 것 같습니다