디퍼드 렌더러는 GBuffer로 렌더링된다.

 

모든 로직

Cpu가 렌더링 1프레임 전에 계산을 다 해놓는다.

CPU – draw 스레드 – GPU 가 각각 1프레임씩 차지한다.

 

계산 (프레임 0)

렌더링과 관련 없는 모든 것을 계산 (모든 버텍스의 위치, 렌더링 정보

)

Visibility 프로세스 (프레임 1)

Visibility Culling에서 수행해야 할 연산의 수를 줄이기 위해 아래의 작업들을 수행한다.

1. Distance Culling (기본 활성화)

- Cull Distance Volume을 사용하면 사이즈에 따른 Cull Distance 거리를 설정할 수 있다. 사이즈는 2의 제곱수가 좋다 (512같은)

2. Frustum Culling (기본 활성화)

 

3. Precomputed Visibility (기본 활성화 X)

- 모바일 디바이스나 특정 콘솔에서 좋은 효과를 보인다.

- 카메라가 셀에 진입하면 자신이 셀에 진입했다는 것을 셀에 통보하고 현재 셀에 저장된 배열에서 어떤 걸 표시할지 물어본다. 그러면 셀이 카메라에게 보이는 요소들을 알려준다.

- PreComputedVisibilityVolume 사용        

- 라이팅을 구워야 함, 월드세팅에서 precomputedVisibilty 체크

- PC에서도 설정하면 오클루전에 걸리는 시간을 조금이라도 줄일 수 있다.

 

4. Visibility Culling

- 가려지는 액터를 컬링

- 하드웨어 오클루전은 모든 디바이스에서 작동하는 것이 아니다.

- 소프트웨어 오클루전은 메시 LOD를 사용한다. 오클루더 메시로 사용할 LOD를 정의해 오클루더로 사용한다. 메시 LOD는 잘 사용하지는 않는 기능이다.

 

GPU (프레임 2)

ByPass

1. Early Z Pass

- 씬 뎁스를 렌더링

2. Basepass

- 그려야할 목록을 만든다 (보통 3D 사물)

- RenderDoc을 사용하면 GPU가 특정 프레임에서 렌더링하는 방식과 데이터를 캡처해줘서 드로 콜, 셰이더, 머터리얼이 렌더링되는 지점을 정확히 파악할 수 있게 된다. 렌더링은 드로콜 하나당 발생한다.

- GPU Visualizer에서 각각의 드로 콜을 렌더링하는데 얼마나 걸리는지 파악할 수 있다.

- 다이나믹 인스턴싱 (기본 활성화) : 비슷한 메시를 한 번의 드로우 콜로 일괄 처리, 렌더링 + 메모리에 하나만 로드

- 스태틱 메시도 메모리에 하나만 올라감

- Lightmass라는 개별 애플리케이션에 의해 Lightmap이 만들어진다.

- Volumetric Light maps vs Volume Lighting Sample 라이팅 맵 계산 방법 (고수준 vs 저수준)

- Volumetric Light maps : 월드에 격자로 구체를 배치, 구체에 색을 저장, 돌아다니는 캐릭터에는 캐릭터에 가장 가까이 있는 구체에서 얻은 색을 사용하여 셰이더 처리  

 

GBUFFER

베이스 패스를 다양한 버전으로 렌더링한 것

1. 노멀

2. Specular/Roughness/Metallic

3. 베이스 컬러

4. 베이스 컬러 + 라이팅

 

Dynamic Lighting / Shadow

상황에 따라 특화된 방법(실내, 야외)이 있기 때문에 다양한 솔루션이 존재한다.

Direct / Indirect, Light/Shadow로 분리하여 4가지 집합으로 묶인다.

 

1. Direct / Light

- IES Profiles : 빛의 세기, 굴절 텍스처, 스태틱 라이트에도 적용 가능

- Light Functions 머터리얼 : 구름이 월드에 그림자 드리우게, 물 반사에 사용, 퍼포먼스 비용 높음

 

2. Direct / Shadow

- Dynamic Shadow (구형 시스템) - Cache Shadow가 기본적으로 켜져 있어서 라이트가 가만히 있는 경우에는 좋다.

- Cascaded Shadow Maps (Outdoor 전용) : 3개의 다른 섀도우 맵에 저장됨, low medium high quality, 일정 거리 이상 떨어지면 천천히 사라진다.

- Distance Field Shadow (중요) (기본 활성화 X) :

Distance Field = 모델의 모양을 함수로 저장 = 표면으로부터 얼마나 떨어져 있는지에 대한 정보

멀리 떨어져 있는 그림자에 보통 사용

Cascaded보다 정밀하지는 않지만 비용이 저렴함, 대신 메모리를 사용

Distance Field Mesh는 머터리얼 이펙트, 앰비언트 오클루전에도 사용된다.

- 레이 트레이싱 섀도우

- Object Shadow, Inset Shadow : 한정된 크기의 섀도우 맵을 사용하는 것 (캐릭터의 그림자)

- Contact Shadows : 표면 뒤쪽에 미세 접촉면 그림자를 만드는 스크린 스페이스 이펙트 (매우 작은 물체에 드리우는 그림자에 사용)

 

3. Indirect / Light (보통 게임에서 사용 안함)

- Light Propagation (구형 시스템): 실시간 글로벌 일루미네이션을 표현해주는 수단

- Lay Tracing GI : 비용이 매우 비쌈

 

4. Indirect / Shadow

- Capsule Shadow : 모든 스켈레탈 메시에는 그 주위를 둘러싼 간소화된 콜리전이 있다. 이걸 사용한다. 많은 유닛이 등장할 떄 적용할 수 있다. 라이트가 강하지 않은 경우에 유용하다.

- DFAO : 큰 규모의 앰비언트 오클루전, 스카이라이트가 Static이거나 Movable인 경우,

디스턴스 필드에 의존도가 높은 경우, 액터들 의 스케일을 일관되게 유지해야 한다.

- Raytraced AO

 

 

Reflection (반사)

-> 방향으로 중첩되는 구성, 갈수록 비용 비쌈,  비용이 가장 비싼 마지막 단계로 보낼 픽셀을 최소화

Reflection Captures -> Planar Reflections -> Screen Space Reflections

Reflection Captures (레벨에 배치): 스태틱 싱글 큐브맵 캡처, 반경이 작은 부분에 적용하기 좋음

Planar Reflections (레벨에 배치): 평평한 표면, 실시간으로만 작동하기 떄문에 비싼 비용

Screen Space Reflection (기본 활성화) : 이미 렌더링된 부분을 보고 Screen SpaceReflection을 입힘, 포스트 프로세스 볼륨, SSR 세팅으로 퀄리티를 설정할 수 있다.

Raytraced Reflections

 

Additional

Atmosphere

Sky

Atmosphere

Exponential height Fog : 멀리 떨어지면 사라지는 안개 Volumetric Fog를 구현할 수 있다.

Volumetric Fog : 볼류메트릭 라이트맵을 사용해 안개에 색을 입힘, Static Light에 의존한다.

Atmospheric Fog : 복잡한 안개를 렌더링하는 시스템

 

Translucency(반투명)

Refraction

두가지 렌더링 방식 - 머터리얼의 Refraction 프로퍼티에서 Refraction Mode 설정

- Pixel Normal Offset : 물의 표면처럼 평평한 경우

- Index of Refraction : 3D 오브젝트

 

 

셰이딩 모델 Default Lit, Translucency 프로퍼티에서 LightingMode 설정

1. Volumetric NonDirectional: 가장 저렴

2. Volumetric PerVertex NonDirectional : 비슷?

3. Surface ForwardShading : 비싸지만 퀄리티 좋음

 

PostProecessing

대부분이 기본으로 활성화되어 있음

 

포스트 프로세스 볼륨을 제일 많이 사용

1. 톤 매핑 맵에 톤을 더해 색을 보정, Sharpen 커맨드

2. Standard Bloom vs Convolution bloom, Convolution은 비싸서 게임에 X

다수의 bloom(다수의 레이어)을 캡처하고 블렌딩하여 최종 이미지를 만듬

3. SSAO (Screen Space Ambient Occlusion) (기본 활성화)

4. SSSSS (Screen Space Sub Surface Scattering) : 피부에 사용하는 스크린 스페이스 이펙트

5. SSGI (Screen Space Global illumination) (기본 비활성화) : 포토샵 효과

6. Depth of Field : Gaussian(low) / Bokeh(비쌈) / Circle Cinematic(좋음)

7. Exposure (기본 활성화) : 빛에 눈이 적응하는 변화 정도

8. Blendables (PostProcess Material) (중요) : 머터리얼 에디터로 포스트 프로세싱을 수정하는 방법

물속을 포스트 프로세스 볼륨으로 만들고 포스트 프로세스 머터리얼(머터리얼 도메인이 Post Process)을 적용

머터리얼 에디터에서는 최종 렌더링된 프레임(화면)을 얻어 수정한 뒤 다시 적용할 수 있다.

플레이어가 피격당했을 때의 효과

9. Camera Effects

 

Performance

에디터 툴, 검증 툴, 도구 등

CVars (중요): 콘솔로 입력할 수 있는 것들

r.XXXXXXXXXXX

다양한 디바이스에서의 프로젝트와 게임의 퍼포먼스를 제어할 수 있다 디바이스마다 설정을 다르게 할 수 있다.

모르겠으면 Help 치면 된다.

Quality 다루는 것들은 0을 입력할 경우 기능이 꺼진다. 에디터 재시작하면 복구된다.

런타임중에 설정을 바꾸고 확인할 수 있다.

 

Scalability Example

Window -> Developer Tools -> Device Profiles 에서 직접 수정 혹은

Config 폴더 -> DefaultDeviceProfiles.ini 파일 수정

 

Rendering Advice (중요)

삼각형과 드로우콜 최적화

1. Window -> Statistics  

- 드로우 콜과 삼각형 개수에 대한 정보 제공

2. 내장 플러그인을 사용해 메시를 병합할 수 있다.

- 3가지 방식 (애셋 병합해서 하나의 스태틱 메시 액터 만들기 / 프록시 : 새 텍스처를 만들어서 머터리얼을 병합, 메시 결합 후 폴리곤 수 감소 (멀리 떨어져 있는 물체에 적절) / 합친 후 인스턴트 스태틱 메시 컴포넌트로 사용하기)

3. Hitting the right balance

지나치게 많은 메시를 한 데 합치지 않도록 균형을 잡기

4. Lods / Force Lod / Reduction

- Lod 고정 / 디바이스에 따른 퀄리티 설정

5. Detail Mode

- 게임의 월드 디테일이 낮게 설정되어 있다면 StaticMesh에 설정된 LOD Detail Mode가 높게 설정된 액터를 제거해준다. (작은 물체는 LOD Detail을 높게 설정하자)

 

그림자 렌더링

1. Cascaded Shadow MapDistance Field Shadow 간의 밸런스 조절하기

- CasCaded는 더 빨리 사라진다.

2. Far Shadow (구형)

3. Toggling / Light Range

- Light Range를 줄이거나, 블루프린트를 사용하여 카메라와 광원 사이의 거리를 1초마다 재서 그림자를 비활성화하기

4. PolyCount / LODs

5. Large Meshes / Foliage Shadows

- 커다란 단일 메시나 폴리지의 그림자를 드리우는 건 비용이 크니 필요하다면 꺼야 한다.

6. Toggling Shadows on detail meshes (DF + Regular)

- Distance Field는 멀리 떨어진 그림자를 볼 수 있게 도와주는 기능이기 때문에 멀리 있는 작은 물체에 Distance Field Shadow를 드리울 필요는 없다. 레벨뿐만이 아니라 스태틱 메시 애셋 자체에서 설정할 수 있다.

 

Material Cost

- Noise와 같은 비싼 연산이 존재한다.

- Instruction Counts / Shader complexity

 

Translucency

- 되도록이면 Unlit 사용하기

- Instruction count가 다른 머터리얼에 비해 더 중요함

- Lit을 사용한다면 Volume NonDirectional mode + CVars를 사용하여 흐린 섀도우를 미세조정

- Forward, Reflection은 매우 비쌈

- 디더링된 오파시티 마스크를 사용하여 반투명 흉내낼 수 있다.

 

Baking Light

- 규모가 큰 월드에 서로 다른 레벨이 여러 개 있다면 라이트를 굽는 동안 모두 활성화되어야 한다. 라이트는 레벨별로 구울 수 없다.

- 볼류메트릭 라이트맵의 셀 크기를 조절

- Lightmap Density Viewmode를 사용하여 특정 메시들에 라이트맵을 직접 오버라이드하여 밀도를 수정 또는 메시의 라이트맵 해상도를 수정

- Volumetric Lightmap Density Volume을 사용하여 수정할 수 있다. 라이팅 빌드 정보, 레벨 라이팅 스케일

- 빌드 시간 = 라이트맵 해상도 + 라이트 수 + 메시 수 + Source Radius + Radius

 

Reflection

- 디테일이 필요한 부분에 Sphere Reflection Capture를 두자

 

Forward / Mobile

- 프로젝트 세팅에서 활성화

- CVar로 실험하여 퀄리티와 퍼포먼스 조화시키기

 

포워드 렌더링

디퍼드 렌더링

모두 지원

디퍼드 렌더러는 GBuffer로 렌더링된다.

 

모든 로직

Cpu가 렌더링 1프레임 전에 계산을 다 해놓는다.

CPU – draw 스레드 – GPU 가 각각 1프레임씩 차지한다.

 

계산 (프레임 0)

렌더링과 관련 없는 모든 것을 계산 (모든 버텍스의 위치, 렌더링 정보

)

Visibility 프로세스 (프레임 1)

Visibility Culling에서 수행해야 할 연산의 수를 줄이기 위해 아래의 작업들을 수행한다.

1. Distance Culling (기본 활성화)

- Cull Distance Volume을 사용하면 사이즈에 따른 Cull Distance 거리를 설정할 수 있다. 사이즈는 2의 제곱수가 좋다 (512같은)

2. Frustum Culling (기본 활성화)

 

3. Precomputed Visibility (기본 활성화 X)

- 모바일 디바이스나 특정 콘솔에서 좋은 효과를 보인다.

- 카메라가 셀에 진입하면 자신이 셀에 진입했다는 것을 셀에 통보하고 현재 셀에 저장된 배열에서 어떤 걸 표시할지 물어본다. 그러면 셀이 카메라에게 보이는 요소들을 알려준다.

- PreComputedVisibilityVolume 사용        

- 라이팅을 구워야 함, 월드세팅에서 precomputedVisibilty 체크

- PC에서도 설정하면 오클루전에 걸리는 시간을 조금이라도 줄일 수 있다.

 

4. Visibility Culling

- 가려지는 액터를 컬링

- 하드웨어 오클루전은 모든 디바이스에서 작동하는 것이 아니다.

- 소프트웨어 오클루전은 메시 LOD를 사용한다. 오클루더 메시로 사용할 LOD를 정의해 오클루더로 사용한다. 메시 LOD는 잘 사용하지는 않는 기능이다.

 

GPU (프레임 2)

ByPass

1. Early Z Pass

- 씬 뎁스를 렌더링

2. Basepass

- 그려야할 목록을 만든다 (보통 3D 사물)

- RenderDoc을 사용하면 GPU가 특정 프레임에서 렌더링하는 방식과 데이터를 캡처해줘서 드로 콜, 셰이더, 머터리얼이 렌더링되는 지점을 정확히 파악할 수 있게 된다. 렌더링은 드로콜 하나당 발생한다.

- GPU Visualizer에서 각각의 드로 콜을 렌더링하는데 얼마나 걸리는지 파악할 수 있다.

- 다이나믹 인스턴싱 (기본 활성화) : 비슷한 메시를 한 번의 드로우 콜로 일괄 처리, 렌더링 + 메모리에 하나만 로드

- 스태틱 메시도 메모리에 하나만 올라감

- Lightmass라는 개별 애플리케이션에 의해 Lightmap이 만들어진다.

- Volumetric Light maps vs Volume Lighting Sample 라이팅 맵 계산 방법 (고수준 vs 저수준)

- Volumetric Light maps : 월드에 격자로 구체를 배치, 구체에 색을 저장, 돌아다니는 캐릭터에는 캐릭터에 가장 가까이 있는 구체에서 얻은 색을 사용하여 셰이더 처리  

 

GBUFFER

베이스 패스를 다양한 버전으로 렌더링한 것

1. 노멀

2. Specular/Roughness/Metallic

3. 베이스 컬러

4. 베이스 컬러 + 라이팅

 

Dynamic Lighting / Shadow

상황에 따라 특화된 방법(실내, 야외)이 있기 때문에 다양한 솔루션이 존재한다.

Direct / Indirect, Light/Shadow로 분리하여 4가지 집합으로 묶인다.

 

1. Direct / Light

- IES Profiles : 빛의 세기, 굴절 텍스처, 스태틱 라이트에도 적용 가능

- Light Functions 머터리얼 : 구름이 월드에 그림자 드리우게, 물 반사에 사용, 퍼포먼스 비용 높음

 

2. Direct / Shadow

- Dynamic Shadow (구형 시스템) - Cache Shadow가 기본적으로 켜져 있어서 라이트가 가만히 있는 경우에는 좋다.

- Cascaded Shadow Maps (Outdoor 전용) : 3개의 다른 섀도우 맵에 저장됨, low medium high quality, 일정 거리 이상 떨어지면 천천히 사라진다.

- Distance Field Shadow (중요) (기본 활성화 X) :

Distance Field = 모델의 모양을 함수로 저장 = 표면으로부터 얼마나 떨어져 있는지에 대한 정보

멀리 떨어져 있는 그림자에 보통 사용

Cascaded보다 정밀하지는 않지만 비용이 저렴함, 대신 메모리를 사용

Distance Field Mesh는 머터리얼 이펙트, 앰비언트 오클루전에도 사용된다.

- 레이 트레이싱 섀도우

- Object Shadow, Inset Shadow : 한정된 크기의 섀도우 맵을 사용하는 것 (캐릭터의 그림자)

- Contact Shadows : 표면 뒤쪽에 미세 접촉면 그림자를 만드는 스크린 스페이스 이펙트 (매우 작은 물체에 드리우는 그림자에 사용)

 

3. Indirect / Light (보통 게임에서 사용 안함)

- Light Propagation (구형 시스템): 실시간 글로벌 일루미네이션을 표현해주는 수단

- Lay Tracing GI : 비용이 매우 비쌈

 

4. Indirect / Shadow

- Capsule Shadow : 모든 스켈레탈 메시에는 그 주위를 둘러싼 간소화된 콜리전이 있다. 이걸 사용한다. 많은 유닛이 등장할 떄 적용할 수 있다. 라이트가 강하지 않은 경우에 유용하다.

- DFAO : 큰 규모의 앰비언트 오클루전, 스카이라이트가 Static이거나 Movable인 경우,

디스턴스 필드에 의존도가 높은 경우, 액터들 의 스케일을 일관되게 유지해야 한다.

- Raytraced AO

 

 

Reflection (반사)

-> 방향으로 중첩되는 구성, 갈수록 비용 비쌈,  비용이 가장 비싼 마지막 단계로 보낼 픽셀을 최소화

Reflection Captures -> Planar Reflections -> Screen Space Reflections

Reflection Captures (레벨에 배치): 스태틱 싱글 큐브맵 캡처, 반경이 작은 부분에 적용하기 좋음

Planar Reflections (레벨에 배치): 평평한 표면, 실시간으로만 작동하기 떄문에 비싼 비용

Screen Space Reflection (기본 활성화) : 이미 렌더링된 부분을 보고 Screen SpaceReflection을 입힘, 포스트 프로세스 볼륨, SSR 세팅으로 퀄리티를 설정할 수 있다.

Raytraced Reflections

 

Additional

Atmosphere

Sky

Atmosphere

Exponential height Fog : 멀리 떨어지면 사라지는 안개 Volumetric Fog를 구현할 수 있다.

Volumetric Fog : 볼류메트릭 라이트맵을 사용해 안개에 색을 입힘, Static Light에 의존한다.

Atmospheric Fog : 복잡한 안개를 렌더링하는 시스템

 

Translucency(반투명)

Refraction

두가지 렌더링 방식 - 머터리얼의 Refraction 프로퍼티에서 Refraction Mode 설정

- Pixel Normal Offset : 물의 표면처럼 평평한 경우

- Index of Refraction : 3D 오브젝트

 

 

셰이딩 모델 Default Lit, Translucency 프로퍼티에서 LightingMode 설정

1. Volumetric NonDirectional: 가장 저렴

2. Volumetric PerVertex NonDirectional : 비슷?

3. Surface ForwardShading : 비싸지만 퀄리티 좋음

 

PostProecessing

대부분이 기본으로 활성화되어 있음

 

포스트 프로세스 볼륨을 제일 많이 사용

1. 톤 매핑 맵에 톤을 더해 색을 보정, Sharpen 커맨드

2. Standard Bloom vs Convolution bloom, Convolution은 비싸서 게임에 X

다수의 bloom(다수의 레이어)을 캡처하고 블렌딩하여 최종 이미지를 만듬

3. SSAO (Screen Space Ambient Occlusion) (기본 활성화)

4. SSSSS (Screen Space Sub Surface Scattering) : 피부에 사용하는 스크린 스페이스 이펙트

5. SSGI (Screen Space Global illumination) (기본 비활성화) : 포토샵 효과

6. Depth of Field : Gaussian(low) / Bokeh(비쌈) / Circle Cinematic(좋음)

7. Exposure (기본 활성화) : 빛에 눈이 적응하는 변화 정도

8. Blendables (PostProcess Material) (중요) : 머터리얼 에디터로 포스트 프로세싱을 수정하는 방법

물속을 포스트 프로세스 볼륨으로 만들고 포스트 프로세스 머터리얼(머터리얼 도메인이 Post Process)을 적용

머터리얼 에디터에서는 최종 렌더링된 프레임(화면)을 얻어 수정한 뒤 다시 적용할 수 있다.

플레이어가 피격당했을 때의 효과

9. Camera Effects

 

Performance

에디터 툴, 검증 툴, 도구 등

CVars (중요): 콘솔로 입력할 수 있는 것들

r.XXXXXXXXXXX

다양한 디바이스에서의 프로젝트와 게임의 퍼포먼스를 제어할 수 있다 디바이스마다 설정을 다르게 할 수 있다.

모르겠으면 Help 치면 된다.

Quality 다루는 것들은 0을 입력할 경우 기능이 꺼진다. 에디터 재시작하면 복구된다.

런타임중에 설정을 바꾸고 확인할 수 있다.

 

Scalability Example

Window -> Developer Tools -> Device Profiles 에서 직접 수정 혹은

Config 폴더 -> DefaultDeviceProfiles.ini 파일 수정

 

Rendering Advice (중요)

삼각형과 드로우콜 최적화

1. Window -> Statistics  

- 드로우 콜과 삼각형 개수에 대한 정보 제공

2. 내장 플러그인을 사용해 메시를 병합할 수 있다.

- 3가지 방식 (애셋 병합해서 하나의 스태틱 메시 액터 만들기 / 프록시 : 새 텍스처를 만들어서 머터리얼을 병합, 메시 결합 후 폴리곤 수 감소 (멀리 떨어져 있는 물체에 적절) / 합친 후 인스턴트 스태틱 메시 컴포넌트로 사용하기)

3. Hitting the right balance

지나치게 많은 메시를 한 데 합치지 않도록 균형을 잡기

4. Lods / Force Lod / Reduction

- Lod 고정 / 디바이스에 따른 퀄리티 설정

5. Detail Mode

- 게임의 월드 디테일이 낮게 설정되어 있다면 StaticMesh에 설정된 LOD Detail Mode가 높게 설정된 액터를 제거해준다. (작은 물체는 LOD Detail을 높게 설정하자)

 

그림자 렌더링

1. Cascaded Shadow MapDistance Field Shadow 간의 밸런스 조절하기

- CasCaded는 더 빨리 사라진다.

2. Far Shadow (구형)

3. Toggling / Light Range

- Light Range를 줄이거나, 블루프린트를 사용하여 카메라와 광원 사이의 거리를 1초마다 재서 그림자를 비활성화하기

4. PolyCount / LODs

5. Large Meshes / Foliage Shadows

- 커다란 단일 메시나 폴리지의 그림자를 드리우는 건 비용이 크니 필요하다면 꺼야 한다.

6. Toggling Shadows on detail meshes (DF + Regular)

- Distance Field는 멀리 떨어진 그림자를 볼 수 있게 도와주는 기능이기 때문에 멀리 있는 작은 물체에 Distance Field Shadow를 드리울 필요는 없다. 레벨뿐만이 아니라 스태틱 메시 애셋 자체에서 설정할 수 있다.

 

Material Cost

- Noise와 같은 비싼 연산이 존재한다.

- Instruction Counts / Shader complexity

 

Translucency

- 되도록이면 Unlit 사용하기

- Instruction count가 다른 머터리얼에 비해 더 중요함

- Lit을 사용한다면 Volume NonDirectional mode + CVars를 사용하여 흐린 섀도우를 미세조정

- Forward, Reflection은 매우 비쌈

- 디더링된 오파시티 마스크를 사용하여 반투명 흉내낼 수 있다.

 

Baking Light

- 규모가 큰 월드에 서로 다른 레벨이 여러 개 있다면 라이트를 굽는 동안 모두 활성화되어야 한다. 라이트는 레벨별로 구울 수 없다.

- 볼류메트릭 라이트맵의 셀 크기를 조절

- Lightmap Density Viewmode를 사용하여 특정 메시들에 라이트맵을 직접 오버라이드하여 밀도를 수정 또는 메시의 라이트맵 해상도를 수정

- Volumetric Lightmap Density Volume을 사용하여 수정할 수 있다. 라이팅 빌드 정보, 레벨 라이팅 스케일

- 빌드 시간 = 라이트맵 해상도 + 라이트 수 + 메시 수 + Source Radius + Radius

 

Reflection

- 디테일이 필요한 부분에 Sphere Reflection Capture를 두자

 

Forward / Mobile

- 프로젝트 세팅에서 활성화

- CVar로 실험하여 퀄리티와 퍼포먼스 조화시키기

 

포워드 렌더링

디퍼드 렌더링

모두 지원

디퍼드 렌더러는 GBuffer로 렌더링된다.

 

모든 로직

Cpu가 렌더링 1프레임 전에 계산을 다 해놓는다.

CPU – draw 스레드 – GPU 가 각각 1프레임씩 차지한다.

 

계산 (프레임 0)

렌더링과 관련 없는 모든 것을 계산 (모든 버텍스의 위치, 렌더링 정보

)

Visibility 프로세스 (프레임 1)

Visibility Culling에서 수행해야 할 연산의 수를 줄이기 위해 아래의 작업들을 수행한다.

1. Distance Culling (기본 활성화)

- Cull Distance Volume을 사용하면 사이즈에 따른 Cull Distance 거리를 설정할 수 있다. 사이즈는 2의 제곱수가 좋다 (512같은)

2. Frustum Culling (기본 활성화)

 

3. Precomputed Visibility (기본 활성화 X)

- 모바일 디바이스나 특정 콘솔에서 좋은 효과를 보인다.

- 카메라가 셀에 진입하면 자신이 셀에 진입했다는 것을 셀에 통보하고 현재 셀에 저장된 배열에서 어떤 걸 표시할지 물어본다. 그러면 셀이 카메라에게 보이는 요소들을 알려준다.

- PreComputedVisibilityVolume 사용        

- 라이팅을 구워야 함, 월드세팅에서 precomputedVisibilty 체크

- PC에서도 설정하면 오클루전에 걸리는 시간을 조금이라도 줄일 수 있다.

 

4. Visibility Culling

- 가려지는 액터를 컬링

- 하드웨어 오클루전은 모든 디바이스에서 작동하는 것이 아니다.

- 소프트웨어 오클루전은 메시 LOD를 사용한다. 오클루더 메시로 사용할 LOD를 정의해 오클루더로 사용한다. 메시 LOD는 잘 사용하지는 않는 기능이다.

 

GPU (프레임 2)

ByPass

1. Early Z Pass

- 씬 뎁스를 렌더링

2. Basepass

- 그려야할 목록을 만든다 (보통 3D 사물)

- RenderDoc을 사용하면 GPU가 특정 프레임에서 렌더링하는 방식과 데이터를 캡처해줘서 드로 콜, 셰이더, 머터리얼이 렌더링되는 지점을 정확히 파악할 수 있게 된다. 렌더링은 드로콜 하나당 발생한다.

- GPU Visualizer에서 각각의 드로 콜을 렌더링하는데 얼마나 걸리는지 파악할 수 있다.

- 다이나믹 인스턴싱 (기본 활성화) : 비슷한 메시를 한 번의 드로우 콜로 일괄 처리, 렌더링 + 메모리에 하나만 로드

- 스태틱 메시도 메모리에 하나만 올라감

- Lightmass라는 개별 애플리케이션에 의해 Lightmap이 만들어진다.

- Volumetric Light maps vs Volume Lighting Sample 라이팅 맵 계산 방법 (고수준 vs 저수준)

- Volumetric Light maps : 월드에 격자로 구체를 배치, 구체에 색을 저장, 돌아다니는 캐릭터에는 캐릭터에 가장 가까이 있는 구체에서 얻은 색을 사용하여 셰이더 처리  

 

GBUFFER

베이스 패스를 다양한 버전으로 렌더링한 것

1. 노멀

2. Specular/Roughness/Metallic

3. 베이스 컬러

4. 베이스 컬러 + 라이팅

 

Dynamic Lighting / Shadow

상황에 따라 특화된 방법(실내, 야외)이 있기 때문에 다양한 솔루션이 존재한다.

Direct / Indirect, Light/Shadow로 분리하여 4가지 집합으로 묶인다.

 

1. Direct / Light

- IES Profiles : 빛의 세기, 굴절 텍스처, 스태틱 라이트에도 적용 가능

- Light Functions 머터리얼 : 구름이 월드에 그림자 드리우게, 물 반사에 사용, 퍼포먼스 비용 높음

 

2. Direct / Shadow

- Dynamic Shadow (구형 시스템) - Cache Shadow가 기본적으로 켜져 있어서 라이트가 가만히 있는 경우에는 좋다.

- Cascaded Shadow Maps (Outdoor 전용) : 3개의 다른 섀도우 맵에 저장됨, low medium high quality, 일정 거리 이상 떨어지면 천천히 사라진다.

- Distance Field Shadow (중요) (기본 활성화 X) :

Distance Field = 모델의 모양을 함수로 저장 = 표면으로부터 얼마나 떨어져 있는지에 대한 정보

멀리 떨어져 있는 그림자에 보통 사용

Cascaded보다 정밀하지는 않지만 비용이 저렴함, 대신 메모리를 사용

Distance Field Mesh는 머터리얼 이펙트, 앰비언트 오클루전에도 사용된다.

- 레이 트레이싱 섀도우

- Object Shadow, Inset Shadow : 한정된 크기의 섀도우 맵을 사용하는 것 (캐릭터의 그림자)

- Contact Shadows : 표면 뒤쪽에 미세 접촉면 그림자를 만드는 스크린 스페이스 이펙트 (매우 작은 물체에 드리우는 그림자에 사용)

 

3. Indirect / Light (보통 게임에서 사용 안함)

- Light Propagation (구형 시스템): 실시간 글로벌 일루미네이션을 표현해주는 수단

- Lay Tracing GI : 비용이 매우 비쌈

 

4. Indirect / Shadow

- Capsule Shadow : 모든 스켈레탈 메시에는 그 주위를 둘러싼 간소화된 콜리전이 있다. 이걸 사용한다. 많은 유닛이 등장할 떄 적용할 수 있다. 라이트가 강하지 않은 경우에 유용하다.

- DFAO : 큰 규모의 앰비언트 오클루전, 스카이라이트가 Static이거나 Movable인 경우,

디스턴스 필드에 의존도가 높은 경우, 액터들 의 스케일을 일관되게 유지해야 한다.

- Raytraced AO

 

 

Reflection (반사)

-> 방향으로 중첩되는 구성, 갈수록 비용 비쌈,  비용이 가장 비싼 마지막 단계로 보낼 픽셀을 최소화

Reflection Captures -> Planar Reflections -> Screen Space Reflections

Reflection Captures (레벨에 배치): 스태틱 싱글 큐브맵 캡처, 반경이 작은 부분에 적용하기 좋음

Planar Reflections (레벨에 배치): 평평한 표면, 실시간으로만 작동하기 떄문에 비싼 비용

Screen Space Reflection (기본 활성화) : 이미 렌더링된 부분을 보고 Screen SpaceReflection을 입힘, 포스트 프로세스 볼륨, SSR 세팅으로 퀄리티를 설정할 수 있다.

Raytraced Reflections

 

Additional

Atmosphere

Sky

Atmosphere

Exponential height Fog : 멀리 떨어지면 사라지는 안개 Volumetric Fog를 구현할 수 있다.

Volumetric Fog : 볼류메트릭 라이트맵을 사용해 안개에 색을 입힘, Static Light에 의존한다.

Atmospheric Fog : 복잡한 안개를 렌더링하는 시스템

 

Translucency(반투명)

Refraction

두가지 렌더링 방식 - 머터리얼의 Refraction 프로퍼티에서 Refraction Mode 설정

- Pixel Normal Offset : 물의 표면처럼 평평한 경우

- Index of Refraction : 3D 오브젝트

 

 

셰이딩 모델 Default Lit, Translucency 프로퍼티에서 LightingMode 설정

1. Volumetric NonDirectional: 가장 저렴

2. Volumetric PerVertex NonDirectional : 비슷?

3. Surface ForwardShading : 비싸지만 퀄리티 좋음

 

PostProecessing

대부분이 기본으로 활성화되어 있음

 

포스트 프로세스 볼륨을 제일 많이 사용

1. 톤 매핑 맵에 톤을 더해 색을 보정, Sharpen 커맨드

2. Standard Bloom vs Convolution bloom, Convolution은 비싸서 게임에 X

다수의 bloom(다수의 레이어)을 캡처하고 블렌딩하여 최종 이미지를 만듬

3. SSAO (Screen Space Ambient Occlusion) (기본 활성화)

4. SSSSS (Screen Space Sub Surface Scattering) : 피부에 사용하는 스크린 스페이스 이펙트

5. SSGI (Screen Space Global illumination) (기본 비활성화) : 포토샵 효과

6. Depth of Field : Gaussian(low) / Bokeh(비쌈) / Circle Cinematic(좋음)

7. Exposure (기본 활성화) : 빛에 눈이 적응하는 변화 정도

8. Blendables (PostProcess Material) (중요) : 머터리얼 에디터로 포스트 프로세싱을 수정하는 방법

물속을 포스트 프로세스 볼륨으로 만들고 포스트 프로세스 머터리얼(머터리얼 도메인이 Post Process)을 적용

머터리얼 에디터에서는 최종 렌더링된 프레임(화면)을 얻어 수정한 뒤 다시 적용할 수 있다.

플레이어가 피격당했을 때의 효과

9. Camera Effects

 

Performance

에디터 툴, 검증 툴, 도구 등

CVars (중요): 콘솔로 입력할 수 있는 것들

r.XXXXXXXXXXX

다양한 디바이스에서의 프로젝트와 게임의 퍼포먼스를 제어할 수 있다 디바이스마다 설정을 다르게 할 수 있다.

모르겠으면 Help 치면 된다.

Quality 다루는 것들은 0을 입력할 경우 기능이 꺼진다. 에디터 재시작하면 복구된다.

런타임중에 설정을 바꾸고 확인할 수 있다.

 

Scalability Example

Window -> Developer Tools -> Device Profiles 에서 직접 수정 혹은

Config 폴더 -> DefaultDeviceProfiles.ini 파일 수정

 

Rendering Advice (중요)

삼각형과 드로우콜 최적화

1. Window -> Statistics  

- 드로우 콜과 삼각형 개수에 대한 정보 제공

2. 내장 플러그인을 사용해 메시를 병합할 수 있다.

- 3가지 방식 (애셋 병합해서 하나의 스태틱 메시 액터 만들기 / 프록시 : 새 텍스처를 만들어서 머터리얼을 병합, 메시 결합 후 폴리곤 수 감소 (멀리 떨어져 있는 물체에 적절) / 합친 후 인스턴트 스태틱 메시 컴포넌트로 사용하기)

3. Hitting the right balance

지나치게 많은 메시를 한 데 합치지 않도록 균형을 잡기

4. Lods / Force Lod / Reduction

- Lod 고정 / 디바이스에 따른 퀄리티 설정

5. Detail Mode

- 게임의 월드 디테일이 낮게 설정되어 있다면 StaticMesh에 설정된 LOD Detail Mode가 높게 설정된 액터를 제거해준다. (작은 물체는 LOD Detail을 높게 설정하자)

 

그림자 렌더링

1. Cascaded Shadow MapDistance Field Shadow 간의 밸런스 조절하기

- CasCaded는 더 빨리 사라진다.

2. Far Shadow (구형)

3. Toggling / Light Range

- Light Range를 줄이거나, 블루프린트를 사용하여 카메라와 광원 사이의 거리를 1초마다 재서 그림자를 비활성화하기

4. PolyCount / LODs

5. Large Meshes / Foliage Shadows

- 커다란 단일 메시나 폴리지의 그림자를 드리우는 건 비용이 크니 필요하다면 꺼야 한다.

6. Toggling Shadows on detail meshes (DF + Regular)

- Distance Field는 멀리 떨어진 그림자를 볼 수 있게 도와주는 기능이기 때문에 멀리 있는 작은 물체에 Distance Field Shadow를 드리울 필요는 없다. 레벨뿐만이 아니라 스태틱 메시 애셋 자체에서 설정할 수 있다.

 

Material Cost

- Noise와 같은 비싼 연산이 존재한다.

- Instruction Counts / Shader complexity

 

Translucency

- 되도록이면 Unlit 사용하기

- Instruction count가 다른 머터리얼에 비해 더 중요함

- Lit을 사용한다면 Volume NonDirectional mode + CVars를 사용하여 흐린 섀도우를 미세조정

- Forward, Reflection은 매우 비쌈

- 디더링된 오파시티 마스크를 사용하여 반투명 흉내낼 수 있다.

 

Baking Light

- 규모가 큰 월드에 서로 다른 레벨이 여러 개 있다면 라이트를 굽는 동안 모두 활성화되어야 한다. 라이트는 레벨별로 구울 수 없다.

- 볼류메트릭 라이트맵의 셀 크기를 조절

- Lightmap Density Viewmode를 사용하여 특정 메시들에 라이트맵을 직접 오버라이드하여 밀도를 수정 또는 메시의 라이트맵 해상도를 수정

- Volumetric Lightmap Density Volume을 사용하여 수정할 수 있다. 라이팅 빌드 정보, 레벨 라이팅 스케일

- 빌드 시간 = 라이트맵 해상도 + 라이트 수 + 메시 수 + Source Radius + Radius

 

Reflection

- 디테일이 필요한 부분에 Sphere Reflection Capture를 두자

 

Forward / Mobile

- 프로젝트 세팅에서 활성화

- CVar로 실험하여 퀄리티와 퍼포먼스 조화시키기

+ Recent posts