하드웨어 레이 트레이싱 팁 & 트릭

하드웨어 레이 트레이싱 기능을 사용하여 프로젝트를 개발할 때 유용한 주제를 모았습니다.

Choose your operating system:

Windows

macOS

Linux

이 페이지에는 하드웨어 레이 트레이싱(Hardware Ray Tracing) 기능에 사용할 수 있는 제안 사항이 포함되어 있습니다.

머티리얼 

다음 제안 사항은 머티리얼 및 하드웨어 레이 트레이싱 기능에 사용할 수 있습니다.

Ray Tracing Quality Switch Replace 노드

이 노드를 사용하면 머티리얼 로직의 전체 부분들을 덜 복잡한 로직으로 대체함으로써 레이 트레이싱 글로벌 일루미네이션, 리플레이, 반투명 등의 기능에 드는 비용을 줄입니다. 머티리얼에 이를 적용하는 경우 레벨에서 이 머티리얼이 적용된 모든 레이 트레이싱에 영향을 줍니다.

아래의 예시는 디퓨즈, 러프니스, 노멀 맵 텍스처가 있는 노멀(Normal) 로직 패스를 보여줍니다. 레이 트레이싱(Ray Tracing) 패스는 노멀 맵 텍스처를 제거하고 덜 복잡한 러프니스 로직을 사용합니다. 이렇게 변경하면 머티리얼의 레이 트레이싱 이펙트를 더 낮은 비용으로 렌더링할 수 있습니다. 특히 영향을 받는 이펙트로는 레이 트레이싱 글로벌 일루미네이션 및 리플렉션 등이 있습니다.

전체 크기로 보려면 이미지를 클릭하세요.

머티리얼당 레이 트레이스된 섀도

레이 트레이스된 섀도 드리우기(Cast Ray Traced Shadows) 체크박스를 사용하여 이 머티리얼이 레이 트레이스된 섀도를 드리울지 설정합니다. 이 방식은 레이 트레이스된 섀도를 드리우거나 드리우지 않아야 하는 지오메트리에 할당된 머티리얼의 특정 엘리먼트를 제어하는 데 유용합니다.

머티리얼 비용 테스트하기

복잡한 머티리얼은 하드웨어 레이 트레이싱 기능의 퍼포먼스에 영향을 줄 수 있습니다. 콘솔 명령 r.RayTracing.EnableMaterials 를 사용하여 머티리얼이 퍼포먼스에 주는 영향을 테스트할 수 있습니다.

반투명 굴절률(IOR)

레이 트레이싱을 사용하는 리프랙션에 대한 머티리얼을 설정할 때, 리프랙션(Refraction) 머티리얼 입력이 반투명 머티리얼의 굴절률(Index of Refraction, IOR)을 제어합니다.

리프랙션 양은 오브젝트에 적용된 머티리얼에서 설정합니다. 레벨에서 포스트 프로세스 세팅은 리프랙션의 레이 트레이싱 여부 및 최대로 가능한 리프랙션 바운스 수를 제어합니다.

페이크 리프랙션이 적용된 | 래스터 반투명

리프랙션이 적용된 | 레이 트레이싱된 반투명

머티리얼 설정:

  • 머티리얼에서 양면(Two Sided) 을 활성화합니다.

    • 이는 필수는 아니지만 단면 또는 비다면체 지오메트리의 볼륨 트래킹이나 레이 미디엄 스태킹을 처리할 좋은 방법이 없습니다. 양면 머티리얼은 정확한 결과를 제공하므로 레이 트레이싱 반투명을 사용할 때 모든 반투명 머티리얼을 처리하는 데 권장되는 방법입니다.

  • 라이팅 모드(Lighting Mode)표면 반투명 볼륨(Surface Translucency Volume) 또는 표면 포워드 셰이딩(Surface Forward Shading) 으로 설정합니다.

  • 리프랙션 입력을 사용하여 굴절률을 제어합니다.

포스트 프로세스 볼륨 렌더링 기능 설정:

  • 반투명(Translucency) 카테고리에서 유형(Type)레이 트레이싱(Ray Tracing) 으로 설정합니다.

  • 레이 트레이싱 반투명(Ray Tracing Translucency) 카테고리에서 다음과 같이 설정합니다:

    • 리프랙션(Refraction): 활성화됨

    • 최대 리프랙션 레이(Max Refraction Rays): 사용할 최대 레이 수를 설정합니다. 라이트가 반대쪽으로 지나갈 수 있을 정도로 높은 값을 설정해야 합니다.

[머티리얼 인스턴스]()를 사용하여 인스턴스 결과를 통해 머티리얼의 IOR을 동적으로 제어합니다.

리프랙션 양 제어하기

발생하는 리프랙션 양 및 라이트 전달은 머티리얼의 리프랙션 입력을 사용하여 제어합니다. 포스트 프로세스 볼륨 세팅에서는 리프랙션 체크박스가 체크되고 최대 리프랙션 레이(Max Refraction Rays) 가 1보다 큰 값으로 설정되어 있어야 합니다.

아래 반투명 머티리얼의 리프랙션 입력 값은 0.04입니다. 포스트 프로세스의 최대 리프랙션 레이 수는 6개로 라이트가 반투명 머티리얼을 통과할 수 있습니다.

레이 트레이싱 리프랙션: | 비활성화됨

레이 트레이싱 리프랙션: | 활성화됨

아래 예시는 머티리얼의 다른 리프랙션 입력 값이 굴절률에 주는 영향을 보여줍니다.

슬라이더를 드래그하면 리프랙션 양이 0.01, 0.05, 0.1 순으로 적용됩니다.

아래 예시는 포스트 프로세스 볼륨 최대 리프랙션 레이 값이 반투명 머티리얼을 통과하는 라이트 전달에 어떤 영향을 주는지 보여줍니다. 단일 레이로는 머티리얼을 탈출할 만큼의 바운스를 제공할 수 없어 머티리얼이 어둡거나 검게 나타납니다. 최대 리프랙션 레이 수를 높이면 라이트가 머티리얼을 빠져나갈 확률이 높아집니다. 모든 머티리얼이나 레이에 최대 리프랙션 레이 수가 필요한 것은 아니지만, 더 많은 레이 수를 사용해야 하는 경우 일부 머티리얼이 필요 이상으로 어둡게 보일 수 있습니다.

슬라이더를 드래그하면 1개, 3개, 5개의 리프랙션 레이 사용 결과를 확인할 수 있습니다.

단면 및 양면 머티리얼 리프랙션

레이 트레이싱된 리프랙션은 단면 머티리얼과 양면 머티리얼 모두와 함께 작동하므로 라이트가 오브젝트의 볼륨을 투과할 수 있습니다. 단면 머티리얼도 리프랙션을 지원하기는 하지만 양면 머티리얼이 물리적으로 정확한 결과를 제공하므로 레이 트레이싱 반투명을 사용하는 모든 반투명 머티리얼에 양면 머티리얼을 사용하는 것이 좋습니다.

레이 트레이싱된 반투명 | 리프랙션이 적용된 | 단면 머티리얼

레이 트레이싱된 반투명 | 리프랙션이 적용된 | 양면 머티리얼

포스트 프로세스 볼륨 최대 리프랙션 레이 프로퍼티를 사용하여 라이트 전달에 사용할 리프랙션 바운스 수를 설정합니다.

서브서피스 프로파일 머티리얼의 라이트 투과

서브서피스 프로파일을 사용하여 머티리얼의 라이트 투과 효과를 내려면 라이트 소스에서도 레벨에 배치된 액터의 투과 프로퍼티가 활성화되어 있어야 합니다.

래스터 서브서피스 프로파일 | 라이트 투과

레이 트레이싱 서브서피스 프로파일 | 라이트 투과

레이 트레이싱 섀도를 계산할 때 소규모 스캐터링 시뮬레이션을 실행함으로써 매질을 통과해 섀도 캐스팅 라이트까지 도달하는 데 필요한 예상 볼류메트릭 스캐터링 거리를 계산합니다. 스캐터 거리는 라이팅 시 라이트로부터의 스캐터링 내 기여도를 계산하는 데 사용됩니다.

리플렉션

다음 제안 사항은 리플렉션 환경 및 하드웨어 레이 트레이싱에 사용 가능합니다.

레이 트레이싱 리플렉션 캡처 예비

레이 트레이싱 리플렉션은 리플렉션 안에서 리플렉션을 일으키는 멀티 바운스를 렌더링하는 경우 비용이 더 높아집니다. 멀티 바운스가 없으면 내부에서 리플렉션되는 머티리얼이 검은색으로 나타납니다. 이 문제를 더 낮은 비용으로 해결하려면 레이 트레이싱된 리플렉션을 사용한 다음, 레벨에 배치된 리플렉션 캡처 액터를 마지막 바운스로 예비 전환하면 됩니다.

콘솔 변수 r.RayTracing.Reflections.ReflectionCaptures 를 사용하여 리플렉션 캡처 예비 전환을 활성화합니다.

슬라이더를 드래그하면 1개의 바운스 RTR, 리플렉션 캡처 예비가 없는 2개의 바운스 RTR, 리플렉션 캡처 예비가 있는 1개의 바운스를 확인할 수 있습니다.

리플렉션에 반투명 오브젝트 포함하기

레이 트레이싱 리플렉션 카테고리의 포스트 프로세스 볼륨 세팅에서 반투명 오브젝트 포함(Include Translucent Objects) 을 활성화하여 반투명 머티리얼이 있는 오브젝트가 레이 트레이싱된 리플렉션에 나타나도록 합니다.

스카이 라이트

스카이 라이트 기여를 위해 필요한 경우가 아니라면 스카이돔 메시와 같이 멀리 있는 오브젝트 캡처는 비활성화해야 합니다. 그러면 퍼포먼스가 절약되고 씬이 최적화됩니다.

시작용 레벨에 포함된 BP_SkySphere 스카이돔 메시와 블루프린트에는 이 스카이 라이트 기여가 기본적으로 비활성화되어 있습니다. 그래서 스카이 리플렉션이 예상과는 다르게 보이겠지만 하드웨어 레이 트레이싱의 퍼포먼스가 절약됩니다.

레벨에서 오브젝트가 선택되면 레이 트레이싱에서 표시(Visible in Ray Tracing) 체크박스가 있는 디테일(Details) 패널에서 오브젝트 기여가 활성화/비활성화됩니다.

레이 트레이싱 사용 시 지오메트리 고려 사항

  • 작은 구멍들이 있거나 자잘한 디테일이 많은 지오메트리는 퍼포먼스에 상당한 영향을 줄 수 있습니다. 그 예로는 잎사귀가 많은 나무나 덤불 또는 구멍이 많은 하수구 그레이팅이나 울타리가 있습니다. 

  • 실내 환경은 야외 환경보다 렌더링이 느립니다. 그 이유는 일반적으로 라이트가 외부에서 방으로 들어와 방 안을 충분히 비출 만큼 여러 번 바운스되기 때문입니다. 직사광선이 닿는 영역은 간접광으로 닿는 영역보다 렌더링 속도가 더 빠릅니다. 또한, 리플렉션과 반투명 같은 다른 레이 트레이싱 기능의 고려 사항도 이러한 상황에서 퍼포먼스에 영향을 줍니다.

일반적인 하드웨어 레이 트레이싱 기능 최적화

  • 리플렉션 및 반투명 최대 러프니스 세팅

    • 최대 러프니스(Max Roughness) 를 사용하여 머티리얼의 레이 트레이싱된 리플렉션에 한계치를 설정합니다. 이는 포스트 프로세스 볼륨 안에서 설정할 수도 있고 콘솔 명령 r.RayTracing.Reflections.MaxRoughness로 설정할 수도 있습니다.

  • 글로벌 일루미네이션, 리플렉션 및 반투명 최대 레이 거리 세팅

    • 씬에서 이러한 기능의 비용과 기여도를 낮추기 위해 각 기능의 최대 레이 거리를 설정합니다.

    • 콘솔을 사용하여 각 레이 트레이싱 기능마다 MaxRayDistance 콘솔 변수를 설정합니다. r.RayTracing에서 찾을 수 있습니다.*

  • 레이 트레이싱된 글로벌 일루미네이션 최적화

    • 스크린 퍼센티지와 픽셀당 샘플 기본값은 각각 504 입니다. 다른 값이 필요한 경우, 콘솔 명령 r.RayTracing.GlobalIllumination.ScreenPercentager.RayTracing.GlobalIllumination.SamplesPerPixel 을 사용합니다.

    • 글로벌 일루미네이션에 대한 라이트 기여는 글로벌 일루미네이션에 영향(Affect Global Illumination) 을 활성화/비활성화하여 각 라이트 액터마다 설정할 수 있습니다.

레이 트레이싱 입체각 및 거리 기반 컬링

레이 트레이싱을 사용하는 씬에서는 카메라 뷰 밖에 있는 오브젝트가 씬 안에 있어야 하며(특히 반사율이 높은 표면에서) 이 때문에 렌더링 비용이 높아질 수 있습니다. 그렇게 잃은 퍼포먼스를 되찾거나 퍼포먼스를 최적화하려면 보이지 않거나 필요 없는 오브젝트를 컬링하는 것이 좋습니다.

레이 트레이싱은 씬에서 오브젝트를 컬링하는 몇 가지 방법을 제공합니다. 카메라로부터의 거리에 따라 컬링하거나, 카메라 뒤의 영역(또는 각도)을 투영하고 개별 오브젝트 바운드를 테스트하여 오브젝트를 컬링하거나, 아예 컬링하지 않거나, 둘 다 동시에 컬링하는 방법이 있습니다. 사용하는 컬링 유형은 콘솔 변수 r.RayTracing.Culling 과 다음 변수 중 하나를 사용하여 설정합니다.

  • 0 컬링을 비활성화합니다.

  • 1 거리 및 입체각에 따라 카메라 뒤의 오브젝트를 컬링합니다. 기본 컬링 메서드입니다.

  • 2 거리 및 입체각에 따라 카메라 앞뒤 오브젝트를 컬링합니다.

  • 3 거리 또는 입체각에 따라 카메라 앞의 오브젝트를 컬링합니다.

값이 높을수록 월드에서 더 많은 오브젝트를 컬링합니다.

또한, 레이 트레이싱 콘솔 변수(r.RayTracing.* )는 각도와 반경이라는 두 가지 명령을 사용하여 입체각 컬링을 환경설정합니다.

  • 각도(Angle) 는 오브젝트의 바운드를 테스트할 때 컬링 여부를 판단하는 기준이 될 카메라 뒤의 투영 영역 각(도 단위)을 설정합니다. 각을 넓히면 많은 오브젝트를 적극적으로 컬링합니다.

  • 반경(Radius) 은 지정 반경 밖에 있는 모든 오브젝트를 컬링합니다. 이 반경은 기본적으로 100m(또는 10,000cm/언리얼 유닛 단위)로 설정되어 있습니다.

이를 사용하는 레이 트레이싱 콘솔 변수 두 가지를 예로 들면 r.RayTracing.Culling.Angler.RayTracing.StaticMeshes.WPO.CullingRadius 가 있습니다.

거리 기반 컬링이 필요한 경우, 모든 반경 변수는 -1 로 설정되어야 합니다.

노이즈 제거 툴 퀄리티 평가하기

하드웨어 레이 트레이싱 기능은 제거 알고리즘에 크게 의존하여 최대한 적은 픽셀을 사용하고 노이즈 제거 툴로 차이를 만들어 나머지를 직관적으로 파악합니다. 다음 단계를 따르면 여러 레이 트레이싱 이펙트에 대한 노이즈 제거 툴의 퀄리티를 평가할 수 있습니다.

  1. 템포럴 안티 에일리어싱(Temporal Anti-Aliasing)뎁스 오브 필드(Depth of Field) 를 비활성화합니다.

    1. 둘 다 언리얼 엔진 렌더러의 선형 컬러 스페이스에서 실행됩니다. 이 두 기능은 HDR 컬러 가중치 트릭을 써서 섀도와 하이라이트 사이의 에일리어싱을 피합니다.

  2. 픽셀당 노이즈가 제거된 단일 샘플과 픽셀당 노이즈가 제거되지 않은 단일 샘플을 비교합니다. 

    1. 비교 결과, 에너지 차이로 인해 그리고 노이즈 제거 툴이 새도를 너무 어둡게 만들어서 결과물이 비정상적으로 보일 것입니다. 하지만 픽셀당 단일 샘플은 톤매퍼의 비선형 작업 때문에 오히려 더 밝게 보일 것입니다. 

    2. 더 잘 비교하기 위해 픽셀당 노이즈가 제거된 단일 샘플을 픽셀당 노이즈가 제거되지 않는 다중 샘플과 비교해서 테스트해야 합니다.

픽셀당 노이즈가 제거된 단일 샘플

픽셀당 노이즈가 제거되지 않은 다중 샘플

픽셀당 노이즈가 제거된 단일 샘플은 정보 손실 때문에 완벽하지 않을 것입니다. 하지만 픽셀당 노이즈가 제거되지 않은 다중 샘플과 비교하면 결과가 일관성이 있습니다. 

노이즈 제거 툴은 하드웨어 레이 트레이싱 기능을 위해 픽셀당 최대 4개의 샘플을 지원합니다. 샘플을 더 사용할수록 픽셀당 노이즈가 제거되지 않은 다중 샘플 결과에 더 가까워집니다.

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.