라이팅된 반투명

반투명 표면의 라이팅과 셀프 섀도를 포함한 그림자가 드리워지는 방식에 대한 설명입니다.

Windows
MacOS
Linux

반투명 이펙트는 일반적으로 볼류메트릭인지, 볼류메트릭이지만 노멀 정보를 갖을 만큼 밀도가 높은지, 표면인지로 나뉩니다. 이들 각각에 각기 다른 라이팅 기법이 필요하므로, 머티리얼에는 반드시 사용해야 하는 반투명 라이팅 모드 를 지정해 줘야 합니다.

라이팅된 반투명은 뷰 프러스텀을 중심으로 방향을 맞춰 캐스케이드로 줄줄이 늘어선 볼륨 텍스처를 통해 대부분의 라이팅을 받습니다. 이를 통해 볼륨 내 어느 지점에 대한 라이팅도 단일 포워드 패스로 알 수 있으나, 볼륨 텍스처의 해상도가 꽤 낮고 관찰자에서 제한된 깊이 범위까지만 처리된다는 단점이 있습니다.

볼륨 환경설정은 환경변수를 통해 이루어지며, 엔진 퀄리티(scalability) 레벨에 따라 다양하게 설정할 수 있습니다:

  • r.TranslucencyLightingVolumeDim (반투명 라이팅 볼륨 암도) 기본값은 64 입니다. 이 값을 2 배수로 올리면 라이팅 볼륨 비용은 8 배수로 증가합니다.

  • r.TranslucencyLightingVolumeInnerDistance (반투명 라이팅 볼륨 내부 거리) 기본값은 1500 입니다. 이 값을 올리면 라이팅 볼륨이 커버하는 범위는 넓어지나 유효 해상도는 감소됩니다.

  • r.TranslucencyLightingVolumeOuterDistance (반투명 라이팅 볼륨 외부 거리) 기본값은 5000 입니다. 이 값을 올리면 라이팅 볼륨이 커버하는 범위는 증가하지나 유효 해상도는 감소됩니다.

모든 유형의 무버블 라이트에서 그늘진 직사광은 반투명 라이팅 볼륨으로 주입됩니다. 라이팅 함수 역시 계산됩니다.

Lit Translucency

반투명 머티리얼은 간접광 캐시 에서 디퓨즈 GI 를 받습니다. 라이팅 샘플은 오브젝트의 바운드 중심에서 딱 하나만 보간됩니다. 전체 오브젝트에 대해 취하는 샘플은, 커다란 파티클 시스템일지라도 딱 하나입니다. 바운드 중심이 변할 때의 간접광은, 튀어보이지 않도록 서서히 보간됩니다.

LitTrans_IDLC_spheres.png

왼쪽 구체는 간접광 캐시를 사용한 라이팅된 반투명이며, 오른쪽 구체는 라이트매스에 구워진 라이팅의 불투명입니다.

볼류메트릭 이펙트

그림자 드리우기와 셀프 섀도잉

반투명 액터는 불투명 월드, 자기 자신이나 다른 라이팅된 반투명 위에 그림자를 드리울 수 있습니다. 이는 푸리에 오패시티(Fourier Opacity) 맵으로 구현되는데, 얼룩같은 볼륨의 그림자에는 꽤 좋습니다만 불투명도가 높은 반투명 표면에는 고리형(ringing) 부작용이 심합니다. 반투명 셀프 섀도잉은 포인트 / 스포트 라이트에 대해서는 라이팅 볼륨을 통하므로, 이펙트가 매우 크고 진하지 않은 이상 낮은 해상도때문에 보이지 않는 경우가 다반사입니다. 그러나 디렉셔널 라이트는 픽셀별로 반투명 셀프 섀도잉을 하기 때문에 품질이 훨씬 높습니다. 또한 디렉셔널 라이트는 라이팅된 머티리얼에 대해 서브서피스 라이팅 모델을 사용하여 표면하부의 셰이딩을 처리하기도 합니다.

반투명 셀프 섀도잉은 오브젝트별 그림자를 사용합니다. 즉 사용자 지정 고정 파티클 시스템 바운드가 필요하고, 그 바운드도 맞아야 한다는 뜻입니다. 이에 대한 가장 쉬운 셋업 방법은, 파티클 운동을 만들어낸 다음 캐스케이드 툴바에서 '바운드 표시' 버튼에 우클릭하면 고정 바운드를 생성할 수 있는 대화창이 뜹니다. 셀프 섀도잉 파티클 시스템이 너무 크면 섀도맵 해상도가 줄어드는데, 섀도 맵을 늘여서 시스템 바운드를 덮기 때문입니다. 표시 -> 고급 -> 바운드 로 바운드 표시를 켜서 범위가 적당한지 확인하십시오. 그런 다음 에디터에서 이미터를 선택하면 바운딩 박스와 구체가 그려집니다.

![반투명 파티클 셀프 섀도잉(Engine/Rendering/Overview/self_shadow_1.png)(w:456)

Translucent Particle Self-Shadowing

스태틱 섀도잉

반투명은 스테이셔너리 라이트 에서 스태틱 섀도를 받을 수 있습니다. 라이팅 빌드 시간에 라이트매스가 생성하는 특수한 스태틱 섀도 뎁스 맵을 사용합니다.

반투명 표면

리플렉션 캡처

TLM_Surface 머티리얼은 레벨에 놓인 리플렉션 캡처에서 이미지 기반 리플렉션(스페큘러 GI)을 받습니다. 불투명 머티리얼과는 다르게, (블렌딩 없이) 단 하나의 리플렉션 캡처 액터의 큐브맵만이 적용되기에 오브젝트가 다른 리플렉션 캡처 가까이 이동하면 튀어(pop) 보이게 됩니다. 큐브맵 역시 가까이가 아니라 무한한 거리에 놓여있는 것처럼 적용되기에, 커다란 평면에는 부작용이 생길 수 있습니다.

LitTrans_reflSpheres.png

왼쪽 구체는 반투명, 오른쪽은 불투명, 둘 다 메탈, 즉 스페큘러에서 100% 라이팅을 받는 것으로 설정되었습니다.

한계

  • 라이팅된 반투명 표면에는 직접 스페큘러가 없습니다.

  • 라이팅된 반투명 표면은 그 모든 직사광을 반투명 볼륨 라이팅 텍스처로부터 받기에, 대부분의 표면 (유리, 물) 재질에 필요한 것보다 해상도가 낮아집니다.

픽셀 단위 반투명 라이팅

디퍼드 렌더러에서는, 이제 반투명 표면에서 새로운 포워드 셰이딩 기능을 사용하여 다수의 라이트에서 스페큘러 라이트를 받거나 시차 보정된 리플렉션 캡처에서 이미지 기반 리플렉션을 받도록 할 수 있습니다.

Per-Pixel Translucent Lighting (픽셀 단위 반투명 라이팅)을 켜려면, Lighting Mode (라이팅 모드)를 Surface ForwardShading (표면 포워드 셰이딩)으로 설정한 뒤 Screen Space Reflections (스크린 스페이스 리플렉션)이 켜졌는지 확인합니다.

PerPixel_TransLighting_Settings.png

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼