스테이셔너리 라이트

실행시간에 색이나 밝기는 바꿀 수 있어도 이동 및 회전, 영향력 크기를 바꿀 수는 없는 라이트 유형입니다.

Windows
MacOS
Linux

Stationary Lights (스테이셔너리 라이트)는 한 위치에 머물되, 밝기나 색과 같은 것은 바꿀 수 있는 라이트입니다. 게임플레이 도중엔 어떻게도 변하지 않는 스태틱 라이트와 다른 점이지요. 그러나 밝기를 실행시간에 바꿔도 직사광에만 영향을 끼친다는 데 유의해 주십시오. 간접(반사)광은 라이트매스에서 미리 계산되므로 변하지 않습니다.

세 가지 라이트 모빌리티 속성 중, 스테이셔너리 라이트는 거의 퀄리티 최고, 변화가능성 중간, 퍼포먼스 비용 중간입니다.

스테이셔너리 라이트에서 나오는 모든 간접광과 그림자는 라이트맵 안에 저장됩니다. 직사 그림자는 섀도맵 안에 저장됩니다. 여기서는 디스턴스 필드 섀도를 활용하는데, 라이팅된 오브젝트의 라이트맵 해상도가 꽤나 낮아도 그림자를 바삭바삭하게 구워낼 수 있다는 뜻입니다.

직사광

스테이셔너리 라이트의 직사광은 디퍼드 셰이딩을 사용하여 동적으로 렌더링합니다. 이를 통해 실행시간에 밝기와 색을 바꿀 수 있으며, 라이트 함수나 IES 프로파일과 마찬가지입니다. 라이트는 movable(이동) 라이트와 마찬가지로 하이 퀄리티 분석적 스페큘러를 갖습니다. 직사광은 라이트의 Visible 프로퍼티 조정을 통해 게임에서 보이거나 숨길 수 있습니다.

DirectLighting.png

스테이셔너리 라이트의 직사광

직접 그림자

광원에서의 실시간 그림자 처리는 퍼포먼스 비용이 크게 듭니다. 그림자가 있는 풀 다이내믹 라이트의 렌더링 비용은 그림자가 없는 다이내믹 라이트에 비할 때 20 배까지 드는 경우가 종종 있습니다. 그렇기에 스테이셔너리 라이트에는 정적인 오브젝트에 정적인 그림자를 드리우는 기능이 있으나, 제약이 약간 있습니다.

스태틱 섀도잉

불투명 위

라이트매스 글로벌 일루미네이션 는 라이팅 리빌드 도중 정적인 오브젝트 상의 스테이셔너리 라이트에 대해 디스턴스 필드 섀도 맵 을 생성합니다. 디스턴스 필드 섀도 맵은 극저해상도에서도 그림자 전환이 매우 정확하게 일어나며, 실행시간 비용도 매우 쌉니다. 디스턴스 필드 섀도 맵 역시 라이트맵처럼 스태틱 라이팅을 사용하는 모든 스태틱 메시 에 고유하게 펼쳐진 UV 가 필요합니다.

DistanceFieldShadows.png

디스턴스 필드 섀도로 불투명 표면에 정확히 표현되는 스태틱 메시 액터 그림자

디스턴스 필드 섀도는 라이팅을 빌드해야 표시되며, 빌드하지 않은 경우 미리보기에는 전체 씬 다이내믹 섀도가 사용됩니다.

스테이셔너리 라이트의 그림자는 4 개까지만 겹칠 수 있는데, 라이트를 섀도맵 텍스처의 각기 다른 채널에 할당해 줘야 하기 때문입니다. 이는 그래프 컬러링 문제인데, 종종 그 위상학적 이유로 인해 겹치는 부분은 4 개 까지만 허용됩니다. 현재 섀도잉은 겹침 검사에 영향을 끼칠 수가 없어, 전형적인 태양이 있다면 그 태양이 속한 전체 레벨은 지하라 할지라도 채널을 하나 필요로 합니다. 채널 한도에 걸리면 그 이후로 추가되는 스테이셔너리 라이트는 심각한 퍼포먼스 비용을 물고 전체 씬 다이내믹 섀도를 사용하게 됩니다. StationaryLightOverlap (스테이셔너리 라이트 겹침) 뷰모드에서는 라이트 수정에 따라 겹치는 부분이 바로 업데이트됩니다. 겹치는 부분이 바로 업데이트됩니다. 채널을 할당하지 못한 라이트는 빨강 X 로 변합니다.

OverlapError.png

스테이셔너리 라이트 겹침 뷰모드에 라이트가 너무 많이 겹친 것이 표시되고 있습니다. 스포트 라이트 뒤의 라이트 세 개를 보시면, 왼쪽과 가운데 라이트의 반경이 스포트 라이트 의 반경에 겹치는 반면 오른쪽 것은 겹치지 않는 것을 볼 수 있습니다.

반투명 위

반투명 역시 스테이셔너리 라이트에서 매우 싼 그림자를 받을 수 있는데, 라이트매스가 스태틱 지오메트리에서의 섀도 뎁스 맵을 미리 계산하여 실행시간에 반투명에 적용합니다. 이러한 형태의 섀도잉은 꽤나 거칠어서, 미터 단위 스케일의 섀도잉만 캡처합니다.

섀도 없는 반투명

디렉셔널 라이트의 스태틱 섀도잉을 받는 반투명

스태틱 섀도 뎁스 맵의 해상도는 BaseLightmass.ini 에서 StaticShadowDepthMapTransitionSampleDistanceX 와 StaticShadowDepthMapTransitionSampleDistanceY 로 조절합니다. 기본값은 100, 즉 1 미터당 한 픽셀을 뜻합니다.

다이내믹 섀도잉

다이내믹 오브젝트(, 이를테면 모빌리티가 무버블로 설정된 스태틱 메시 컴포넌트 및 스켈레탈 메시 컴포넌트)는, 디스턴스 필드 섀도맵에서 월드의 스태틱 섀도잉에 통합시켜야 합니다. 이는 Per Object 섀도로 가능합니다. 각 이동 오브젝트는 하나의 스테이셔너리 라이트에서 다이내믹 섀도를 두 개 만듭니다: 오브젝트에 드리워지는 정적인 월드에 대한 그림자와, 월드에 드리워지는 오브젝트에 대한 그림자입니다. 이런 구성에서 스테이셔너리 라이트에 드는 섀도잉 비용은, 영향을 끼치는 다이내믹 오브젝트에서만 발생합니다. 즉 다이내믹 오브젝트의 수에 따라 비용이 매우 조금 들 수도 많이 들 수도 있습니다. 다이내믹 오브젝트의 수가 일정 이상이라면, 무버블 라이트의 효율이 더 좋습니다.

아래 씬에서 구체는 모두 무버블 이며, 둘 다 스태틱 월드의 그림자를 받으면서 자신의 그림자를 드리우고 있고, 그 내용이 디스턴스 필드 섀도에 병합됩니다. 각 무버블 컴포넌트에 대한 Per Object 그림자 절두체 역시 표시됩니다.

DynamicObjectShadowFrustums.png

무버블 컴포넌트에 사용되는 Per Object 그림자는 오브젝트의 바운드에 섀도맵을 적용하므로, 바운드가 정확해야 합니다. 스켈레탈 메시의 경우 피직스 애셋이 있어야 한다는 뜻입니다. 파티클 시스템의 경우 고정 바운딩 박스가 모든 파티클을 담을 만큼 충분히 커야 합니다.

Directional light dynamic shadowing

Directional Light Stationary (스테이셔너리 디렉셔널 라이트)는 스태틱 섀도잉과 동시에 캐스케이드 섀도 맵 을 통해 전체 씬 그림자를 지원한다는 점에서 특수한 라이트입니다. 움직이는 폴리지가 많은 레벨에서 특히나 유용한데, 플레이어 주위로 움직이는 그림자를 두되, 넓은 시야 범위를 커버하기 위해 다수의 캐스케이드 비용을 들이지 않고자 할 때입니다. 거리에 따라 다이내믹 섀도를 스태틱 섀도로 페이드 인 시켜, 그림자의 갑작스런 전환이 눈에띄지 않도록 합니다. 이런 구성을 하기 위해서는 스테이셔너리 디렉셔널 라이트Dynamic Shadow Distance StationaryLight (다이내믹 섀도 거리 스테이셔너리 라이트** 를 페이드가 시작되었으면 하는 범위로 바꿔주면 됩니다.

무버블 컴포넌트는 디렉셔널 라이트에 캐스케이드 섀도 맵을 사용할 때라도 오브젝트별 그림자를 생성합니다. 이러한 작동방식은 다이내믹 섀도 거리가 작을 때는 좋지만, 거리가 커지면 불필요한 비용이 발생합니다. 오브젝트별 그림자를 꺼 퍼포먼스 비용을 절약하려면, 라이트의 Use Inset Shadows For Movable Objects (무버블 오브젝트에 내부설정 그림자 사용) 옵션을 끄면 됩니다.

간접광

스테이셔너리 라이트는 스태틱 라이트와 마찬가지로 자신의 간접광 정보를 라이트맵에 저장합니다. 간접광은 직사광처럼 그 밝기나 색을 실행시간에 변경할 수 없습니다. 즉 라이트에 Visible 체크가 되지 않았더라도 그 간접광은 라이팅 빌드 도중 라이트맵에 포함된다는 뜻입니다. 라이트의 IndirectLightingIntensity (간접광 강도)를 통해 라이팅 빌드 시간에 특정 라이트에서 나오는 간접광 세기를 조절하거나 끌 수 있습니다.

하지만 IndirectLightingIntensity (간접광 강도)라는 포스트 프로세스 볼륨 세팅으로 모든 라이트에 대한 라이트맵 공헌도의 스케일을 조절함으로써, 실행시간에 블루프린트를 통한 변경이 가능합니다.

스테이셔너리 라이트에 에어리어 섀도 사용

언리얼 엔진 4.9 이후 버전에서, 스테이셔너리 디렉셔널 라이트에 섀도잉 옵션이 새로 생겼는데, 라이트매스 옵션 중 Use Area Shadows for Stationary Lights (스테이셔너리 라이트에 에어리어 섀도 사용) 옵션이 그것입니다.

Area_Shadows_Options.png

이 옵션을 켜려면 먼저 씬의 디렉셔널 라이트 를 선택하고 모빌리티스테이셔너리 로 설정되어 있는지 확인합니다. 그런 다음 디렉셔널 라이트의 Lightmass (라이트매스) 섹션에서, Use Area Shadows for Stationary Lights (스테이셔너리 라이트에 에어리어 섀도 사용) 옆의 박스를 클릭하여 체크합니다. 이 옵션이 켜진 상태에서, 스테이셔너리 라이트는 미리계산된 섀도 맵에 에어리어 섀도를 사용합니다. 에어리어 섀도는 그림자를 드리운 것에서 멀리 떨어져 있을 수록 그림자가 부드러워집니다. 다음 그림에서 그 두 가지 섀도잉 메서드 사이의 차이점을 확인할 수 있습니다.

에어리어 섀도 켜짐

에어리어 섀도 꺼짐

참고로 에어리어 섀도는 스테이셔너리 라이트에만 작동하며, 동일한 섀도 퀄리티와 선명도를 내기 위해서는 일부 오브젝트의 라이트맵 해상도를 높여줘야 할 수 있습니다.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼