[Unreal Engine] 라이팅(Lighting)

Hongyeol Kim·2022년 1월 1일
0

언리얼 엔진

목록 보기
6/9

Lighting Basics UDN : https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/LightingAndShadows/Basics/
Lightmass UDN : https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Lightmass/
Lightmass Basics UDN : https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Lightmass/Basics/

언리얼 엔진에서 지원하는 라이팅

  • Directional Light : 무한히 멀리 있는 광원으로부터의 빛을 시뮬레이션한다. 한 레벨(월드)에 하나만 존재한다. 위치와 상관없이 모든 물체가 영향을 받는다. Directional Light는 통상 Stationary속성을 사용한다.

  • Point Light : 전구와 같이 한 점에서 전 방향으로 빛을 내뿜는다.

  • Spot Light : Cone모양의 한 점에서 빛을 내뿜는다. 콘은 두 가지가 있다(내부 콘과 외부 콘). 내부 콘 내에서 라이트는 최대 밝기며, 내부 콘과 외부 콘 사이에서는 조명이 되는 falloff가 발생한다. 내부 콘을 넘어갈 경우 라이트는 외부 콘으로 가면 갈수록 밝기를 조금씩 잃는다.

  • Sky Light : 실제로 빛을 발생시키진 않지만 그 대신 레벨의 먼 부분을 캡처해 라이트로 적용한다. 라이트가 먼 하늘이나 산에서 오도록 할 수 있다는 뜻이다. 라이트를 리빌드하거나 Recapture Scene(Sky Light가 선택된 상태에서 디테일 패널에 있음)을 누를 때만 업데이트 된다.

왼쪽부터 Point Light, Spot Light, Directional Light

모바일에서는 퍼포먼스 때문에 지원하는 라이팅의 종류와 개수에 제한이 있다. 링크를 통해 확인하자.
https://docs.unrealengine.com/4.27/ko/SharingAndReleasing/Mobile/Lighting/

주요 설정

  • Intensity : 빛의 밝기(에너지)를 결정한다. 보통 루멘 단위를 사용한다. 예를 들어 1,700lm은 100W 전구에 해당한다.

  • Intensity Unit : 빛의 밝기를 결정하는 단위를 말한다.

  • Light Color : 빛의 색을 결정한다.

  • Attenuation Radius : 빛의 한계를 설정한다. 또한 빛의 폴오프를 계산한다. 이 설정은 Point Light와 Spot Light에서만 가능하다.

Attenuation Radius 설정에 따른 차이

  • Source Radius : 표면에서 반사되는 하이라이트의 크기를 정한다. 이 효과는 Min Roughness 설정을 조절함에 따라 줄어들 수도 있다. 또한 Lightmass를 사용한 라이트를 만드는 데 영향을 준다. 소스 크기가 커질수록 그림자는 부드러워 진다. 이것은 Lightmass로 진행되기 때문에 모빌리티 속성를 static으로 설정했을 때만 작동한다.

  • Cast Shadows : 그림자를 생성할지 여부를 결정한다.

  • Channel : 라이팅을 받는 채널을 설정할 수 있다. 예를 들어 L1, L2 라이트가 있지만 특정 물체에 L1만 적용되게 할 수 있다.

*라이팅 빌드가 실패할 경우, 이유는 UnrealLightMass가 빌드되지 않았거나 문제가 있기 때문이다.

모빌리티 속성

  • Static(Baked) : 성능에 영향을 주지 않는 완벽한 정적 라이트. 다이내믹 오브젝트(캐릭터, 움직이는 오브젝트 등)에 반사되거나 그림자를 생성하지 않는다. 예를 들면, 플레이어가 절대 도달할 수 없는 먼 도시 풍경이나 천장 등에 사용한다. 이론적으로는 수백만 개의 스태틱 모빌리티 라이트를 가질 수 있다. 하나의 스태틱 라이트든 100개의 스태틱 라이트든 lightmap으로 만들어져 적용되는 것이기 때문에 성능에 개수가 성능에 영향을 미치지 않는다.

  • Stationary : 스태틱과 다이내믹 라이트의 혼합 형태며 게임 중에 색상이나 밝기를 변경할 수 있지만 이동하거나 회전하지는 못한다. 스테이셔너리 라이트는 다이내믹 오브젝트와 상호작용할 수 있으며, 플레이어가 갈 수 있는 곳에 사용한다. 4개 이하의 스테이셔너리 라이트만이 각각을 뒤덮을 수 있도록 허용되어 있다. 네 개를 초과해 겹치는 스테이셔너리 라이트가 있다면 라이트 아이콘은 빨간 X로 변한다.

  • Movable : 완벽한 다이내믹 라이트며 모든 속성은 런타임 때 바꿀 수 있다. 성능상 무거우므로 아껴 사용해야 한다. 반사광을 이용하지 못하기 때문에 스태틱 라이트보다 사실성이 떨어진다.

스태틱 라이팅(Static Lighting=Baked Lighting)

  • 한번 라이팅을 빌드하면 그 값이 고정으로 적용되는 방식(속성을 수정하면 재빌드해야 함)
    *Lightmass라는 언리얼 스태틱 라이팅 전용 빌드 프로그램이 라이팅을 빌드한다.

  • 모든 모델에 대해 lightmap(라이트가 적용된 텍스쳐)을 생성하여 이를 각 모델에 적용한다.

  • 최종적으로 모든 라이트가 lightmap에 적용되는 것이므로 한 개를 적용하든 여러 개를 적용하든 성능에 미치는 영향은 동일하다.

  • 실시간 적용이 아니라 다이내믹 라이팅보다 퍼포먼스에 좋다.

  • World Settings -> Lightmass에서 lightmap 퀄리티 속성을 조정할 수 있다.
    빨간 박스 안 4가지 속성이 제일 중요하다.

    - Static Lighting Level Scale (스태틱 라이팅 레벨 스케일)
    1 언리얼 유닛 == 1 cm 을 기준으로 하는 엔진 스케일에 상대적인 레벨 스케일입니다. 라이팅 계산시의 디테일 양을 조절하는 데 사용되며, 스케일 값이 작을수록 빌드 시간이 크게 향상됩니다. 거대한 레벨의 경우, 2 나 4 정도의 큰 스케일을 사용하여 빌드 시간을 낮출 수 있습니다.
    - Num Indirect Lighting Bounces (간접광 바운스 횟수)
    라이트에서 시작해서 빛이 표면을 튕겨나갈 수 있는 횟수입니다. 0 은 직사광만이며, 1 은 한 번 바운스 등입니다. 1 번 바운스 계산에 가장 시간이 오래 걸리며, 2 번째가 뒤를 잇습니다. 그 이후의 바운스는 거의 무료이긴 하지만, 각 바운스마다 빛이 감쇠되기에 추가되는 라이트도 거의 없습니다.
    - Indirect Lighting Quality (간접광 퀄리티)
    라이트매스 GI 솔버에 사용되는 샘플 수에 대한 스케일입니다. 값이 크면 (노이즈, 얼룩 등의) 솔버 부작용이 줄어들지만 빌드 시간은 훨씬 늘어납니다. 참고로 라이트맵 사용에 따른 (텍스처 이음새, 압축 부작용, 텍셀 모양 등의) 부작용에는 영향을 끼치지 않습니다.
    - Indirect Lighting Smoothness (간접광 부드러움)
    값이 높을수록 간접광이 부드러워져 솔버 노이즈를 숨길 수 있지만, 간접광 그림자와 앰비언트 오클루전도 잃게 됩니다. Indirect Lighting Quality 를 최고 퀄리티로 높일 때는 이 값을 어느정도 (.66 이나 .75 로) 낮추는 것이 좋을 수 있습니다.

다이내믹 라이팅(Dynamic Lighting)

  • 모빌리티 속성 중 Movable에 해당하는 방식

  • 실시간으로 라이팅이 적용된다는 것이 장점이다. 물체가 움직이면 그에 따라 라이팅 업데이트 된다.

  • 반사광을 지원하지 않는다는 것이 단점이다.

  • Stationary는 반사광을 지원하면서도 다이내믹 라이팅을 지원하는 혼합형 방식이다.

  • 라이팅을 동적으로 계산되어야 하는 만큼 자원을 많이 소모한다.

  • 자원소모를 최적화하기 위해 Cascaded Shadow Maps(CSM) 방식으로 그림자가 처리된다.

  • Light액터의 Details->Cascaded Shadow Maps에서 관련 속성을 조정할 수 있다.

  • Project Settings -> Lighting -> Generate Mesh Distance Fields 를 활성화하면 모든 모델에 대해 Mesh Distance Field를 생성한다.

  • Mesh Distance Field는 그림자 정보를 생성할 목적으로 만들어진 또 하나의 모델이다(실제 모델보다 단순한 형태의 모형). 모델에서 카메라가 특정거리(설정 가능) 이상 멀어지면 실제 모델이 아닌 이 정보로 그림자를 생성한다. 최적화를 위한 방법인 셈이다.

Lightmass Importance Volume

라이팅 처리를 할 때 중요도에 따라 퀄리티를 다르게 처리하게 하는 액터이다. 월드에 배치 후 영역을 잡아주면 안쪽에 영역은 퀄리티가 높게, 바깥 쪽 영역은 퀄리티가 낮게 라이팅이 처리된다. 플레이어가 움직이는 구간이나, 카메라에 주로 보여지는 부분을 Lightmass Importance Volume 내 영역으로 잡아준다.

노란색 박스가 Lightmass Importance Volume

Lightmass Portal

Sky Light가 구조물에 반사되는 것을 지원하는 액터. 특정 공간의 반사광을 증가시키기 위해 사용한다. 창문 같은 곳에 사용하기 적합하다.

Lightmass Portal을 적용한 모습

profile
Game Engine/Client Programmer

0개의 댓글