Skip to content

그림자 생성 (5) ~ 깊이 그림자 기술

[칼럼 핵심 요약]
GPU의 픽셀 처리량(텍셀 필레이트)이 극적으로 향상된 것에 뒷받침되어 최근에는 '스텐실 섀도우 볼륨 기법'보다 채용 예가 많아지고 있는 것이 '뎁스 섀도우 기법'이다.

🌐 원문 링크: 影の生成(5)~デプスシャドウ技法 (Mynavi News)
📅 원문 발행일: 2008-07-04 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)

NOTE

💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)

  • 섀도우 맵의 한계와 진화: 본문에서 다루는 캐스케이드 섀도우 맵(CSM)과 VSM 등은 여전히 실시간 렌더링의 주력이지만, 해상도 에일리어싱과 자가 차폐 오류(Shadow Acne)의 구조적 한계를 갖습니다.
  • 하드웨어 가속 레이트레이싱 섀도우: 현재는 DXR/Vulkan RT를 이용한 실시간 광선 추적 섀도우(Ray-Traced Soft Shadows) 및 가상화 그림자 맵(Virtual Shadow Maps, VSM in UE5)을 통해 해상도 제약 없는 완벽한 반그림자(Penumbra) 연산이 실시간으로 이루어집니다.

📖 본문 해설

[원문 리드문] > GPU의 픽셀 처리량(텍셀 필레이트)이 극적으로 향상된 것에 뒷받침되어 최근에는 '스텐실 섀도우 볼륨 기법'보다 채용 예가 많아지고 있는 것이 '뎁스 섀도우 기법'이다.

깊이 그림자 기법 ~ 그 기본형

GPU의 픽셀 처리량(텍셀 필레이트)이 극적으로 향상된 것에 힘입어 최근에는 '스텐실 섀도우 볼륨 기법'보다 채용 예가 많아지고 있는 것이 '뎁스 섀도우 기법'(Depth Shadow)이다. 이 기법은 「섀도우 맵 기법」(Shadow Maps)이나 「뎁스 버퍼 섀도우 기법」(Depth Buffer Shadow)이라고도 불리기도 하지만, 본 연재에서는 「뎁스 섀도우 기법」으로 통일한다.

이 기법은 DirectX 9/SM3.0 시대에 다양한 개량판이 탄생하고 있어 본 연재에서는 그 개량판까지를 소개하려고 한다. 우선은, 이 기본형의 개념으로부터 해설하자.

이 기법에서는 광원으로부터의 차폐 구조를, 「광원으로부터 차폐물까지의 거리」의 정보로 표현하는 것이 키모가 된다.

「광원으로부터 차폐물까지의 거리」…

깊이 그림자 기술의 동작 개념도깊이 그림자 기술의 동작 개념도

🔍 [인포그래픽 도해 한국어 번역: 뎁스 섀도우 맵 (Depth Shadow Mapping)의 원리]

  • 1단계 (광원 시점 렌더링): 광원의 위치에서 씬을 바라보고 깊이 버퍼(Depth Map Zlight)를 텍스처로 기록
  • 2단계 (카메라 시점 렌더링): 카메라에서 보이는 픽셀의 광원 기준 깊이 Zpixel과 섀도우 맵의 Zlight를 비교
  • 판정: Zpixel>Zlight이면 다른 물체에 가려진 그림자 영역!

이 광원으로부터의 거리를 정리한 Z 버퍼(뎁스(Depth) 버퍼)의 내용은 실질적으로 「차폐의 분포」를 나타내므로, 이것을 특히 「섀도우 맵」이라고 부른다. 이 기법을 「뎁스 섀도우 기법」 「뎁스 버퍼 섀도우 기법」 「섀도우 맵 기법」이라고 부르는 것은 이 근처에서 온 것이다. 이 섀도우 맵은 Z 버퍼가 아닌 텍스처 (최근에는 부동소수점(Floating-Point) 텍스처 등)에 대해 생성 될 수 있습니다.

최종적인 장면의 렌더링시에는, 묘화 대상 픽셀에 대해서, 빛이 맞고 있는 픽셀인지, 그렇지 않은가(=그림자가 된다)를, 그 섀도우 맵을 참조하여 판정하면서 그려 간다.

묘화 대상 픽셀와 섀도우 맵의 대응은, 그 섀도우 맵을, 전술한 투사 텍스처 맵핑의 요령으로 장면에 맵핑하여 함으로써 실현된다.

묘화 대상 픽셀이 3D 공간상에서, 광원으로부터 어느 정도의 거리에 있는지를 계산하여 구하고, 그것과 대응하는 쉐도우 맵의 값을 비교해 준다.

이 비교는 이미지 적으로 그려지는 픽셀에 빛이 도착했는지 여부를 결정하는 것과 같습니다. 도달하면 픽셀의 광원으로부터의 거리와 섀도우 맵 측의 값이 일치합니다. 즉, 이 경우는 빛나고 있다는 판단이 된다.

한편, 쉐도우 맵측의 값이 작다고 하는 경우는, 묘화 대상 픽셀까지 빛이 닿지 않았던(=즉 차폐되고 있다) 것을 나타내기 때문에 그림자가 됩니다.

그림자인지 아닌지의 판정그림자인지 아닌지의 판정

「톰 클랜시의 스프린터 셀 (Splinter Cell)」(UBI SOFT, 2002). 뎁스 섀도우 맵 기법을 채용하여 나뭇잎의 투명 알파 텍스처 형태 그대로 정교한 그림자가 지면에 투사되는 모범적 사례「톰 클랜시의 스프린터 셀 (Splinter Cell)」(UBI SOFT, 2002). 뎁스 섀도우 맵 기법을 채용하여 나뭇잎의 투명 알파 텍스처 형태 그대로 정교한 그림자가 지면에 투사되는 모범적 사례

빛의 차폐 구조가 제대로 고려되기 때문에,이 기술에서도 셀프 그림자 표현이 수행됩니다. 그리고 물론 상호 투사영상의 표현도 자주 나타난다.

섀도우 맵의 생성은 실제로 그 장면에 등장하는 모든 폴리곤(3D 모델)을 광원 방향에서 렌더링하는 것에 상당하기 때문에, 부하는 높을 것 같다. 그러나, 텍스처 적용이나 특별한 픽셀 쉐이더에 의한 라이팅을 실시하지 않는 Z값 출력만의 Z 버퍼 렌더링은, 최신 GPU는 배속으로 동작하기 때문에 비교적 고속으로 완료할 수 있다.

이 쉐도우 맵 생성의 Z 버퍼 렌더링시에, 폴리곤에 붙여진 텍스처의 내용을 배려한 쉐도우 맵을 생성할 수도 없지 않다. 그렇게 하면 스텐실 섀도우 볼륨 기법으로 문제가 된 사각 폴리곤에 잎 텍스처를 붙인 케이스에 있어서도, 제대로 잎의 형태로 그림자를 떨어뜨리는 것이 가능해진다.

[섀도우 맵 기법 채용의 대표작이라고 하면 'Tom Clancy's Splinter Cell'(UBI SOFT, 2002)이다. 잎의 질감이 그려진 폴리곤도 제대로 그림자는 그 잎의 형태로 떨어진다. (C) 2002 Ubi Soft, Inc. All rights reserved. Ubi Soft Entertainment and the Ubi Soft logo are registered trademarks of Ubi Soft, Inc. Splinter Cell is a trademark of Ubi Soft Entertainment, Inc. All Rights Reserved. All other trademarks of Microsoft Corporation in the United States and/or other countries. Unreal Engine is a trademark of Epic Games Inc.] 잎의 질감이 그려진 폴리곤도 제대로 그림자는 그 잎의 형태로 떨어진다. (C) 2002 Ubi Soft, Inc. All rights reserved. Ubi Soft Entertainment and the Ubi Soft logo are registered trademarks of Ubi Soft, Inc. Splinter Cell is a trademark of Ubi Soft Entertainment, Inc. All Rights Reserved. All other trademarks of Microsoft Corporation in the United States and/or other countries. Unreal Engine is a trademark of Epic Games Inc.*

깊이 그림자 기술의 문제점

이 기술의 핵심 포인트는 장면의 빛의 차폐 구조를 나타내는 섀도우 맵의 정확도에 있습니다. 이렇게, 생성되는 그림자의 품질이나 정밀도는 강하게 섀도우 맵의 해상도에 의존해 버리는 것이다.

넓은 장면의 차폐 구조를 해상도가 불충분한 섀도우 맵으로 생성하면 그림자는 매우 스케치가 될 뿐만 아니라 강한 쟈기가 나온다.

예를 들어, 100m × 100m로 구성된 장면의 모든 그림자를 256 × 256 텍셀의 섀도우 맵으로 나타냅니다. 그러면 (100m÷256텍셀)로 약 40cm×40cm의 영역의 차폐구조가 불과 1텍셀에 우울해진다. 요컨대, 어느 정도 좁은 실내와 같은 장면이라면 아직도, 옥외 등의 넓은 공간에서는, 고해상도의 섀도우 맵을 생성하지 않으면, 그림자의 품질은 꽤 떨어진다.

섀도우 맵 해상도가 충분한 경우섀도우 맵 해상도가 충분한 경우

섀도우 맵 해상도가 부족한 경우. 그림자가 어리석은 것입니다.섀도우 맵 해상도가 부족한 경우. 그림자가 어리석은 것입니다.

이 북극을 없애기 위해서는 섀도우 맵의 해상도를 높여야 한다.이 북극을 없애기 위해서는 섀도우 맵의 해상도를 높여야 한다.

섀도우 맵 해상도가 불충분하면, 이 깊이 그림자 기법은 바삭바삭한 그림자가 되어 버리는데 반해, 스텐실 섀도우 볼륨 기법에서는 이러한 문제는 일어나지 않는다. 이 각진 그림자의 쟈기를 없애기 위해서는, 단락적으로는 굉장히 고해상도의 섀도우 맵을 만드는 것이지만, 그것은 실제로 문제로서 어렵다.

이 깊이 그림자 기법의 진화의 역사는, 이 그림자의 쟈기를 없애기 위한 궁리와 같고, 지금도 다양한 개량형 깊이 그림자 기술이 짜여져 있다.

다음 번부터는 그러한 개량판의 전형을 몇 가지 소개해 나가기로 하자. (계속)

(트라이Z 니시카와 젠지)


🔗 연관 지식 베이스 (Wiki)

Based on Zenji Nishikawa's 3D Graphics Maniax series. Translated & Knowledge-Based for Korean Game Developers.