물리학 격투 게임만들기

매운맛나리의 연구

나의 오늘 망상주제.
예전부터 해온 생각중의 하나는,
게임에 물리학 적용은 아직도 발전할 여지가 많이 있다는 것이다.
특히 액션게임에서의 격투쪽이 미개척분야인데,
지난 세월동안 스파, 버파 같은 위대한 격투게임들이
게임계에 이너베이션을 이끌었지만,
타격과 액션 판정에 있어서는 20여년간 아래와 같은 형식에서 달라진게 거의 없다.

(1) 타격자와 피타격자는 pre-defined key 애니메이션을 재생한다.

(2) 타격판정을 한다.

if 중첩됐나(공격자의 hit bound box, 피타격자의 bound box)
then
때렸다 = 참
대미지 = 때린자의 액션에 따라 정해짐 x 카운터시 가중치
else 때렸다 = 거짓


2D가 3D가 됐고 axis-aligned box가 oriented box가 되었을지언정 기본 구조는 변하지 않았다.


나의 망상은 이 부분을 이렇게 바꾸는건데
"보기에 딱 아플거같이 맞으면 진짜로 아픈 시스템"을 만드는 것이다.

(전처리)

(1) 디자이너가 키 애니메이션을 만든다

(2) 이 애니메이션을 분석하여 변환한다.
분석이라함은, 시간별로 각 관절의 토크(torque; 회전력)를 계산해놓는다는 것이다.
정교히 하자면 주요한 근육을 모델화하고 수축하는 힘을 계산해도 좋겠으나
관절단위 토크 정도로 단순화하는게 현재의 컴퓨팅파워에서 현실적이라 본다.

(런타임)

(3) 기본적으로 좋은 물리엔진이 작동중

(4) 플레이어의 조작에 반응하여 애니메이션을 재생할 때,
회전키대로 단순재생하는것이 아니고, 토크를 이용해 재현한다.
즉 아무런 방해환경이 없을때는 원본과 같은 모션이 나오겠지만,
도중에 어딘가에 걸린다든가 부딪힌다든가하면 그 상호작용을 반영하게 된다.

(5) 대미지 역시 상호작용의 일종이다. 운동량은 상호교환되고 총합이 유지된다.
delta(운동량) = m*delta(v) = 충격량 = f*delta(t)
무릎같이 단단한 부위가, 충분한 속도로 어떤 대상과 충돌했을때는
대미지가 매우 크겠지..
단단하다 -> 변형이 적으므로 delta(t)가 짧다는 뜻
무릎 -> 다리가 딸려있으므로 질량(m)이 크다
즉 충격력 f 가 커짐.
게다가 맞는쪽 역시 정면으로 움직이고 있었다면 더 커짐.
운좋게 비껴맞을수도 있고.

IK solver 처럼, 단지 정해진 목표를 향해 '이상적인 솔루션으로 무조건 연결'하는 것과는 차원이 다르다. rag doll 을 때리는 것은 타격감이 없다.

이것은 타격감을 높이기 위해 '현실적으로 보이는 힘'에 대한 계산이다.

타격판정은 정교해지고 눈에 보이는 것과 비슷하게 더 그럴싸해지며,
어떤 문제가 생겨서 그 관절의 토크한계가 감당하지 못할때
의도한 움직임과는 다른 결과가 나온다거나, 균형을 못 잡아 넘어지기도 하는등
리얼한 환경을 만들수 있을것이다.

그저께 레슬링게임을 하다보니 왠지 조작이 내 맘대로 안된단 생각이 들어서
(나에게 타임이 주어질때까지는 버튼 눌러도 무언가 움직일수가 없달까)
해묵은 아이디어를 다시 끄적여봤다.



링크