오버워치

오버워치 2의 환경 상태: 엔지니어링팀과 함께 알아보는 개발 비화

오버워치 2의 환경 상태: 엔지니어링팀과 함께 알아보는 개발 비화

안녕하세요, 여러분! 저는 오버워치 팀의 소프트웨어 엔지니어, 마르코 알라미아입니다. 저희는 최근 오버워치 2에 도입할 새로운 기술을 완성했습니다. 그래서 여러분께 게임 엔진을 개선할 때에는 어떤 과정을 거치는지 소개할 좋은 기회라고 생각했죠. 이를 위해 오버워치 팀의 개발자 브루스 윌키와 파비안 크리스틴에게 도움을 요청했습니다.

엔진에 추가된 신기술 '환경 상태'는 저희가 전장을 제작하거나 설계할 때 가장 애용하는 작업 방식으로 빠르게 자리매김하였습니다. 오버워치 2의 엔진과 툴 내에서 개발되고 다듬어진 기능이지만, 기반이 되는 개념은 광원 아티스트 파비안의 머릿속에서 나왔죠. 그의 아이디어는 팀이 전장을 제작하는 과정을 송두리째 뒤바꿔 놓았습니다. 파비안에게 어떻게 그런 발상을 떠올렸는지, 그리고 디자인 과정은 어떻게 진행되는지 물어봤습니다.

그러면 환경 상태에 대해 알아볼까요?


첫 발상

파비안: 오버워치는 아주 밝고 다채로운 세상을 배경으로 하고 있습니다. 그리고 게임의 특징은 상당 부분 전장을 통해 표현되죠. 전장을 제작할 때 첫 삽을 뜨는 것은 레벨 디자이너의 몫입니다. 흥미로우면서 균형 잡힌 게임플레이가 가능하도록, 커다란 회색 상자들을 배치해서 전장의 전반적인 구조를 정합니다. 플레이하기에 재밌는 전장을 만드는 것이 이 과정의 관건입니다. 오랜 테스트를 거친 후, 다음으로 나서는 것은 환경 아티스트입니다. 임시로 배치해 두었던 회색 상자를 공들여 만든 건물과 환경 애셋으로 교체해서, 플레이어들이 방문하게 될 장소에 생동감을 불어넣는 것이 그들의 임무죠. 

그리고 전장을 통해 전달하고자 하는 이야기에 깊이를 더해주는 광원 효과 역시 제작합니다. 저희는 오버워치 2를 제작하면서 흥미롭고도 새로운 분위기를 만들어서, 전장에 대한 인상을 완전히 뒤바꾸고 싶었습니다. 한번 상상해보세요. 눔바니에 가서 따스한 아프리카의 석양으로 물든 미래적인 도시를 눈에 담거나, 비 내리는 파리에 착륙할 수도 있을 겁니다. 그리고 황금빛 조명으로 은은하게 빛나는 파리의 가게들은 어서 들어와서 비가 멎을 때까지 크루아상을 먹으라고 손짓하겠죠.

그것이 바로 환경 상태를 만든 목적입니다. 이 새로운 시스템 덕분에 광원, 음향, 효과의 주요 구성 요소를 전부 독립적인 애셋으로 분리한 후, 그걸 다시 블록처럼 조합할 수 있었습니다. 그 결과물을 저희는 '환경 시나리오'라고 부릅니다. 한 전장의 환경 시나리오는 다른 전장에서도 사용할 수 있고, 전장마다 여러 개의 환경 시나리오를 배치할 수도 있죠.

게임 진행 속도가 빠른 네크로폴리스의 데스매치 전장을 예로 들어보겠습니다. 아마 그곳의 야간 시나리오를 플레이해본 적이 있으실 겁니다. 서로 대조되는 밤의 차가운 파랑 계통 색상과 건물 주위를 밝히는 횃불의 밝은 주황색이 잘 어우러지죠.

하지만 아누비스 신전의 무더운 사막 색상을 사용해 다른 시나리오를 실험해보고 싶다면 어떻게 될까요? 새로 도입된 환경 상태 시스템을 사용하면, 아누비스 사원의 환경 상태를 따다가 네크로폴리스에 적용하기만 하면 됩니다. 

벌써 그럴듯하네요! 하지만 햇빛의 방향을 살짝 조정하여 그림자를 더 흥미롭게 만들면 더 멋진 전장이 탄생하죠. 그러려면 햇빛의 방향만 덮어 쓰는 새로운 환경 상태를 만들고, 그 새로운 '블록'을 아누비스 신전의 환경 상태 위에 끼우면 됩니다. 

완성이네요!

환경 상태는 유연하면서 사용하기도 쉽기 때문에, 몇 시간 내로 전장에 새로운 광원을 시험해볼 수 있습니다. 이렇게 변화를 빠르게 구현하여 확인할 수 있으면, 더욱 실험적이고 창의적이며 다양한 전장을 만들 수 있죠.

하지만 이뿐만이 아닙니다. 지금까지 소개해드린 예시는 주로 외관만을 다루었지만, 환경 상태를 상황에 맞춰 다양하게 조합하면 새롭고 신나는 게임플레이를 제공할 수도 있습니다. 오버워치 위성 링크 연결을 복구하는 임무를 맡아 네크로폴리스로 떠났다고 상상해보세요. 널 섹터의 공격을 막아내고 있을 때, 갑자기 모래 폭풍이 밀려와 여러분을 휩싸는 거죠! 화창한 날 시나리오 위에 구름의 범위와 모래 효과의 밀도를 점차 증가시키는 모래 폭풍 환경 상태를 추가하여 임무의 난이도를 높일 수 있습니다.

 

이 새로운 기술을 사용하면 뇌우, 강설과 같은 각종 기후 변화 등 재미있는 환경 시나리오를 만들어 게임을 플레이할 때마다 색다른 느낌을 제공할 수 있습니다.

이제 다시 마르코에게 돌아가 기술적인 측면에서 환경 상태가 어떻게 작용하는지 알아보도록 하겠습니다.

환경 상태 적용

마르코: 파비안의 야심 찬 계획을 실현하고, 오버워치 2 환경의 요구 사항에 맞추려면 강력한 시스템을 개발해야 했습니다. 다양한 아이디어를 주고받던 저희는 여러 개의 환경 상태가 동시에 존재하게 하기로 했습니다. 단, 순서에 맞춰 깔끔하게 스택으로 겹쳐 놓는 거죠. 스택을 구성하는 개별 환경 상태는 언제든 추가하거나 제거할 수 있고요. 엔진이 이 스택을 보고 그 안의 환경 상태를 모두 섞어 최종적인 환경 외관을 만들어낼 때 이 시스템의 진가가 발휘됩니다. 포토샵을 한 번이라도 사용해보신 분이라면 여러 개의 레이어를 겹쳐 최종 이미지를 만드는 것과 동일하다고 생각하시면 이해가 쉬울 겁니다.

이것이 가능한 이유는 환경 상태가 바람의 세기, 바람의 방향, 태양의 색깔과 같은 환경 구성 요소 자체를 묘사할 수 있기 때문입니다. 그리고 환경 상태가 스택 위에 추가되면, 그 상태에 포함되어 있는 요소만이 결과에 반영되죠. 예를 들어, 지금 보시는 건 리우 전장의 루시우 클럽에서 따온 스택입니다. 카메라 노출과 색 보정 요소를 변경하는 환경 상태가 스택에 추가되어 있죠.

 

가장 아래의 기본적인 환경 상태는 지도의 모든 요소에 관여하고, 가장 위의 환경 상태는 기존의 색 보정을 덮어 써서 디아블로 구역의 위험하고 으스스한 분위기를 연출합니다. 스택의 환경 상태는 게임 도중 추가하거나 제거할 수 있어, 전장을 더 생생하고 역동적으로 구현할 수 있게 해주죠.

요소

저희는 아트 팀과 파비안의 도움으로 환경 상태를 통해 정의할 수 있는 주요 요소를 몇 가지 결정했습니다. 그 중 포스트프로세싱이 요소로 변환된 첫 엔진 기능이었죠. 포스트프로세싱은 오늘날 사용되는 모든 게임 엔진에 포함된 기능으로, 최종 이미지의 대비, 밝기, 채도를 조절하는 등 다양한 필터나 효과를 적용하는 데 사용됩니다. 이미지의 대비와 밝기를 게임 상황에 맞춰 그때그때 조정하면 최종 이미지를 매우 선명하고 동적으로 만들 수 있습니다. 이제 환경 상태 덕분에 오버워치 2에서도 이러한 작업이 가능해졌죠.

새 시스템의 또 다른 유용한 도구는 바로 안개 요소입니다. 안개 요소의 수치를 변경하여 안개의 외관과 인상을 조정할 수 있고, 아트 팀은 이를 이용해 게임 모드, 플레이어의 위치, 심지어는 시간에 따라 환경이 시각적으로 변화하도록 만들 수 있습니다. 예를 들어 할로윈 기간에 전장을 더 으스스하게 만들거나, 전장의 특정 지역에서만 안개가 짙어지도록 만들거나, 새로운 영웅 임무에서 서서히 모래 폭풍이 일어나게 만들 수 있죠.

구름이 전장에 드리우는 그림자 또는 바람의 세기와 방향 등 눈에 보이지 않는 속성 등 다양한 요소가 존재합니다. 저희가 변경할 수 있는 요소 중 가장 중요한 두 가지는 바로 태양과 하늘 요소입니다. 이름에서 드러나듯 이 요소들은 태양의 위치와 색깔, 구름의 종류, 그리고 낮과 밤 등 환경의 주요 특징을 변경할 수 있게 해줍니다. 그리고 전장의 외관과 분위기를 크게 바꿀 수 있게 해주기 때문에 환경 상태 시스템의 아주 중요한 부분이기도 하죠.

이 두 요소들은 엔진에서 가장 발전된 분야인 광원 시스템에 영향을 미칩니다. 광원은 환경의 외관, 느낌, 분위기를 조성하는 것을 돕기 때문에 오버워치 2에서 아주 큰 비중을 차지합니다.  하지만 광원 시스템을 변경하면 메모리와 성능에 문제가 생길 수 있기 때문에, 허용 범위를 아주 신중하게 정해야 하죠. 그러나 다행스럽게도 저희 팀에는 브루스 윌키라는 걸출한 엔지니어가 있습니다. 광원 시스템 분야에서 잔뼈가 굵은 그는 오버워치 2와 같은 경쟁 슈팅 게임에 요구되는 높은 성능을 유지하면서 시각적으로 아름다운 게임을 제작하게 해주죠.

광원

브루스: 오버워치의 생동감 있고 다채로운 외관은 많은 노력을 통해 탄생합니다. 저는 저희가 만든 아름다운 전장에서 경기를 플레이할 때마다 각 광원 환경이 얼마나 세심하게 제작되었는지 새삼 깨닫고는 합니다. 햇빛이 방 안으로 진입하며 산란 현상을 일으키고, 투광 조명이 폐허를 밝히고, 온갖 색이 어우러진 야간 축제가 생생하게 펼쳐지죠. 이는 광원이 저희 게임의 모습과 느낌에 얼마나 중요한 영향을 미치는지 보여주는 하나의 예시일 뿐입니다. 오버워치 엔진을 제작할 때, 저희는 2D 원화를 3D 세계에 구현하는 데 필요한 광원 기능을 제공하기 위해 아트 팀과 긴밀히 협력했습니다. 그러한 효과에는 주로 글로벌 일루미네이션이라고 불리는 광원 반사 효과, 금속 표면에 주위의 모습이 비치는 효과, 정적 환경에서 물체가 움직일 때 빛이 위화감 없이 변화하도록 하는 기능 등이 있죠.  이러한 기능에는 많은 연산이 필요하기 때문에, 저희가 목표로 삼았던 프레임 속도에서는 불가능할 만큼 CPU에 큰 부담이 되었습니다. 오버워치가 높은 프레임 속도에서 작동하면서도 이러한 고도의 광원 기능을 제공할 수 있도록, 저희는 최대한 많은 광원 정보를 사전에 계산하고, 결과를 패키지로 묶고, 그 데이터를 클라이언트에서 사용합니다. 

해당 광원 기능들을 제공하기 위해 오버워치에서 어떤 데이터를 사용하는지 더 자세히 설명해드리겠습니다. 벽, 바닥, 천장과 같이 움직이지 않는 물체의 경우, 여러 개의 데이터 조각들을 만듭니다. 첫 데이터 조각은 얼마나 많은 빛이 어떤 방향에서 표면과 충돌하는지 엔진에게 알려주죠. 이 데이터는 일반적으로 '라이트맵'이라고 불리며, 라이트맵에는 엔진마다 다른 종류의 데이터가 저장됩니다.  

 

지금 보시는 이미지는 전장의 표면에 라이트맵이 어떻게 생성되는지 보여줍니다.  왼쪽에 보이는 것은 모든 광원을 종합한 결과물입니다.  중앙에 있는 것은 도표만 표면에 렌더링된 모습이죠.  이 시점은 저희 아티스트들이 목표로 하는 시각 효과가 표면에 나타나는 데 충분한 광원 데이터가 저장되는지 확인할 때 사용됩니다.  오른쪽은 게임이 라이트맵들을 패키지로 묶어 차지하는 메모리의 크기를 최소화하는 것의 예시입니다.

오버워치를 처음 발매했을 때, 저희는 표면과 충돌하는 모든 광원의 색과 방향을 생성했습니다.  방향 데이터를 사용하여 울퉁불퉁한 표면의 색깔을 다양하게 만들었죠. 빛이 오는 방향과 표면이 바라보는 방향이 더 일치할수록 더 다양한 색깔이 적용되었습니다. 오버워치 2에서는 세 개의 광원 방향을 생성하여 빨강, 초록, 파랑의 각 색상 채널을 개별적으로 조정할 수 있게 되었죠. 방향을 추가한 덕분에 환경광을 더 생생하게 만들 수 있었고, 그 결과 이미지의 품질도 향상되었습니다.

움직이지 않는 물체의 경우, 해당 물체에 주변 환경이 얼마나 보이는지 알려주는 데이터를 생성합니다. 이 데이터를 일반적으로 앰비언트 오클루전이라고 부릅니다. 저희는 오버워치를 발매한 후, 파리와 하바나 등 여러 전장에서 이 데이터를 생성하기 시작했습니다. 오버워치 2에서는 모든 전장에서 이 데이터를 생성하여, 시각 효과의 품질을 향상하였습니다. 

 

 

캐릭터와 같이 움직이는 물체의 경우 그 물체의 세계 내 위치를 표본으로 여러 개 생성한 후, 움직이지 않는 물체를 위해 생성하는 데이터와 같은 유형의 광원 데이터를 각각의 위치에 인코딩합니다.  그리고 움직이지 않는 물체가 그런 위치 중 하나에 가까워지면, 해당 위치에 인코딩된 데이터를 사용해 광원 효과를 나타내죠. 오버워치 2에서는 전장, 그중에서도 공중에 있는 위치 표본의 수를 크게 늘렸으니, 움직이는 물체가 더욱더 실감 나 보일 것입니다.  

 

 저희 블리즈컨라인 패널을 보신 분이라면, 여러 가지의 광원 환경이 존재하는 전장을 확인하셨을 겁니다. 저희는 다운로드 및 설치 용량이 너무 커지지 않도록 최대한 많은 데이터를 각각의 환경에서 공유하고자 합니다. 환경 상태 기술은 엔진이 전장 내의 여러 가지 광원 환경을 그룹으로 묶고, 앞서 언급한 사전 연산된 데이터의 많은 부분을 그러한 그룹 간에 공유할 수 있게 해줍니다. 그 결과 데이터가 차지하는 용량이 크게 줄어, 다른 환경마다 다운로드하고 설치해야 하는 데이터의 용량도 감소합니다. 환경 상태 기능 덕분에 더 적은 데이터로도 더 좋은 품질의 광원 효과를 더 다양하게 구현할 수 있게 되는 거죠.


환경 상태 기능을 통해 오버워치 2를 보다 역동적으로 구현하고, 아티스트의 작업 과정을 개선하여 여러분께 더 다채로운 세계를 선보일 수 있을 것입니다. 오버워치 2에서 전 세계를 무대로 모험을 펼칠 준비를 하세요! 시시각각 변화하는 환경과 멋진 시각 효과를 통해 게임 속으로 흠뻑 빠져들게 될 것입니다!

다음 글

주요 소식