역자의 말.
최근 명조 게임이 오픈 한 이후 날마다 명조 게임 광고를 보게 되는군요! 렌더링 쪽에 깊게 관여한 Weedowo 군이 언리얼 페스트 2024 쇼케이스에서 발표 한 내용을 본인의 블로그에 간략히 게시 해 논것을 보게 되었습니다. NDC 가 거의 사라지다 싶이 하게 된 이후 한국에서는 기술 공유에 대한 활동이 확실히 소극적이 된 듯 한데요. 아마 게임업계의 냉냉한 분위기의 한 여파라고 생각이 드는군요. 빌리빌리에 동영상 발표가 올라와 있지만 중국말이기도 하고... 저도 겨우 알아듣는 수준이라... 간략히 이곳에 함께 공유 해 봅니다.
저자
WeebOwO
希望有一天成为一个自己佩服的人
xingyudev.site
머리말
올해 UOD 공유 녹취록이 속속 공개되고 있으므로 학습과 보관의 필요성을 감안하여 간략한 요약본을 작성하는 것이 가장 좋습니다.
![](https://blog.kakaocdn.net/dn/boU5tY/btsHLvE1qtz/vruKNDDnWEGjdTM9FnyrTk/img.webp)
https://www.bilibili.com/video/BV1BK411v7FY/%3Fspm_id_from%3D333.788%26vd_source%3Dea6df38502a795b7533aa33b78bf1159
우선 올해 밍차오의 공유인데, 연사는 왕홍보 씨이고, 언리얼 서클에서 퓨어츠 최적화에 대한 그의 공유는 전에 본 적이 있는데 매우 훌륭합니다.
디퍼드 셰이딩을 사용하는 이유
- 퍼포먼스 고려 사항(셰이더 배리언트, 라이팅 계산 등의 관점에서 분석한 후 결론을 내릴 수 있어야 함)
- 후처리 효과(예: GTAO, SSR)에 편리합니다.
- 통합 멀티 플랫폼, 결국 데스크톱은 지연된 파이프라인이어야 합니다.
AA 관행
우선 왕홍보 씨는 작년 UOD 통계에 따르면 NPR 게임은 화면 공간의 엣지 픽셀이 4~5%인 반면, 전통적인 PBR 게임은 1~2%이기 때문에 AA의 이러한 측면이 카토우의 품질에 중요한 기술적 포인트가 될 것이라고 말했습니다.
아래는 이들이 공유한 자체 조사 TAA 프로세스입니다.
![](https://blog.kakaocdn.net/dn/b9Ykcj/btsHMvK6M6M/6OhK72KKQL5cc8nrYlAza0/img.webp)
여기에 벨로시티 패스가 추가되고 TAA에서 TAAU로 변경된, 즉 업샘플 프로세스가 추가되었습니다. 여기서 제가 관심을 갖는 부분은 블룸과 톤 매핑 다음에 배치되는 TAA 패스의 배치 순서인데, 에지 노이즈가 증폭될 수 있다는 점입니다.
고스트의 핸들링
Ghost는 다음과 같은 방식으로 이를 처리하며, 성능에 가장 중점을 둔 중간 정도의 시나리오입니다.
![](https://blog.kakaocdn.net/dn/rWJ7A/btsHNteBCFE/XnrH1OfoOJQ0edKnk2XHl1/img.webp)
반면 캐릭터의 고스트 처리는 좀 더 구체적이며, 애니메이션이 있는 고스트는 화면 공간에서의 움직임 자체가 전적으로 카메라 움직임에 의한 것이 아니기 때문에 특별한 처리가 필요하다고 할 수 있습니다.
![](https://blog.kakaocdn.net/dn/cA9c4z/btsHLxJA0o2/EcFFQ8okSksBqqS1NjNoz1/img.webp)
해결책은 캐릭터에 대해 별도의 VelocityBuffer를 열고 해당 TAA 계산을 수행하는 것이지만, 체크된 패스는 Velocity 캐릭터 마스크에 대응하는 반응이 없기 때문에 VelocityBuffer의 캐릭터에 검은 선이 생기는 또 다른 문제가 있지만 성능상의 이유로 결국 VelocityBuffer 렌더링은 수행하지 않았습니다.
![](https://blog.kakaocdn.net/dn/ei0nng/btsHLYUq5X6/SiFqmoqzxrX45k6kcUlE5K/img.webp)
요약하면 다음과 같습니다.
![](https://blog.kakaocdn.net/dn/bFMLwN/btsHLE9JLZV/rKkiyGuVQrVE6t7Oq1D1b0/img.webp)
움직이는 픽셀과 정지 픽셀의 혼합
움직이는 픽셀이 혼합되어 객체가 빠르게 움직일수록 현재 프레임의 가중치가 높아집니다.
![](https://blog.kakaocdn.net/dn/MNhmg/btsHNuq4fG0/kbktK9aA7nESKzEMcr2RsK/img.webp)
![](https://blog.kakaocdn.net/dn/LwWOC/btsHNAklzPM/uOdYPNXDTqoYFUKhWKXTgk/img.webp)
업샘플 섹션
![](https://blog.kakaocdn.net/dn/xOBp8/btsHL5MCuoE/KNIbWyI7bwGKjScJtlTgKK/img.webp)
One Pass Defer
전체 파이프라인 프로필은 다음과 같으며, 온칩 메모리 기반 최적화의 보다 고전적인 구현인 나루미 역시 PBR과 NPR의 조합으로, 역할과 식생은 NPR로, 나머지는 PBR로 처리합니다.
![](https://blog.kakaocdn.net/dn/bonvPe/btsHNwPWZyN/GQJNqPHewIZnnuLchtuOdK/img.webp)
지연된 파이프라인을 위한 G버퍼 배포
![](https://blog.kakaocdn.net/dn/cSqN0l/btsHLOxvS0X/6JtVh9SLRezOaEi60maEc0/img.webp)
여기서 한 가지 함정은 뎁스 페치를 사용하면 말리의 FPK(Early-Z)가 실패한다는 것입니다. 이로 인해 렌더링 압력이 크게 증가합니다.
![](https://blog.kakaocdn.net/dn/qhapE/btsHMwXtMLp/fQcPmm5a0fBj9iySiuAO3k/img.webp)
다시 말하지만 말리의 PLS는 128비트에 불과하기 때문에 최종 파이프라인은 하이브리드 파이프라인이 되고, 툰 셰이딩은 별도의 포워드 렌더링으로 이동하여 G버퍼에 카툰 관련 정보를 남길 수 있습니다.
![](https://blog.kakaocdn.net/dn/bQwi2B/btsHNWAFKeV/VftZCQrkYtUYikIfFcfdBk/img.webp)
그런 다음 가장 중요한 최적화 중 하나인 이 카툰 포워드 패스를 어디에 삽입하는 것이 더 좋을까요, 한 가지 고려 사항은 원 패스 디퍼드를 중단하고 이 포워드 카툰을 투명도 뒤로 이동시키는 것입니다.
![](https://blog.kakaocdn.net/dn/bMqdRY/btsHMgAAieE/MXcearHU1cclDSlIRZzUx0/img.webp)
그러다 이전의 모든 최적화 작업이 무용지물이 될 수 있다는 것이 분명해졌고, 최종 해결책은 렌더링(원래 기사에서는 거의 재작성에 해당한다고 했습니다)을 점검하고 이 카툰 파이프라인을 원 패스 디퍼에 통합하는 것이었습니다. 안타깝게도 홍보 씨는 시간 제약 때문에 자세히 공유하지 않겠다고 했습니다.
![](https://blog.kakaocdn.net/dn/kLzlQ/btsHLxpeKby/qvBFsxF4GyZOTnLQKUoYy0/img.webp)
UE 4.26과 4.27에서 GBuffer를 처리하지 않고 디스크라이브 명령이 트리거되어 Gbuffer가 계속 쓰여지는 작은 RHI 버그가 발견되었습니다.
![](https://blog.kakaocdn.net/dn/TZRti/btsHNqWxrUg/ibKV939TqtstjhfSXMl2r1/img.webp)
아래는 모든 RT에 대한 대응을 수행하기 위해 수정된 코드입니다.
![](https://blog.kakaocdn.net/dn/b8iGOQ/btsHMyAYmMm/gzPvbomp6LEkMhHschoj81/img.webp)
마지막으로 원 패스 디퍼드와 멀티 패스의 성능 비교를 보면 읽기의 경우 대역폭이 매우 크게 감소하고 쓰기의 경우 대역폭이 약간 감소하는데, 이는 모바일 디바이스가 RT를 매우 잘 압축하기 때문에 쓰기의 경우 눈에 띄는 이점이 크지 않은 것으로 분석됩니다.
![](https://blog.kakaocdn.net/dn/bfparl/btsHOiQ03n4/IS4y4xrpBhxTHR0gTg08eK/img.webp)
나무의 다중 적응
먼저 일반적인 적응 프로그램 가이드를 공유했습니다.
![](https://blog.kakaocdn.net/dn/cXXlHb/btsHNTRt45w/wVD2iGXBptVAFIjdbzkC31/img.webp)
![](https://blog.kakaocdn.net/dn/dMlUKO/btsHOl7Z8HB/woF6txoIc9fi5hPrDqDVB0/img.webp)
![](https://blog.kakaocdn.net/dn/bEsAlW/btsHM2PcsjO/nSTtgoDiVahJZS9rbTYCsK/img.webp)
여기서 한 가지 주의할 점은 빌보드가 카메라를 따라 회전하지 않으므로 그림자를 렌더링할 때 주의해야 합니다. 그렇지 않으면 나무의 그림자가 카메라를 따라 움직이며 앞뒤로 흔들리는 것을 볼 수 있으므로 ShadowMask를 작성할 때 광원 hh를 향하도록 고정하는 것을 잊지 마세요.
![](https://blog.kakaocdn.net/dn/dgBoua/btsHNXM4Irz/V7tCkkWvApdKZY86LOVAGK/img.webp)
여기서 홍보 씨는 많은 사람들이 임포스터와 빌보드가 하나라고 생각하지만 사실 빌보드와 임 포스터는 서로 관련이 없으며, 임포스터는 해당 물체 주위에 카메라 원을 사용한 다음 해당 재료 정보를 오프라인으로 기록한 다음 (mini gbuffer 와 유사) 런타임에 재 구축하는 반면, 빌보드는 단순히 페이스 플레이트를 조정하여 항상 캐릭터 카메라를 향하도록하는 것이라고 말했습니다. 빌보드는 페이스플레이트가 항상 캐릭터 카메라를 향하도록 간단히 조정하는 것입니다.
![](https://blog.kakaocdn.net/dn/vFi2O/btsHOkH2g7I/ECNB5ZGYKxPXkcv8uFXrfk/img.webp)
![](https://blog.kakaocdn.net/dn/ctjR1E/btsHL3Vw2R2/W4pQNw8F3rZFjL1K7ZivW0/img.webp)
또한 임포스터 트리도 스트리밍을 지원합니다.
![](https://blog.kakaocdn.net/dn/etpMYS/btsHMcZbTsC/rDKsYLeCjleGnSPm8BMDg1/img.webp)
성능 분석, 다수의 임포스터 트리를 그리기 위한 4개의 드로우콜 및 기타 최적화.
![](https://blog.kakaocdn.net/dn/yXxmp/btsHNuxPfYJ/xMI656W9mEiWLK97vz5yO0/img.webp)
![](https://blog.kakaocdn.net/dn/zsYEE/btsHOlmElcH/rtf8sULL8UwRiQfpUjU621/img.webp)
실제 원문.
《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践
《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践前言今年的UOD分享录播在陆续放出,考虑到学习以及归档的必要,开一个简单的小专栏来记录下自己的学习吧。 [UFSH2023]《鸣潮》基于虚幻引
xingyudev.site
'TECH.ART.FLOW.IO' 카테고리의 다른 글
[번역] 언리얼 엔진 RDG 소스 코드 분석 (0) | 2024.06.10 |
---|---|
[번역]언리얼 엔진 초실감 인간을 해부하는 렌더링 기술 Part 2 - 눈동자 렌더링 (1) | 2024.06.10 |
[번역]캐릭터 카툰 렌더링(디퍼드 라이팅) 참고 사항 (1) | 2024.06.03 |
[번역] Enemy AI in Unity (0) | 2024.05.26 |
[번역] UE 고급 퍼포먼스 프로파일링 기법 (III) - 안드로이드 메모리 분배 및 최적화 (0) | 2024.05.23 |