Skip to content

그림자 생성(3)~스텐실 섀도우 볼륨 기법(1)

[칼럼 핵심 요약]
결국, 셀프 그림자 표현까지를 포함한 정확한 그림자를 내기 위해서는, 아무래도 광원으로부터의 빛을 무엇이 어떻게 차폐하고 있는지, 라는 정보를 요구해야 한다. 즉, 그 장면의 빛에서 본 차폐 구조를 구해야 하는 것이다.

🌐 원문 링크: 影の生成(3)~ステンシルシャドウボリューム技法(1) (Mynavi News)
📅 원문 발행일: 2008-06-20 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)

NOTE

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

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

📖 본문 해설

[원문 리드문] > 결국, 셀프 그림자 표현까지를 포함한 정확한 그림자를 내기 위해서는, 아무래도 광원으로부터의 빛을 무엇이 어떻게 차폐하고 있는지, 라는 정보를 요구해야 한다. 즉, 그 장면의 빛에서 본 차폐 구조를 구해야 하는 것이다.

스텐실 섀도우 볼륨 기술

결국, 셀프 그림자 표현까지를 포함한 정확한 그림자를 내기 위해서는, 아무래도 광원으로부터의 빛을 무엇이 어떻게 차폐하고 있는지, 라는 정보를 요구해야 한다. 즉, 그 장면의 빛에서 본 차폐 구조를 구해야 하는 것이다.

비교적 호환성이 높고 범용성이 높은 기법으로 최근에도 채용 예가 많은 것이 '스텐실 섀도우 볼륨 기법'(Stencil Shadow Volume)이다. 이 기법은 2004년을 대표하는 3D PC게임이 된 ‘DOOM3’(id software, 2004)이 채용한 것으로도 화제가 되었다.

스텐실 섀도우 볼륨 기술에 의한 그림자 생성의 대표작이라고도 할 수 있는 "DOOM3"(id software,2004) (C)2004 Id Software, Inc. All rights reserved. Distributed by Activision Publishing, Inc. under license. DOOM and id are registered trademarks of Id Software, Inc. other countries. Activision is a registered trademark of Activision, Inc. and its affiliates. The ratings icon is a registered trademark of the Interactive Digital Software Association. All other trademarks and trade names are the properties of their respective owners.스텐실 섀도우 볼륨 기술에 의한 그림자 생성의 대표작이라고도 할 수 있는 "DOOM3"(id software,2004) (C)2004 Id Software, Inc. All rights reserved. Distributed by Activision Publishing, Inc. under license. DOOM and id are registered trademarks of Id Software, Inc. other countries. Activision is a registered trademark of Activision, Inc. and its affiliates. The ratings icon is a registered trademark of the Interactive Digital Software Association. All other trademarks and trade names are the properties of their respective owners.

🔍 [인포그래픽 도해 한국어 번역: 스텐실 섀도우 볼륨의 원리]

  1. 실루엣 에지 추출: 광원을 바라보는 면(Front-face)과 등지는 면(Back-face)의 경계선 검출
  2. 그림자 볼륨 생성: 실루엣 에지로부터 광원 반대 방향으로 무한대 볼륨 폴리곤을 돌출
  3. 스텐실 버퍼 카운팅: 카메라 광선이 볼륨에 들어갈 때 +1, 나갈 때 1 연산 값이 0보다 크면 그림자 영역 판정

이 기법에서는, 장면을 우선 렌더링하고, 그 장면의 시점으로부터 본 깊이 정보를 Z 버퍼에 생성한다. 덧붙여서, 장면의 깊이 정보는 그림자 생성을 위해서만…

이어서, 광원으로부터 보아, 그 장면의 3D 모델의 윤곽이 되는 버텍스을 빛의 진행 방향…… 즉 광선 벡터 방향으로 늘인다. 이 늘어난 영역은 "그림자가되는 영역"이며, 이것이 기술 이름이기도 한 "섀도우 볼륨"이됩니다.

스텐실 섀도우 볼륨 기술에 의한 그림자 생성의 동작 개념도스텐실 섀도우 볼륨 기술에 의한 그림자 생성의 동작 개념도

이어서, 이 섀도우 볼륨을 렌더링해 그림자를 구하는 것이지만, 이 렌더링은 조금 기교적이며, 표시용의 프레임 버퍼는 아니고, 「스텐실 버퍼」(Stencil Buffer)라고 하는 다목적으로 활용되는 산술 처리용의 프레임 버퍼에 대해서 실시하는 것이다(스텐실 버퍼는 미리"0"으로 초기화해 두어

빛에서 보고 윤곽이 되는 버텍스을 늘려 생성한 섀도우 볼륨을 시각화한 그림빛에서 보고 윤곽이 되는 버텍스을 늘려 생성한 섀도우 볼륨을 시각화한 그림

이 섀도우 볼륨의 렌더링은 2단계로 하는 것이 이 특징이다.

제 1 단계에서는, 시점에서 보아, 이 섀도우 볼륨의 전면(표면)이 되는 폴리곤(시점 방향으로 면을 향하고 있는 그림자 영역)만을 스텐실 버퍼에 "+1" 연산으로 렌더링한다.

광원이 복수 있는 경우나 3D 오브젝트가 중첩되어 있을 때는, 이 그림자 영역의 전면이 되는 개소는 "+1"이 중복되어 렌더링 되게 되어, 스텐실치는 커지는 경우도 있다.

첫 번째 단계. 우선 섀도우 볼륨의 표면이 되는 부분을 "+1"로 스텐실 버퍼에 렌더링첫 번째 단계. 우선 섀도우 볼륨의 표면이 되는 부분을 "+1"로 스텐실 버퍼에 렌더링

제2 스텝에서는, 이번은, 이 섀도우 볼륨의, 시점으로부터 봐 후면(이면)이 되는 폴리곤을, 마찬가지로 방금 전의 스텐실 버퍼에 렌더링 하는 것이지만, 이번은 "-1" 연산으로 실시한다.

아무것도 차폐물이 없는 그림자 영역에서는, 제1 스텝에서 표면을 렌더링한 개소의 "+1" 된 횟수분만, 이번은 "-1" 되게 되므로, 스텐실값은 "±0"으로 되돌아간다. 스텐실치가 제로가 된 부분은, 즉 그림자 영역이 아니다……라는 것이 됩니다.

그러나 어떠한 차폐물이 있으면, 이 그림자 영역의 이면 폴리곤이 그려지지 않는다… 또한, 차폐물이 있는지 여부의 판단은, 미리 렌더링해 둔 Z 버퍼의 내용(씬의 심도 정보)을 음미하여 행한다.

스텐실 버퍼의 픽셀 중 "0"이되지 않은 부분의 픽셀은 "그림자가되는 픽셀이다"라는 것을 나타냅니다.

두 번째 단계. 이어서 섀도우 볼륨의 뒷면이 되는 부분을 "-1"로 하여 스텐실 버퍼에 렌더링두 번째 단계. 이어서 섀도우 볼륨의 뒷면이 되는 부분을 "-1"로 하여 스텐실 버퍼에 렌더링

그림자 영역의 전면과 뒷면을 그린 끝난 스텐실 버퍼는 그 프레임의 어느 픽셀이 그림자인지 아닌지를 나타내므로 최종 렌더링 단계에서는 이 스텐실 버퍼의 내용을 참조하여 그림자라면 그림자의 색을 붙여야 한다. 스텐실 버퍼는 특정 값으로 묘화를 마스크 처리하는 것도 가능하기 때문에, 뻣뻣하게 그림자색을 칠해도 제대로 그림자가 될 곳에만 "그림자 색"을 붙일 수 있다. "그림자색"이란 새까맣게 해도 좋고, 그 장면을 보통으로 렌더링하여 구한 픽셀색에 적당한 투명도로 어두운 색을 믹스하여 어두운 색을 내도록 해도 좋다. 이 근처의 표현은 아티스틱한 센스에 좌우되는 부분이 된다.

연산하여 +1 이상이 된 부분이 그림자로 보이는 부분이 된다연산하여 +1 이상이 된 부분이 그림자로 보이는 부분이 된다

이 기법에서는, 결과적으로, 광원마다 생성된 섀도우 볼륨이, 그 광원으로부터의 빛의 차폐 구조를 스텐실 버퍼에 기록하게 되기 때문에, 셀프 섀도우 표현도 올바르게 고려되어, 3D 모델이 서로 그림자를 떨어뜨리는 상호 투사영상 표현에 대해서도 올바르게 그려낸다. (계속)

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


🔗 연관 지식 베이스 (Wiki)

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