게임 그래픽에서 '사소하지만 중요한 부분'이 있다면 어떤 것이 있을까. 누군가는 다른 대답을 내놓을지도 모르겠지만, 적어도 '이펙트'가 중요하다는 사실은 부정하기 어려울 것이다. 이펙트는 전체적인 그래픽과도 어울려야 하고, 혼자서만 툭 튀어도 곤란한 존재다.

그만큼 게임 이펙트는 게임 그래픽 환경에 현실감과 존재감을 부여하는 역할을 한다. 타격 이펙트부터 시작해서 폭발 이펙트에 이르기까지. 게임을 플레이하며 자연스레 지나가는 것들에도 개발자들의 노력과 고민이 들어가 있다.

NDC2017에서 마이크를 잡은 스마일게이트의 김대혁 개발자는 우리가 무심코 넘어가는 '이펙트'에 대해서 강연을 시작했다. 기술의 발전으로 어떠한 효과를 효율적으로 얻을 수 있으며, 어떻게 해야 더욱 자연스럽게 보여줄 수 있을지, 시연을 통해서 청중들에게 전달하려 했다.

▲ 스마일게이트 김대혁 개발자

먼저 강연자는 해당 강연에서는 2D 레이마칭 스모크(2D Raymarching Smoke), 리얼타임 옵티컬 플로우(Realtime Optical Flow), 텍스쳐 베이크드 애니메이션(Texture Baked Animation) 세 주제로 설명됨을 알렸다. 또한, 차세대 게임들이 물리기반렌더링(PBR)을 통해 렌더링 기조를 잡았고, 이제는 이펙트의 조화가 중요한 시대가 되었다고 언급했다.


■ "연기의 볼륨감을 살리자" - 2D 레이마칭 스모크

김대혁 개발자는 기존의 Lit Particle은 연기의 볼륨감을 표현하기는 부족했으며, 노말맵은 훌륭하지만 2.5D의 느낌이 들 수 있었다고 지적했다. 이러한 기존 연기 표현의 단점을 해소하기 위해서 2D 레이마칭 스모크가 사용되기 시작했고, 대표적인 결과물은 '언차티드4'에서 확인할 수 있음을 보여줬다.

언차티드에서는 연기의 음영을 바꾸거나, 불의 색상과 강도를 자유자재로 변화하는 것이 가능하다. 빛의 표현과 투과도 적용할 수 있으므로 연기의 색상이 주변 환경에 자연스레 녹아들며, 연출의 형태로 활용할 수 있다고 설명했다. 그림자 방향에 따라 연기의 음영이 적용되어 자연스럽게 표현되며, 라이트 벡터의 방향대로 텍스쳐가 샘플링된다.


결국, 2D 레이마칭 스모크를 언리얼 엔진4로 구현한다면? 빛의 방향에 맞춰 볼륨감을 표현할 수 있게 되는 것이다. 언리얼 엔진4에서는 연기의 콘트라스트를 조절하거나, 밝은 곳과 어두운 곳의 거리를 조절할 수 있고, 구체적으로 몇 번을 샘플링하게 될 것인지 조절하는 것도 가능하다고 설명했다.

앞서 언차티드4가 그랬던 것처럼, 색상을 조절하여 불꽃의 느낌을 표현하고, 폭발 효과를 구현하는 것도 손쉽게 이용할 수 있다. 이러한 모든 작업은 파라 미터를 조절하는 것으로 이루어진다. 구체적인 작업 과정은 여러 가지 인풋이 연결되는 모습을 보인다.


여기서는 베이스 색상을 결정하는 것이 가장 중요하며, 백라이트나 파이어에서는 효과를 추가하는 형태로 설계되어있다. 이외 여러 인풋은 텍스쳐 오브젝트, 빛이 투과되는 방향, 빛이 방출되는 방향 등을 실제로 조절하게 되는 구조다.

결국, 2D 레이마칭 스모크는 폭발과 연기의 사실적인 볼륨감을 표현하는 데에 큰 장점을 가지고 있다고 할 수 있다. 하지만 코드 상으로는 여러 개의 조건문을 사용해야 하므로 퍼포먼스 문제가 발생하는 단점을 가진다. 폭발 표현에서 다수의 파티클을 사용한다면, 따로 노는 느낌까지 들 수 있다.

강연자는 이럴 때에는 연기의 콘트라스트를 낮추는 것으로 위화감을 줄일 수 있으며, 일반적인 lit Particle로 해결해야 한다고 알렸다.




■ "자연스레 움직이는 연기를 표현하자" - 리얼타임 옵티컬 플로우

사실, 옵티컬 플로우는 기존에 영상 매체에서 사용되던 기능이다. 옵티컬 플로우를 사용하기 위해서는 벨로시티 맵 텍스쳐가 필요한데, 메모리가 낭비되는 문제가 발생했다. 옵티컬 플로우의 뚝뚝 끊기는 듯한 프레임을 벨로시티 맵으로 보완하는 구조였기 때문이다. 하지만 리얼타임 옵티컬 플로우에서는 벨로시티맵이 불필요하므로 메모리 낭비 없이 자연스럽게 표현할 수 있게 됐다.


언리얼에서 이를 구현하기 위해서는 텍스쳐를 X, Y로 오프셋 시켜서 그래디언트를 구하고, 이를 벨로시티로 변환하는 것에서 출발한다. 벨로시티는 각각 이전/현재 프레임의 UV와 더하고, 이전 프레임은 앞으로, 현재 프레임은 뒤로 왜곡(Distort)시키는 작업 등으로 표현한다.

강연자는 두 개의 원을 통해서 이를 시연했으며, 인덱스에서 무슨 채널을 기준으로 움직이게 할지 정하고, 높은 LOD를 통해서 더 부드러운 움직임이 가능하다고 강조했다. 이와 같은 방식으로 구현하는 리얼타임 옵티컬 플로우는 추가 텍스쳐 없이 구현할 수 있다는 장점이 있고, 시뮬레이션을 거치지 않아도 적용할 수 있다. 하지만 수치가 매우 민감하여 적절한 값을 찾기까지 시간이 걸린다는 점을 염두에 두어야 한다고 언급했다.




■ "텍스쳐에 정보를 굽자" - 텍스쳐 베이크드 애니메이션

텍스쳐 베이크드 애니메이션은 텍스쳐에 많은 정보를 저장할 수 있다는 데에서 착안한 기술이다. 1픽셀은 1벡터의 값을 지니며, 각각의 픽셀에 버텍스의 위치값을 저장하는 것으로 애니메이션을 구현할 수 있다. 강연자는 해당 기술도 시연으로 실제적인 움직임과 활용법을 설명했다.


시연은 후디니로 텍스쳐를 제작했으며, 가로줄에는 프레임을 세로줄에는 버텍스 순서를 저장하여 애니메이션을 표현하려 했다. 삼각형이 좌에서 우로 가는 동안의 프레임과 버텍스 순서가 픽셀 안에 저장되는 형태와 방법, 언리얼엔진4에서의 구현 방법과 주의점을 청중들에게 설명했다.

결과적으로 텍스쳐 베이크드 애니메이션은 스켈레탈 메쉬가 아니어도 애니메이션을 표현할 수 있다는 장점이 있다. 하나의 메쉬로 여러 개의 움직임을 구현하는 것까지 가능하며, 버텍스의 개수가 프레임마다 달라져도 정확하게 작동한다고 정리했다. 이외의 기법들은 후디니16에 내장되어 있다.




■ "이펙트도 나날이 발전한다" - 기술과 아트의 조화가 중요하다

강연자는 모든 시연과 기법 설명을 마친 뒤, 현재 이펙트 기법도 나날이 발전하고 있다고 설명했다. 그리고 언젠가는 리얼타임 플루이드 시뮬레이션 (Realtime Fluid Simulation)으로 넘어가겠지만, 오늘 강연에서 설명한 것과 같은 기법들로 간극을 메우고자 한 것이라는 말도 전했다.

또한, 기술적인 측면도 중요하지만, 본질은 이펙트의 표현에 있음을 상기시켰다. 그리고 기술과 아트 두 가지 요소가 조화된 아트스트가 되자는 당부의 말을 전하면서 강연을 마쳤다.