정규화된 뎁스 맵 렌더

Windows
MacOS
Linux

이 함수는 스태틱 메시에 대한 로컬 뎁스 맵을 렌더링합니다. 이를 통해 완전히 라이팅 제외된 머티리얼을 사용하여 바삭한 다이내믹 섀도 모양을 흉내낼 수 있습니다.

17.jpg

기본적으로 정규화된 뎁스 머티리얼을 사용하여 메시를 위에서 내려다본 스크린샷을 찍는 식으로 뎁스를 렌더링합니다. 뎁스는 UV 스페이스가 아닌 직교 형식으로 저장되므로, 빽빽한 나무의 경우 텍스처 밀도의 양이 어마어마하게 늘어납니다.

이 기능은 Apple Metal API Zen 데모에서 벚나무에 사용되었습니다.

이 기법에는 여러가지 독특한 장점 뿐만 아니라 단점도 있습니다.

장점:

  1. 복잡한 나무의 경우, 펼쳐진 UV 는 '세로 겹침' 양으로 인해 해상도가 낮아집니다. 섀도 뎁스 텍스처는 펼침으로 인해 해상도가 떨어지지 않으므로 이러한 경우에 해상도가 훨씬 좋게 나옵니다.

  2. 버텍스 셰이더로 카메라를 향하는 스프라이트같은 것에 올바른 라이팅을 쉽게 구울 수 있는데, 그 외의 방법으로는 라이트매스를 통해 괜찮은 그림자를 얻기가 불가능합니다. 사실 이 함수가 존재하는 주요한 이유입니다.

  3. 결과 뎁스 텍스처를 통해 현실적인 이펙트에 대한 뎁스 바이어스 및 빛 거리 투과에 대한 미세 조정이 가능합니다.

  4. 결과 텍스처를 콜리전 없이 게임내 숨겨진 스태틱 메시에 배치하는 것으로, 땅과 플레이어를 포함한 다른 지오메트리에 나무 그림자를 드리우는 역할을 하도록 할 수도 있습니다. 섀도잉 관련 퍼포먼스가 비약적으로 향상됩니다.

  5. 대규모 숲 씬에 고사양 하이 폴리 트리를 사용하려는데, 어떤 이유로 라이트매스 리빌드에 문제가 있고, 캐스케이드 섀도맵으로 원하는 퀄리티가 나오지 않는 경우, 이것이 좋은 대안이 될 수도 있습니다. 대규모 씬에 배치하여 채워보면 원거리의 나무도 마찬가지로 괜찮아 보입니다.

  6. 주요 계산은 버텍스 셰이더에서 이루어지며, Zen 데모에서 보셨듯이 괜찮아 보이는 라이팅제외 머티리얼은 모바일에서 실행될 정도로 비용이 저렴합니다.

단점:

  1. 간단한 경우 그냥 라이트매스를 사용하여 라이팅을 굽는 데 비해 콘텐츠 제작 비용이 어느정도 높습니다만, 가끔 위의 이유로 부가 작업이 정당화됩니다.

  2. 결과 그림자의 블러 제어가 어렵습니다. 수동 블러링 또는 LODbias 를 사용하지 않고는 보통 선명해 보이기 때문입니다.

  3. 정적인 씬에만 통하는데, 단일 라이트 뷰에서만 굽기 때문에 그림자의 각도를 변경하는 것이 불가능하기 때문입니다. 필요한 경우 '가짜로' 라이트를 회전시키는 파라미터가 있지만, 결과의 퀄리티가 훨씬 낮으며, 정상 작동하는 경우래봐야 중심을 기준으로 회전시켜도 그리 변하지 않는 원형 나무 정도입니다.

  4. 라이팅제외 머티리얼로는 라이트매스 바운스 라이팅을 잃으며, 결국 나중에 다시 트윅 작업을 거쳐야 합니다.

뎁스 맵 굽기

16.jpg

라이트 벡터: 뷰를 캡처할 라이트 벡터를 지정하거나, 레벨에 배치한 디렉셔널 라이트 액터에 링크할 수 있습니다.

정오 12 시 라이트 벡터를 나타내려면, 0,0,-1 을 입력하면 됩니다.

프로퍼티

설명

Directional Light

디렉셔널 라이트 - 레벨에서 사용할 디렉셔널 라이트를 선택하면, 위의 라이트 벡터 세팅이 무시되어 그 라이트가 대신 사용됩니다.

Depth Map Static Mesh

뎁스 맵 스태틱 메시 - 캡처하고자 하는 스태틱 메시를 넣는 곳입니다.

Depth Material Mask Textures

뎁스 머티리얼 마스크 텍스처 - 여기에 머티리얼을 만들거나 지정할 필요는 없으며, 이 배열의 각 요소에 대해 자동 생성됩니다. 배열의 요소가 공백이라면, 마스크가 사용됩니다. 스태틱 메시에 섹션이 셋인 경우, 이 배열에 빈 항목을 세 개 추가해 주기만 하면 자동으로 머티리얼을 만들어 줍니다. 또한 메시의 일부에 마스크 텍스처가 있는 경우, 여기에 지정할 수 있습니다. 텍스처가 원하는 머티리얼 ID 에 맞는 배열 항목에 오도록 지정합니다.

Mask Channel

마스크 채널 - 마스크가 어느 채널에 있는지 지정할 수 있습니다. 마스크가 채널 패킹된 텍스처의 일부였는데 특정 채널이 필요한 경우에 좋습니다.

Use Level Meshes for Depth

뎁스에 레벨 메시 사용 - 희귀하게 사용되는 독립적인 경우로, 단일 메시를 지정하는 대신, 툴은 사용자가 수동으로 "백그라운드" 시트 위에 배치한 메시 하나 또는 그룹에 대한 뎁스를 캡처합니다. 아니면 기존 레벨에 RenderToTexture_LevelBP 를 들여와 메시 그룹에 대한 뎁스 맵을 캡처해도 됩니다. 이 옵션을 사용하면 바운드가 완전 제멋대로일 것이기에 머티리얼에 몇 가지 추가 고급 세팅을 사용해 줘야 합니다.

Scale XY

XY 스케일 - 이 툴은 캡처 구역 내 오브젝트에 최적으로 맞추기 위해 오브젝트 구체 바운드를 사용합니다. 어떤 경우는 오브젝트의 에지 주변에 죽은 공간이 너무 많이 남기도 합니다. 이 세팅을 통해 오브젝트 스케일을 약간 수동 조절하여 미세조정하는 것이 가능합니다. 1.0 으로 놔두는 것이 좋은데, 여기 이 값을 변경하면 머티리얼 파라미터가 입력값에 일치하는지 반드시 확인해야 하기 때문입니다.

Scale Z

Z 스케일 - 위와 비슷하게, 이 함수는 오브젝트 구체 바운드를 사용하여 정규화된 뎁스 결과 생성시 사용되는 로컬 뎁스 범위를 결정합니다. 대부분의 경우 기본값 1 이 사용되지만, 범위를 약간 잘라내서 0-1 최대 범위를 사용하여 정밀도를 향상시키려면, 빨강이 보이기 시작할 때까지 (그랬다면 픽셀이 로컬 0-1 범위를 벗어나 플래튼 적용된다는 뜻이므로) 이 세팅을 줄이면 됩니다. 여기서 이 세팅이 변경되면, 나중에 실제 머티리얼에서 일치하는 값이 설정되는 것에 의존하므로, 바꿀 이유가 충분치 않다면 놔두는 것이 좋습니다.

Fit Vector and Scale Info Onto Texture

벡터와 스케일 정보를 텍스처에 맞추기 - 캡처에 어떤 세팅을 사용했는지 기억해낼 때 유용한 옵션입니다. 켜면, 시트에 위의 값을 포함해서 텍스트를 그립니다. 다음의 두 가지 세팅으로 텍스트의 이동 및 스케일 조절이 가능합니다.

Text Size

텍스트 크기 - 인포 텍스트 크기입니다.

Text Locations

텍스트 위치 - 각 텍스트 요소를 공간만 있다면 어떤 위치든 이동시킬 수 있도록 하기 위한 배열입니다. 텍스트 줄이 둘 있으니, 둘 다 움직이려면 두 항목을 추가해야 합니다.

나뭇잎 머티리얼 ID 에 메시와 마스크 텍스처를 지정한 상태에서는 다음과 같은 모습일 것입니다:

18.jpg

뎁스 맵을 렌더링하는 절차는, 전과 살짝 다릅니다.

이 함수는 "캡처 세팅" 의 선택된 버퍼에 대해서는 신경쓰지 않으며, 해상도 곱수만 신경씁니다.

새 창에서 게임을 플레이한 다음 콘솔에 "renderdepth" 라 입력합니다.

이에 대한 명령은 다른데, 폰 블루프린트 역시 "viewmode unlit" 설정을 해야 하기 때문입니다.

뎁스 맵을 머티리얼의 그림자로 사용하기

뎁스 맵을 사용하려면, 새 머티리얼을 만들어야 합니다. 그 머티리얼 안에 반드시 "VolumeShadowMap" 머티리얼 함수를 배치해야 합니다:

20.JPG

MaterialFunction'/Engine/ArtTools/RenderToTexture/MaterialFunctions/VolumeShadowMap.VolumeShadowMap'

이 머티리얼 함수는 현재로서 거의 폴리지 용으로 셋업된 것에 지나지 않습니다. 직사광 컴포넌트 계산은 없으며, 그림자만 있습니다. 그렇기에 라이트로부터 휘어져 나가는 입체 지오메트리 위의 그림자는 그리 좋아 보이지 않을 것입니다. 이 문제를 고치려면 "프로젝션 벡터" 와 버텍스 노멀로 수동 DotProduct 작업을 한 다음, 0-1 로 제한(clamp)시키면 됩니다.

일반 스태틱 메시에 사용된 그림자의 예입니다. 이 스태틱 메시는 실린더, 박스, 구체 몇 개가 서로 쌓인 것일 뿐입니다.

21.jpg

왼쪽: 위에서 봤을 때, 오른쪽: 옆에서 봤을 때, 그림자는 물론 셀프 섀도 정확도를 (또는 직접 N dot L 컴포넌트가 없어 빠진 것을) 확인할 수 있습니다.

입력 핀

설명

Position (V3)

위치 - 레벨에 배치된 스태틱 메시 그룹을 구을 때만 사용합니다. 이 옵션은 약간 실험단계 기능이라 연결하지 않은 채 놔두는 것이 좋습니다.

Range (S)

범위 - 범위 클리핑을 위한 세팅입니다. 이 값이 뎁스 맵 렌더링 도중 "Scale Z" 로 설정된 값과 일치하는지 확인해야 합니다.

Transform Position (B)

위치 변형 - 커스텀 라이트 벡터로 변형할 것인지 입니다. 기본값은 False 로, 정오의 0,0,-1 라이트 기본 로컬 위치가 사용된다는 뜻입니다.

Projection Vector (V3)

프로젝션 벡터 - 뎁스 맵을 렌더링해 오는 라이트 벡터입니다. 텍스처에 라이트 벡터와 스케일 인포로 디버그 텍스트를 렌더링하기로 선택했다면, 텍스처에 사용할 라이트 벡터 값이 있어야 합니다. 그렇지 않으면 렌더링 프로세스 도중 지정된 라이트 벡터를 사용하거나, 정오의 기본 방향을 덮어쓰지 않으려는 경우 그냥 놔둬도 됩니다.

Use Custom UVs (B)

커스텀 UV 사용 - 기본값은 False 입니다. True 가 되면, 함수는 버텍스 셰이더에서 계산되는 CustomUV 를 사용하여 내부 UV 를 계산합니다. 거의 모바일에 중요하지만, 어느 플랫폼에서든 픽셀 셰이더 인스트럭션 절약이 가능합니다. True 면 함수의 X, Y, Z 출력을 적합한 커스텀 UV 에 꽂은 다음, 올바른 UV 노드를 아래 두 입력에 꽂아야 합니다.

Custom UV, XY (V2)

커스텀 UV, XY - CustomUV 를 지정하면, 반드시 자신의 머티리얼 CustomUV 입력에 "X,Y" 출력을 연결한 인덱스로 설정된 Texture Coordinate 노드를 배치해야 합니다.

Custom UV, Z (S)

커스텀 UV, Z - CustomUV 를 지정하면, 머티리얼 CustomUV 입력에 "Z" 출력을 연결한 인덱스로 설정된 Texture Coordinate 노드를 배치해야 합니다. 올바른 컴포넌트 전달을 위해서는 컴포넌트 마스크가 있어야 할 수 있습니다.

Shadow Volume Texture (T2d)

섀도 볼륨 텍스처 - 뎁스 맵 텍스처를 텍스처 오브젝트 또는 텍스처 오브젝트 파라미터로 연결해야 하는 곳입니다.

Self Shadow Offset

셀프 섀도 오프셋 - -0.01 정도의 작은 음수로 설정해야 합니다. 그림자가 임의로 오브젝트 자신에게 그림자를 드리우는 것으로 보이는 것을 방지하기 위해 그림자를 편향시킵니다.

Transmission Mip Bias

투과 밉 편향 - 현재 연결이 끊어져 있지만 나중에 다시 연결할 예정입니다. 투과에 사용되는 뎁스맵 텍스처에 MipBias 를 적용할 수 있습니다.

Opacity (S)

오파시티 - 내부 투과에만 사용됩니다. 이 세팅은 "Internal Transmission Mask" 출력에만 영향을 끼칠 뿐, Shadow 출력은 영향을 끼치지 않습니다.

Shadow Accumulation Distance (S)

그림자 누적 거리 - 그림자가 거리에 따라 최대 암도까지 쌓이는 속도를 조정하는 데 사용됩니다. 1.0 으로 설정되면, 그림자는 매우 강할 것입니다. 값을 0 으로 낮춤에 따라, 라이트가 얇은 오브젝트를 통과하는 것처럼 보일 것입니다.

Blur using offset RGB texture (B)

오프셋 RGB 텍스처를 사용한 블러 - 기본값은 False 입니다. True 면, 색수차와 유사하게 뎁스 맵 텍스처의 R,G,B 채널 각각에 오프셋을 적용합니다. 그 후 각 채널의 결과를 블렌딩하여 이 기법으로 보통 가능한 것보다 넓고/부드러운 블러가 가능합니다.

출력 핀

설명

Internal Transmission Mask

내부 투과 마스크 - "오파시티" 입력을 통해 가능한 내부 투과 결과입니다. 별도의 출력으로 두는 것이 유용합니다. 이를 통해 투과에 커스텀 컬러를 곱한 다음 (트윅 작업을 위해 벡터 파라미터 추천), 그 결과를 아래 "그림자" 출력에 추가할 수 있습니다.

Shadow

그림자 - 주요 그림자 결과입니다. 사용하려면 그저 이 핀을 원하는 텍스처 및/또는 다른 머티리얼 인스트럭션과 곱해주면 됩니다. 그림자의 색조는 여러가지 방법으로 입힐 수 있습니다. 한 가지 좋은 방법은, 이 그림자 출력을 "Lit" 컬러와 "Shadow" 컬러 사이의 Lerp 에 사용하면 각각을 직접 제어할 수 있습니다.

XY

XY - CustomUV 를 사용하여 버텍스 셰이더에서 계산을 하고자 할 때만 사용하면 됩니다. 그렇다면 이 핀을 머티리얼에 사용가능한 CustomUV 입력 중 하나에 꽂으세요.

Z

Z - CustomUV 를 사용하여 버텍스 셰이더에서 계산을 하고자 할 때만 사용하면 됩니다. 그렇다면 이 핀을 머티리얼에 사용가능한 CustomUV 입력 중 하나에 꽂으세요.

내부 투과 세팅 예제입니다:

22.jpg

왼쪽: 오파시티 = 1 ; 가운데: 오파시티 = 0.2 ; 오른쪽: 오파시티 = 0.1

나뭇잎 머티리얼에 투과 예제입니다:

19.jpg

Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼