플레이너 리플렉션

거울 같은 리플렉션을 만드는 데 사용할 수 있는 플레이너 리플렉션 액터에 대한 개요입니다.

Choose your operating system:

Windows

macOS

Linux

플레이너 리플렉션

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

planarReflections_Banner.png

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

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

스크린 스페이스 리플렉션

플레이너 리플렉션

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

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

플레이너 리플렉션 활성화하기

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

  1. 메인 툴바에서 편집(Edit) > 프로젝트 세팅(Project Settings) 으로 이동한 다음, 프로젝트 세팅에서 렌더링(Rendering) > 최적화(Optimization) 섹션으로 이동합니다.

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

    PR_Enable_PR_00.png

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

  3. UE4 에디터가 재시작되면, 액터 배치(Place Actors) 패널의 비주얼 이펙트(Visual Effects) 탭에서 플레이너 리플렉션 액터(Planar Reflection Actor) 를 선택하여 레벨에 드래그합니다.

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

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

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

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

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 시간을 단축하는 데 사용할 수 있는 다운샘플 백분율입니다. 플레이너 리플렉션이 만드는 리플렉션의 퀄리티에 직접적인 영향을 줍니다.

부가 FOV(Extra FOV)

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

씬 양면 렌더링(Render Scene Two-Sided)

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

LOD 거리 계수(LOD Distance Factor)

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

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

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

PR_SceneCaptureProperties.png

프로퍼티

설명

프리미티브 렌더 모드(Primitive Render Mode)

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

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

  • 씬 프리미티브 렌더링(Render Scene Primtives) \ 숨겨진 액터 목록에 추가된 프리미티브를 제외하고는 씬의 모든 프리미티브를 렌더링합니다.

  • 표시 전용 목록 사용(Use ShowOnly List) \ 액터만 표시 목록에 나열된 액터만 렌더링합니다.

숨겨진 액터(Hidden Actors)

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

액터만 표시(Show Only Actors)

프리미티브 렌더 모드표시 전용 목록 사용(Use 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에 프레임 시간 예산의 절반은 할당해야 합니다!

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

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

  • 플레이너 리플렉션 액터의 렌더링 비용은 현재 레벨에 무엇을 렌더링하는가에 직결됩니다. 씬이 트라이앵글이고 드로 콜 수가 많다면 이 기능을 켤 때 퍼포먼스 비용이 가장 많이 듭니다. 왜냐하면 이 비용은 스크린 퍼센티지에 비례하지 않기 때문입니다.

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

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

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

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

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

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

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

GPU_Profile_PR_Off_00.png

GPU_Profile_PR_On_00.png

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

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

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

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

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

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

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

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

GPU_Profile_PR_Off_01.png

GPU_Profile_PR_On_01.png

플레이너 리플렉션 꺼짐

플레이너 리플렉션 켜짐

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

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

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

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.