플레이너 리플렉션

국지적인 광택 리플렉션 캡처와 표시를 위한 시스템입니다.

Windows
MacOS
Linux

플레이너 리플렉션

UE4 에는 스크린 스페이스 리플렉션(Screen Space Reflection, SSR) 보다 정확한 리플렉션을 내는 실시간 플레이너 리플렉션(Planar Reflection)이 지원되는데, 렌더링 비용이 높아진다는 단점이 있습니다. 그 이유는 플레이너 리플렉션의 작동방식 때문인데, 리플렉션 방향에서 레벨을 실제로 다시 한 번 렌더링하기 때문입니다.

planarReflections_Banner.png

스크린 스페이스 리플렉션 VS 플레이너 리플렉션

스크린 스페이스 리플렉션(SSR)은 렌더링 비용 측면에서는 플레이너 리플렉션보다 훨씬 효율적이나, 안정성은 훨씬 떨어집니다. 아래 비교 그림은 플레이너 리플렉션에 비교했을 때의 SSR 한계를 보여줍니다.

스크린 스페이스 리플렉션

플레이너 리플렉션

  • 스크린 스페이스 리플렉션: 왼쪽 그림은 스크린 스페이스 리플렉션의 한계를 보여줍니다. 이미지 가장자리 또는 카메라 뷰쪽 웅덩이 리플렉션 페이드 아웃이 시작되는 부분이 심각한 '누수' 현상이 보이고 있습니다. SSR 은 화면 밖의 오브젝트를 반영하지 못하기 때문입니다.

  • 플레이너 리플렉션: 오른쪽 레벨은 플레이너 리플렉션을 켠 상태로 같은 레벨을 본 것입니다. 측면과 웅덩이 가장자리에 누수 현상이 보이지 않고 리플렉션이 일관성있게 정확합니다. 플레이너 리플렉션은 카메라 뷰와 상관 없이 화면 밖의 오브젝트를 반영할 수 있기 때문입니다.

플레이너 리플렉션 활성화

프로젝트에서 플레이너 리플렉션을 사용하는 방법은 다음과 같습니다:

  1. 메인 툴바에서 편집 > 프로젝트 세팅 으로 가서 Rendering (렌더링) > Optimization (최적화) 부분으로 이동합니다.

  2. Support global clip plane for Planar Reflections (플레이너 리플렉션에 글로벌 클리핑 면 지원) 옆의 박스를 체크하고, UE4 에디터를 재시작합니다.

    PR_Enable_PR_00.png

    플레이너 리플렉션을 켠 뒤 UE4 에디터를 재시작하지 않으면 플레이너 리플렉션이 작동하지 않습니다.

  3. UE4 에디터가 재시작되면, 모드 패널의 비주얼 이펙트 부분에서 Planar Reflection Actor (플레이너 리플렉션 액터)를 레벨에 끌어 놓습니다.

  4. 레벨에 플레이너 리플렉션 액터를 놓았으면, G 키를 눌러 액터를 숨기거나 표시할 수 있습니다. 이동, 회전, 스케일 툴을 사용하여 플레이너 리플렉션 액터의 위치와 크기를 레벨에 더욱 잘 맞게 배치할 수도 있습니다.

    근처에 리플렉션이 있는 머티리얼은 레벨에 플레이너 리플렉션 액터를 추가하자마자 바로 영향을 받습니다. 레벨에 배치된 스태틱 메시 역시 리플렉션 왜곡에 사용되는 노멀이 생겨, 파도 효과 시뮬레이션이 가능합니다.

플레이너 리플렉션 액터 프로퍼티

플레이너 리플렉션 액터에는 리플렉션의 모양을 크게 바꿀 수 있는 프로퍼티가 여러가지 있습니다. 다음 표는 그 프로퍼티의 종류와 플레이너 리플렉션 모양을 어떻게 변화시키는지에 대한 개괄적인 설명입니다.

PlanarReflectionProperties.png

프로퍼티

설명

Normal Distortion Strength

노멀 왜곡 세기 - 플레이너 리플렉션을 왜곡시키는 노멀 세기를 조절합니다.

Prefilter Roughness

프리필터 러프니스 - 플레이너 리플렉션 텍스처에 프리필터를 적용할 러프니스 값으로, 저해상도를 감추기에 좋습니다. 값이 크면 GPU 비용이 늘어납니다.

Distance from Plane Fadeout Start

플레인 페이드아웃 시작 거리 - 리플렉션 플레인에서 이 거리에 있는 픽셀부터 플레이너 리플렉션 페이드 아웃이 시작됩니다.

Distance from Plane Fadeout End

플레인 페이드아웃 끝 거리 - 리플렉션 플레인에서 이 거리에 있는 픽셀에서 플레이너 리플렉션 페이드 아웃이 끝납니다.

Angle from Plane Fade Start

플레인 페이드 시작 각도 - 리플렉션 플레인에서 노멀이 이 각도인 픽셀부터 플레이너 리플렉션 페이드 아웃이 시작됩니다.

Angle from Plane Fade End

플레인 페이드 끝 각도 - 리플렉션 플레인에서 노멀이 이 각도인 픽셀에서 플레이너 리플렉션 페이드 아웃이 끝납니다.

Show Preview Plane

프리뷰 플레인 표시 - 에디터에서 작업할 때 리플렉션 플레인의 가시성을 토글합니다. 플레이너 리플렉션에 영향을 주지 않습니다.

고급 프로퍼티

Prefilter Roughness Distance

프리필터 러프니스 거리 - 러프니스 값에 프리필터를 적용하기 시작할 거리입니다.

Screen Percentage

화면 백분율 - 플레이너 리플렉션 렌더링 GPU 시간을 단축시키는 데 사용할 수 있는 다운샘플 백분율입니다. 플레이너 리플렉션이 만드는 리플렉션의 퀄리티에 직접적인 영향을 줍니다.

Extra FOV

부가 FOV - 리플렉션 텍스처에 렌더링할 때 사용할 부가 시야 값입니다. 노멀 왜곡으로 인해 리플렉션 텍스처 외부의 읽기가 발생될 때 좋습니다. 값이 크면 렌더링 스레드 및 GPU 비용이 늘어납니다. 플레이너 리플렉션에 렌더링해야 하는 오브젝트와 트라이앵글 개수가 늘어나기 때문입니다.

Render Scene Two-Sided

씬 양면 렌더링 - 씬을 양면으로 렌더링할지 여부입니다. 리플렉션 플레인에 잘린 오브젝트 "아래" 노멀 왜곡이 보이는 부작용을 숨기는 데 쓸 수 있습니다. 이 세팅을 활성화하면, 잘린 구역에 밝은 하늘이 될 수도 있는 배경 대신 메시의 뒷면이 표시됩니다. 이 옵션을 사용하는 경우 수면이 리플렉션을 막을 것이므로 Hidden Actors 에 수면을 추가하세요.

LOD Distance Factor

LOD 거리 계수 - 레벨 오브 디테일(LOD)에 사용되는 거리의 스케일을 조절합니다. 1 보다 큰 값으로 설정하면 씬 캡처가 메인 뷰보다 낮은 LOD 를 사용하여 씬 캡처 패스 속도를 높입니다.

플레이너 리플렉션 액터 씬 캡처 프로퍼티

플레이너 리플렉션 액터에는 캡처되는 실시간 리플렉션의 퍼포먼스 비용을 제어하는 프로퍼티도 여럿 있습니다.

PR_SceneCaptureProperties.png

프로퍼티

설명

Primitive Render Mode

씬 캡처에 렌더링되는 프리미티브를 제어합니다.

  • Render Scene Primtive (Legacy) 씬 프리미티브 렌더 (레거시) - 씬의 모든 프리미티브를 렌더링합니다.

  • Render Scene Primtives 씬 프리미티브 렌더링 - Hidden Actors 목록에 추가된 것을 제외한 씬의 모든 프리미티브를 렌더링합니다.

  • Use ShowOnly List 표시 전용 목록 사용 - Show Only Actors 목록에 나열된 액터만 렌더링합니다.

Hidden Actors

숨긴 액터 - 레벨에서 씬 캡처에 숨기도록 선택된 액터 목록입니다.

Show Only Actors

액터만 표시 - Primitive Render ModeUse ShowOnly List 를 사용할 때 이 씬 캡처에 렌더링되는 레벨의 액터 목록입니다.

Capture Every Frame

매 프레임 캡처 - 매 프레임마다 캡처 내용을 업데이트할지 여부입니다. 비활성화하면, 컴포넌트는 로드 시 한 번 그리고 이동할 때만 렌더합니다.

Capture on Movement

이동 시 캡처 - 이동 시 캡처 내용을 업데이트할지 여부입니다. 블루프린트에서 수동 캡처하려는 경우 비활성화됩니다.

Always Persist Rendering State

항상 렌더링 상태 유지 - Capture Every Frame 이 비활성화되어도 렌더링 상태를 유지할지 여부입니다. 모션 블러 속도와 및 템포럴 안티 에일리어싱(TAA) 계산이 가능합니다.

Max View Distance Override

최대 뷰 거리 오버라이드 - 값이 0 보다 크면 씬 캡처에 렌더링되는 프리미티브에 대한 최대 렌더링 거리를 (센티미터 단위로) 설정합니다. 리플렉션 플레인이 통로나 방처럼 밀폐된 공간에 있는 경우 오브젝트의 디스턴스 컬링에 사용될 수 있습니다.

Capture Sort Priority

캡처 정렬 우선순위 - GPU 에서 씬 캡처를 정렬하기 위한 프레임 내 캡처 우선순위를 설정하여 여러 캡처 컴포넌트 사이 상호 종속성을 해결합니다. 가장 높은 값이 먼저 옵니다.

Profiling Event Name

프로파일링 이벤트 이름 - GPU 를 프로파일링할 때 프로파일링 이벤트의 이름을 설정합니다. 레벨에 플레이너 리플렉션이 여럿일 때 어느 것이 사용되는지 알아내기 좋습니다.

고급 프로퍼티

General Show Flags

일반 표시 플래그 - 씬 캡처에 어떤 기능과 액터가 렌더링되지 않도록 토글하는 일반 기능 표시 플래그입니다. 예를 들어 안티 에일리어싱, 포그, 스태틱 및 스켈레탈 메시 등입니다.

Advanced Show Flags

고급 표시 플래그 - 씬 캡처에 어떤 기능 및 액터가 렌더링되지 않도록 토글하는 일반적인 고급 기능 표시 플래그입니다. 예를 들어 폴리지, 인스턴스드 스태틱 메시, 페이퍼 2D 스프라이트 등입니다.

Post Processing Show Flags

포스트 프로세싱 표시 플래그 - 블룸, 시각 순응, 모션 블러 등을 씬 캡처에 렌더링되지 않도록 하는 표시 플래그 토글입니다.

Light Types Show Flags

라이트 유형 표시 플래그 - 씬 캡처에 스카이 라이팅을 렌더링하지 않도록 토글하는 표시 플래그입니다.

Lighting Components Show Flags

라이팅 컴포넌트 표시 플래그 - 씬 캡처에 앰비언트 오클루전 및 다이내믹 섀도가 표시되지 않도록 토글하는 표시 플래그입니다.

Lighting Features Show Flags

라이팅 피처 표시 플래그 - 씬 캡처에 라이팅 피처가 렌더링되지 않도록 토글하는 일반 표시 플래그입니다. 예를 들어 디스턴스 필드 앰비언트 오클루전 (DFAO), 라이트 함수, 스크린 스페이스 리플렉션 등입니다.

Hidden Show Flags

숨겨진 표시 플래그 - 라이팅과 포스트 프로세싱이 씬 캡처에 렌더링되지 않도록 토글하는 표시 플래그입니다.

플레이너 리플렉션 한계

플레이너 리플렉션이 매우 사실적인 리플렉션을 내기는 하지만 몇 가지 한계가 있는데, 아래와 같습니다.

  • 플레이너 리플렉션은 전체 씬을 두 번 렌더링하므로, 렌더링 스레드와 GPU 프레임 시간 예산 절반은 할당해야 합니다!

  • 월드에 배치되는 플레이너 리플렉션 수를 제한하세요. 하나도 많은 경우가 있습니다.

  • 크기를 적당히 정하면 보이지 않을 때 컬링되도록 할 수 있습니다.

  • 플레이너 리플렉션 액터의 렌더링 비용은 현재 레벨에 무엇을 렌더링하는가에 직결됩니다. 삼각형이고 드로 콜 수가 많은 씬은 이 기능을 켰을 때의 퍼포먼스 비용이 가장 많이 드는데, 그 비용은 ScreenPercentage 에 비례하지 않기 때문입니다.

플레이너 리플렉션 퍼포먼스

프로젝트에 플레이너 리플렉션을 켜서 사용하면 깔끔하고 정확한 리플렉션이 나오지만, 보통 프로젝트의 퍼포먼스에 직접적으로 영향을 끼치게 됩니다. 여기서는 고사양 PC 프로젝트는 물론 모바일 디바이스에 초점을 맞춘 프로젝트까지, 플레이너 리플렉션을 켰을 때의 퍼포먼스 영향에 대해 살펴보도록 하겠습니다.

플레이너 리플렉션이 퍼포먼스에 끼치는 영향을 드러나게 하기 위해, UE4 런처에서 찾을 수 있는 Kite (소년과 연) & Infinity Blade Grass Lands (인피니티 블레이드 초원) 프로젝트 4.12 버전을 사용합니다.

플레이너 리플렉션 퍼포먼스 & 소년과 연 데모

Kite (소년과 연) 데모 랜드스케이프 터레인의 크기와 다양한 높이로 인해, 하나의 플레이너 리플렉션 액터를 추가하고 전체 레벨을 덮도록 스케일을 조절하는 방법은 통하지도 않고 퍼포먼스도 매우 안좋을 것입니다. 그보다는, 플레이너 리플렉션 액터를 전략적으로 배치하여 필요한 레벨 부분에만 맞도록 스케일을 조절하는 것이 좋습니다. 다음 그림에서는 소년과 연 데모에서 사용된 물에 플레이너 리플렉션이 어떤 역할을 끼치는지 확인할 수 있습니다.

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

플레이너 리플렉션은 레벨에 미치는 시각적 영향력이 상당히 큰 만큼이나 퍼포먼스에 끼치는 영향 역시 큽니다. 아래 왼쪽 플레이너 리플렉션 꺼짐 이라는 그림을 보면, 전체 레벨을 렌더링하는 데 31 ms 가 걸리는 것이 보입니다. 오른쪽 플레이너 리플렉션 켜짐 이라는 그림을 보면, 전체 레벨의 렌더링에 29.19 ms 가 걸립니다. 거기에 플레이너 리플렉션으로 23.07 ms 가 추가되므로, 플레이너 리플렉션이 켜진 씬을 렌더링하는 데는 총 52 ms 정도의 시간이 걸리게 됩니다.

GPU_Profile_PR_Off_00.png

GPU_Profile_PR_On_00.png

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

클릭하면 이미지 원본을 확인합니다.

클릭하면 이미지 원본을 확인합니다.

플레이너 리플렉션을 렌더링하는 데 31 ms 정도나 걸리는 이유는, 데모에 풀 다이내믹 라이팅 및 섀도잉이 사용되었기 때문입니다. 스테이셔너리 / 프리컴퓨티드 라이팅 및 섀도잉을 사용하는 레벨은 플레이너 리플렉션을 위해 다시 렌더링하는 작업의 효율이 훨씬 좋습니다.

플레이너 리플렉션 퍼포먼스 및 인피니티 블레이드 던전

Infinity Blade Elven Ruins 맵의 크기와 레이아웃에는 플레이너 리플렉션 하나를 가지고 레벨에 배치된 기존의 물 스태틱 메시에 맞도록 스케일을 조정하는 것으로 충분했습니다. 다음 그림에서 이 맵의 물 모양에 플레이너 리플렉션이 시각적으로 어떤 영향을 끼치는지 확인할 수 있습니다.

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

플레이너 리플렉션을 추가하여 물의 생동감이 살아남과 동시에, 퍼포먼스에 끼친 영향은 소년과 연 데모에 비하면 꽤나 작습니다. 아래 왼쪽 플레이너 리플렉션 꺼짐이라는 그림을 보면, 플레이너 리플렉션 없이 씬을 렌더링하는 데 11 ms 정도 들었습니다. 오른쪽 플레이너 리플렉션 켜짐이라는 그림에서는, 플레이너 리플렉션에 1.67 ms 정도 들어 레벨 전체 렌더링 비용은 13 ms 정도였습니다.

GPU_Profile_PR_Off_01.png

GPU_Profile_PR_On_01.png

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

클릭하면 이미지 원본을 확인합니다.

클릭하면 이미지 원본을 확인합니다.

플레이너 리플렉션의 렌더링 비용이 소년과 연 데모에서는 23.07 ms 였던 것이 Elven Ruins 맵에서는 1.67 ms 밖에 들지 않는 이유는, Elven Ruins 맵을 만들 때 스태틱 메시와 머티리얼을 사용한 방법에 있습니다. Elven Ruins 맵과 그 콘텐츠는 모바일 디바이스용으로 디자인되었기에, 사용된 각각의 애셋에 들어가는 트라이앵글과 머티리얼 인스트럭션 수에 세심한 주의를 기울였습니다. 이때문에 Elven Ruins 맵에서는 플레이너 리플렉션을 켜도 소년과 연 데모에 비하면 맵에 사용된 애셋의 복잡도나 크기가 현저히 작기 때문에 비용이 적게 드는 것입니다.

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback