이동, 충돌, 쓰러짐, 그 몰입의 정교한 설계에 대하여
“게임은 결국 착각의 기술이다. 우리는 가짜를 보고도 진짜처럼 느끼며, 심지어 진짜처럼 행동한다.”
게임은 현실이 아니다. 그러나 우리는 그 가상 공간에서 진심으로 웃고, 화내고, 때로는 감동받는다. 우리는 그것을 대개 ‘재미’라고 부르지만, 그 이면에는 기술과 기획, 설계와 계산으로 빚어낸 아주 정교한 ‘인지의 착각(Cognitive Illusion)’이 있다.
《게임의 기술》은 바로 이 지점을 파고든다. 몰입이 어떻게 만들어지고, 감정이 어떻게 설계되는지를 기술의 언어로 풀어보는 여정이다.[편집자주] |
현실이 아닌 공간에서, 현실보다 더 현실적으로 행동하는 일. 게임에서는 흔하다. 우리는 캐릭터가 넘어지면 아찔함을 느끼고, NPC를 괴롭히면 죄책감을 느낀다. 심지어 다른 캐릭터와 은밀한 공간에 있다면 어색함마저 든다. 가상의 공간이지만, 감정은 진짜다.
그 이유는, 게임이 감정을 설계하기 때문이다. 캐릭터의 움직임 하나, 물리 반응 하나, 충돌 하나에 이르기까지 모든 요소는 현실처럼 느껴지게 하기 위한 설계의 결과다. 그리고 그 감정의 기저에는 언제나 ‘기술’이 있다. 오늘은 그 중에서도 가장 기초적인 세 가지 ― 이동, 충돌, 쓰러짐 ― 에 담긴 기술을 들여다본다.
1. 이동: 멈추지 않는 관성, 느껴지는 무게
‘급정거한 버스에서 몸이 앞으로 쏠릴 때처럼’
버스가 앞으로 가고 있다가 급브레이크를 밟는 순간, 차체는 멈추려고 하지만 사람은 계속 앞으로 나아가려는 상태이기 때문에, 서 있던 사람의 몸은 앞으로 쏠리고 발은 뒤에 남아 있게 된다. 이 때, 균형을 못 잡으면 넘어지거나, 잡고 있던 손잡이 쪽으로 몸이 크게 흔들린다.
이 관성의 법칙은 게임에도 그대로 적용된다. 즉 게임 속 캐릭터가 전력 질주하고 있는 상황에 플레이어가 이동 키를 떼면, 캐릭터는 즉시 멈추지 않고 약간 앞으로 미끄러지며 멈추는 느낌이 들어야 한다. 그렇지 않으면 우리는 본능적으로 ‘움직임이 이상하다’, ‘로봇 같다’는 어색함을 느끼게 된다. 관성은 인간이 무의식적으로 인지하는 가장 기본적인 물리 감각 중 하나이기 때문이다.
캐릭터를 실제 사람처럼 움직이고 반응하게 만들기 위해서는 고려해야 할 요소가 정말 많다. 무게와 키는 기본이고, 이동 속도, 손에 든 무기, 중력과 부력, 바닥의 질감에 따른 마찰까지. 더 깊게 들어가면 캐릭터의 성격이나 성향까지 반영하는 경우도 있다. 이처럼 많은 항목을 한 캐릭터에 모두 반영하려면, 단순히 ‘넣기만’ 해서 끝나는 문제가 아니다. 각 요소를 넣은 뒤에는 수치를 조정하며, 유저가 ‘자연스럽다고 느끼는 감각적 기준에 도달할 때’까지 테스트해야 한다. 디테일에 진심인 기획자나 개발자라면, 이 구간에서 시간이 멈추는 경우도 많다.
다행인 것은, 게임엔 물리 엔진이 있어 몇몇 기능으로도 섬세한 표현이 가능하다는 것이다.
특히 언리얼 엔진에서의 캐릭터 이동은 CharacterMovementComponent , LocoMotion 등의 기능을 사용해 간단히(?) 조정 가능하며, 여기에 Mass , Friction , Braking Deceleration 같은 물리 변수들을 활용하면 실제 사람처럼 보이는 ‘움직임의 감각’을 더욱 정교하게 구성할 수 있다.(물론 캐릭터의 기본 이동 애니메이션 등 관련 리소스가 다 준비되었다는 전제 하에....)

그 중에서도 LocoMotion 은 게임 캐릭터가 이동할 때 보이는 모든 움직임과 반응을 통합적으로 다루는 시스템으로, 이동 방향과 속도 감지, 애니메이션 블렌딩(걷기 ↔ 달리기 ↔ 멈춤 전환 시 자연스럽게 연결), 회전 처리(방향 전환 시 상체/하체 분리 회전 또는 점진 회전), 지형 반응(경사로, 계단, 울퉁불퉁한 지면에서의 발 디딤), 속도 기반 모션 처리(속도에 따른 애니메이션 속도 가/감속, 발자국 거리 조정) 등을 빠르게 설정 및 변경할 수 있다.
2. 충돌: ‘어깨가 닿았을 뿐인데’
‘버스가 급정거하자 옆 사람과 어깨가 부딪혔다’
두 번째로, 버스가 급정거하면서 중심을 잃은 사람이 결국 옆 사람과 부딪힌 상황. 부딪힘은 순식간이지만, 서로 어깨가 맞닿고 몸이 밀리며 균형을 잃는 그 짧은 순간 우리는 ‘부딪혔다’는 확실한 감각을 받는다. 소리, 몸의 흔들림, 주변 사람의 반응까지. 그 짧은 접촉이 뚜렷한 상황과 감각을 형성한다.
이번에는 캐릭터가 움직이던 중 NPC나 다른 플레이어, 혹은 벽과 부딪혔다고 생각해보자. 이때, ‘겹치거나 어색하게 스쳐 지나가면’, 혹은 우리는 본능적으로 “이건 가짜”라는 신호를 받는다. 그 이유는 간단하다. 현실에서는 절대 일어나지 않을 상황이기 때문이다. 현실에서 두 사람이 서로를 통과하는 일은 없다. 하지만 충돌 판정이 비활성화된 게임에서는 그런 일이 심심찮게 일어난다.

그래서 ‘충돌 판정(Collision Detection)’은 단순히 캐릭터가 벽을 뚫지 않게 하기 위한 장치가 아니라, 존재감을 증명하고, 현실감을 보정하는 필수 설계 요소다. 두 캐릭터가 부딪힐 때 서로 밀려나거나 살짝 중심을 잃는 듯한 물리 반응이 동반돼야, 플레이어는 ‘이 세계에도 내 행동이 영향을 미친다.’는 감각을 얻게 된다.
그리고 그 접촉 하나가, 게임이 ‘리얼하다’는 믿음을 만든다.

언리얼 엔진에서 캐릭터, NPC, 오브젝트 등의 충돌 판정을 모두 설계하려면 각각의 충돌 범위의 크기와 위치, 반응 방식 등을 정밀하게 조정해야 한다. 또, 다중 캐릭터, 이동 중 충돌, 트리거나 카메라 간섭 등이 연쇄적으로 꼬이기 시작하면, 처음엔 단순해 보이던 충돌 시스템이 점점 정밀한 기획과 테스트의 늪으로 빠져들게 된다.
이때 필수로 쓰이는 것이 Collision 으로, 게임 속 사물들이 ‘서로 닿았는지’, ‘충돌했는지’를 판단하고 반응하도록 만드는 시스템이다. 쉽게 말해, 캐릭터가 벽을 통과하지 않도록 막고, 총알이나 칼이 적에게 적중했는지 판단하며, 아이템 근처에 가면 습득이 가능한 상태로 바뀌는 등, 게임 안에서 일어나는 모든 ‘접촉’과 관련된 처리를 담당하는 핵심 시스템이다. 사실 이 시스템은 게임 속 ‘접촉’과 ‘반응’을 설계하는 논리적 구조이기도 하다.
요약해 설명하면, 각각의 오브젝트는 사전에 “나는 누구인가? (Object Type )”, “무엇을 만나면 어떻게 반응할 것인가?( Collision Response )”에 대한 값을 미리 가지고 있고, 충돌이 감지( Collision Enabled )되면 그에 따른 반응이 나온다는 뜻이다.
이 구조 덕분에, 게임 세계는 현실처럼 닿고( Block ), 겹치고( Overlap ), 무시하고( Ignore ), 작동되는( Trigger ) 등의 다양한 상호작용을 구현할 수 있게 된다.
이후 OnComponentHit , OnComponentBeginOverlap 같은 추가 기능을 활용해 충돌 여부와 그에 따른 후속 반응(예: 밀림, 반동, 상호 작용 등)을 설계 단계에서부터 좀 더 쉽게 설계할 수 있다.
여기서 중요한 점은, ‘충돌이 감지되도록 만드는 것’과 ‘충돌이 실제처럼 느껴지도록 만드는 것’은 완전히 다른 차원의 문제라는 것이다. 전자는 단순한 로직의 구현이지만, 후자는 유저가 “이건 진짜 같다”고 느끼도록 만드는 감각의 설계이기 때문이다.
즉, 충돌의 유무만으로는 충분하지 않으며, 충돌의 순간 어떤 애니메이션이 나오고, 어떤 소리가 들리고, 어떤 방향으로 반응하느냐가 유저의 몰입을 결정짓는 진짜 핵심이다.
3. 쓰러짐: 무게감이 만든 진짜 감정
‘부딪히고, 균형을 잃고, 함께 넘어졌다’
이번엔 앞서 버스 안에서 중심을 잃고 옆 사람과 충돌한 두 사람이 그 반동으로 중심을 잃고, 함께 바닥에 쓰러졌다. 하지만 단순히 ‘넘어졌다’는 것이 아니라, 누가 더 무거웠는지, 어떤 각도로 넘어졌는지, 바닥의 재질은 어땠는지에 따라 몸이 쓰러지는 방식도 다르게 보여진다.
게임 속에서도 ‘쓰러짐’은 단순한 애니메이션 이상의 의미를 가진다. 가볍게 넘어진 캐릭터는 몰입감을 깨뜨리고, 반대로 지나친 무게감은 현실과의 괴리를 느끼게 한다. 결국 또 ‘가짜 공간’이 되어버린다. 그래서, 대부분의 사람들이 알고 있는 선, 그 적당한 선에서의 ‘쓰러짐’과 적당한 선에서의 반응이 필요하다. 기획자나 개발자는 이 ‘적당한 선’을 물리 수치와 연출로 지속적으로 조절해야 한다. 질량 설정은 기본이고, 관절마다의 충돌 시 회전 감쇠값, 바닥에 닿는 시점의 애니메이션 전환 지점까지 모든 요소가 자연스럽게 이어져야 유저는 '쓰러졌네'가 아니라, ‘넘어졌다’는 감각을 받게 된다.
이를 가능하게 만드는 것이 바로 Ragdoll 과 Mass-based Physics 개념이다. 여기서 두 기능(?)을 개념이라고 표현한 이유는 Ragdoll은 ‘헝겊 인형’이라는 뜻이고 Mass-based Physics는 오브젝트의 질량(Mass)에 따라 충돌, 반동, 가속, 감속 등의 반응이 달라지도록 설계된 물리 시스템을 의미하는데, 이는 대부분의 물리 엔진에 적용되어 있기 때문이다.

Ragdoll(랙돌)은 캐릭터의 뼈대( Skeleton )를 물리 엔진에 맡겨서, 상황에 따라 실제 인형처럼 자연스럽게 ‘내동댕이쳐지게’ 만드는 시스템이다. Unity에서는 Ragdoll 이 명칭 그대로, 하나의 기능 단위로 제공되고있는데 Rigidbody(질량과 물리 반응 속성을 부여하는 기능) , Collider , Joint 등을 본( Bone ) 단위로 연결하여, 캐릭터가 죽거나 충격을 받을 때 자연스럽게 늘어지며 쓰러지는 반응을 만들어낸다. 게다가 툴 기반 자동 생성 기능도 포함돼 있어 사용이 비교적 간단하(고 퇴근이 빠르)다는 특징이 있다.

Ragdoll 은 단순히 쓰러지는 동작뿐 아니라 공격을 받았을 때의 반응, 낙하 중 충돌, 사망 이후 시체의 움직임까지 포함한다. 예를 들어, 무거운 적은 칼에 맞아도 바로 쓰러지지 않고 비틀거리다가 눕고, 가벼운 NPC는 한 번의 타격에도 휘청이며 튕겨나가야 한다.
물론, 애니메이션만으로 캐릭터를 쓰러뜨릴 수도 있지만, 항상 비슷한 자세로 넘어지고, 비슷한 방향으로 떨어진다면, 유저는 “아, 이거 연출이네(가짜 같네).”라며 현실감을 잃게 된다. 이때, Ragdoll을 적용하면, 부딪힌 방향, 힘의 세기, 바닥의 모양, 캐릭터의 무게감 등 모든 물리 조건에 따라 혹은 상황에 따라 매번 다른 쓰러짐 반응이 생긴다. 그래야 플레이어가 “아, 진짜 맞고 쓰러졌구나”, “이 캐릭터는 살아 있었구나” 하는 감정을 느낄 수 있게 된다.
기술이 감정이 되는 순간
게임에서 캐릭터가 뛰고, 부딪히고, 넘어지는 것은 기술적으로 보면 단순한 ‘좌표의 이동’과 ‘충돌 반응’일 수 있다. 그러나 그 움직임에 감정이 입혀지는 순간, 유저는 그곳에 ‘존재’하게 된다.
몰입이란 감각을 속이는 기술이자, 현실을 닮은 서사의 설계다. 《게임의 기술》은 그 착각을 가능하게 만드는 가장 기초적인 구조부터 짚는다.
다시 말해, 사용자가 원하는 방향으로 캐릭터가 어떻게 이동하고, 부딪히고, 또 쓰러지는지, 이 단순한 움직임들이 적당하게 모여야 현실처럼 느껴지는 게임의 토대가 된다. 그렇게 되면 유저가 이를 자각하지 못하면 못할수록, ‘움직임을 현실처럼 느끼게 만들기 위한 설계’가 잘 먹히고 있다는 뜻이 된다.
하지만 움직이는 건 캐릭터만이 아니다. 때로는 오브젝트가 부서지거나, 카메라가 시선을 조정하며 감정을 유도해 ‘설계’가 고도화되기도 한다.
다음 이야기
게임 속 ‘움직임’이 현실 같다고 느껴졌다면, 그것은 의도된 기술의 결과다. 하지만 움직이는 것은 캐릭터만이 아니다. 세계도 움직이고, 감정도 유도된다.
다음 편에서는 오브젝트와 연출, 그리고 카메라의 시점까지 포함해 ‘진짜처럼 보이는 세계’는 어떻게 만들어지는가를 살펴본다.
! 해당 글에 사용된 기능과 상세 설명은 보편적이거나 혹은 특정 사용자의 입장에서 정리되었습니다. 프로젝트 환경이나 기술 숙련도에 따라, 사용하는 엔진과 기능, 설정값 등은 다를 수 있습니다.
[METAX = 김하영 기자]
[저작권자ⓒ META-X. 무단전재-재배포 금지]