리플렉션

UE4 에 포함된 리플렉션 예제에 대한 개요입니다.

Choose your operating system:

Windows

macOS

Linux

ReflectionHeader.png

이 예제에서는 언리얼 엔진 4 의 실시간 리플렉션 능력을 선보입니다. 씬에 나타나는 퇴락한 지하철역은 물이 많이 새고 있고, 더러운 세라믹 타일에다, 허물어져 가는 배관, 기타 배경 디테일도 낡았습니다. 이 문서에서는 이런 복합 효과를 내는데 활용된 기법과 기능을 하이 레벨 관점에서 살펴보도록 하겠습니다.

다음 이미지에서는 이 씬의 리플렉션 블렌딩을 켜고 끄면서 그 효과를 엿볼 수 있습니다.

리플렉션 인바이런먼트

Reflection Environment 작동방식은 여러 지점에서 정적인 레벨을 캡처한 다음 그 내용을 리플렉션 안에서 구체같은 단순한 모양에 재투영하는 식입니다. ReflectionCapture 액터를 놓아 아티스트가 캡처 지점을 선택합니다. 리플렉션 업데이트는 배치상의 편의를 위해 편집 도중 실시간으로 일어나지만 실행시간에는 정적입니다. 캡처된 레벨을 단순한 모양에 투영하면 리플렉션에 유사 시차 효과가 납니다. 각 픽셀은 여러 큐브맵을 혼합하여 최종 결과를 냅니다. 작은 ReflectionCapture 액터로 큰 것을 덮어써서, 영역의 리플렉션 시차 정확도를 필요한 대로 높일 수 있습니다. 예를 들어 방 중앙에 캡처를 놓은 다음 방 구석에 작은 캡처를 놓는 식으로 리플렉션을 개선시킬 수 있습니다.

reflection_environment.png

리플렉션 인바이런먼트와 리플렉션 캡처 관련 상세 정보는 리플렉션 인바이런먼트 문서를 참고해 주시기 바랍니다.

리플렉션 캡처 액터

CaptureIcon.gif

리플렉션 캡처 액터(Reflection Capture Actor)는 레벨에 전략적으로 고르게 놓고서 리플렉션 데이터를 리플렉션 인바이런먼트(Reflection Environment)에 제공해 주는 오브젝트입니다.

리플렉션 캡처 모양은 현재 두 가지, 구체와 박스 입니다. 이 모양은 매우 중요한데, 레벨의 어떤 부분이 큐브맵 속에 캡쳐되는지, 리플렉션에서 레벨을 어떤 모양 위에 재투영할지, 레벨의 어떤 부분이 그 큐브맵에서 리플렉션을 받을 수 있는지 (영향력 범위) 등을 그 모양이 결정하기 때문입니다.

리플렉션 인바이런먼트와 리플렉션 캡처 관련 상세 정보는 리플렉션 인바이런먼트 문서를 참고해 주시기 바랍니다.

스크린 스페이스 리플렉션

스크린 스페이스 리플렉션이란 땅바닥같은 평평한 표면 위에 오브젝트를 접지시키는 것을 보조해 주는 엔진 기능입니다. 기본적으로 켜지는 기능으로, 리플렉션 인바이런먼트 결과와 블렌딩하여 좀 더 완벽한 리플렉션 느낌을 냅니다.

ScreenSpaceReflections.gif

스크린 스페이스 리플렉션은 언리얼 엔진 4 에서 기본으로 켜지는 기능이지만, 세트에 따라 r.SSR.Quality 3 또는 r.SSR.Quality 0 콘솔 명령으로 토글시킬 수 있습니다. 아래는 스크린 스페이스 리플렉션을 켜(r.SSR 을 1 로 설정하)고 끈(r.SSR 을 0 으로 설정한) 상태에서 리플렉션 예제 씬을 본 모습입니다.

리플렉션 고려사항

리플렉션을 활용하는 배경을 만들 때, 저희 아티스트들이 염두에 두는 고려사항이 몇 가지 있습니다:

대비

전체적인 빛과 그림자 대비 느낌이 강한 부분에서 리플렉션은 좀 더 도드라지고 명확해 보이는 경향이 있습니다. 실제와 마찬가지로 리플렉션은 일반적으로 그 자체로 어두운 배경에서, 열악한 조건의 라이팅에 드리워 졌을 때 "튀어" (pop) 보이는 경향이 있습니다. 우리 예제에 지하철 씬을 선택한 이유도 그래서입니다. 지하에 있으니 자연광이 들어오는 곳이 없습니다. 꽤나 밝은 조명 기구 약간이 충분한 공간을 두고 멀리 떨어져 있습니다. 즉 그림자와 어둠의 웅덩이가 리플렉션이 관찰자나 플레이어에게 두드러지는 주요 위치가 됩니다.

Contrast.png

실제 반사 표면

대비와 아울러서, 실사 리플렉션을 만들 때 중요한 점 또 한 가지는 현실에서 리플렉션이 생길 표면 유형을 고려하는 것입니다. 이 데모의 경우 젖은 콘크리트 바닥에 세라믹 벽타일을 사용하기로 했습니다. 대부분의 씬에 물방울이 떨어져 흐르고 있어, 대부분의 환경에 반사성을 더하고 있습니다. 물론 이는 멋진 모양새를 내는 데 있어서 머티리얼을 기발하게 잘 만드는 것이 핵심이라는 뜻입니다.

머티리얼 생성 관련 상세 정보는 머티리얼 , 물리 기반 머티리얼 문서를 참고해 주시기 바랍니다.

Subway.png

리플렉션 캡처 놓기

ReflectionActors.png

올바른 리플렉션을 얻는 핵심은 씬에 리플렉션 캡처 액터를 잘 놓는 것입니다. 일단 처음에는 좋은 결과가 나올 때까지 씬 전반에 걸쳐 마구 흩어 놓고 싶을 수도 있겠지만, 이 액터를 사용할 때 유념해야 할 규칙이 몇 가지 있습니다:

  • 화면 공간 - 리플렉션 캡처 액터 각각은 화면상의 유효 반경에 따라 비용이 발생합니다. 이런 관점에서 보면 파티클이나 다이내믹 라이트와 비슷합니다. 즉 캡처 액터의 반경을 너무 과하게 하지 않는 데 주의를 기울일 필요가 있다는 뜻입니다.

  • 겹침 - 리플렉션 캡처 액터 반경은 겹칠 수 있습니다. 이로 인해 액터가 겹쳐 발생되는 픽셀당 리플렉션 비용이 상승합니다. 비용은 화면 공간에 따라 증가한다는 사실과 종합해 보면, 반경이 넓은 리플렉션 캡처 액터로 씬을 간단히 덮으려다간 금새 퍼포먼스 상의 제약이 올 수 있습니다.

  • 계층식 배치 - 리소스 절약은 물론 리플렉션 캡처 액터 레이아웃의 깔끔함을 위해서라도, 계층식 레이아웃을 사용하면 최소한의 겹침으로 알찬 리플렉션 셋업이 가능합니다. 그런 시스템에서는 커다란 반경의 캡처 하나로 배경의 리플렉션을 그러모으고서, 자잘한 캡처 액터들로 디테일 주변 리플렉션을 그러모읍니다.

LevelReflection.png

빨강

커다란 반경입니다. 레벨과 배경 대부분의 리플렉션을 담당합니다.

파랑

국소적 리플렉션입니다. 각각의 방을 캡처합니다.

초록

작은 반경의 세밀한 리플렉션입니다. 작으면서 중요한 디테일이 필요한 곳에 놓습니다.

관련 글타래

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기