[개발자 노트] 워 썬더의 모션 블러 효과

오늘은 워 썬더에 적용될 영화적 표현, 모션 블러에 대해 알아보겠습니다. 또한, 모션 블러가 게임 내에서 어떻게 구현될 예정인지, 또한 구현하는 데 있었던 어려움에 대해서도 살펴보겠습니다.

모션 블러가 뭐죠?

게임의 경우, 즉각적으로 이미지가 생성되며 각 프레임마다 하나의 시점이 표시됩니다.

현실 속 카메라나 육안의 경우, 게임과는 다른 방식을 가지고 있습니다. 현실 속에서는 상을 맺는 데 시간이 걸리기 때문에 상을 맺는 동안 물체가 움직일 경우 상을 맺은 물체는 뚜렷이 보이지만 그 배경은 흐릿하게 나타나는 현상을 모션 블러라고 합니다

기초적인 내용에 관한 설명

모션 블러 효과를 시뮬레이션하기 위해선 마지막 프레임 이후 모든 픽셀이 어떻게 움직였는지를 알아내야 합니다. 이를 위해서는 모든 애니메이션과 이동 효과의 현재 위치와 이전 위치를 알고 있어야 하는데, 이 부분이 모션 블러를 구현하는 데 있어 가장 어려운 부분 중 하나로 작용했습니다. 하지만 다행히도 이미 안티 앨리어싱 기법을 통해 이 기능이 구현되어 있었던 만큼, (모션 블러를 지원하지 않아) 흐릿한 얼룩처럼 표시되는 몇 가지 애니메이션을 발견하는 식으로 빠르게 수정했습니다!

우선 저희는 이 효과를 구현하기 위해 검증이 완료된 기술을 사용했으며, 자세한 내용은 여기에서 확인하실 수 있습니다. 저희는 기본적으로 마지막 프레임에 있는 픽셀의 위치와 픽셀의 현재 위치를 확인한 다음 그 사이의 선을 따라 픽셀을 흐리게 처리하는 방식을 사용했습니다.

저희는 계산을 더 효율적으로 진행하고 조금 더 부드러운 처리를 위해 현재 픽셀 위치를 기준으로 적용되는 선을 앞으로 확장하는 방향으로 처리하였습니다. 또한, 처리 속도를 더욱 높일 수 있도록 픽셀의 일반적인 방향에 맞춰 더 큰 픽셀 블록에 몇 가지 결정을 함께 진행하도록 했습니다.

하지만 배경을 개별적으로 흐리게 처리하기 위해선 배경 픽셀의 ‘블러 처리된 선’이 정지 상태의 선명한 물체를 지나지 않도록 각 픽셀과 카메라 간의 거리도 고려해야 합니다. 또한, 앞의 물체에 적용된 픽셀을 흐리게 처리하면서 배경을 선명하게 유지해야 하는 경우도 있을 것입니다. 마지막으로 하나의 픽셀에서 두 개의 물체가 함께 블러 처리될 경우에는 둘 다 선명하게 처리해야 하는 경우도 있기 때문에 개별적인 속도 또한 중요합니다.

워 썬더에서의 기술적 한계점

모션 블러를 적용하는 데에는 저희가 원하는 모습을 구현하기 위해 약간의 수정이 가해질 필요가 있었습니다. 픽셀의 블러 여부를 결정하려면 우선 픽셀의 속도를 알아야 합니다. 하지만 같은 지점에 보이는 물체가 두 가지 이상이어서 정답이 없는 경우에는 어떨까요? 이 경우, 투명도가 알고리즘 내에 고려되지 않기 때문에 특별한 처리를 필요로 하게 됩니다.

워 썬더에서는 유리로 된 콕핏과 색색의 전구를 부착한 항공기가 음속을 돌파하고 나무 위를 날아다니는 장면이 등장하기 때문에 유리 표면을 어떻게든 처리해야 했습니다.

여기에서는 같은 픽셀에 완전히 다른 속도를 적용하였습니다. 풀어서 이야기하자면 유리를 통해 무언가가 보이게 될 경우 그것을 하나의 카테고리로 취급하고, 직접 보이는 물체는 다른 카테고리로 취급하는 방식을 사용했습니다.

이 방식을 통해 배경은 블러 처리되지만 유리 자체는 선명한 실루엣을 가지는 이미지를 얻을 수 있게 됩니다.

주의: 이 개발자 노트가 작성될 시점을 기준으로, 투명성에 대한 특별 처리는 모션 블러가 최대로 설정된 경우에만 적용됩니다.

제한 사항

각 픽셀에 대해 알고 있는 속도는 하나뿐이므로 투명한 물체가 빠르게 움직이고 있을 경우 블러 처리되지 않고 비쳐보이는 배경에 블러 효과가 적용됩니다. 이 말인 즉 이러한 표면의 반사는 배경에 따라 블러 처리될 수 있다는 의미이기도 합니다.

완벽한 효과는 완벽한 정보를 필요로 합니다. 과거에 존재한 픽셀의 위치와 현재의 픽셀 위치를 알고 있더라도 두 프레임 사이에서 픽셀이 어떤 경로로 이동했는지는 정확히 알 수 없습니다. 직선으로 움직이는 경우, 직선으로 블러 처리를 진행하면 거의 만족스러운 결과를 얻을 수 있습니다. 한 가지 중요한 예외는 차량의 바퀴에 있습니다. 여기에서는 바퀴의 한 지점이 완전히 반대편으로 이동할 수 있기 때문에 직선으로 이동할 것이라고 속단하는 것은 무리가 있을 것입니다.

따라서 차륜의 경우 다른 원리를 가지면서 올바른 모션 블러를 적용할 수 있는 또다른 방법이 필요할 것입니다.

이것도 현실적인 건가요?

모션 블러는 빠르게 움직이는 물체는 물론 카메라 자체가 움직이는 경우에도 볼 수 있습니다. 영화에서는 매우 일반적인 효과이지만, 우리의 시각에서는 일반적으로 눈이 물체에 고정되어 있기 때문에 더 안정인 모습을 볼 수 있습니다. 게임의 모션 블러는 카메라로 만든 영화처럼 보이긴 하지만 실제 눈으로 세상을 보는 것과는 차이가 있을 것입니다.

저희는 육안으로 보는 효과를 최대한 구현해 내기 위해, 카메라의 움직임에 의한 모션 블러를 끄는 기능을 함께 출시할 예정입니다. 이렇게 하면 항공기가 지나가거나 폭발에 의한 파편과 같이 빠르게 움직이는 물체는 여전히 블러 처리되지만, 주변을 바라볼 때는 선명한 모습을 볼 수 있을 것입니다.




모든 모션 블러를 활성화한 후 포탑을 선회할 때







시점 블러를 끈 상태에서 포탑을 움직이고 있을 때



근데 이거 있으면 뭐함?

저희는 이러한 질문을 받고 내부적으로 관련한 대화를 나눴습니다. 한편에서는 몰입감을 향상시킨다는 평이 있었고, 한편에서는 움직이는 목표물을 조준하기 어려워지는데다, 경쟁 컨텐츠에서 중요한 요소를 없애버린다는 평이 있었습니다. 두 가지 평가는 게임과 관련된 취향에 관한 문제이기 때문에 모두 맞는 이야기라고 할 수 있습니다. 만약 여러분이 승리와 목표 달성에 집중하는 스타일이라면 모션 블러를 끄는 것이 좋습니다. 하지만 하이라이트 영상을 만들거나 비행할 때 느끼는 속도감을 끌어올리고 싶다면 이 기능을 사용하여 마치 영화와 비슷한 품질을 얻을 수 있을 것입니다.