라이트 함수는 라이트에 적용하여 라이트의 강도를 마스킹 및 필터링할 수 있는 머티리얼입니다. 이는 머티리얼 기반 접근법으로, 라이트 함수를 불투명 메시에 적용하면 라이트에 애니메이션 이펙트를 구현할 수 있다는 의미입니다. 또한 라이트 함수는 볼류메트릭 포그에 섀도잉을 지원하므로 라이트 함수를 워터의 굴절 반사, 클라우드, 투영된 스텐실 등 라이팅 베리에이션을 구현하는 데 가장 유용하게 사용할 수 있습니다.
볼류메트릭 포그에 라이트 함수를 사용하는 머티리얼 기반 애니메이션을 보여주는 콘텐츠 예시 프로젝트의 라이트 함수.
라이트 함수는 모빌리티를 무버블(Movable) 또는 스테이셔너리(Stationary)로 설정한 라이트에만 적용할 수 있으며, 라이트 맵으로 구워질 수 없습니다. 라이트 함수는 다이내믹 섀도를 드리우는 라이트와 동일하게 비용이 높은 렌더링 패스를 따르며, 이는 라이트 함수 기여가 스크린 스페이스에서 먼저 누적되어야 하기 때문입니다. 그런 다음 라이트 함수의 두 번째 패스가 스크린 스페이스에서 라이팅을 평가합니다. 이는 GPU에서 발생하는 순차적 작업으로, 리소스 동기화와 캐시 플러시로 인해 더 많은 시간이 소요됩니다.
아래는 다양한 라이트 타입과 함께 사용되는 라이트 함수의 일부 예시입니다.
라이트 함수 생성하기
머티리얼 도메인(Material Domain)을 라이트 함수(Light Function)로 설정하여 머티리얼에서 라이트 함수를 생성할 수 있습니다. 모든 노드는 메인 머티리얼 노드의 이미시브 컬러(Emissive Color) 입력에 피딩됩니다.
라이트에 라이트 함수 적용하기
라이트에 라이트 함수 머티리얼을 사용하려면 라이트의 디테일(Details) 패널을 사용하여 라이트의 라이트 함수 머티리얼(Light Function Material) 슬롯에 할당합니다.
라이트 함수가 라이트에 할당되었으면, 라이트 함수 머티리얼을 표시하기 위해 섀도 드리우기(Cast Shadows)를 활성화하지 않아도 됩니다.
라이트 함수에는 다음과 같은 라이트 관련 프로퍼티가 포함되어 있습니다.
Property | Description |
---|---|
라이트 함수 머티리얼(Light Function Material) | 라이트 함수 머티리얼을 이 라이트에 적용할 슬롯입니다. 라이트 맵 처리가 되지 않은 라이트에만 라이트 함수를 적용할 수 있습니다. |
라이트 함수 스케일(Light Function Scale) | 투영되고 있는 라이트 함수의 스케일을 조절합니다. X 및 Y는 라이트 방향과 직각이 되게 방향을 스케일 조절합니다. Z는 라이트 방향을 따라 스케일 조절합니다. |
페이드 거리(Fade Distance) | 라이트 함수를 비활성화된 밝기(Disabled Brightness) 값까지 완전히 페이드할 거리를 설정합니다. 먼 거리에 적용한 라이트 함수로 인해 생길 수 있는 에일리어싱을 숨기는 데 사용할 수 있습니다. |
비활성화된 밝기(Disabled Brightness) | 섀도가 비활성화된 뷰를 사용하는 씬 캡처와 같이, 라이트 함수가 지정되어 있지만 비활성화된 경우 라이트에 적용되는 밝기 인수입니다. 이 값은 라이트 함수 머티리얼의 평균 이미시브 입력 밝기(0~1)로 설정해야 합니다. |
라이트 함수 아틀라스
라이트 함수는 다이내믹 섀도를 드리우는 라이트와 동일하게 비용이 높은 렌더링 패스를 사용합니다. 라이트 함수 기여는 스크린 스페이스에서 먼저 누적되어야 하며, 그런 다음 스크린 스페이스에서 라이팅을 평가하는 두 번째 패스가 생성됩니다. GPU에서 발생하는 이 순차적 작업은 리소스 동기화와 캐시 플러시로 인해 더 많은 시간이 소요됩니다.
이 프로세스 중의 높은 GPU 비용을 완화하기 위해, 생성형 프로세스인 라이트 함수 아틀라스(Light Function Atlas)가 애니메이션 라이트 함수를 아틀라스 구성 타일(또는 2D 텍스처)에 굽는 데 사용됩니다. 이러한 2D 텍스처는 저장된 다음 씬에 투영됩니다. 이 작업을 더 잘 이해하려면 라이트 함수 아틀라스 시각화를 사용하여 씬의 각 라이트 함수가 아틀라스에 타일로 저장되는 방식을 확인하면 됩니다.
아래 예시 씬에는 2D 텍스처 타일로 구워진 후 아틀라스에 저장된 4가지의 라이트 함수가 포함되어 있습니다.
라이트 함수를 아틀라스 2D 텍스처로 굽는 프로세스는 GPU에서 수행되며 완전히 병렬적인 프로세스로, 결과는 한 씬의 모든 뷰 간에 공유됩니다. 그런 다음 라이트 패스(Light Pass)에서는 라이트 함수 머티리얼을 보유하되 섀도 드리우기가 활성화되지 않은 모든 라이트가 화면에서 병렬로 누적될 수 있습니다. 이로 인해 GPU 시간이 크게 절약됩니다. 예를 들어, 포트나이트 언리얼 에디터(Unreal Editor for Fortnite, UEFN)의 탈리스만 환경 템플릿(Talisman Environment Template)에서는 2밀리초(ms)가 넘는 GPU 시간 감소가 측정되었습니다.
레거시 라이트 함수와는 달리 라이트 함수 아틀라스는 그레이스케일이나 컬러 라이트 함수 머티리얼을 지원할 수 있습니다.
라이트 함수 아틀라스 제한 사항
라이트 함수 머티리얼이 유효하며 라이트 함수 아틀라스로 구워지려면 몇 가지 제한 사항이 있습니다. 프로젝트에 라이트 함수 아틀라스를 활성화할 때 다음 사항을 고려하시기 바랍니다.
뎁스 버퍼 또는 월드 포지션을 샘플링할 수 없습니다.
GBuffer를 샘플링할 수 없습니다.
텍스처를 샘플링하려면 UV를 조작해서는 안 됩니다. 하지만 UV를 조작하려는 경우, UV 조작이 라이트 함수의 텍스처 공간 에지와 정렬되는 것이 중요합니다. 그렇지 않으면 아틀라스 슬롯을 반복할 수 없습니다.
이 문제는 디렉셔널 라이트와 렉트 라이트 또는 디테일 패널에서 스케일 조절 컨트롤을 사용하는 모든 라이트에서 나타납니다.
현재 디렉셔널 라이트는 아틀라스를 샘플링하지 않도록 강제됩니다.
이러한 제한 사항이 충족되면 빠른 라이팅 평가 패스를 위해 라이트 함수를 라이트 함수 아틀라스로 구울 수 있습니다. 라이트 함수는 라이트 함수 아틀라스에서 자동으로 탐지되고 라우팅 인 및 아웃됩니다.
라이트 함수 아틀라스 시각화
ShowFlag.VisualizeLightFunctionAtlas 1
명령을 사용하여 어떤 라이트 함수가 라이트 함수 아틀라스에 포함되었거나 제외되었는지 시각화할 수 있습니다.
이 시각화에는 다음 정보가 표시됩니다.
라이트 함수 아틀라스에 해당 아틀라스의 일부인 모든 라이트 함수가 표시됩니다.
씬의 라이트 함수 관련 정보는 다음과 같습니다.
아틀라스 내 라이트 함수 수
아틀라스를 샘플링하는 로컬 라이트 수
아틀라스 내 라이트 함수에 영향을 미치는 라이트 수를 연결한 컬러 차트입니다.
라이트 함수 아틀라스와 호환되지 않는 라이트 함수의 목록입니다.
라이트 함수 아틀라스 프로젝트 세팅
다음 프로퍼티는 프로젝트 세팅 창의 엔진(Engine) > 렌더링(Rendering) 아래 라이트 함수 아틀라스(Light Function Atlas) 카테고리에서 찾을 수 있습니다.
Property | Description | 디폴트 상태 |
---|---|---|
라이트 함수 아틀라스(Light Function Atlas) | 라이트 함수 아틀라스 텍스처의 포맷을 선택합니다. | 8비트 그레이스케일 |
볼류메트릭 포그에서 라이트 함수 아틀라스 사용(Volumetric Fog Uses Light Function Atlas) | 라이트 함수 아틀라스가 활성화된 경우 볼류메트릭 포그에서 라이트 함수 지원을 활성화합니다. | Enabled |
디퍼드 라이팅에서 라이트 함수 아틀라스 사용(Deferred Lighting Uses Light Function Atlas) | 라이트 함수 아틀라스가 활성화된 경우 디퍼드 라이팅(멀티패스 및 클러스터링됨)에서 라이트 함수 지원을 활성화합니다. | Enabled |
단일 레이어 워터에서 라이트 함수 아틀라스 사용(Single Layer Water Uses Light Function Atlas) | 라이트 함수 아틀라스가 활성화된 경우 단일 레이어 워터에서 라이트 함수 지원을 활성화합니다. | 비활성화됨 |
반투명에서 라이트 함수 아틀라스 사용(Translucent Uses Light Function Atlas) | 라이트 함수 아틀라스가 활성화되어 있는 경우 포워드 셰이딩 모드를 사용하는 반투명 머티리얼에서 라이트 함수 지원을 활성화합니다. | 비활성화됨 |
라이트 함수 아틀라스 포맷 세팅하기
기본적으로 라이트 함수 아틀라스는 라이트 함수에 그레이스케일을 사용하지만, 프로젝트 세팅에서 라이트 함수 아틀라스 포맷(Light Function Atlas Format)을 8비트 RGB 컬러(8 bits RGB Color)로 설정하여 색을 사용하도록 변경할 수 있습니다. 컬러 라이트 함수는 볼류메트릭 포그, 루멘 글로벌 일루미네이션 및 리플렉션, 반투명 또는 단일 레이어 워터로 설정된 머티리얼에서 작동합니다.
컬러 라이트 함수는 프로젝트 세팅의 디퍼드 라이팅에서 라이트 함수 아틀라스 사용(Deferred Lighting Uses Light Function Atlas)이 활성화되어 있어야 합니다. 라이트 함수 아틀라스 사용 시 이 세팅은 기본적으로 켜져 있습니다.
반투명 및 단일 레이어 워터 머티리얼의 라이트 함수 아틀라스
기본적으로 라이트 함수 아틀라스는 디퍼드 라이팅, 볼류메트릭 포그, 루멘 글로벌 일루미네이션 및 리플렉션에 사용됩니다. 반투명 및 단일 레이어 워터 머티리얼에서의 샘플링을 지원하도록 활성화하여 라이트 함수가 있는 프로젝트의 충실도를 한층 높일 수 있습니다.
프로젝트 세팅의 엔진(Engine) > 렌더링(Rendering)에 있는 라이트 함수 아틀라스 카테고리에서 반투명에서 라이트 함수 아틀라스 사용 및 단일 레이어 워터에서 라이트 함수 아틀라스 사용을 통해 반투명 및 단일 레이어 워터 머티리얼 지원을 토글할 수 있습니다.
반투명에서 라이트 함수 아틀라스 사용이 활성화되면 라이팅 모드(Lighting Mode)가 Surface ForwardShading으로 설정된 모든 반투명 머티리얼이 표면에 라이트 함수를 받을 수 있습니다. 라이트가 반투명 머티리얼의 표면에 드리워지는 동안, 라이트 함수는 머티리얼이 표시되도록 설정된 경우에만 표면에 그레이스케일 또는 컬러로 표시됩니다.
단일 레이어 워터에서 라이트 함수 아틀라스 사용이 활성화된 경우, 단일 레이어 워터 머티리얼을 사용하는 워터 바디가 라이트 소스에서 드리워지는 라이트 함수를 받습니다. 단일 레이어 워터 머티리얼의 흡수 계수 및 스캐터링 계수는 워터의 표면 아래 라이트 함수의 룩에 영향을 미칩니다. 이러한 프로퍼티는 라이트가 매질을 투과하는 방식에 영향을 주며, 디폴트 값인 파란색 빛의 스캐터링으로 인해 빨간색 스펙트럼의 색이 표시되지 않습니다.
워터 바디에 디폴트 단일 레이어 워터 머티리얼을 사용 중이라면 러프니스를 조정하여 라이트 함수가 눈에 잘 띄거나 덜 띄게 할 수 있습니다.
라이트 함수 아틀라스 관련 추가 참고 사항
다음은 라이트 함수 아틀라스 작업 시의 몇 가지 추가 참고 사항과 사용할 수 있는 콘솔 변수입니다.
텍스처 아틀라스의 라이트 함수는 라이트 컴포넌트에서 설정한 파라미터에 따라 적절하게 타일링 및 페이드 아웃됩니다.
인스턴스드 라이트 함수 머티리얼은 인스턴싱하는 머티리얼과는 독립적으로 자체 슬롯을 사용합니다.
컬러 라이트 함수의 경우 포맷이 8비트 그레이스케일로 설정되면 R8 텍스처 포맷이 사용됩니다. 그 외의 설정에는 R8G8B8 텍스처 포맷이 사용됩니다.
유용한 콘솔 변수:
r.LightFunctionAtlas
: 라이트 함수 아틀라스를 활성화/비활성화하고 레거시 라이트 함수를 사용하는 데 씁니다.r.LightFunctionAtlas.SlotResolution
: 라이트 함수 머티리얼이 구워지는 해상도를 설정합니다. 라이트 함수 아틀라스 시각화에서 해상도를 확인할 수 있습니다.r.LightFunctionAtlas.Size
: 라이트 함수 아틀라스의 크기를 설정합니다. 값이 4(4x4)이면 최대 16개의 라이트 함수 머티리얼을 아틀라스로 구울 공간이 있다는 의미입니다. 라이트 함수 아틀라스 시각화에서 아틀라스 크기를 확인할 수 있습니다.