라이트매스
높은 퀄리티의 라이팅을 구현하기 위해 사전에 라이트맵을 생성하는 기술
미리 라이트나 그림자 정보를 사전에 렌더링해서 텍스쳐 형태로 저장해두고 다이나믹 오브젝트의 경우라이트프로브를 통해 적용시키는 방식.
단순히 텍스쳐로 저장해둔 정보는 캐릭터와 같은 다이나믹 오브젝트는 영향받지 않음.
그러므로라이트프로브라는 것을 공간 전체에 적용되도록 배치시켜두고, 각각의라이트프로브가 환경광같은 정보를 수집해 저장해두게 됨.
캐릭터와 같은 다이나믹 오브젝트들이 다가오면 주면에 있는라이트프로브로부터 환경관 색깔 정보를 받아 캐릭터에 덮어 씌워주는 기능.라이트매스의 장점
사양에 비해 높은 퀄리티를 표시할 수 있음.
라이트매스의 단점
빌드시간 소요가 엄청남. 그로 인해 완벽하게 퀄리티를 끌어올리긴 어렵고 타협이 필요.
미리 빌드해두는 방식이므로, 동적 광원(시간 변형, 무너지는 지형과 같은 환경)이 필요한 경우 라이트매스를 이용한 처리가 어려움
레이트레이싱
카메라로부터 물체의 표면을 거쳐 광원에 이르기까지 광선의 경로를 실시간으로 추적하여 라이팅을 구현하는 기술.
정적인 라이팅 방식의 한계를 해결하기 위해 나온 방식.
원리는 광원에서 무한대의 광자가 난반사를 일으키며 눈에 도달하는 방식.
해당 원리를 역이용하여 카메라(시점)에서 각각의 픽셀에 광선을 발사하고, 광선이 정해진 횟수만큼 물체에 반사한 뒤 광원에 도달하는 광자만을 라이트값을 적용시켜 재질에 라이트 정보를 입히는 방식.레이트레이싱 장점
반사, 굴절효과, 그림자, 스펙큘러 반사와 같은 기존의 방식과 다른 물리적으로 매우 정확한 결과를 얻을 수 있음.
레이트레이싱 단점
아무리 최적화를 하더라도, 리얼타임으로 진행되기 때문에 사양적으로 무거운 방식임. 또한 대부분의 경우에 특정 하드웨어(RTX)를 필요로 함.
루멘
완전한 다이나믹 글로벌 일루미네이션 및 리플렉션 시스템으로 서능과 퀄리티 양쪽을 만족시키는 언리얼엔진5의 새로운 라이팅 시스템루멘 장점
엔진의 다른 기능과 잘 통합되어 있음.
소프트 레이트레이싱 방식을 구현했기 때문에 특정 하드웨어(RTX)를 요구하지 않음.루멘 단점
실시간으로 작동하는 라이팅 방식이므로 애니메이션, 방송, 영상같은 경우 원하는 퀄리티에 도달하기 어려움.
이런 경우 기존의 오프라인 렌더링 방식이 필요할 수 있기 때문에패스트레이싱기능도 같이 제공함.
어두운 환경에서 이미시브 광원이 일반적인 광원보다 강해질 경우 흐릿함(아티팩트?)가 생김.패스트레이싱
극히 사실적인 렌더링 퀄리티를 달성하기 위해 물리적으로 정확한 글로벌 일루미네이션과 리플렉션 및 리프랙션을 적용한 라이팅 시스템
- 사용법
Edit->Projectd Settings..->raytracing검색 ->
Lumen: Use Hardware Ray Tracing when available,Hardware Ray Tracing: Support Hardware Ray Tracing,Hardware Ray Tracing: Ray Tracing Shadows활성화 ->
Viewport에서Lit->Path Tracing선택패스트레이싱 장점
레이트레이싱이 정반사되는 간접조명 하나를 지원한다면 패스트레이싱은 주변의 간접조명들의 난반사를 모두 처리해주기 때문에 계산량이 많아지지만 물리적으로 정교하게 렌더링할 수 있음.
- 예시: 코스틱(Caustic)
빛의 반사광이 다른 물체에 맺히는 현상
수면 아래에 생기는 그물처럼 생긴 빛의 무늬가 대표적인 예
아웃도어 서브레벨 추가
Window->Levels
Levels->Add Existing...-> 추가할 레벨 선택(LSU2024_Exterior_Sub)
Levels창을 확인해보면 서브레벨이 파란색으로 표시되는 것을 확인 가능.
파란색으로 표시된 레벨에 에셋이나 기타 추가 생성되는 것들이 저장됨.
그러므로Persistant Level을 더블클릭하여 변경시켜야함.
- 혹시 컴퓨터의 성능이 부족해 버벅거림 발생시
Outliner->PostProcessVolume->Details에서
Lumen Global Illumination: Lumen Scene Lightning
Lumen Global Illumination: Lumen Scene Detail
Lumen Global Illumination: Final Gather Quality
전부 기본값 1로 설정.
라이팅이 물리기반 렌더러에서 어떤 특성을 가지고 어떤 반응을 하는가
이미시브
Outliner에서
DirectionalLight,ExponentialHeightFog,SkyAtmosphere,SkyLight를 삭제해도 빛이 사라지지 않고 여전히 오브젝트를 볼 수 있음.
루멘의 장점중 하나인 광원이 없어도 이미시브(스스로 발광하는) 재질같은 경우 루멘이 광원으로 인식함.
대신 이미시브 재질만 가지고는 개발 퀄리티가 떨어짐.
학습을 위해 우선 이미시브 재질의 빛을 노트북만 제외하고 다 꺼주기 위한 작업을 진행해야함.
1. TV의 경우Element2를Element1과 동일한 메테리얼로 변경.
2. 선풍기 팬의 경우SM_FanBody->Element1메테리얼 선택
Emissive를 0으로 변경.
3. 커튼 선택후 ->Element0선택
Global Scalar Parameter Value->EmissivePower값을 0으로 수정.
4. 블라인드 선택후 ->Element1선택
Global Scalar Parameter Value->EmissiveAmount값을 0으로 수정.
광원이 없음에도 불구하고 외부가 밝은 문제의 원인.
루멘이 무한한Diffuse Bounce를 제공하는데, 라이트를 갑자기 없애버리거나 광원을 갑자기 없애는 특이한 케이스의 경우 이미 발사된 광원들이 지속적으로 무한하게Diffuse Bounce를 일으켜서 밝기를 추가하고 있기 때문.
해결방법은Outliner에서 외부 에셋들을 모아둔 폴더인Exterior옆의Visibility를 비활성화했다 활성화해주면 해결.
위와 같은 노트북의 빛만 켜진 상태로 다른 이미시브 재질의 광원과
DirectionalLight,ExponentialHeightFog,SkyAtmosphere,SkyLight가 삭제된 어두운 상태가 되는 것을 확인할 수 있음.
노트북이 과하게 밝은 이유는 언리얼엔진의PostProcess가 기본적으로 제공하고 있는노출 보정기능때문.
확인하기 위해Outliner->PostProcessVolume->Details->Exposure->Matering Mode: Manual로 변경시 현실에서 보듯이 밝기가 변하는 것을 확인 가능.
다시Matering Mode: Auto Exposure Histogram으로 변경시 눈이 반응하듯이 노출 보정을 진행시켜 점차 밝아짐.
Directional Light
언리얼엔진에서 가장 가본적인 라이트. 태양과 같은 역할. 직사광선을 월드에 적용시킨다.
로테이션을 이용해 그림자나 빛의 밝기 등을 설정 가능하다.
추가로 어디에서라도Directional Light선택 후Ctrl + L을 이용하면 회전이 가능하다.
기본적으로Mobility가Stationary로 되어 있는데 만약의 경우를 대비해Movable로 변경시켜주는 것이 좋음.(어차피 루멘에서는Movable밖에 안됨)
- Stationary
라이트매스에서 스태틱 라이트와 다이내믹 라이트의 장점을 가지기 위한 라이트 모빌리티
라이트맵을 생성하면서 동시에 일부 속성을 실시간으로 변경하거나 캐릭터의 다이내믹 섀도를 형성
SkyLight
언리얼엔진에서 가장 기본적인 라이트. 대기에서 산란되는 환경광. 언리얼5에서는 루멘을 이용하면 실제 대기의 산란을 구현할 수 있음. 그렇기때문에
SkyLight만 배치하면 에러가 발생하므로 대기의 특성을 나타내기 위한 액터인SkyAtmosphere가 필요함.
동일하게Movable로 변경.
추가로Details->Light->Real Time Capture를 활성화.
SkyAtmosphere
물리 기반 하늘 및 대기 렌더링을 위한 언리얼엔진의 컴포넌트. 레일리 산란이나 미에 산란 등 실제 대기의 특성을 라이팅에 적용
ExponentialHeightFog
익스포넨셜 하이트 포그란 맵의 높이에 따라 반비례하는 안개의 농도를 부드럽게 전환시켜, 그 고도차에 따른 경계선이 눈에 띄지 않도록 하는 포그 액터.
Details->Volumetric Fog활성화시 실제 대기효과, 산란효과, 주변 환경들을 감안한 물리적으로 정확한 안개 효과를 보여줌.
그냥 배치시 안개가 카메라 바로 앞에서 시작하므로 어색하기 때문에 조정이 필요함.
Details->Volumetric Fog->Start Distance수치를 조정하여 수정 가능.
- Start Distance
안개 효과를 카메라로부터 입력된 수치만큼 멀어진 이후에 적용한다는 의미.
사진에서 2000이므로 20m부터 안개가 적용됨.
Directional Light가 있음에도 불구하고 노트북이 밝은 이유
Directional Light가 있음에도 불구하고 노트북의 이미시브 값에 의한 밝기보다 낮아서 발생함.Directional Light가 밝아보이는 이유는 노출 보정에 의해 값이 보정되기 때문.
이를 확인하기 위해서Outliner->PostProcessVolume->Exposure->Metering Mode: Manual로 변경하면Directional Light추가전보다 살짝 밝아진 것을 확인할 수 있다.
↑↑
Directional Light가 있어 지붕이 살짝 보이는 사진 ↑↑
↑↑
Directional Light가 없어 지붕이 안보이는 사진 ↑↑
해결하기 위해서는Details->Light->Intensity: 120,000lux로 변경.
(일반적인 대낮의 태양이 120,000lux)
잠시 밝아지겠지만 보정으로 인해 다시 정상적으로 돌아옴.
노트북도 빛이 나지 않는 일반적인 대낮의 노트북이 되는 것을 확인할 수 있음.
Skylight 누수
물리적으로 완벽하게 빛의 푸른느낌을 구현하기 어려운 곳(건물내부)에서 구현할 수 있도록 함.
PostProcessVolume->Details->Lumen Global Illumination->Advanced->Skylight Leaking값 설정
적용시 조금 더 자연스러운 환경광을 나타낼 수 있음.
Volumetric Clude
대기에 구름 추가 가능.
다른 구름도 사용 가능함.
Edit->Plugins->Volumetrics검색 후 활성화(첫 활성화시 에디터 재시작 필요)
Content Drawer-> 우측의Settings->Show Engine Content와Show Plugin Content활성화
All->Engine->Plugins->Volumetrics Content에서 필터를Blueprint Class로 설정하면BP_CloudMask_Object와BP_CloudMask가 있는 것을 확인 가능.
Outliner의VolumetricCloud선택 후Material: M_VolumetricCloud_03_MultipleProfiles선택.
기존의 구름이 사라진 것을 확인 가능.
Content Drawer에서 방금 찾아둔BP_CloudMask_Object와BP_CloudMask둘다 선택 후 뷰포트로 드래그앤드랍.
구름의 크기가 커서 어두운 것이므로,Outliner->BP_CloudMask_Object선택후Details->Transform->Location의 z축을 40,000으로 변경.
외에도Details탭에서 다양한 수치 조절을 통해 설정 가능.
Sun Position Calculator
설정해둔 구름,
DirectionalLight,ExponentionalHeightFog,SkyAtmosphere,SkyLight,VolumetricCloud전부 삭제후
Edit->Plugins->Sun Position Caculator활성화(동일하게 첫 활성화시 에디터 재시작 필요).
Place Actor에서SunSky검색 후 배치
해당 액터는 지금껏 배치했던Skylight,DirectionalLight,SkyAtmosphere,VolumetricCloud를 포함하고 있고, 수동으로 위도, 경도, 계절 등을 설정할 수 있음.
SunSky사용시 주의해야 할 점노출 보정에 의해 저녁시간대가 되어도 밝게 보정되는 문제가 발생하므로 노출 보정을 수정해야 함.
Solar Time이 19임에도 불구하고 저녁같지 않음.
Outliner->PostProcessVolume->Exposure->Min EV100값을 높히면 된다.
야간 빛 추가
Place Actors->Spot Light뷰포트로 드래그드랍해서 추가.
일반적인 전구가 200칸델라 정도라고 하므로Details->Light->Intensity값을 200으로 수정.
다만 매번 모든 광원에Spot Light를 추가하기엔 현실적으로 불가능하므로Prefab을 이용.
- Prefab
여러가지 컴포넌트들을 조합하여 구성된 재활용 가능한 에셋
언리얼에서는 블루프린트가 해당 역할을 한다.
Actor타입BP_SpotLight를 생성하고, 파일 오픈후HangingLight메시와 하위 컴포넌트로SpotLight를 추가.
높이와 방향을 조절.
동일하게 단위를Candelas로 변경 후 200으로 수치 조정.
뷰포트로 돌아와 좌측 상단의Lit을Unlit으로 변경하면 전등의 위치를 파악할 수 있음.
Content Drawer에서 방금 생성한BP_SpotLight선택 -> 뷰포트에서 교체할 액터들 전부 선택후 우클릭 ->RePlace Selected Actors with에서BP_SpotLight선택.
교체해도 어두운 이유는 전구 메시가SpotLight를 막고 있기 때문.
해결하려면BP_SpotLight->Details->Lighting->Lightmass Settings->Cast Shadow비활성화.
위에서 전구의 이미시브 값을 변경하였기 때문에 다시 원래값인 200으로 수정.
나나이트 메시에서 레이 트레이스드 섀도 문제 해결
1
레이트레이스드 섀도를 활성화시키고 하드웨어 레이트레이싱 상에서 나나이트 사용시 그림자 아티팩트가 생기는 문제.
원인 : 나나이트 메시를 지원하지 않는 하드웨어를 사용하는 사용자를 위헤Fallback Mesh(다양한 이유로 나나이트 메시를 사용하지 못하는 경우에 대신 사용되는 저퀄리티 메시)라는 가상의 메시가 하나 더있고, 일반적인 하드웨어에서는 나나이트가 그림자를 처리하지 못하므로 폴백 메시로 처리함.
나나이트 메쉬와 폴백 메시가 정확하게 일치하지 않아서 생기는 문제.
~를 눌러 콘솔 명력어r.RayTracing.Nanite.Mode NUMBER를 입력. NUMBER은 아무 숫자나 입력 가능.
0을 입력하면 스트리밍 폴백 메시 사용
1을 입력하면 스트리밍 되는 그림자를 직접 사용하는 방식 사용2
나나이트와 스트리밍 메시의 거리가 멀어져서 생기는 문제 해결
나나이트 메시의 LOD(정밀도를 높히면 해결 가능.)
동일하게~를 눌러 콘솔 명령어r.Nanite.ViewMeshLODBias.Offset NUMBER입력.
퍼포먼스에 문제가 생기겠지만 영상이나 레이트레이싱이므로 무관.
콘솔변수 영구변경
프로젝트 파일->config->DefaultEngine에서
[/Script/Engine.RednererSettings]에서 콘솔명령어 입력.
r.Nanite.ViewMeshLODBias.Offset=NUMBER띄우면 안되고=사용해서 값 적용시켜줘야함.