도전 과제: 피로 물든 바닥
렛 뎀 컴: 온슬로트 VFX의 도전 과제 중 하나는 화면에 등장하는 적의 수가 얼마나 많을 지와 동시에 처치될 수 있는 적의 수였습니다. 프로토타입을 개발하던 당시에는, 적이 버스트 게임플레이 큐(Burst Gameplay Cue)를 실행시켜 바닥에 남는 혈흔 데칼과 플레이어 피드백을 위한 피가 튀는 폭발 효과를 생성하곤 했습니다. 저희는 업그레이드된 무기를 사용할 경우 한 번에 많은 적을 처치할 수 있다는 것을 금세 알게 되었고, 이를 최적화해야 했습니다. 액션이 최대한 혼란스럽게 진행되면서도 연출 효과 때문에 병목이 발생하지 않는 걸 목표로 하였습니다.
혈흔 데칼은 원래 살육의 흔적을 남기고 플레이어가 어디를 지나왔는지 그리고 무엇을 남겼는지를 시각적으로 따라갈 수 있도록 생성되었습니다. 저희는 데칼이 효과를 충분히 발휘하도록 오래 남기고 싶었는데, 이런 경우 데칼이 많이 생성되어서 금세 쌓여 버린다는 것이 문제가 되었습니다. 또한 처리해야 할 데칼이 서로 겹치는 문제도 있었습니다. 가까이 있는 많은 적을 한꺼번에 처치하면 데칼이 겹쳐지면서 종종 성능 문제가 발생했습니다.
바닥에 많은 혈흔과 산성 흔적을 생성하기 위해 나이아가라를 활용하여 월드 스페이스 영역 배열을 렌더 타깃에 렌더링하는 시스템을 만들었습니다. 이 배열은 약 256개의 항목으로 고정되어 있으며 루프 방식으로 작동합니다. 즉, 256개의 항목이 모두 사용되면 첫 번째 항목이 257번째 항목으로 업데이트되는 식으로 이어집니다. 이렇게 하면 항목을 재활용하기 전에 바닥을 충분히 피로 물들일 수 있으므로, 적절한 수치였습니다.
이제 적이 처치되면 데칼을 생성하는 것이 아니라, 자신의 위치, 반지름, 머티리얼 타입 등의 데이터를 '스플랫 매니저(Splat Manager)'에 전달합니다. 이 매니저는 월드에 지속적으로 유지되는 블루프린트 액터입니다.
이 매니저는 데이터를 글로벌 나이아가라 시스템으로 전달하고, 해당 시스템은 Grid2D 데이터 인터페이스를 활용해 하이 레벨 셰이딩 언어(High-Level Shading Language, HLSL)로 이 영역들을 글로벌 렌더 타깃 마스크에 기록합니다. 이 시스템은 테러블 포스처 게임즈(Terrible Posture Games)의 테크니컬 디렉터인 크리스 주코(Chris Zuko)의 작업에 큰 영향을 받았습니다. 저희는 각 혈흔 풀까지의 거리를 사용해 렌더 타깃을 채우고, 전달된 반지름을 사용해 풀의 반경을 정의합니다. 이러한 모든 거리 값들이 결합되어 하나의 일관된 마스크를 생성합니다.
최종적으로 왜곡된 마스크는 표면 셰이더에서 여러 머티리얼 속성 값을 섞어 적용하는 데 사용되어, 적절한 피투성이의 잔혹한 룩을 구현합니다!