오비탈스의 셀 셰이더
저희가 제작한 셰이딩 모델은 앞서 설명한 제약을 반영하여 각각 분리된 형태로 구성되었습니다. 전통적인 애니메이션 합성 방식의 '정면' 레이어는 저희의 셀 셰이딩 모델로 구현했습니다. 셀 셰이딩은 게임에서 자주 사용되는 기법으로, 명암을 제한된 수의 값, 일반적으로 세 단계로 나누어 표현합니다. 저희의 경우 세 단계의 명암을 에셋별로 지정한 색상에 따라 설정하고, 추가 렌더 버퍼를 활용해 셰이딩을 아트 측면에서 완전히 제어할 수 있도록 했습니다.
리드 애니메이터 탈리에산 아놀드(Taliesan Arnold)는 단계적인 프레임 방식으로 구현된 캐릭터 움직임의 시각적 표현과 느낌을 다듬는 데 많은 시간과 노력을 기울였습니다. VFX와 움직이는 셀 요소와 같은 애니메이션이 구현된 스켈레탈 메시가 아닌 요소에도 셰이더를 통해 이와 유사한 프레임 단계화 방식을 적용했습니다. 게임 카메라의 렌더링은 최소 초당 30프레임으로 유지하면서, 해당 요소의 움직임은 초당 12프레임으로 제한했으며 효과에 따라 초당 6프레임까지 낮추기도 했습니다.
내부 선 렌더링은 표면 인덱스 필드로 정의하고, 이를 커스텀 버퍼 중 하나로 읽어 들였습니다. 그런 다음 선을 생성할 때 일반적으로 사용하는 UV 오프셋 컨볼루션 방식에서 뎁스 버퍼와 함께 샘플링하여 내부 선과 외곽선을 모두 마스크 형태로 추출했습니다. 선 마스크를 추가로 블러 처리한 뒤 알파값을 침식시키는 정도를 달리하여 선 굵기에 변화를 주거나 노이즈를 감산해 일부 선이 끊겨 보이도록 만들었습니다.
애니메이션 아티스트가 셀 시트를 직접 채색할 때 음영 경계의 곡선과 선의 정밀도가 프레임마다 미세하게 달라지는 현상을 재현하기 위해, 셀 셰이딩과 선 결과물에 노이즈 기반의 왜곡을 적용했습니다.
게임 내에서 선의 흔들림과 끊김은 셀 액터나 카메라가 움직일 때만 업데이트됩니다. 저희는 이를 전통적인 애니메이션의 프레임 제작 과정에서 셀을 '다시 그리는' 것과 같은 개념으로 보았습니다.
레퍼런스 작품의 아날로그 손그림 특성을 구현하는 데 중점을 두었기 때문에, 이러한 미세한 불완전함이 게임의 시각적 표현과 전반적인 느낌을 완성하는 데 중요하다고 판단했습니다.
또한 당시의 셀에서 흔히 볼 수 있었던 채색 기법을 재현하기 위해 셀 셰이딩의 그림자 단계에 하이라이트를 추가했습니다.
전통적인 셀 레이어를 앞에서 조명해 합성할 때 흔히 나타나는 미세한 그림자 아티팩트를 추가하여 셀 렌더링을 마무리했습니다.
셀 셰이딩이 적용된 액터로 인해 배경 환경에 연산된 그림자가 생기지 않도록 했습니다. 이는 ‘정면’의 셀과 ‘후면’의 배경 환경을 구분하여 렌더링하는 방식에 어긋나기 때문입니다.
이를 제어하기 위해 셀 셰이딩이 적용된 액터에 라이팅할 때는 셀 전용 라이팅 채널을 사용했습니다. 이를 활용하여 베이킹된 볼류메트릭 라이트맵을 활용하는 셀 전용 라이트 액터를 통해 라이팅이 적용되도록 했습니다.
캐릭터와 바닥에 인접한 셀 메시가 지면에 자연스럽게 자리 잡은 것처럼 보이도록, 추상적인 형태의 셀 셰이딩 그림자 데칼을 사용했습니다.
오비탈스의 환경 셰이더
애니메이션에서 고정된 원근법으로 그린 배경 그림에 해당하는 '배경 레이어'는 저희가 '페인트 셰이더'라고 정의한 셰이더로 구현했습니다. 플레이어가 조작하는 카메라 특성상, 원근법을 하나의 시점으로 고정하는 제약은 구현할 수 없었습니다. 대신 페인트 셰이더가 적용된 컴포넌트와 해당 컴포넌트의 라이팅은 절대 움직이지 않는다는 규칙을 정했습니다. 여기서 저희가 의도한 시각적 환상은 셀 오브젝트에 적용한 단계적인 움직임과 같은 맥락이었습니다. 즉, 플레이어가 마치 포스터 컬러로 그린 그림 속에 직접 들어가, 게임 카메라를 통해 애니메이션 프레임의 내부를 탐험하는 듯한 느낌을 주고자 했습니다.
앞서 셀 셰이딩 오브젝트의 라이팅과 관련하여 설명했듯이, 움직이는 그림자를 생성할 필요가 없었으므로 모든 라이트를 굽는 방식을 선택했습니다. 실시간 라이팅 솔루션보다 이 방식이 저희 프로젝트의 렌더링 요구사항과 성능 효율에 더 적합했기 때문입니다.
표면에 빛이 적용되는 방식을 완전히 제어할 수 있도록 페인트 셰이더를 구성했습니다. 여기에 가장 크게 기여한 모디파이어는 브러시 스트로크 텍스처를 활용하여 빛의 분산을 조절하는 기능이었습니다.
DCC 소스 에셋 설정 툴에서 버텍스 컬러를 사용하여 에셋의 가장자리와 모서리에 나타나는 하이라이트를 정의했습니다. 에디터에서는 가상의 스페큘러 광원 로케이터를 사용해 이러한 하이라이트를 제어했습니다. 이 로케이터는 자체 에디터 툴에서 액터별로 조정할 수 있었습니다.
위에서 설명한 요소들은 다른 여러 조정 기능과 함께 아트 팀의 에셋 제작 파이프라인 툴세트에 포함되었습니다. 이를 활용하여 3D 환경에서도 손으로 그린 듯한 '2D' 느낌을 구현했습니다. 저희의 모토는 '디지털의 완벽함'에 맞서는 것으로 요소를 의도적으로 중심에서 벗어나게 배치하고, 반복과 대칭을 피하도록 디테일 사이의 간격을 불규칙하게 설정했으며, 완벽하게 직선이거나 둥근 실루엣도 의도적으로 왜곡했습니다.
오비탈스의 필름 효과
언리얼 엔진은 커스터마이징이 유연하여 자체 포스트 프로세스 필터를 사용할 수 있었습니다. 이를 통해 저희 파이프라인에서 셀과 배경 환경을 분리하여 렌더링하는 방식을 완전히 제어할 수 있었습니다.
블룸에도 이와 비슷한 방식을 적용했습니다. 블룸에 마스크를 적용하여 발광하는 표면 자체에는 셀 셰이딩이나 페인트 셰이딩이 그대로 유지되고, 블룸 효과는 해당 표면의 주변에만 나타나도록 했습니다.
렌더링의 마지막 레이어에는 필름 포스트 프로세스 필터를 적용했습니다. 필름 그레인, 할레이션, 색수차, 블러 등의 효과를 사용하여 게임의 각 프레임을 실제 필름으로 촬영한 듯한 느낌을 재현했습니다.