리플렉션 캡처

리플렉션 프로브를 배치하여 리플렉션 머티리얼 표면의 리플렉션을 캡처하고 투영하는 방법을 개괄적으로 살펴봅니다.

Choose your operating system:

Windows

macOS

Linux

리플렉션 캡처 액터(Reflection Capture Actors) 는 담당할 영역의 스태틱 이미지를 캡처하기 위해 월드 주변에 배치할 수 있는 프로브입니다. 이 리플렉션 메서드는 캡처한 큐브맵을 주변 리플렉션 머티리얼에 재투영합니다. 이는 런타임 퍼포먼스 비용이 전혀 들지 않는 저비용 리플렉션 메서드입니다.

리플렉션 캡처 모양

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

구체 모양

구체 모양은 현재 가장 유용합니다. 반사되는 지오메트리 모양이 일치될 일도 없지만, 불연속도 모서리도 없으므로 오차가 균일합니다.

구체 모양

구체 모양에는 어느 픽셀이 그 큐브맵의 영향을 받을지 제어할 수 있는 주황색 영향력 반경이 있어, 그 구체에 레벨이 재투영됩니다

캡처의 크기가 작은 것이 큰 것을 덮어쓰므로 레벨 주변에 작은 캡처를 놓는 방식으로 개선할 수 있습니다.

박스 모양

박스 모양은 활용도 면에서는 매우 제한적이며 일반적으로 통로나 사각형 방에서만 쓸 수 있습니다. 그 이유는 박스 안의 픽셀만이 리플렉션을 볼 수 있으며, 동시에 그 박스 안의 모든 지오메트리가 박스 모양에 투영되어서, 심각한 부작용이 생기는 경우가 많기 때문입니다.

박스 모양

박스에는 선택했을 때 주황색으로 나오는 투영 모양 프리뷰가 있습니다. 이 박스 바깥으로 박스 트랜지션 거리(Box Transition Distance) 이내에 있는 레벨만 캡처합니다. 이 캡처의 영향력은 박스 내 전환 거리에 걸쳐서도 페이드 인이 일어납니다.

리플렉션 인바이런먼트를 사용하도록 레벨 세팅

좋은 리플렉션을 얻는 첫 번째 단계는 라이트맵을 사용하여 간접광을 포함한 디퓨즈 라이팅을 설정하는 것입니다. 디퓨즈 라이팅에 익숙하지 않다면

[라이트매스](designing-visuals-rendering-and-graphics/Lightmass/)
페이지에서 세팅 방법에 대한 자세한 내용을 확인할 수 있습니다. 빌드 후 라이트매스 간접광이 작동하지 않는다면 다음과 같은 경우일 수 있습니다(하지만 그 외 다른 경우도 가능).

  • 그림자를 드리우는 스카이박스

  • 라이트매스 임포턴스 볼륨(LightmassImportanceVolume) 부족

  • 라이트맵 UV 누락 또는 설정 오류

  • 월드 프로퍼티(World Properties) 에서 프리컴퓨티드 라이팅 강제 비활성화(Force No Precomputed Lighting)True 로 설정

레벨의 디퓨즈 컬러는 리플렉션 인바이런먼트(Reflection Environment)를 통해 반사가 결정되므로 최적의 결과를 얻으려면 다음과 같은 사항을 점검해야 합니다.

  • 직사광이 닿는 곳과 그늘진 곳의 대비를 확실하게 합니다.

  • 밝게 디퓨즈 라이팅된 영역은 리플렉션에 명확히 나타나는 곳입니다.

  • 어둡게 그늘진 영역은 리플렉션이 가장 잘 보이는 곳입니다.

  • 리플렉션 캡처가 보는 레벨의 모습을 확인하려면 스페큘러 표시 옵션을 끈 상태로 라이팅포함 뷰모드를 사용하면 됩니다.

다음과 같은 사항을 염두에 두고 레벨의 머티리얼이 리플렉션 인바이런먼트와 잘 작동하도록 구성하는 것이 매우 중요합니다.

  • 평평한 거울 표면에는 단순한 모양에 투영된 큐브맵 합성의 부정확함이 명확히 드러나게 됩니다.

  • 그러나 지오메트리 굴곡이나 거친 표면때문에 이러한 부작용이 희석되어 그럴싸한 결과를 내게 됩니다.

  • 그러므로 디테일 노멀 맵과 아울러 평평한 부분에 사용되는 머티리얼은 적당한 수준으로 거칠게 만들어 주는 것이 중요합니다. 그러면 리플렉션을 더 잘 보여줄 수 있기 때문입니다.

곡면이고 날카로움

평평하고 거침

평평하고 날카로움

매끄러운 표면이지만 구부러진 지오메트리: 리플렉션 퀄리티 좋음

거친 표면에 평평한 지오메트리: 리플렉션 퀄리티 좋음

부드러운 표면에 평평한 지오메트리: 명백히 맞지 않는 리플렉션

리플렉션이 있었으면 하는 곳에 리플렉션 캡처를 놓습니다. 반사시키고자 하는 레벨 부분이 반경 안에 꼭 맞게끔 구체 캡처를 놓도록 해 보세요. 레벨이 그 구체 모양에 재투영될 것이기 때문입니다. 레벨 지오메트리 너무 가까이에는 캡처를 놓지 않는 것이 좋은데, 그 지오메트리가 반사면의 주를 이뤄 뒤쪽의 디테일이 막히기 때문입니다.

광택 간접 스페큘러

기술 용어로 설명하자면 리플렉션 인바이런먼트는 간접 스페큘러를 제공합니다. 분석적 라이트를 통해 직접 스페큘러를 구하기는 하지만, 약간 밝은 방향의 리플렉션이 나올 뿐입니다. 스카이 라이트를 통해서도 하늘의 스페큘러를 구하기도 하지만, 스카이 라이트 큐브맵은 무한히 먼 거리에 있는 것이기에 국소적 반사에는 쓸 수 없습니다. 간접 스페큘러는 레벨의 모든 부분이 다른 모든 부분에 반사되도록 하는데, 이러한 것은 디퓨즈 반응이 없는 메탈 같은 머티리얼에 특히나 중요합니다.

디퓨즈 전용

리플렉션 전용

전체 라이팅

전체 씬

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

다양한 광택의 머티리얼은 캡처된 큐브맵의 뿌연 버전 밉맵을 생성하는 식으로 지원됩니다.

다양한 광택

그러나 매우 거친 표면에 큐브맵 리플렉션만 사용하면 로컬 오클루전의 부재 때문에 누수가 심각해지며 지나치게 밝은 리플렉션으로 이어집니다. 이 문제는 라이트매스가 생성한 라이트맵을 재사용하여 해결할 수 있습니다. 큐브맵 리플렉션은 머티리얼의 거칠기에 따라 라이트맵 간접 스페큘러와 혼합시킵니다. 매우 거친 (완전 디퓨즈) 머티리얼은 라이트맵 결과에 수렴됩니다. 이 혼합은 본질적으로 라이팅 데이터 한 세트의 높은 디테일 부분(큐브맵)을 또다른 라이팅 데이터 세트의 빈도가 낮은 부분(라이트맵)과 합치는 것입니다.

그러나 이 방법이 올바르게 작동하기 위해서는, 라이트맵에 간접광만이 있어야 합니다. 즉, 스테이셔너리(Stationary) 라이트에서의 간접광만이 거친 표면의 리플렉션 퀄리티를 향상시킬 수 있다는 뜻입니다. 스태틱 라이트 유형을 리플렉션 인바이런먼트와 같이 사용해서는 안되는데, 라이트맵에 직사광이 들어가기 때문입니다. 참고로 이런 라이트맵과의 혼합은 맵에 유의미한 간접 디퓨즈 라이팅이 있어야 함을, 그리고 그 라이팅 빌드가 이미 끝나서 결과를 볼 수 있어야 함을 뜻합니다.

그림자 없는 거친 표면의 리플렉션

그림자 있는 거친 표면

리플렉션 캡처 라이트맵 혼합

리플렉션 캡처 액터를 사용하면, UE4에서는 리플렉션 캡처의 간접 스페큘러를 라이트맵의 간접 디퓨즈 라이팅과 혼합합니다. 그러면 리플렉션 큐브맵은 공간의 한 점에서만 캡처되므로 누수 현상을 줄이는 데 도움이 되지만, 라이트맵은 받는 표면 전체에서 계산되어 국소적 그림자 정보를 포함합니다.

스무스한 표면과 믹싱되는 라이트맵 감소 끄기

스무스한 표면과 믹싱되는 라이트맵 감소 켜기

라이트맵 혼합 기능은 거친 표면에는 잘 작동하지만, 부드러운 표면에는 깨집니다. 리플렉션 캡처 액터의 리플렉션이 스크린 스페이스 리플렉션이나 플레이너 리플렉션과 같은 다른 메서드에 일치되지 않기 때문입니다. 그때문에 매우 부드러운 표면에는 더이상 라이트맵 혼합이 사용되지 않습니다. 표면의 러프니스 값 0.3 에서 라이트맵 혼합이 최대, 서서히 약해지다가 러프니스 값 0.1 이하에서 라이트맵 혼합이 없어집니다. 그러면 리플렉션 캡처와 스크린 스페이스 리플렉션이 더욱 잘 어울려 바뀌는 부분을 알아채기 어려워 집니다.

라이트맵 혼합 및 기존 콘텐츠

라이트맵 혼합 기능은 기본적으로 켜져 있습니다. 즉, 기존 콘텐츠에 영향을 끼친다는 뜻입니다. 부드러운 표면에 리플렉션 누수 현상이 생기는 경우 더욱 확연히 드러나게 됩니다. 이러한 누수 문제를 줄이려면 레벨에 리플렉션 캡처 액터를 추가 배치하면 됩니다. 아니면, 편집(Edit) > 프로젝트 세팅(Project Settings) > 렌더링(Rendering) > 리플렉션(Reflections) 으로 이동한 다음, 스무스한 표면과 믹싱되는 라이트맵 감소(Reduce lightmap mixing on smooth surfaces) 체크를 해제하여 이전의 라이트맵 혼합 방식으로 돌아가면 됩니다.

![](building-virtual-worlds/LightingAndShadows\ReflectionEnvironment\Enable_LM_Mixing.png)

UE4 콘솔에서 다음 명령을 통해 라이트맵 믹싱 정도를 미세 조정할 수 있습니다.

  • r.ReflectionEnvironmentBeginMixingRoughness (기본값 = 0.1)

  • r.ReflectionEnvironmentEndMixingRoughness (기본값 = 0.3)

  • r.ReflectionEnvironmentLightmapMixBasedOnRoughness (기본값 = 1)

  • r.ReflectionEnvironmentLightmapMixLargestWeight (기본값 = 1000)

리플렉션 프로브 편집

리플렉션 프로브(Reflection Probe)를 편집할 때, 원하는 결과를 얻기 위해 기억해야 할 것들이 몇 가지 있습니다. 여기서는 프로젝트에서 최고의 리플렉션 퀄리티를 얻기 위해 확인해야 하는 것들에 대해 다루겠습니다.

리플렉션 프로브 업데이트

중요한 사항 한 가지, 리플렉션 프로브는 최신 상태를 자동으로 업데이트하지 않습니다. 레벨에 배치된 리플렉션 프로브가 자동 업데이트되는 상황은 다음과 같습니다.

  • 맵을 로딩합니다.

  • 리플렉션 캡처 액터의 프로퍼티를 직접 편집합니다.

  • 레벨 라이팅을 빌드합니다.

라이트의 밝기 수정이나 레벨 지오메트리 이동 등 레벨에 다른 종류의 편집을 한 경우, 리플렉션 캡처 액터를 선택하고 캡처 업데이트(Update Captures) 버튼을 클릭해야 변경내용이 전파됩니다.

리플렉션 프로브에 커스텀 HDRI 큐브맵 사용

리플렉션 프로브에는 리플렉션 데이터에 사용할 큐브맵을 지정하는 기능 뿐 아니라 그 큐브맵의 크기를 지정하는 기능도 있습니다. 기존에 UE4는 리플렉션 프로브가 사용할 쿠킹된 큐브맵의 해상도를 하드코딩했었습니다. 이제는 개발자가 퍼포먼스, 메모리, 퀄리티의 상관관계에 따라 원하는 해상도를 직접 선택할 수 있게 되었습니다. 아래 그림은 캡처한 씬(Captured Scene) 옵션을 사용했을 때와 지정된 큐브맵(Specified Cubemap) 옵션을 사용했을 때의 차이점을 나타냅니다.

캡처한 씬

지정된 큐브맵

프로젝트의 리플렉션 프로브가 사용할 커스텀 HDRI 큐브맵을 지정하는 방법은 다음과 같습니다.

  1. 먼저, 사용할 수 있는 HDRI 큐브맵 텍스처가 있는지 확인합니다. 프로젝트에 HDRI 큐브맵 텍스처가 없는 경우, 시작용 콘텐츠에 HDRI_Epic_Courtyard_Daylight 라는 이름으로 포함된 것이 있습니다.

  2. 레벨에 배치된 리플렉션 프로브 액터(Reflection Probe Actor) 를 선택한 다음, 디테일(Details) 패널에서 리플렉션 캡처(Reflection Capture) 섹션 아래 리플렉션 소스 유형(Reflection Source Type)캡처된 씬 에서 지정된 큐브맵 으로 변경합니다.

  3. 여전히 레벨에 리플렉션 프로브를 선택한 상태에서, 콘텐츠 브라우저로 가 사용하고자 하는 HDRI 텍스처를 선택합니다. 그런 다음 리플렉션 캡처 액터에서, 콘텐츠 브라우저의 HDRI 텍스처를 끌어 리플렉션 캡처 아래 Cubemap 입력에 놓습니다.

  4. 캡처 업데이트(Update Capture) 버튼을 눌러 리플렉션 캡처 액터가 방금 지정된 새로운 HDRI 큐브맵 텍스처를 사용하도록 새로고칩니다.

리플렉션 프로브 해상도 조정

리플렉션 캡처 액터에 사용되는 HDRI 큐브맵 해상도를 전체적으로 조절하는 방법은 다음과 같습니다.

  1. 메인 툴바(Main Toolbar)편집 > 프로젝트 세팅 을 선택하여 프로젝트 세팅 창을 엽니다.

  2. 프로젝트 세팅 메뉴에서 엔진(Engine) > 렌더링(Rendering) 섹션으로 이동한 다음, 텍스처(Textures) 옵션을 찾습니다.

  3. 리플렉션 캡처 해상도(Reflection Capture Resolution) 옵션을 조정하여 지정된 HDRI 큐브맵 텍스처의 크기를 늘이거나 줄일 수 있습니다.

    ARCS_02.png

    큐브맵 해상도에는 16, 64, 128, 256, 512, 1024처럼 2의 거듭제곱만 사용할 수 있습니다. 그 외의 수를 사용하면, 가능한 가장 가까운 해상도 값으로 반올림됩니다. 또한, 매우 높은 해상도의 텍스처를 사용할 때는, GPU 메모리 요구량으로 인해 퍼포먼스에 엄청난 영향을 끼칠 수 있으니 세심한 주의를 요합니다.

다음 그림은 리플렉션 캡처 해상도를 1 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 512 , 1024 로 설정했을 때 리플렉션이 어떻게 보이는지를 나타냅니다.

스카이라이트 리플렉션 해상도 조정

리플렉션 프로브와 마찬가지로, 스카이라이트에도 리플렉션에 사용되는 HDRI 큐브맵 해상도를 정의하고 조절하는 기능이 있습니다. UE4 프로젝트에서 이 기능을 활용하는 방법은 다음과 같습니다.

  1. 액터 배치(Place Actors) 패널에서 라이트(Lights) 탭의 스카이라이트(Skylight) 를 선택한 다음 레벨로 드래그합니다.

  2. 스카이라이트를 선택하고 디테일 패널의 라이트 섹션에서 소스 유형(Source Type)SLS 캡처 씬(SLS Captured Scene) 에서 SLS 지정 큐브맵(SLS Specified Cubemap) 으로 변경합니다.

  3. 큐브맵 섹션에서 드롭다운 박스를 클릭하고 목록에서 HDRI 큐브맵을 선택합니다.

  4. 큐브맵을 선택한 후에는 큐브맵 해상도(Cubemap Resolution) 입력 값을 변경하여 해상도를 조절할 수 있습니다.

    큐브맵 해상도에는 16, 64, 128, 256, 512, 1024처럼 2의 거듭제곱만 사용할 수 있습니다. 그 외의 수를 사용하면, 가능한 가장 가까운 해상도 값으로 반올림됩니다. 또한, 매우 높은 해상도의 텍스처를 사용할 때는, GPU 메모리 요구량으로 인해 퍼포먼스에 엄청난 영향을 끼칠 수 있으니 세심한 주의를 요합니다.

다수의 리플렉션 프로브 데이터 블렌딩

다양한 HDRI 큐브맵의 리플렉션 캡처 액터를 여럿 제공하여 다수의 각기 다른 큐브맵 리플렉션을 섞을 수 있습니다. UE4 프로젝트에서 그 방법은 다음과 같습니다.

  1. 먼저 레벨에 추가된 리플렉션 프로브 가 최소 하나 있는지, 리플렉션 소스 유형(Reflection Source Type)지정된 큐브맵(Specified Cubemap) 으로 설정했는지, 큐브맵(Cubemap) 입력에 HDRI 텍스처를 입력했는지 확인합니다.

  2. 레벨에 리플렉션 프로브를 새로 추가하거나 기존의 것을 복제한 뒤, 노랑 영향력 반경 일부가 첫 번째 리플렉션 프로브와 겹치도록 위치와 영향력 반경(Influence Radius) 을 조절합니다.

  3. 새로 복제/생성된 리플렉션 프로브 액터를 선택하고 디테일 패널의 큐브맵 부분 아래에서 HDRI 큐브맵을 다른 것으로 변경합니다.

  4. 추가되거나 복제된 리플렉션 프로브가 여전히 선택된 상태에서 디테일 패널의 리플렉션 캡처 섹션으로 이동한 후 캡처 업데이트 버튼을 눌러 큐브맵 입력에 연결된 것을 사용하도록 리플렉션을 업데이트합니다.

  5. 리플렉션 프로브를 선택하고 레벨에서 이동시켜 보면 두 개의 HDRI 큐브맵이 서로 어떻게 섞이는지 더욱 잘 파악해 볼 수 있습니다.

시각화

리플렉션이 잘 구성되었나 쉽게 확인할 수 있는 리플렉션 오버라이드(Reflection Override) 뷰모드가 추가되었습니다. 이 뷰모드는 모든 노멀을 부드러운 버텍스 노멀로 덮어쓰고, 모든 표면을 (거울처럼) 완벽히 매끄러운 최대 스페큘러 면으로 만듭니다. 이 모드에서는 리플렉션 인바이런먼트의 한계와 부작용 역시 명확히 보이므로, 가끔씩 라이팅포함(Lit) 모드로 바꿔 (굴곡진 노멀, 다양한 광택, 어두운 스페큘러 등의) 보통 상황에서 리플렉션이 어떻게 보이는지 확인하는 것이 중요합니다.

리플렉션 오버라이드

라이팅 성분을 따로 떼어내는 데 유용한 표시 플래그 몇 가지가 새로 추가되었습니다.

플래그

설명

라이팅 컴포넌트(Lighting Components) > 디퓨즈(Diffuse)

디퓨즈를 비활성화하면 모든 라이팅 메서드에서의 디퓨즈 기여를 숨깁니다.

라이팅 컴포넌트 > 스페큘러

스페큘러를 끄면 모든 리플렉션 메서드에서의 스페큘러 기여를 숨깁니다.

라이팅 피처(Lighting Features) > 리플렉션 인바이런먼트

리플렉션 인바이런먼트 기능은 비활성화되지만, 다른 리플렉션 기능은 (SSR, 분석적 스페큘러) 활성화된 상태로 남습니다.

퍼포먼스 고려사항

리플렉션 인바이런먼트 비용은 오직 캡처가 화면상의 픽셀에 얼마나 많은 영향을 끼치는가에 따라서만 달라집니다. 이런 관점에서 보면 디퍼드 라이팅과 매우 비슷합니다. 리플렉션 캡처는 그 영향력 반경에 따라 바운드가 정해지므로, 매우 효율적으로 컬링됩니다. 광택은 큐브맵 밉맵을 통해 구현되므로, 리플렉션이 선명하냐 거치냐에 따른 퍼포먼스 차이는 미미합니다.

제한사항

  • 이 방법을 통한 리플렉션은 추정치입니다. 구체적으로, 오브젝트를 단순한 모양 위에 투영한 것이기에 씬의 실제 오브젝트와 거의 맞아떨어지지 않습니다. 혼합되고 있는 큐브맵의 수가 여럿이기에 리플렉션에서 해당 오브젝트는 여러 버전이 만들어지게 됩니다. 평평하고 매끄러운 표면에는 거울 반사의 오차가 눈에 띄게 표시됩니다. 디테일 노멀 맵과 러프니스를 사용하여 리플렉션과 그 부작용을 흩트리세요.

  • 씬을 큐브맵에 캡처해 넣는 것은 느린 작업으로 게임 세션 밖에서 해 놔야 합니다. 즉, 동적인 오브젝트는 정적인 씬의 리플렉션을 받을 수는 있지만 반사는 불가능하다는 뜻입니다.

  • 오차 감소를 위해 씬의 디퓨즈만 캡처합니다. 즉, 순수 스페큘러 표면(메탈)은 캡처 도중 그 스페큘러가 디퓨즈인 것처럼 적용된다는 뜻입니다.

  • 벽의 양쪽 면에 라이팅 조건이 다를 경우 심각한 누수가 발생할 수 있습니다. 한 면에 올바른 리플렉션 설정이 가능하기는 하지만, 반대편에는 항상 누수가 생깁니다.

  • DX11 하드웨어의 한계로 인해 씬을 캡처하는 데 사용되는 큐브맵은 각 면이 모두 128개이며, 월드에 최대로 가능한 리플렉션 캡처 수는 한 번에 341개입니다.

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