Appearance
지오메트리 셰이더 (1) ~ 지오메트리 셰이더의 가속적 활용 · 스텐실 섀도우 볼륨 기술의 그림자 생성을 가속한다
[칼럼 핵심 요약]
Windows Vista의 등장과 함께 DirectX 10이 릴리스되고, 동시에 프로그래머블 셰이더 사양은 4.0으로 버전 업이 이루어졌다. 이 SM4.0에서 최대의 주제라고 할 수 있는 것이 「지오메트리 셰이더」의 신설이다.🌐 원문 링크: ジオメトリシェーダ(1)~ジオメトリシェーダのアクセラレーション的活用・ステンシルシャドウボリューム技法の影生成を加速する (Mynavi News)
📅 원문 발행일: 2008-09-15 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)
NOTE
💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)
- 본 칼럼에서 다루는 핵심 렌더링 기법은 현대 실시간 렌더링 엔진(DirectX 12, Vulkan, Unreal Engine, Unity)의 기초 이론을 구성하고 있으며, 최신 하드웨어 가속 기법 및 컴퓨트 셰이더와 결합하여 고도화되었습니다.
📖 본문 해설
[원문 리드문] > Windows Vista의 등장과 함께 DirectX 10이 출시되고 동시에 프로그래머블 셰이더 사양은 4.0으로 버전 업이 이루어졌다. 이 SM4.0에서 최대의 주제라고 할 수 있는 것이 「지오메트리 셰이더」의 신설이다.
2007년 1월, Windows Vista의 등장과 함께 DirectX 10이 릴리스 됨과 동시에 프로그래머블 셰이더 사양(SM:Shader Model)은 4.0으로 버전 업이 이루어졌다. 이 SM4.0에서 최대의 주제라고 할 수 있는 것이 「지오메트리 셰이더(Geometry Shader)」의 신설이다. 이것은 지금까지 GPU 내부에서는 할 수 없었던 버텍스을 증감을 가능하게 하는 획기적인 구조이다.
아직 탄생해 곧 기능이기 때문에, 그 응용 방법은 현재도 각 개발 장면에서 아직 연구가 진행되고 있다는 상황이지만, 서서히 독특한 사용법도 등장하고 있다.
여기에서는 지오메트리 셰이더의 대표적인 활용 방법을 몇 가지 소개한다.
지오메트리 셰이더란?
본 연재 초반에서도 언급했듯이, 지오메트리 셰이더는 DirectX 10/SM4.0 환경이 아니면 사용할 수 없다. DirectX 10은 Windows Vista에 전용 공급되기 때문에, 즉, 지오메트리 셰이더는 Windows Vista 환경하가 아니면 이용할 수 없게 된다.
지오메트리 셰이더의 일은 프로그램에 따라 버텍스을 증감하는 것이다. 정확하게 말하면 선분, 폴리곤(삼각형)이나 파티클과 같은 「프리미티브」를 증감할 수 있다. 덧붙여서, 여담이 되지만, 지오메트리 셰이더는 DirectX 10 개발 당초 「프리미티브 쉐이더」(Primitive Shader)라고 불리는 일도 많았다.
기하학 셰이더 개념
그런데, 이 지오메트리 셰이더를 사용해 도대체 무엇을 할 수 있을까.
현재까지 등장하고 있는 다양한 지오메트리 셰이더의 활용을 카테고리화하면 두 종류로 분류할 수 있다.
하나는 '지오메트리 셰이더의 가속적 활용', 그리고 다른 하나는 '지오메트리 셰이더를 활용한 신표현'이다.
전자는 결과의 표현이야말로 변하지 않지만, 지오메트리 셰이더에 의해 묘화 퍼포먼스가 크게 가속하는 활용이다.
후자는, 지금까지는 실현이 어려웠던 표현이, 지오메트리 쉐이더를 활용하는 것으로 용이하게 실현 가능하게 된다……라고 하는 것이 된다.
현재는, 전술한 바와 같이 등장해 얼마 지나지 않아, 말하자면 지오메트리 셰이더 여명기라고도 할 수 있는 시기이기 때문에, 어느 쪽이라도 전자의 가속적 활용이 많은 것 같다.
우선은, 이 「지오메트리 쉐이더의 가속적 활용」 편으로부터 봐 가기로 하자.
지오메트리 셰이더의 가속적 활용 · 그 1~스텐실 섀도우 볼륨 기법의 그림자 생성을 가속한다
본 연재, 전회까지의 「그림자의 생성」의 곳에서 접한, 「스텐실 섀도우 볼륨」기법에 의한 그림자 생성에서는, 광원으로부터 봐 윤곽이 되는 버텍스을, 광원 벡터 방향으로 늘려 섀도우 볼륨(그림자 영역)을 생성하는 것으로 시작된다.
SM3.0 세대까지의 버텍스 쉐이더와 픽셀 셰이더 밖에 가지지 않는 GPU에서는, 이 그림자 영역 생성용의… 이 방법에서는, 그림자 생성에 전혀 관계가 없는 경우에도 그림자 영역을 늘리기 위한 버텍스 계산에 버텍스 쉐이더가 걸려 버리기 때문에, 버텍스 부하가 높다. 이것을 버텍스 부하를 경감하기 위해 그림자 신장 전용의, 비표시의 저 폴리곤 모델을 준비해, 이것에 대해 섀도우 볼륨 생성을 실시하는 테크닉도 있다. 그러나, 이 최적화에서는 그림자의 생성원이 낮은 폴리곤이기 때문에, 바삭바삭한 그림자가 생기기 쉬워진다는 약점이 있다.
근본적인 문제를 해결하기 위해서는, 동적으로 광원 방향에서 보고 윤곽인지 아닌지를 판단하고, 만약 그렇다면 여기에서 그림자 영역 신장용의 버텍스을 동적으로 생성하면 된다.
지오메트리 셰이더를 사용하면이 프로세스를 실현할 수 있습니다. 지금까지 귀찮았던, 3D 모델에의 「늘이기용 버텍스의 투입」이 불필요해지고, 한층 더 그림자 영역에 관계가 없는 불필요한 버텍스 처리로부터도 해방되어, 개발 작업 효율에도, 데이터 레벨적으로도, 퍼포먼스적으로도 가속이 실현된다. (계속)
섀도우 볼륨을 시각화한 예. 광원에 대해 윤곽이 되는 버텍스을, 동적으로 지오메트리 쉐이더로 복제해, 이것을 늘리는 처리를 실시하도록 처리를 개선
섀도우 볼륨을 시각화한 예. 광원에 대해 윤곽이 되는 버텍스을, 동적으로 지오메트리 쉐이더로 복제해, 이것을 늘리는 처리를 실시하도록 처리를 개선
(트라이Z 니시카와 젠지)