brunch

You can make anything
by writing

C.S.Lewis

by 마픽스 Sep 26. 2021

[전투 기획] 카메라 쉐이킹과 당위성

오늘은 좀 전문적인 얘기를 해볼까 한다. 전투 기획 중 한 분야로 각종 게임에서 타격 및 피격 시 액션의 타격감을 만드는 장치 중 하나인 '카메라 쉐이킹'에 대해 다루려 한다. 카메라 쉐이킹은 게임 플레이를 비추는 카메라를 흔드는 기법인데, 왜 이런 기법을 사용해서 타격감을 만드는지와 그 방법 등에 대한 전반적인 내용을 알아보려 한다.



1. 왜 카메라를 흔드는 걸까?


게임 중에 타격이나 피격 시 화면이 흔들리는 것은 액션 게임을 좀 해본 사람이라면 누구나 경험해봤을 것이다. 하지만 정확히 어떤 이유로 카메라를 흔드는지에 대해서는 명확히 알지 못하는 사람들이 많다. 게임은 플레이 중에 유저에게 항상 어떠한 방식의 피드백을 줘야 하는데, 액션에서의 피드백을 담당하는 것 중 하나가 바로 오늘 이야기할 카메라 쉐이킹이다.

철권 7 카메라 쉐이킹

카메라 쉐이킹이 없다면 어떻게 될까? 이는 우리가 살고 있는 현실 세계에서 쉽게 그 결과를 예측할 수 있다. 사람이 멀미가 오는 이유는 시각적인 것과 체감하는 것이 서로 상이할 경우에 발생하게 되는데, 반대로 이야기하면 이것이 일치할수록 더욱 현실 같아지고 몰입하기 쉽다는 이야기가 된다. 

현실에서의 작용과 반작용의 예시

실제로 여러분이 현실 세계에서 어떤 물체에 충격을 가하면 그 작용에 의한 반작용으로 자신에게도 힘이 전달된다. 그 힘이 자신의 머리를 흔들기 때문에 실제로 보고 있는 시야도 흔들리게 될 것이다. 맞은 사람은 물론이고, 때린 사람에게도 그 충격이 전달된다. 게임에서는 시야가 곧 카메라이므로 실제로 충격을 주고받은 것처럼 포장해 플레이어에게 전달하기 위해 카메라를 흔들게 된다. 약한 충격이면 약하게, 강한 충격이면 강하게.


그럼 이런 카메라를 어떻게 흔들면 좋을까?


2. 당위성


사람은 어떠한 정보를 판단하는데 각종 감각을 이용하게 되는데, 현대 게임은 아직까지는 그중 2개인 시각과 청각만 사용할 수 있다. (그렇게 멀지 않은 미래에 미각, 후각, 통각을 느낄 수 있는 게임이 등장하지 않을까?)

많은 사람들은 이 5대 감각 중에 시각에서 80% 이상의 정보를 얻게 된다. 그만큼 정보 의존도가 시각에 많이 치중하고 있다는 이야기이다. 그렇기 때문에 시각에서 인지 부조화가 발생하면 금방 눈치채고 몰입이 깨질 것이다. 그렇기 때문에 실제 게임 플레이 피드백의 당위성이 중요해지게 된다. 카메라 쉐이킹 또한 예외는 아니다.

네이버 국어사전

곧바로 하나의 예시를 봐보자.

갓 오브 워 4 카메라 쉐이킹

캐릭터가 도끼를 위로 올려칠 땐 카메라가 위에서 아래로, 아래로 내려칠 땐 아래에서 위로 흔들리게 된다. 캐릭터의 운동 방향에 따라 카메라가 흔들리는 방향이 달라지게 된다. 만일 오른쪽에서 왼쪽으로 강하게 타격하는 동작이 있다면, 맞은 순간 충격의 반작용에 의해 잠시 오른쪽으로 밀렸다가 다시 왼쪽으로 흔들리는 카메라 쉐이킹이 만들어지면 자연스러울 것이다.


이처럼 카메라 쉐이킹은 현실의 물리법칙에 맞게 당위성을 가지고 흔들어주면 위화감 없이 자연스러운 연출이 가능하다.


3. 언리얼로 직접 카메라 쉐이킹 해보기


물론 개념만 안다고 해서 쉽게 만들어 낼 수 있는 물건은 아니다. 작은 수치 조절 작업과 테스트를 반복해야 하지만, 이를 쉽게 접근할 수 있는 언리얼의 기능을 소개하려 한다. 개인 PC에 언리얼 엔진이 설치되어 있다면 지금 바로 시작해볼 수 있다. 아래에서 설명하는 각종 용어는 언리얼 엔진을 조금 다뤄본 분들을 해당으로 작성했다. 각종 용어나 조작 방법이 어렵다면 언리얼 튜토리얼을 한번 보고 오면 좋을 듯하다. 참고로 본 글은 언리얼 엔진 4.27 버전 기준으로 작성되었다.

콘텐츠 브라우저 -> 블루프린트 클래스를 누른다.

모든 클래스에서 MatineeCameraShake를 선택해 생성한다. 생성한 카메라 쉐이크를 간단히 인게임에서 테스트하기 위해 레벨 블루프린트를 이용한다.

레벨 블루프린트를 열었다면 아래와 같이 작성해보자.

Z키를 받아 카메라 쉐이크가 발생하도록 간단한 블루프린트를 작성하자. 블루프린트 노드 추가 방법이나 연결 방법을 잘 모르는 분들은 아래 문서를 참고하면 좋겠다.

[언리얼 블루프린트 노드 추가 방법]
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/BP_HowTo/PlacingNodes/

Shake 항목에 아까 만들어 둔 블루프린트 에셋을 연결하면 끝이다. 이제 실제 카메라 쉐이크 값 설정을 위한 각종 정보를 살펴보자.


4. CamaraShake Blueprint Class 프로퍼티 소개


제대로 된 카메라 쉐이킹을 연출하기 위해선 각 값에 대한 정확한 이해가 필요하다. 이론으로 아는 것도 중요하지만 실제로 만져보고 테스트해보며 어느 정도의 값이 어느 정도의 연출을 만들어내는지 값을 감각적으로 익히는 것도 중요하다.

[Oscillation Duration, 지속 시간]

카메라 쉐이킹 지속 시간 / 초 단위


일반적으로 5 프레임(0.15초) 정도로 짧게 사용하는 것을 권장한다. 실제로도 힘은 금방 사라지기 때문이다. 시간을 길게 늘어뜨리면 그만큼 어지러움을 유발하거나 어색함이 발생할 수 있다. 공격의 강도 또는 무게감을 조절하기 위해 더 짧거나 길게 사용하는 경우도 있다.


[Oscillation Blend in Time]

블렌드 인 지속 시간 (카메라 쉐이크 발동 시 점점 강해지는 시간) 0~1로 조정


[Oscillation Blend Out Time]

블렌드 아웃 지속 시간 (카메라 쉐이크 발동 시 점점 약해지는 시간) 1~0로 조정


[Rot Oscillation]

카메라의 회전축을 기준으로 한 쉐이크


세부 옵션인 Yaw, Pitch, Roll에 대해 궁금하신 분들은 아래 이미지를 참고하면 좋겠다.

Yaw, Pitch, Roll

자신의 머리를 각 회전축을 기준으로 회전하면 곧바로 이해가 될 것이다. 이와 같이 카메라도 어떠한 축을 기준으로 회전시킬 수 있다.

카메라의 Yaw, Pitch, Roll


[Loc Oscillation]

카메라 위치 축을 기준으로 한 쉐이크


카메라 좌표계를 중심으로 X, Y, Z 축으로 회전하는 것을 말한다. 언리얼은 왼손 좌표계를 사용하며 가로를 Y, 세로를 X, 높이를 Z로 표현한다.

언리얼 엔진 좌표계

각 좌표계의 축을 중심으로 어느 방향으로 카메라가 이동할지를 결정할 수 있다.


[FOV(Field of View) Oscillation]

카메라 화각을 기준으로 한 쉐이크


[Amplitude, 진동 폭]

1회 진동 시 움직이는 거리


값의 단위는 엔진의 기준 값인 uu(Unreal Unit. 1m)에 따른다. 매우 강력한 공격이 아닌 이상 큰 값을 사용하진 않는다.


Rot Oscillation을 사용했다면 각도가, Loc Oscillation을 사용했다면 위치가 Amplitude 만큼 움직이게 된다.


[Frequency, 진동 주기]

초당 진동 횟수로, 30 fps 기준으로 30회를 넘을 시 사람이 인지하기 힘들어진다. 평타나 약 공격에서 초당 10회 정도를 흔들어 주면 적당한 수치로 보인다.


[Initial Offset, 최초 시작점]

카메라의 원점에서부터의 오프셋 값


(1) Random

Amplitude 내에서의 랜덤 한 위치나 각도로 시작

반복적으로 재생되는 카메라 쉐이킹의 경우 매번 다른 느낌을 주기 위해 사용하기도 함


(2) Zero

카메라의 원점의 위치나 각도로 시작


[Waveform, 커브 데이터]

카메라가 같은 진동 폭(거리)을 계속해서 반복적으로 오고 가면 매우 어색한 느낌이 들기 때문에 이 진동 폭이 점진적으로 감쇠되는 커브 데이터를 사용한다.


(1) Sine Wave

Sine Wave

점진적으로 감소되는 커브 값으로 규칙적인 운동을 한다. Sine 형태의 Wave로 카메라의 흔들림이 일정한 규칙을 가지고 완만하게 감소되길 원할 때 사용할 수 있다.


(2) Perlin Noise

Perlin Noise

점진적으로 감소하지만 그 변화폭이 불규칙한 운동을 한다. 순간적인 카메라 흔들림을 감소시키고 매 순간 다른 느낌을 내고 싶을 때 적합하다.



각 값을 적절히 사용해 간단한 카메라 쉐이크를 만들고 테스트해볼 수 있다.

언리얼 엔진 카메라 쉐이킹 예시

카메라 쉐이킹은 값 설정에 꽤나 조심스럽게 접근해야 한다. 너무 자주 흔들거나 강하게 흔들면 어지러움으로 멀미를 유발해 오히려 더 못한 결과를 가져올 수 있기 때문이다. 그렇다고 또 값을 너무 약하게 주거나 빈도를 낮추게 되면 플레이하고 있는 화면에 변화가 일어나지 않아 금방 실증날 수 있게 된다. 


이처럼 카메라 쉐이킹은 꽤나 감성적인 영역이다. 나는 이 정도 값이 괜찮다고 생각해서 설정했는데 제 3자가 봤을 땐 또 다르게 느낄 수 있다. 하지만 왜 이런 값들을 설정했고 연출했는지에 대한 당위성이 있다면 상대방을 설득할 수 있다. 


많은 게임 내의 카메라 쉐이킹은 전투 기획자의 손에서 시작하고 마무리된다. 많은 시행착오로 당위성을 가진 자신만의 카메라 쉐이킹을 만들어나갈 수 있었으면 좋겠다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari