실시간 글로벌 일루미네이션(실시간 GI)은 항상 컴퓨터 그래픽의 성배였습니다.
수년에 걸쳐 업계에서도 이 문제를 해결하기 위한 다양한 방법을 제안해 왔습니다.
일반적으로 사용되는 방법 패키지는 정적 기하학, 대략적인 장면 표현 또는 대략적인 프로브 추적, 둘 사이의 조명 보간과 같은 특정 가정을 활용하여 문제 영역을 제한합니다.
Unreal Engine에서 전역 조명 및 반사 시스템인 Lumen 기술은 Krzysztof Narkowicz와 Daniel Wright가 설립했습니다.
기존 솔루션과 차별화된, 통일된 조명과 베이킹에 가까운 조명 품질을 구현할 수 있는 솔루션을 구축하는 것이 목표입니다.
최근 SIGGRAPH 2022에서 Krzysztof Narkowicz와 팀은 Lumen 기술 구축 여정에 대해 이야기했습니다.
현재 하드웨어 레이 트레이싱에는 강력한 GPU 컴퓨팅 성능 지원이 부족합니다. 하드웨어 레이 트레이싱이 얼마나 빠른지, 심지어 차세대 콘솔이 이를 지원할지조차 알 수 없습니다.
따라서 소프트웨어 광선 추적 방법이 사용됩니다. 중복되는 인스턴스가 많은 장면을 확장하거나 지원하는 데 정말 유용한 도구인 것으로 나타났습니다.
소프트웨어 광선 추적은 삼각형, 거리 필드, 서핑 또는 높이 필드와 같은 다양한 추적 구조를 사용할 수 있는 가능성을 제공합니다.
여기에서 Krzysztof Narkowicz는 삼각형 연구를 포기하고 서핑을 간략하게 연구하지만, 표현하기 위해 상당히 높은 밀도가 필요한 형상의 경우 업데이트하거나 서핑을 추적하는 데 비용이 많이 듭니다.
초기 탐색 후 하이트 필드는 하드웨어에 잘 매핑되고 표면 표현과 간단한 연속 LOD를 제공하므로 가장 적합했습니다.
min-max 쿼드트리 등 모든 POM 알고리즘을 사용할 수 있기 때문에 추적 속도가 매우 빠릅니다.
또한 다중 하이트 필드는 래스터화된 경계 볼륨 계층 구조와 유사하게 복잡한 형상을 나타낼 수 있습니다.
서펠의 가속 구조로 생각하는 것도 매우 흥미롭습니다. 단일 텍셀은 규칙적인 그리드에 의해 제한된 서펠입니다.
루멘에는 높이 필드 외에도 알베도나 조명과 같은 다른 속성도 있으므로 매번 조명을 계산할 수 있습니다.
Lumen에서 개발자는 캡처 위치인 표면 데이터 카드가 포함된 이 완전한 데칼 프로젝션의 이름을 지정했습니다. ㅋㅋㅋ 따라서 카드 가속 구조가 필요하며 개발자는 4노드 BVH를 선택했습니다. 모든 프레임이 CPU에 있고 GPU에 업로드되는 완전한 장면을 위해 제작되었습니다.
그런 다음 트레이스 셰이더에서 스택 기반 순회를 수행하고 가장 가까운 노드가 먼저 순회되도록 노드의 순서를 동적으로 지정합니다.
BVH 디버그 보기 여기에서 가장 까다로운 부분은 전체 메시를 캡처하도록 높이 필드를 배치하는 방법입니다. Krzysztof Narkowicz는 "아이디어 중 하나는 GPU를 기반으로 한 전역 거리장입니다. 매 프레임마다 작은 기본 광선 세트를 추적하여 카드에 포함되지 않은 광선을 찾습니다. 다음으로, 발견되지 않은 각 광선에 대해 , 최적의 카드 방향과 범위를 결정하기 위해 표면 그라데이션을 사용하여 전역 거리 필드를 통과하여 새 카드를 만듭니다 전역 거리 필드의 캡처 위치 On the 한편으로는 각 메시에 대해 카드를 생성할 필요 없이 전체 병합된 장면에 대해 카드를 생성하는 것으로 입증되었습니다. 반면에 카메라가 움직일 때마다 다른 결과가 생성되므로 실제로는 매우 까다로운 것으로 나타났습니다. 아이디어는 각 메시의 카드를 메시로 가져오는 것입니다. 여기서 각 노드는 다음과 같이 N 카드 로 변환됩니다.
Rasterized Triangles Ray Step Card (High Field)
Card Position View 이 방법은 BVH 노드가 배치를 위한 좋은 프록시가 아니기 때문에 좋은 위치를 찾는 데 어려움을 겪습니다. 카드 그런 다음 연구원들은 UV 전개 기술을 따르고 표면 요소를 클러스터링하는 또 다른 아이디어를 생각해 냈습니다. Nanite에서 제공한 수백만 개의 다각형을 다루었기 때문에 삼각형을 서핑으로 바꿨습니다 동시에 표면을 더 잘 일치시키기 위해 덜 제한적인 무료 가이드 카드로 전환했습니다.
자유로운 가이드 카드 위치 이 방법은 효과가 있습니다. 단순한 모양에는 적합하지만 더 복잡한 모양으로 수렴하는 데 문제가 있습니다. Narkowicz는 마지막으로 축 정렬 카드로 다시 전환했지만 이번에는 bin 클러스터 및 메시별 원추 추적 원추 추적은 사전 필터링된 단일 원뿔 추적이 수천 개의 개별 광선을 나타내기 때문에 노이즈를 줄이는 데 매우 효과적입니다. 콘 추적 각 카드에 대해 개발자는 표면 높이, 조명 및 재료 속성이 포함된 완전한 사전 필터링된 밉맵 체인도 저장합니다. 트레이싱 시 원뿔 발자국을 기준으로 적절한 스테핑 광선을 선택하고 이에 대해 레이 트레이싱을 수행합니다. 고착된 가장자리가 있거나 없는 추적 소프트웨어에서 많은 수의 일관되지 않은 광선을 추적하는 것은 매우 느립니다. 이상적으로는 여러 하이트 필드 대신 단일 전역 구조가 사용됩니다. 원뿔 크기가 점점 커지면 정확한 장면 표현이 실제로 필요하지 않으며 더 빠른 속도를 위해 보다 대략적인 표현으로 대체할 수 있습니다. 각 광선을 추적하기 위한 수십 개의 카드가 있는 더 복잡한 장면 첫 번째 성공적인 접근 방식은 순수 복셀 원뿔 추적을 구현하는 것이었고 런타임 시 전체 장면은 복셀화되었습니다. 고전적인 "복셀 원뿔 추적을 사용한 대화형 간접 조명" 기사. Rasterized Triangles Ray Step Card(Height Field) Voxel Con e Tracking 레이 스테핑 카드는 복셀 콘 추적을 계속합니다 이 방법의 가장 큰 단점은 장면 형상의 과도한 혼합으로 인해 누출이 발생한다는 것입니다. 이는 두꺼운 낮은 맵을 추적할 때 특히 두드러집니다. 이미지 누출을 줄이는 첫 번째 기술은 전역 거리 필드를 추적하고 표면에 가까운 복셀만 샘플링하는 것입니다. 샘플링 과정에서 샘플링 범위가 확장됨에 따라 불투명도가 누적되며, 추적이 중지되면 불투명도가 1에 도달합니다. 이는 항상 형상 근처에서 정확한 샘플링을 수행하여 그래픽 누출을 줄입니다. 두 번째 기술은 메쉬 내부를 복셀화하는 것입니다. 이렇게 하면 두꺼운 벽에서 누출이 크게 줄어들지만 과도한 폐색이 발생할 수도 있습니다. 기타 실험에는 희소 복셀 비트 패치 및 얼굴 투명도 채널당 복셀 추적이 포함됩니다. 두 실험의 목적은 광선 방향 복셀 보간 문제를 해결하는 것입니다. 즉, 축 정렬된 견고한 벽은 벽에 수직이 아닌 광선에 대해 투명해집니다. 복셀 비트 타일은 8x8x8 타일의 복셀당 1비트를 저장하여 주어진 복셀이 비어 있는지 여부를 나타냅니다. 그런 다음 2단계 DDA 알고리즘이 광선 스테핑에 사용됩니다. 투명한 표면을 가진 복셀은 유사하지만 DDA가 동일하고 광선 방향을 따라 투명도가 증가합니다. 두 방법 모두 거리 영역만큼 기하학을 표현하는 데 능숙하지 않고 속도도 매우 느린 것으로 나타났습니다. 투명도가 있는 복셀 병합된 표현을 추적하는 가장 빠른 방법은 글로벌 거리 필드의 원뿔 추적과 장면별 글로벌 카드를 사용하여 음영 히트를 수행하는 것이었습니다. 즉, BVH를 반복하여 장면의 어떤 카드가 샘플링 지점에 영향을 미치는지 확인한 다음 점점 가늘어지는 공간을 기반으로 각 카드의 적당한 슬라이딩 레벨을 샘플링합니다. 이 기사에서는 원거리 궤적만을 표현하는 것으로 간주되지 않고 고자장 라이트 스테핑을 직접 대체하는 것으로 간주되어 이 방법을 포기했습니다. 다소 아이러니하게도 이러한 버려진 접근 방식은 2년 후 우리가 궁극적으로 도달한 솔루션에 가장 근접했습니다. 이 시점에서 이미 꽤 좋은 결과를 얻을 수 있습니다. 그래도 그래픽 누출 문제가 많이 발생했고 이 간단한 장면에서도 고급 PC GPU에서는 성능이 그다지 좋지 않습니다. PS5에서 더 많은 인스턴스를 처리하고 8ms 이내에 처리를 완료하기 위해 누출 문제를 해결합니다. 이 데모는 진정한 촉매제였습니다. 이전 솔루션과 비교했을 때 첫 번째이자 가장 큰 변화는 높이 필드 추적을 거리 필드 추적으로 대체한 것입니다. 라이프 포인트를 마스킹하려면 카드에서 라이프 포인트 광선을 삽입하세요. 거리 필드에는 정점 속성이 없기 때문에 이렇게 하면 노출되지 않은 영역은 누출이 아닌 에너지 손실만 발생하게 됩니다. 같은 이유로 복셀 콘 추적을 전역 거리 필드 광선 추적으로 변경했습니다. 동시에 우리는 캐싱 솔루션을 통해 Lumen의 다양한 부분을 최적화하고 시간을 오프로드했습니다. 원뿔 추적이 없으면 추적을 보다 적극적으로 노이즈 제거 및 캐시해야 한다는 점은 주목할 가치가 있지만, 이는 다시 길고 복잡한 이야기입니다. 이것은 전역 거리 필드와 같은 모든 공유 데이터 구조에 대한 업데이트를 포함하여 PS5에서 지속적으로 8ms 미만인 첫 번째 데모를 보낸 후의 최종 결과입니다. 예를 들어 최신 데모의 완료 시간은 4밀리초에 가깝고 품질도 크게 향상되었습니다. 요컨대 이 글은 루멘 전체를 완전히 다시 쓴 글이며, 구현되지 않은 다양한 아이디어가 많이 있습니다. 반면에 어떤 것들은 용도가 변경되었습니다. 원래는 추적 표현으로 카드를 사용했지만 이제는 메시 표면에서 다양한 계산을 캐시하는 방법으로 사용됩니다. 소프트웨어 추적과 유사하게 원뿔 추적을 중심으로 하는 주요 추적 방법으로 시작했지만 결국에는 겹치는 인스턴스가 많은 복잡하고 무거운 장면을 축소하고 지원하는 방법이 되었습니다. 위치 캡처
장면 표현 병합
첫 번째 데모
에필로그
위 내용은 초현실적인 렌더링! 언리얼 엔진 기술 전문가가 전역 조명 시스템 Lumen에 대해 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!