영화에서 사용되던 마이크로 폴리곤 수준의 메시를 지오메트리 가상화를 통하여 실시간으로 렌더링하기 위한 기술
지오메트리 가상화: 버추얼 텍스처링의 지오메트리 버전
버추얼 텍스처링
씬에서 필요한 디테일한 텍스처를 가상화된 하나의 큰 텍스처로 모아서 사용하는 기능
가상화 된 지오메트리 데이터로 아트에선 폴리곤의 개수나 드로우 콜 제약 없이 퀄리티에만 집중 가능
머티리얼 연산은 별도 패스로 분리
머티리얼 평가나 셰이더의 변경 없이 전체 장면에서 깊이 버퍼만 그린다고 하면 모든 비저블한 삼각형을 하나의 드로우 콜로 래스터화가 가능
머티리얼 평가
이전 프레임에 보였던 것들이 현재 프레임에서도 보일 가능성이 높다는 가정하에 2번의 패스에 걸쳐 진행
오브젝트 단위가 아닌 픽셀 단위로 가시성 판단, 완벽한 오클루전 컬링, 장면의 변화가 크지 않다면 보수방식으로 효율적인 컬링이 가능
고정비용이 적진 않지만 오브젝트 개수에 따른 비용 증가가 거의 발생하지 않는 장점이 있음
Hierarchical Z-buffer
패스가 2번 진행되어 느릴 것 같지만 가시성 검사를 위해 최소한의 정보만을 사용하고, 캐시 히트 성공률도 높고 오버 드로우 발생도 적음, 거의 고정된 비용
가시성 검사를 한번에 마치기 위해 머티리얼 평가 부분은 가시성 검사에서 분리하여 별도의 디퍼드 머티리얼 패스에서 Gbuffer에 기록, 그 외에는 기존 디퍼드 셰이딩 렌더러에 통합
불투명 지오메트리들을 한 번의 드로우 콜로 그리기 가능해짐
디퍼드 셰이딩 렌더러
메시의 일부가 다른 오브젝트에 가리는 상황에서 화면에 보이지 않는 부분의 불필요한 연산 비용 발생
효율적인 컬링을 위하여 메시를 클러스터라는 작은 단위로 나눔
클러스터는 GPU 성능을 최대한 활용할 수 있도록 128개 이하의 아주 작은 삼각형으로 구성
각 클러스터 단위로 바운딩 박스를 만들고 클러스터 단위로 컬링
가시성 버퍼와 클러스터 컬링으로 빨라졌지만 화면의 삼각형의 밀도가 높아질수록 점점 더 느려지는 문제는 여전함
GPU는 크기가 작은 삼각형을 래스터화할때 효율이 많이 떨어짐 (삼각형의 크기가 픽셀 크기와 가까워 질수록 더욱 그럼)
삼각형의 개수와 상관없이 일관된 성능을 유지하려면 화면 전체에서 픽셀보다 작은 삼각형이 되도록 나타나지 않도록 삼각형의 밀도를 화면 전체에 고르게 유지해야함
그래서 메시보다 조금 더 작은 단위인 클러스터 단위 LOD를 만듦
계층화 된 이진 트리 형태로 구성, 부모는 자식의 단순화된 형태
하나의 메시에서 뷰에 따라 여러 단계의 LOD가 동시에 나타날 수 있기 때문에 폴리곤 개수를 줄이는 과정에서 클러스터 사이의 경계가 깨질 수 있는 가능성
이런 문제 해결을 위하여 여러 개의 클러스터들을 하나의 그룹화하고 같은 그룹에 속한 클러스터의 외부 경계를 최적화하지 않고 보존하는 방식으로 해결
특별한 설정 없이 에디터에서 나나이트만 활성화하면 자동으로 빌드
런타임에선 뷰에 따라 화면에 필요한 수준으로 단순화 된 클러스터가 자동으로 선택
화면에는 거의 고정된 클러스터만 보이게 되고 폴리곤도 거의 고정
선택된 LOD만 스트리밍/언로드 되므로 메모리엔 화면에 보여줄 데이터만 올라가지만 장면 변화가 빠르거나 폴리곤 밀도가 높은 씬의 경우 고성능 디스크가 필요
이러한 방식으로 화면 대부분을 픽셀 크기에 가까운 삼각형으로 채우는 것이 가능해짐
기본의 하드웨어 래스터라이저는 화면에 차지하는 삼각형이 작을 수록 효율이 떨어짐
작은 삼각형을 래스터라이저하기 최적화된 SW 래스터라이저를 컴퓨트 셰이더를 이용하여 구현 (HW 래스터라이저에 비해 3배 빠른 속도)
삼각형의 크기에 따라 마스킹하여 클러스터 단위로 래스터라이저 종류 선택
큰 삼각형은 HW 래스터라이저로 그리고 작은 삼각형은 SW 래스터라이저로 그리는 하이브리드 방식 사용
컴퓨트 셰이더
100% GPU 기반 (CPU 비용 거의 발생하지 않음)
머티리얼당 한 번의 드로우 콜 (장면 내에 사용되는 머티리얼 개수가 많아지면 비용 증가)
화면 해상도 비례하여 성능에 큰 영향을 주어 데모에선 Temporal Super Resolution 활용하여 업샘플링
Temporal Super Resolution
스태틱 메시에 별로 나나이트 활성화
나나이트 시각화로 나나이트 적용된 메시 확인 가능
반투명 재질은 나나이트가 지원되지 않아 나나이트 비활성화 필요
나나이트가 지원되지 않는 플랫폼일 경우 나나이트 메시 대신 나나이트 프록시 메시가 자동으로 선택되어 사용됨
폴리곤 2000개 정도의 단순화 된 메시
루멘의 HW 레이트레이싱을 위해서도 활용
콘솔창에 "r.nanite 0"으로 나나이트 끌 수 있음
퀄리티가 너무 낮은 경우 프록시 트라이앵글 퍼센트를 조절
캐릭터 뼈대 애니메이션과 같은 변형되는 오브젝트도 아직 지원되지 않음
형태가 변하는 피부나 옷은 나나이트가 적용되지 않지만 캐릭터에 부착하는 단단한 장비같은 건 스태틱 메시라 지원됨
가상화된 텍스처를 사용하여 고해상도의 섀도 맵을 사용 가능하여, 해상도 부족으로 인해 그림자가 깨지는 일 없이 선명하게 표현 가능
캐싱이 활용되어 라이팅 환경이 동적으로 크게 변경되지 않는다면 빠르게 처리 가능, 빛이 크게 바뀌면 캐시 무효화로 일시적으로 성능 비용 증가
기존 섀도우 방식을 완전히 대체하기에 뎁스 바이어스(Depth bias)로 인해 발생되었던 Shadow Acne, Peter Panning 현상 발생하지 않음
Shadow Acne
빛이 닿는 영역이 그림자 처리되는 현상Peter Panning
그림자를 만드는 물체가 그림자와 붙어 있지 않고 분리되어 나타나는 현상
씬에 나나이트가 아닌 지오메트리 수가 많거나 라이트 수가 늘면 추가적인 드로우 콜 발생
소프트 섀도우
경계가 부드러운 그림자 표현
그림자 해상도 조절
특별한 하드웨어 가속 없이도 실시간으로 사용 가능한 완전한 다이내믹 글로벌 일루미네이션 기능
사실적인 간접광 표현에 사용
무한하게 바운스되는 글로벌 일루미네이션을 지원
간접광으로 인한 간접 섀도우나 색이 물드는 컬러 브리딩 현상도 나타남
스카이 라이트를 사용하면 태양광이 대기중에 산란하여 지상 곳곳을 밝혀주는 GI 효과
왜곡 없이 정확한 위치에 반사
거울같은 사실적인 반사 표면은 하드웨어 레이 트레이싱을 선택적으로 사용하여 표현 가능
정교한 간접광이 필요한 경우 Detail Tracing
성능이 중요하면 Global Tracing 선택
루멘의 기본 트레이싱 방식은 소프트웨어 레이 트레이싱 방식
간접광의 정보를 빠르게 얻기 위하여 디스턴스 필드에 트레이싱
디스턴스 필드: 메시의 가장 가까운 표면까지의 거리값을 저장한 3D텍스처
디스턴스 필드엔 단순히 거리 정보만 있기 때문에 간접광 계산을 위해 표면의 파라미터 정보를 담아 표면 캐시를 만듦
표면 캐시가 머티리얼 프로퍼티로 채워진 뒤, 루멘이 해당 표면 위치의 직접광과 간접광을 계산
표면 캐시의 정보를 디스턴스 필드에 담아 루멘 씬을 만드는데 여러 프레임에 걸쳐 업데이트되고 누적되어 사용됨
시각화의 메시 디스턴스 필드 뷰로 봤을 때 해상도가 부족한 스태틱 메시는 디스턴스 필드 해상도를 조절하여 높일 수 있음
정밀한 간접광이 필요한게 아닌 경우 글로벌 디스턴스 필드만 사용해도 됨
글로벌 디스턴스 필드
레벨에서 카메라를 따라다니는 도중 부호화 디스턴스 필드(Signed Distance Fields) 오클루전을 사용하는 저해상도 디스턴스 필드Signed Distance Fields
저해상도 디스턴스 필드의 트레이싱 결과에서 나타날 수 있는 문제점 보완
200미터까진 표면 캐시+스크린 트레이스 병행 사용
200미터부터 스크린 트레이스만 사용
스크린 트레이스는 디스턴스 필드가 지원되지 않는 스켈레탈 메시에도 적용 가능
강한 직접광을 받아 주변이 물드는 컬러 브리딩 현상도 관측됨
화면을 벗어나거나 가려진 오브젝트 계산은 불가능한 한계점이 존재
반투명 오브젝트나 거울 반사를 사실적으로 렌더링해야 하는 상황인 경우 고려
디스턴스 필드로 구성된 표면 캐시 대신 실제 삼각형을 트레이싱하여 폴리곤 수가 많아지면 성능에 영향
나나이트가 적용된 하이폴리곤 메시를 그대로 트레이싱하면 비용이 크게 발생하여 나나이트 프록시 메시를 트레이싱
인스턴스 개수에 제약이 큰 편이라 큰 규모의 복잡한 씬 처리엔 부족할 수 있음
하드웨어 레이 트레이싱 사용 시 루멘 씬 시각화에서 디스턴스 필드가 없어 보이지 않던 스켈레탈 메시도 보이게 됨
루멘 리플렉션 퀄리티를 높여 좀 더 사실적인 리플렉션을 볼 수 있음
리플렉션 퀄리티는 하드웨어 레이 트레이싱을 사용할 때만 적용됨
퀄리티 설정을 높이면 당연히 성능에도 영향을 미침
트러블 슈팅을 위해 특정 오브젝트의 간접광을 끄고 싶다면
하드웨어 레이 트레이싱 사용 시 Affect Dynamic Indirect Lighting 체크 해제
소프트웨어 레이 트레이싱 사용 시 Affect Distance Field Lighting 체크 해제
'G'키로 게임 모드를 오고가며 루멘 씬과 최종 씬을 비교
트레이싱 된 루멘 씬에서 화면의 최종 픽셀로 빛을 전파하는 과정
장면 전환이나 움직임이 빠른 오브젝트에 노이즈나 잔상이 발생하는 문제가 있음
포스트 프로세스 볼륨의 파이널 게더 퀄리티를 조절하여 노이즈 완화 가능
퀄리티를 높이면 연산 비용 증가
아직 미숙해서 온전히 이해하지는 못했지만,
모르는 부분에서도 어느 정도 이해할 수 있도록 적혀있네요. 감사합니다.