TECHARTNOMAD TECHARTFLOW.IO

TECH.ART.FLOW.IO

[주석번역] 렌더링 갓오브워:라그라로크 GDC2023 파트1

jplee 2023. 10. 24. 23:59

내 커리어 스토리?
- 2020년 8월 산타모니카 스튜디오에 합류.
-- 리드 렌더링 프로그래머로 입사: 당시 렌더링 팀은 6명으로 구성되었습니다. 
-- 프로젝트 진행 과정에서 성장했습니다. 
- 이전에는 유비소프트 몬트리올에서 9년간 근무하면서 파크라이 프랜차이즈 개발에 참여.
--최근 대부분의 오픈 월드 게임 개발 경험.
--선형적이고 내러티브한 게임은 새롭습니다.
 

- 단순한 기술 프레젠테이션이 아닙니다. 
- 갓 오브 워: 라그나로크의 리드 프로그래머로서의 경험에 대한 이야기 
-- 리더십과 제작 방법 
-- 렌더링 기능 및 최적화에 대한 기술 설명

팬데믹 기간에 제가 SMS에 합류했기 때문에 우리 모두 재택근무에 대해 배우고 원격으로 서로를 알아가야 했습니다.

 
 

갓 오브 워: 라그나로크 개발을 제가 처음 시작했을 때부터 이야기할께요.
 
 
 

프로젝트를 시작하는 것은 매우 어려운 작업이며, 극복할 수 없을 것 같기도 합니다. 하지만 저는 근본적인 질문을 던져보려고 했습니다: "게임을 출시하려면 무엇을 해야 할까요?"
이 질문은 상급자에게 물어볼 수 있는 질문이고, 저도 그렇게 했습니다. 하지만 리드로 합류하면서 팀원들과도 친해져야 했습니다.
 

저는 실제로 팀원들과 처음 1:1 상담을 할 때 이 질문과 매우 유사한 질문을 사용했습니다.
팀에 대해 알아가려고 노력하면서요. 여기에는 여러 가지 질문이 섞여 있습니다.
상대를 개인적으로 이해하려고 노력하는 질문, 내적인 측면을 이해하려고 노력하는 질문...하지만 그 사람이 세상과 어떤 관계를 맺고 있는지 알아보고 싶었어요.
세상과 어떻게 관계를 맺고 있는지 알아내려고 합니다. 
마찬가지로, 상대방이 현재 어떤 일을 하고 있는지...현재 어떤 일을 하고 있는지, 그리고 미래에 대한 계획과 미래에 대한 희망도 알아야 합니다.


 

다음으로 제가 한 일은... 매우 지루하게 들릴지 모르지만...
지라 아주 광범위하게요. 렌더링 팀의 모든 작업을 살펴보고, 몇 년 전으로 거슬러 올라가서 렌더링 팀의 모든 작업을 살펴보고 현재 작업과 일치하는 부분을 확인했습니다.
현재 업무, 게임 기능, 그리고 미래를 위해 개선하고자 하는 꿈 등등...미래를 위한 것들.
 
 

다음 단계는 정리하는 것이었습니다. 개발하고자 하는 주요 기능에 대해 어느 정도 파악한 후에는 각 기능에 대한 에픽을 확보하고 각 기능에 대한 작업을 버킷에 넣기 시작했습니다. 
이렇게 하면 렌더링 팀에서 제공해야 하는 기능에 대한 명확한 목록이 어딘가에 있기 때문에 개인적으로 생각을 정리하는 데 정말 도움이 됩니다. 또한 이미 진행 중인 모든 작업을 추적하고 어디에 적합한지(또는 경우에 따라 적합하지 않은지) 파악하는 데 도움이 되었습니다.
 

저는 프로젝트 초기에 최적화(및 메모리 절약)를 분류하기도 했습니다. 부분적으로는 데이터베이스를 정리하기 위한 것이지만, 프로젝트의 다음 단계 또는  프로젝트의 해당 단계에 진입했을 때 활용할 수 있는 작업을 확보하기 위해서였습니다.
 
 

... 게임을 출시하기 위해 무엇을 해야 할까요? 게임을 출시하려면 어떻게 해야 할까요? 이번에는 그 질문에 조금 더 가까워져서 이해하게 되었고 눈앞에 놓인 과제를 해결하기 시작했습니다.
머릿속에 있는 작업을 단순히 제공해야 하는 기능으로 세분화하기보다는 네 가지 주요 요소를 생각했습니다.
 
 

첫 번째 기둥은 내러티브 기능입니다. 내러티브는 가장 가장 중요한 요소입니다. 우리가 하고 싶은 이야기를 전달할 수 없다면 게임을 출시할 수 없습니다.
다음은 비주얼과 아트 워크플로 개선입니다. 렌더링 팀으로서 필요한 퀄리티 기준을 달성하기 위해 렌더링 팀에서 하는 일입니다.
그다음으로는 갓 오브 워 라그나로크의 핵심 요소인 플레이스테이션 5 개선이 있습니다.
전반적인 비주얼을 개선하는 것뿐만 아니라 크로스 플랫폼 타이틀인 만큼 PS5를 위한 특별한 개선 작업을 하고 싶었습니다.
마지막 기둥은 우리 자신을 돕는 것입니다. 렌더링 팀으로서 더 나은 작업을 위해 스스로를 돕고자 하는 것입니다. 여기에는 컴파일 시간 개선, 코드 리팩토링 또는 디버깅 툴 작성 등이 포함될 수 있습니다.
각 기둥을 살펴보면서 각 기둥에 대해 우리가 수행한 몇 가지 작업을 설명하고 적절한 경우 세부적으로 살펴보겠습니다.
 
 

그럼 내러티브 기능부터 시작해 보겠습니다. SMS는 놀랍도록 내러티브 중심의 스튜디오입니다. 우리는 스토리를 전달할 수 있어야 하므로 렌더링 팀으로서 저희의 최우선 과제는 스토리를 전달하는 데 필요한 기능을 확보하는 것이 최우선 과제입니다.
가장 중요한 기능 중 몇 가지를 살펴보려고 하는데요. 기술적인 부분을 자세히 다루지는 않겠습니다.
 
 

첫 번째 특징은 깊은 눈입니다. 핌불윈터를 표현하려면 핌불윈터를 표현할 수 있어야 하므로 많은 양의 눈과 캐릭터가 걸어갈 때 반응하는 기능이 필요했습니다. 이 기능은 갓 오브 War 2018에서 이 기능을 구현한 적이 있지만, 당시 사용된 기술로는 눈이 충분히 깊지 않았습니다. ( 역자 주. 이 전 버전의 눈은 화면공간 시차맵핑을 이용한... )
많은 분이 월요일에 이 시스템에 대한 Paolo의 훌륭한 강연을 보셨기를 바랍니다. 자세한 내용이 필요하신 분들은 해당 영상을 참고하시기 바랍니다.
또한, 보시다시피 오른쪽 하단에 이러한 기능을 개발해준 많은 훌륭한 분들께 이 기능을 개발해 주신 많은 분들께 감사드립니다.
 
 

확실히...핌불윈터를 표현할 때는 눈뿐만 아니라 얼음도 필요합니다. 이것은 정말 환상적인 기술입니다. 오늘은 더 이야기할 시간이 없지만, 가까운 시일 내에...?
 
 
 

또한 이 놀라운 시네마틱으로 대표되는 바나헤임에서는 낮과 밤의 시간대를 변경할 수 있었습니다. 시간 변경은 처음 시도하는 것이었기 때문에 브라이언은 글로벌 일루미네이션 애니메이션을, 존과 에이미는 여러분이 보는 역동적인 하늘을 작업했습니다.
 
 

마지막으로 라그나로크 그 자체입니다. 
여기서 가장 어려웠던 점은 전투를 표현하기 위해 애니메이션 캐릭터를 화면에 많이 배치하는 것이었습니다.
원거리에서는 플립북에 의존했고, 근거리에서는 완전 애니메이션 캐릭터를 사용했지만 중간 지대에서는 애니메이션을 버퍼에 미리 녹화한 다음 관련 메시에서 반복 재생하여 CPU 애니메이션 비용을 절감했습니다.

 
 
 

첫 번째 구간을 완주했다고 생각했을 수도 있습니다. 그건 사실이지만 제 경험을 반영한 것이기도 합니다. 이러한 많은 기능에 대한 것은 제가 입사하기 전에 이미 정해져 있었고, 제 역할은 그저 그 목표를 완수하는 것이었습니다. 
하지만 다음 주제인 시각적 시각적 개선 및 아트 워크플로우에 대한 이 주제는 제가 처음 손을 대기 시작한 곳입니다. 
손을 더럽히고 프로젝트에 변화를 주려고 노력했습니다.
 
 

크리켓에 비유해 보겠습니다... (하지만 야구에 더 익숙하다면, 이 비유도 동일하게 적용 가능합니다.)
크리켓에서는 경기에서 승리하는 것은 타자가 아니라 볼러입니다. 타자가 확실히 승기를 잡을 수는 있지만, 결국에는
20개의 위켓을 얻어야 승리할 수 있으며, 이는 볼러만이 할 수 있는 일입니다.
그거죠.
게임 개발에서 저는 프로그래머를 타자, 콘텐츠 크리에이터를 볼러라고 생각합니다.
물론 렌더링 프로그래머로서 우리는 놀라운 기술을 만들어낼 수는 있지만, 이는 아티스트에게 더 쉽게 플랫폼을 제공하는 것일 뿐입니다.
그래서 저는 시각적 개선과 함께 아트 워크플로를 개선하는 것을 포함하는 이유는 단순히 더 나은 기술이나 시각적 기능뿐만 아니라 아티스트가 더 높은 비주얼 퀄리티를 더 빠르게 달성할 수 있도록 지원하는 것입니다.
 
 
 

저희가 해결한 두 가지 주요 아트 워크플로 문제에 대해 말씀드리고자 합니다.
첫 번째, 조명은 제가 가장 먼저 문제점으로 파악한 것 중 하나였습니다. 조명 아티스트의 시간을 절약하는 것이 목표였던 프로젝트에서 가장 먼저 파악한 문제 중 하나였습니다. 그리고 두 번째 문제는 리플렉션과 리프랙션을 어떻게 설정할 것인가였습니다. 환경 아티스트의 시간을 절약하는 것이 목표 그러니까 전반적으로 아티스트의 시간을 절약하는 것이었습니다.
 
 
 

조명부터 살펴보겠습니다.
 
 

간단한 야외 장면을 위해 조명을 어떻게 설정했는지 보여드리겠습니다. 어떻게 설정했는지........;
 
 
 

하늘 모델과 동기화되지 않기를 바랍니다!
 
 

이 기능은 마야 외부의 머티리얼 에디터인 MESA에 있습니다.
 
 

그렇다면 하늘의 강도는 어느 정도여야 할까요?
 
 

갓 오브 워 2018은 "상대" 조명 단위를 사용했습니다:
- 씬의 기본 조명이 약 0 EV라고 가정합니다.
- 다른 모든 조명은 이를 기준으로 배치합니다.
 
 

CG에서 영감을 얻었습니다:
- 미리 조명된 장면 가져오기.
- 모든 조명은 이미 있는 조명에 상대적입니다.
 

장점:
- FP16 제한에 문제가 없습니다.
- 실내/실외/주간/야간 콘트라스트 문제가 적습니다.
 
 

단점:
- 게임 업계 표준이 아닙니다.
- 신입 사원은 워크플로를 이해하지 못했습니다.
 
팀에 새로 합류한 사람들이 이해하기 어려웠습니다. 사실, 아무도 이해하지 못했기 때문에 라이터 전반에 걸쳐 표준화하기가 매우 어려웠습니다. 기술 아트 팀에 표준화하기가 매우 어려웠습니다.
 
 

단점:
- 게임에서는 시작할 기본 조명이 없습니다.
- 따라서 게임 전체에 일관성이 없습니다.
 
이는 또한 잘못된 워크플로를 조장했습니다. 
조명이 상대적이라면 '무언가'에 상대적이어야 합니다. 
가장 쉬운 방법은 과거에 전통적으로 사용하던 방식인 "주변" 조명이라고 말하는 것입니다. 먼저 앰비언트 조명을 추가한 다음 그 위에 직접 조명을 추가하는 것이죠. 
하지만 전역 조명이 있는 월드에서는 위험한 피드백 루프가 발생합니다. 조명이 전역 조명을 유발하기 때문에 '앰비언트'가 아닌 조명을 먼저 배치해야 합니다.
 
 

GI 시스템에 대한 자세한 내용은 [Hobson2019]를 참조하세요.
 

다음 날, 환경 아티스트가 오브젝트를 이동합니다...;;;;

....

문제를 요약해 보겠습니다:
1. 간단한 실외 조명 설정에도 많은 단계가 필요했습니다.
2. "올바른" 설정이 어려웠습니다.
3. 글로벌 일루미네이션 베이킹은 수동으로 이루어졌고 데이터가 자주 부족했습니다.
4. 사용된 조명 유닛을 이해하는 사람이 아무도 없었습니다.
 
저는 Far Cry 5와 같은 오픈 월드 게임에서 일했었기 때문에 이 작업은 저에게 매우 새롭웠습니다.(말 돌려서 까는 중... 이 전 버전... ) 저는 물리적인 태양과 하늘 시스템, 그리고 밤에 실행되는 빛의 베이킹 프로세스에 익숙해져 있었거든요.
라이팅이 항상 최신 상태로 유지되고 시간대를 변경하면 순식간에 다른 순식간에 다른 룩을 만들 수 있었죠.
 
 

네 가지 해결책을 생각해냈습니다:
1. 실제 게임에서 사용되는 하늘에서 스카이 라이팅을 생성합니다.
2. 실외 조명 설정을 생성하는 간단한 방법을 만들었습니다.
3. 모든 유닛을 물리적으로 변경했습니다.
4. GI 베이킹 파이프라인 자동화.
 

다음은 "실외 조명 환경 노드"였습니다, 간단한 태양과 하늘의 밝기를 같은 장소에 설정하는 간단한 방법입니다.
 
 

이 하늘 EV 강도는 하늘 머티리얼의 밝기도 수정합니다.
 
 

절대 조명 단위로 변환하기.
- 2021년 2월의 어느 날 밤...
-- 게임 전체에 걸쳐 조명을 물리적 값으로 변환하는 스크립트를 실행했습니다.
--- 노출 데이터도 동시에 변환해야 했습니다.
-- 게임이 일반적으로 낮 시간대라고 가정했습니다.
-- 기존 데이터를 보다 실제적인 낮 시간대 조명으로 변환하기 위해 sunny-16 규칙을 사용했습니다.
 
저와 함께 밤을 새워가며 밤을 새워준 조쉬 홉슨, 네이선 케네디, 에이미 첸에게 감사드립니다! 버번(제 경우에는 호밀 :P)이  조쉬와 제가 밤을 지새울 수 있게 도와주었습니다!
 

절대 조명 단위로 변환하기.
- 노출 편향과 톤 매핑도 수정했습니다.
- 톤 매핑이 씬의 중간 지점을 잘못 지정했습니다.
-- 참조된 0.18 씬이 참조된 0.10을 표시하도록 매핑해야 합니다 [Hines2010].
-- 톤 매핑이 중간 지점을 0.18로 유지했습니다.
--- 이는 80% 더 높은 수치로, EV 공간에서 약 0.85 스톱입니다.
-- 아티스트는 기본 노출 값을 바이어스하여 보정했습니다.

- 아웃 변환을 통해 노출 바이어스를 0.5로 조정했습니다.
-- 코드의 톤 매핑 기능도 동시에 변경했습니다.
 
 

차이점을 보여드리기 위해 테스트 레벨에서 몇 가지 캡처를 해보았습니다.
몇 가지 캡처를 가져왔습니다. 노출 편향이 없는 원본 톤 매핑입니다. 너무 나쁘지는 않지만
너무 나쁘지는 않지만 약간 너무 밝습니다.

 
 

노출 바이어스가 0.5인 경우입니다, 우리 조명 아티스트들이 일반적으로 원하는 조명을 얻기 위해 사용했습니다. 훨씬 더 좋아 보입니다.
생각합니다.
 

이제 새로운 톤 매핑으로 전환하면 이제 중간 점을 올바르게 처리하면 노출 편향이 더 이상 필요하지 않습니다. 이전 장면보다 약간 어둡지만 실제로는 아티스트가 의도했던 것과 매우 비슷합니다.
따라서 조명 데이터를 올바르게 처리하는 것이 중요합니다! 이것은 조명 팀이 조명 팀에 도움이 된 또 다른 작은 것일 뿐입니다. 가능한 한 좋은 결과를 얻을 수 있었습니다.
 
 

매일 밤 생성하는 GI 데이터 목록과 빌드 시간을 관리하기 위한 요일별 목록이 있었습니다. GI 데이터를 생성하는 데 시간이 오래 걸립니다.
 
 

결론.
1. 실외 조명을 설치하는 것이 더 빨랐습니다.
2. 조명 팀에 가이드라인을 제공할 수 있었습니다.
3. 조명 아티스트가 GI를 굽는 시간을 절약했습니다.
 
실외 및 실내 조명 문제에 대한 자세한 내용은 [McAuley2018]을 참조하세요.
 
 
 

이제 조명 팀의 워크플로 문제를 몇 가지 해결했으니 이제 환경 아트로 이동하여 리플렉션과 굴절에 대해 이야기해 보겠습니다.
 

반사와 굴절.
- 지오메트리를 별도의 렌더 타깃으로 렌더링하여 반사 및 굴절을 수행합니다.
- 아티스트는 이러한 패스를 위해 커스텀 지오메트리를 빌드합니다.
 

마야에서 지오메트리를 반사 및/또는 굴절 패스에 태그했습니다.
 

- 반사 및 굴절의 시각적 품질.
-- 일반 조명 파이프라인과 일치하지 않습니다.
-- 또한 포워드 조명 파이프라인을 유지해야 했습니다.

- 기본적으로 반사나 굴절이 없습니다.
-- 성능상의 이유로 메시가 기본적으로 제거됨.
-- 리플렉션과 리프랙션이 누락되어 개발이 원활하지 않음.
 
 

- 아티스트가 유지 관리하기에는 비용이 많이 듭니다.
-- 지오메트리에 수동으로 플래그를 지정해야 했습니다.
-- 성능상의 이유로 프록시 메시를 생성해야 했습니다.

- 게임 내 한 영역에만 60일이 걸릴 수도 있습니다.
 
다음은 프로듀서 중 한 명인 브리엘 포터가 저에게 보내준 몇 가지 이미지입니다, 반사 및 굴절 비용에 대한 메모를 보내주셨습니다.
 

화면 공간 기술로 대체되었습니다.
- 화면 공간 반사
- 프레임버퍼 굴절
-- 굴절 값에 대한 샘플 왜곡된 프레임버퍼

수 많은 아트 시간 절약
즉각적인 시각적 개선
 
스크린 스페이스 기법은 여러 가지 이유로 많은 악평을 받지만 즉각적인 품질 향상과 아트 시간 절약은 경이적이었습니다.
우리의 외부 개발 담당 이사의 멋진 인용문을 보실 수 있습니다, 존 팔라마척(John Palarmarchuk) 외부 개발 이사의 멋진 인용문을 보실 수 있습니다.  이는 신뢰 구축의 좋은 예이기도 합니다. 
아트 팀은 우리가 그들의 우려에 귀를 기울이고 있으며, 그들의 삶을 더 편하게 만들어 주는 기능을 기능을 제공하고 있다는 것을 알고 있습니다.

 
 

물의 반사와 굴절.

화면 공간 반사는 물 위에서 어떻게 작동하나요?
- 반사와 굴절은 주로 물 위에서 사용됩니다.
- 프레임버퍼 굴절 패스는 디퍼드 라이팅과 스크린 스페이스 리플렉션 후에 발생합니다.

물 셰이더에서 직접 SSR을 수행합니다.
- 물 셰이딩의 SSR 부분을 반해상도 버퍼로 렌더링합니다.
- 물 메시의 메인 렌더링 중 샘플

다른 솔루션은 [Grujic2018] 참조
 
 

 

PS4에서 이 패스의 성능을 간단히 살펴보도록 하겠습니다.
GPU 프로파일러를 띄우겠습니다. 지금은 잘 보이지 않을 수 있으니 확대해 보겠습니다.
 

여기 물의 총 비용은 PS4에서 2.26밀리초로, 약간 비싸지만 화면의 많은 부분을 차지합니다.
패스 비용을 두 가지 범주로 나눴는데, 기본 수면에 대한 "아트" 비용과 수면과 SSR 부분의 "라이팅"입니다. 이것은 부분적으로 역사적인 것입니다.
이전 미러 및 불투명 굴절 패스는 "라이팅" 비용에 속해 있었기 때문에 비용에 속해 있었기 때문에 이 기능에 대한 부담을 거의 동일하게 유지할 수 있습니다. 기능에 대한 부담을 거의 동일하게 유지할 수 있습니다.
 

성능
수면은 필연적으로 비쌀 수밖에 없습니다.
- 전방 음영

아티스트에게 요청했습니다:
- 수면의 머티리얼 복잡도 감소
- 물속 물체를 저렴하게

궁극적으로 퍼포먼스 문제를 너무 많이 일으키지 않음
- 환경 아트가 최적화 작업을 훌륭하게 수행했습니다.
- 풀스크린일 때만 정말 비쌉니다.
-- 전체 화면을 사용하면 다른 비싼 것은 렌더링되지 않습니다.
 
당연히 수면은 항상 비용이 많이 들기 마련입니다.
따라서 머티리얼 및 라이팅 평가를 수행해야 합니다.
 

역자 주
파트 2는 퇴근 해서 집에서 작성 해야겠네요. 이 기사를 정리 하는 오늘은 불타는 금요일 이고 지금 막 밤 7시가 넘었네요. 불타는 금요일 이지만 곧 바로 집으로 가서 공부를 더 해야지요! 

 
파트2 는 여기에서!
 

[주석번역] 렌더링 갓오브워:라그라로크 GDC2023 파트2

역자의 말. 기사 작성하다가 퇴근 시간이 되서 파트1과 파트2로 나눠서 올려 봅니다.(기사 작성 시기가 2023년 10월 27일 금요일) 최근 컨설팅 하는 한 곳의 오피스가 이태원 이다 보니 금요일 퇴근

techartnomad.tistory.com