Skip to content

지오메트리 셰이더(9)~지오메트리 셰이더를 활용한 신표현(5)

[칼럼 핵심 요약]
테셀레이션은 단적으로 말하면 버텍스의 증가, 즉 폴리곤을 증가시키는 것과 같습니다. 그렇다면 "지오메트리 셰이더를 사용할 수 있지 않을까"가 된다.

🌐 원문 링크: ジオメトリシェーダ(9)~ジオメトリシェーダを活用した新表現(5) (Mynavi News)
📅 원문 발행일: 2008-11-14 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)

NOTE

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

  • 본 칼럼에서 다루는 핵심 렌더링 기법은 현대 실시간 렌더링 엔진(DirectX 12, Vulkan, Unreal Engine, Unity)의 기초 이론을 구성하고 있으며, 최신 하드웨어 가속 기법 및 컴퓨트 셰이더와 결합하여 고도화되었습니다.

📖 본문 해설

[원문 리드문] > 테셀레이션은 단적으로 말하면 버텍스의 증가, 즉 폴리곤을 늘리는 것에 상당한다. 그렇다면 "지오메트리 셰이더를 사용할 수 있지 않을까"가 된다.

지오메트리 셰이더를 활용한 신표현(5)~디스플레이스먼트 매핑

테셀레이션은 단적으로 말하면 버텍스의 증가, 즉 폴리곤을 증가시키는 것과 같습니다. 그렇다면 "지오메트리 셰이더를 사용할 수 있지 않을까"가 된다.

ATI는 Radeon HD 2000/3000 시리즈에 테셀레이터 하드웨어가 있음에도 불구하고 이 테셀레이터의 구조를 지오메트리 셰이더로 구현하는 예를 보였다.

ATI의 실장예에서는, 3D모델의 애니메이션이나 스키닝 처리는 통상대로 버텍스 쉐이더로 실시해 버려, 일대로, 좌표 변환을 끝낸 버텍스 데이터를 지오메트리 쉐이더에 흘려, 여기에서 테셀레이션을 실시한다.

ATI의 실장예에서 테셀레이션은 지정한 1~9의 테셀레이션 레벨(분할 레벨)로 가변적으로 실시할 수 있는 구조로 되어 있었다.

분할 레벨을 2로 설정하면, 원래의 삼각형의 변을 2분할하는 폴리곤 분할이 행해진다. 3이라면 변이 3분할, 4이라면 4분할이다. 이 구현에서는 분할 레벨은 정수 밖에 줄 수밖에 없다. 또한, 이러한 분할 레벨을 정수로 주는 테셀레이터의 구조를 「이산형 테셀레이션」(Discrete Tessellation)이라고 한다. 그리고 부동소수점(Floating-Point)으로 주어지는 구조는 「연속형 테셀레이션」(Continuous Tessellation)이라고 부르고, 또한 삼각형의 변마다 다른 분할 레벨을 설정할 수 있는 구조는 「적응형 테셀레이션」(Adaptive Tessellation)이라고 부른다.

테셀레이션 유형테셀레이션 유형

막연하게 「분할한다」라고 해도, 지오메트리 셰이더로 「어떻게 폴리곤을 생성해 좋을까」가 이미지하기 어려울지도 모른다.

ATI의 구현에서는, 프로그램 루프로 돌리는데 편리한, 심플하고 독특한 분할 방법을 구현하고 있다.

우선, 분할 레벨이 몇개이어도 최초의 삼각형은 최소 사이즈로 1개 생성하고, 이어서, 3개 교대로 정연하게 나란히 생성해, 계속해 5개, 7개… 이제 지오메트리 셰이더로 삼각형의 한 변을 분할 레벨의 값으로 분할한 형태로 삼각형을 생성할 수 있게 된다. (계속)

지오메트리 셰이더를 사용하여 폴리곤 분할. 분할보다는 분할된 크기의 폴리곤을 지오메트리 셰이더를 사용하여 생성한다는 이미지지오메트리 셰이더를 사용하여 폴리곤 분할. 분할보다는 분할된 크기의 폴리곤을 지오메트리 셰이더를 사용하여 생성한다는 이미지

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


🔗 연관 지식 베이스 (Wiki)

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