Appearance
GPU와 셰이더 기술의 기초 지식 (8)
[칼럼 핵심 요약]
DirectX 10이 출시된지 얼마 안된 2007년 3월, 샌프란시스코에서 개최된 게임 개발자 회의 GDC 2007에서는, Microsoft로부터 DirectX 10 이후의 로드맵에 대한 언급이 되었다. 최초로 DirectX 10의 마이너 체인지판의 DirectX 10.1이 릴리스되어, 프로그래머블 셰이더의 버전은 4.1이 된다.🌐 원문 링크: GPUとシェーダ技術の基礎知識(8) (Mynavi News)
📅 원문 발행일: 2008-03-14 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)
NOTE
💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)
- 고정 기능에서 완전 프로그래머블로: 본문에서 다루는 플랫 셰이딩(Flat Shading)과 초기 고정 파이프라인(Fixed-Function Pipeline) 시대는 이후 DirectX 8/9의 버텍스/픽셀 셰이더 분리 시대를 거쳐, 현재는 컴퓨트 셰이더, 메시 셰이더(Mesh Shader), 레이트레이싱 파이프라인(DXR/Vulkan Ray Tracing)으로 완전히 통합·진화했습니다.
- 하드웨어 인터페이스의 진화: AGP 및 초기 PCI 인터페이스에서 현대의 PCIe 4.0/5.0 및 고대역 메모리(HBM3 / GDDR6X) 구조로 발전하여, 초당 수 테라바이트급의 메모리 대역폭을 소화하고 있습니다.
- 소프트웨어 래스터라이저의 부활: 최신 언리얼 엔진 5의 Nanite는 GPU 하드웨어 래스터라이저의 한계를 극복하기 위해, 매우 미세한 마이크로 폴리곤 클러스터에 대해 컴퓨트 셰이더 기반의 고속 소프트웨어 래스터라이저를 병행 사용하는 등 기술이 나선형으로 진보하고 있습니다.
📖 본문 해설
[원문 리드문] > DirectX 10이 출시된지 얼마 안된 2007년 3월, 샌프란시스코에서 개최된 게임 개발자 회의 GDC 2007에서는, 마이크로소프트로부터 DirectX 10 이후의 로드맵에 대한 언급이 되었다. 최초로 DirectX 10의 마이너 체인지판의 DirectX 10.1이 릴리스되어, 프로그래머블 셰이더의 버전은 4.1이 된다.
2008년 이후~미래의 DirectX 「DirectX 10.1」과 「DirectX 11"이후"」
DirectX 10이 출시된지 얼마 안된 2007년 3월, 샌프란시스코에서 개최된 게임 개발자 회의 GDC 2007에서는, Microsoft로부터 DirectX 10 이후의 로드맵에 대한 언급이 되었다.
최초로 DirectX 10의 마이너 체인지판의 DirectX 10.1이 릴리스되어, 프로그래머블 셰이더의 버전은 4.1이 된다.
확장되는 기능으로는 WDDM2.1의 본격 지원 외에 멀티 샘플 방식의 안티 앨리어스(MSAA:Multi-Sampled Anti-Aliasing)의 샘플 위치의 프로그래머블화 확장, 복수의 렌더 타겟간의 개별 블렌딩 메소드의 지원, 큐브 맵 텍스처 배열의 서포트 등 SM4.0의 기능 확충과 같은 진화를 이룬다. 물론 기능 확장의 발판을 갖추기 위해 10.1이라고 하는 "0.1"의 단수는 포함하지만, 마이크로소프트가 깔끔한 버전 컨트롤을 하기 때문에, 세세한 아류의 등장은 없다.
DirectX 10.1/SM4.1은 2008년 3월 제공 예정인 Windows Vista Service Pack1에 포함되게 되어 SP1 적용 후 이용 가능하게 된다. 현시점에서는 DirectX 10.1/SM4.1 대응 GPU로서는 AMD(ATI)가 Radeon HD 3000 시리즈를, S3 Grqphics는 Chrome 400 시리즈를 발표하고 있지만, 한편 NVIDIA는 DirectX 10.1/SM4.1에의 대응은 당분간 실시하지 않는 방침을 밝히고 있어 10.1/SM4.1이 메이저가 될지 모르겠다. 결국 사실상 DirectX 10세대에서도 AMD(ATI)와 NVIDIA의 방침은 결렬했다는 것이다.
AMD의 ATI Radeon HD 3870. DirectX 10.1/SM4.1 제일 타는 GPU
S3 Graphics의 Chrome 440GTX. 메인 스트림 이하의 저렴한 DirectX 10.1/SM4.1 대응 GPU로서 소구된다
그리고, 더욱 그 앞, 마이크로소프트는 DirectX 11의 릴리스를 예정하고 있다.
DirectX 11 "이후"라는 표현을 사용하여 어떤 기능이 언제 구현되는지는 미정으로 하면서도 몇 가지 큰 변혁이 가져온다는 것을 밝히고 있다.
하나는 보다 GPU를 범용 프로세서적으로 활용할 수 있는 구조의 도입이다. 특히 처음에는 미디어 프로세서적인 스트리밍 프로세서로 사용하기 쉽게 할 계획이 되어 있는 것 같다. 구체적으로는, GPU에 보낼 수 있는 벡터 데이터 구조를 보다 유연하게 확장하거나, GPU로 처리한 출력 데이터 스트림을 처리 결과마다 스위칭해 복수의 버퍼에 배분할 수 있는 구조를 검토하고 있다고 한다.
또, 3D 그래픽스 이외의 과학기술 계산 용도에 대응하기 위해서 연산 정밀도를 현행의 단정밀도로부터 배정밀도의 64비트 부동소수점(Floating-Point)(FP64)에도 대응한다고 한다. 기능적으로 그러한 대응을 실시하는 것은 물론, 그러한 범용 프로세서로서의 성능 강화를 실시하기 위해서, GPU측에는 메모리의 랜덤 액세스 성능의 강화나 캐쉬 시스템의 개량도 요구되고 있을 것이다.
게다가 DirectX 10/SM4.0의 지오메트리 셰이더에 가세해, DirectX 11 이후에서는 렌더링 파이프라인에 새로운 처리 스테이지가 신설된다. 그것이 '테셀레이션'(Tessellation)의 단계다. 테셀레이션은 간단히 말하면, 폴리곤을 한 방법에 따라 분할하는 구조. 이미 DirectX 9/SM2.0 시대부터 테셀레이션의 지원은 행해지고 있었지만, 특정의 GPU를 활용했을 경우에 한정되어 있었기 때문에 주류의 기능은 아니었다. 그러나, DirectX 11 이후에서는 이것이 정식으로 표준적인 기능으로서 규정된다고 한다. 테셀레이션을 수행하는 유닛, 즉 "테셀레이터"(Tessellator)는 처음에는 프로그래머블 셰이더가 아니라 고정 기능 유닛으로 제공 될 것이라는 정책도 제시됩니다. 덧붙여서, 현재, DirectX 규격은 아니지만, Radeon HD 3000 시리즈는 고정 기능으로서의 테셀레이션 유닛을 탑재하고 있다. 이것이 DirectX 11에서 정식 사양이 될지는 불분명하다.
테셀레이터는 고정 유닛이 되지만, 대신에, 폴리곤 분할을 행할 때의 제어점을 프로그래머블하게 컨트롤 하는, 「컨트롤 포인트 셰이더」(Control Point Shader)라고 하는 제4의 프로그래머블 셰이더가 신설된다. 이것은 실질적으로 테셀레이터의 기능을 보조하는 프로그래머블 셰이더라고도 해야 하며, DirectX 11 이후의, 더욱 미래의 DirectX 세대에서는 통합될 가능성이 있다.
DirectX 11 이후의 렌더링 파이프라인 상상도
🔍 [인포그래픽 도해 한국어 번역: DirectX 11 렌더링 파이프라인 구조]
- 입력 어셈블러 (IA)
버텍스 셰이더 (VS) - 헐 셰이더 (HS / Hull Shader): 분할 패치 제어점 연산
- 테셀레이터 (Tessellator): 하드웨어 기반 고속 정점 분할 (고정 기능)
- 도메인 셰이더 (DS / Domain Shader): 생성된 정점의 최종 3차원 위치 계산
- 지오메트리 셰이더 (GS)
래스터라이저 (RS) 픽셀 셰이더 (PS) 출력 병합 (OM) - 컴퓨트 셰이더 (CS): 파이프라인 외부에서 독립적으로 GPGPU 병렬 연산 수행
이 외, DirectX 11 이후에서는, 실시간 3D 그래픽스의 적년의 과제였던 반투명 오브젝트의 묘화 순서의 저박으로부터의 해방을 목표로 「A-Buffer」의 개념을 어떠한 형태로 도입해 가고 싶다고 발표되고 있다.
실시간 3D 그래픽에서는 반투명 오브젝트의 묘화는 안쪽에서 앞으로 향해 묘화하지 않으면 반투명 묘사가 올바르게 재현되지 않기 때문에, 묘화 전 준비로서 3D 오브젝트의 재정렬 단계가 필요했다. 「A-Buffer」에서는, 렌더링시에 쉐이더로 산출된 칼라 외에, 윤곽의 마스크 정보나 심도치 정보등을 함께 프레임 버퍼에 기입해 가는 것으로, 최종 묘화 후에는 철쭉이 맞도록 영상을 재구성할 필요가 있지만, 렌더링시의 묘화 순서의 의존성을 완전 배제할 수 있다는 메리트가 있다.
원래 A-Buffer는 조지 루카스가 이끄는 Lucas Film이 오프라인 렌더링용으로 고안한 테크놀로지이며, 렌더링이 시작된 시점에서는 GPU측에서는 그 복잡성을 예견할 수 없는 구조다. 따라서 실시간/하드웨어 구현은 상당히 복잡한 구조가 될 것으로 예상된다. 그러나, 이 A-Buffer의 구조는 3D 어플리케이션 개발자나 3D 엔진 설계자에게 있어서는, 소프트웨어측의 부담을 대폭으로 격감할 수 있다고 하고, 그 실장에는 상당한 기대가 전해지고 있다.
DirectX 11의 등장 시기는 전혀 불명. 덧붙여 제4의 프로그래머블 쉐이더가 투입되는 것으로부터 생각해 프로그래머블 쉐이더의 버젼은 "1.0" 올라, SM5.0이 된다고 봐 틀림없을 것이다.
A-Buffer의 개념적 이미지. "A"에는 anti-aliased(안티앨리어싱), area-averaged(영역 평균화), accumulation(연산) 등의 여러 의미가 담겨 있다
(트라이Z 니시카와 젠지)