컨택트 섀도

UE4 의 Contact Shadow, 컨택트 섀도에 대한 개요입니다.

Windows
MacOS
Linux
추가 참고

ContactShadow_Banner.png

어플리케이션에서 씬과 캐릭터를 만들 때, 렌더링에 시각적 깊이를 더하고 싶을 때가 있습니다. Contact Shadows (컨택트 섀도)를 더하면 씬의 시각적 깊이와 정확도를 높이기에 좋습니다. 그림자 추정을 보다 정확히 해 주어, 다른 그림자 알고리즘으로는 낼 수 없는 윤곽 그림자를 더할 수 있기 때문입니다.

캐릭터에 디테일 추가

컨택트 섀도를 켠 포인트 라이트 가 쓰이는 곳 하나 예를 들면, 캐릭터에 추가 레벨 오브 디테일 (LOD) 을 렌더링할 때입니다. 다음 그림에서 컨택트 섀도우를 쓰면 캐릭터에 어떤 것이 추가되는지 살펴볼 수 있을 것입니다. 비교 슬라이더를 오른쪽에서 왼쪽으로 끌면 컨택트 섀도가 켜진 포인트 라이트 반경 안에 위치한 캐릭터에 꺼졌을 때는 없던 디테일이 추가되는 것이 보일 것입니다.

컨택트 섀도 꺼짐

라이트의 컨택트 섀도 길이 = 0.1

컨택트 섀도를 켜면, 렌더러에게 라이트 별로 픽셀 단위 스크린 스페이스 알고리즘을 실행하라 명령을 내립니다. 즉 컨택트 섀도 알고리즘이 라이트 계산 패스를 실행하여, 씬 뎁스 버퍼 광선 검사를 통해 어떤 픽셀이 컨택트 섀도를 켠 포인트 라이트 위치에서 가려지는지 결정한다는 뜻입니다.

컨택트 섀도가 있는 씬

또 한가지 컨택트 섀도 사용 예라면, 라이트를 하나만 지원하는 머티리얼의 픽셀 셰이더 안에서 패럴랙스 오클루전 매핑 섀도 계산을 하지 않아도 되도록 만드는 경우입니다. 다음 그림은 컨택트 섀도를 켜고 끈 상태에서 패럴랙스 오클루전 매핑 머티리얼을 비교한 것입니다.

ContactShadow_Comparison.png

참고로 패럴랙스 오클루전 매핑 머티리얼은 픽셀 뎁스 오프셋을 출력해야 한다는 점이 중요합니다.

다음은 패럴랙스 오클루전 매핑 머티리얼과 상호작용하는 컨택트 섀도 예제입니다.

image alt text

양쪽 라이트에 컨택트 섀도 길이 = 0.1 입니다.

컨택트 섀도 켜기

기본적으로 컨택트 섀도는 포인트 라이트에 꺼져있습니다. 즉 포인트 라이트의 컨택트 섀도 길이 초기값은 0 입니다. 컨택트 섀도를 켜는 방법은 다음과 같습니다:

  1. 먼저 포인트 라이트 를 씬에 놓습니다.

    CastShadows_Step1.png

  2. 새로 만든 포인트 라이트 컴포넌트의 디테일 패널에서 Light 섹션의 확장 화살표를 클릭하여 펼칩니다.

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

  3. 컨택트 섀도를 켜려면, Contact Shadow Length (컨택트 섀도 길이) 값을 0 보다 큰 값으로 설정합니다.

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

컨택트 섀도 길이 값을 0 보다 큰 값으로 설정하면, 씬의 뎁스 버퍼를 통해 픽셀의 위치에서 라이트 소스 쪽으로 레이 트레이싱을 하도록 렌더러에게 지시하는 것입니다. 전형적으로 컨택트 섀도 길이 최대값은 1 로 하는 것이 좋은데, 1 은 광선이 화면 전체를 가로지른다는 뜻입니다. 반면 컨택트 섀도 길이 값을 0.5 로 설정하면, 광선이 화면 절반만 가로지른다는 뜻입니다. 참고로 씬 뎁스 버퍼에서 취하는 샘플 수는 고정되어 있어, 컨택트 섀도 길이 값을 높이면 노이즈 부작용이 심해진다는 뜻입니다. 기본적으로 컨택트 섀도 길이 0.75 는 0.1 보다 노이즈가 많이 생깁니다.

태그
Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼