VIDEO
개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join
안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!
이번에는 언리얼 엔진 5의 핵심인 나나이트 가상화 지오메트리 시스템에 대해서 알아봅시다.
사용 엔진 버전 : 5.0.3
타임라인
0:00 인트로
0:09 나나이트란?
0:34 나나이트의 기본 원리
2:55 나나이트의 제약
3:10 나나이트 메시 임포트
4:11 나나이트 시각화
5:51 나나이트 활성화
6:33 아웃트로
스크립트
인트로
안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.
이번에는 나나이트 가상화 지오메트리 시스템에 대해서 알아보겠습니다.
나나이트란?
나나이트란 새로운 내부 메시 포맷과 렌더링 기술을 사용하여 픽셀 스케일의 디테일과 다수의 오브젝트를 렌더링하는 언리얼 엔진 5에 새로 도입된 가상화 지오메트리 시스템입니다.
나나이트 지오메트리를 사용하므로써 우리는 ZBrush에서 스컬핑한 하이폴리 메시나 3D 스캔을 통해 제작된 메가 스캔 모델처럼 최소 수백만 개의 폴리곤으로 만들어진 영화 품질의 아트를 퀄리티 손실없이 사용할 수 있게 됩니다.
나나이트의 기본 원리
먼저 나나이트 가상화 지오메트리 시스템의 기본적인 원리를 가볍게 설명해 보겠습니다.
나나이트에서는 엄청나게 많은 수의 트라이앵글 중에 일정 수를 클러스터라는 단위로 묶어줍니다.
이렇게 묶인 클러스터는 또 다시 몇 개를 묶어 부모 클러스터로 만듭니다.
이런 과정을 나나이트 시스템에서 자동으로 처리합니다.
이렇게 만들어진 클러스터들을 카메라가 바라보는 시점에 따라서 컬링하는 것입니다.
일반적인 오클루전 컬링은 그리지 않을 대상을 오브젝트 단위로 판별합니다.
그래서 메시가 겹쳐있다고 하더라도 조금이라도 보이면 오브젝트 전체를 렌더링하고 그 위에 그 오브젝트를 가릴 오브젝트를 덮어씌워 렌더링합니다.
하지만 나나이트에서는 앞에서 말한 클러스터를 이용해 카메라에 보이는 클러스터만 렌더링하고 겹쳐져서 가려진 부분은 나나이트가 컬링해서 렌더링하지 않도록 처리합니다.
그렇기 때문에 가려진 오브젝트더라도 오브젝트 전체를 그려야 하는 오클루전 컬링과 달리 카메라에 보이는 클러스터만 그리면 되기 때문에 성능 상 이점이 훨씬 많습니다.
다만 여기서 유의해야할 점은 나나이트에서 클러스터 컬링을 처리할 때 표면 사이의 거리가 너무 가깝게 많이 겹쳐있으면 오버드로 판정으로 인해 소모하는 비용이 커지고 퍼포먼스가 저하될 수 있다는 점입니다.
다시 원래 클러스터 이야기로 돌아와보겠습니다.
이렇게 클러스터를 묶어서 트리 구조로 만들면 카메라와의 거리에 따라 어떤 클러스터 묶음을 보여줄 지 나나이트가 자동으로 선택하고 그리지 않아도 되는 디테일 단계는 메모리에 저장하지 않도록 처리합니다.
한마디로 자동으로 LOD가 처리되는 겁니다.
일반적인 LOD는 거리에 따라 오브젝트의 퀄리티를 떨어뜨리기 위해서 퀄리티를 낮춘 모델을 직접 만들어야 했습니다.
하지만 나나이트 시스템에서는 로우 퀄리티의 메시를 직접 만들고 거리에 따른 LOD 설정을 수동을 할 필요가 없으며 LOD가 자동으로 처리되며 LOD가 전환될 때 퀄리티 손실이 거의 발생하지 않습니다.
그리고 하이퀄리티 메시를 거의 그대로 사용하기 때문에 노멀맵 텍스처를 사용해서 디테일을 표현할 필요가 없습니다.
이렇게 수동으로 노멀맵을 굽고 LOD를 적용하기 위해 작업하는 등의 최적화를 위한 수동 작업을 배제함으로써 실제로 게임에 들어가는 아트 작업에만 집중할 수 있게 되는 겁니다.
아주 간단하게 설명한 나나이트 가상화 지오메트리의 기본 원리는 이렇습니다.
물론 더 많은 내용들이 존재하지만 나나이트의 전체적인 내용을 다루려면 굉장한 분량의 영상이 되버릴 것이기 때문에 기본 원리에 대한 설명은 여기서 마치도록 하겠습니다.
나나이트 제약
그리고 나나이트의 제약에 대해서 짧게 설명하겠습니다.
현재 나나이트는 스태틱 메시에만 적용이 가능하며 스켈레탈 애니메이션이나, 모프타깃, 머티리얼을 통한 월드 포지션 오프셋 등 메시가 변형되는 경우에는 나나이트가 지원되지 않습니다.
나나이트 메시 임포트
그럼 이제 언리얼 엔진 5에서 나나이트 가상화 지오메트리를 사용하는 방법을 알아보겠습니다.
먼저 언리얼 프로젝트를 하나 실행합니다.
프로젝트가 열리고 나면 콘텐츠 브라우저에 우클릭하고 [퀵셀 콘텐츠 추가] 버튼을 눌러서 브릿지 창을 열고 몇 가지 3D 모델을 다운로드 받고 프로젝트에 임포트합니다.
각 퀄리티 별로 하나씩 다운로드 받아 임포트하겠습니다.
임포트가 끝나고 나면 다운로드 받은 모델들을 레벨에 배치해봅시다.
그리고 뷰 모드를 와이어 프레임으로 바꾸면 퀄리티에 따라서 다른 수의 폴리곤으로 표현되는 모습을 볼 수 있는데 그 중에서도 나나이트 메시는 차원이 다르게 많은 폴리곤 수를 가지고 있습니다.
나나이트 시각화
이제 임포트한 메시에 나나이트가 제대로 적용되고 있는지 보기 위해서 나나이트 시각화 기능을 사용해 보겠습니다.
뷰 모드를 [나나이트 시각화 > 개요]로 설정하면 렌더된 화면과 함께 자주 사용되는 나나이트 시각화 화면들이 한꺼번에 보이게 됩니다.
그 중에서 [나나이트 시각화 > 마스크]로 변경하면 현재 나나이트 오브젝트와 비나나이트 오브젝트를 구분해서 볼 수 있습니다.
초록색으로 표시되는 오브젝트가 바로 나나이트가 적용되고 있는 오브젝트입니다.
그 다음에 [나나이트 시각화 > 트라이앵글]로 뷰 모드를 변경하면 나나이트 메시의 트라이앵글이 어떻게 표시되고 있는지 볼 수 있습니다.
특히 트라이앵글 상태에서 물체와의 거리가 바뀌면 트라이앵글의 형태가 바뀌며 LOD가 자동으로 적용되는 모습을 볼 수 있습니다.
[나나이트 시각화 > 클러스터]로 뷰 모드를 변경하면 트라이앵글 뷰 모드와 비슷하지만 좀 더 큰 덩어리로 합쳐진 것을 볼 수 있습니다.
앞에서 말한 것처럼 일정한 갯수의 트라이앵글을 하나의 클러스터로 묶어서 처리하고 있는 겁니다.
그리고 클러스터 역시 더 큰 클러스터로 묶어서 트리 형태로 처리하고 거리에 따라서 어느 수준의 클러스터가 보여야 할지 자동으로 처리합니다.
그 다음으로는 [나나이트 시각화 > 오버드로] 뷰 모드입니다.
잠시 뷰 모드를 원상태로 되돌린 다음 오브젝트를 복사해서 겹쳐보겠습니다.
그리고 뷰 모드를 오버드로로 변경하면 하나만 있는 오브젝트는 오버드로가 거의 없지만 겹쳐둔 오브젝트는 오버드로가 발생하면서 밝은 색으로 표시되는 것을 볼 수 있습니다.
앞에서 이야기한 것처럼 이런 식으로 표면 가까이 겹쳐서 그려지는 오버드로가 너무 많으면 성능 저하가 발생할 수 있습니다.
너무 많이 겹쳐서 아주 밝은 색으로 보인다면 퍼포먼스를 위해 개선해야할 필요가 있습니다.
나나이트 활성화
이번에는 나나이트가 활성화되지 않은 스태틱 메시에 나나이트 설정을 활성화하는 방법을 알아보겠습니다.
나나이트 퀄리티가 아닌 메시를 더블 클릭해서 에디터를 엽니다.
에디터가 열리고 나면 디테일 패널에서 나나이트 지원 활성화 프로퍼티를 체크하고 변경사항을 적용해줍니다.
그리고 에셋을 저장하고 나나이트 시각화로 보면 나나이트가 잘 적용된 것을 볼 수 있습니다.
참고로 언리얼 개발자들의 이야기에서 과연 로우 폴리로 만들어진 스태틱 메시도 나나이트로 전환해야하는가에 대한 질문이 있었습니다.
그 답변으로는 모든 걸 나나이트로 만드는게 중요한건 아니며 사용할지 말지는 선택사항이지만 가급적이면 바꾸는걸 권장한다는 것이었습니다.
아웃트로
이번 영상에서는 나나이트 가상화 지오메트리 시스템의 기본적인 내용에 대해서 알아보았습니다.
이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.
이상 베르의 게임 개발 유튜브였습니다. 감사합니다.
[투네이션]
[Patreon]
WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon
WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.
www.patreon.com
[디스코드 채널]
Join the 베르의 게임 개발 채널 Discord Server!
Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.
discord.com