210 likes | 407 Views
Direct3D 10 API 개요. 원저 : Jack Hoxley 발표 : 최지호 ( zho@korea.com ) 2005.12.18 KASA( http://www.dev3d.net ). DirectX 10 에 대하여. 이전 버전 (DirectX 9) 과 상당 부분 유사 . 완전히 다시 설계 . 윈도우 비스타 전용 . XP 에서 실행되지 않음. VDDM. Vista Display Driver Model. 비스타는 이전 운영체제보다 그래픽 기능과 이펙트에 신경을 많이 씀 .
E N D
Direct3D 10 API 개요 원저: Jack Hoxley 발표: 최지호(zho@korea.com) 2005.12.18 KASA(http://www.dev3d.net)
DirectX 10에 대하여 • 이전 버전(DirectX 9)과 상당 부분 유사. • 완전히 다시 설계. • 윈도우 비스타 전용. • XP에서 실행되지 않음. KASA
VDDM • Vista Display Driver Model. • 비스타는 이전 운영체제보다 그래픽 기능과 이펙트에 신경을 많이 씀. • “Aero Glass” GUI 스킨이 그 예. KASA
GPU • 비스타에서, GPU는 여러 애플리케이션이 공유하는 자원. • VDDM은 명령 스케쥴링 및 번역을 “User Mode”로 옮기고, “Kernel Mode”에는 핵심 기능만 남김. • 하드웨어나 드라이버가 죽어도 운영체제는 죽지 않고, 드라이버/하드웨어만 리셋. KASA
GPU 공유 • GPU를 공유한다는 것이 VDDM의 핵심. • 운영체제에 의한 가상 비디오 메모리 관리. • 쓰레드간 리소스 공유가 가능. • “디바이스 손실”이 없어짐. • 애플리케이션에서 처리할 필요가 없어짐. • “디바이스 제거됨” 상태가 생김. • 노트북이 도킹 스테이션에 연결된 경우. • 드라이버 업그레이드 시. KASA
DXGI • DirectX Graphics Infrastructure. • Direct3D 10.1, 10.2, 11, 12 등이 새로 나와도 변하지 않는 인터페이스. • 기본적인 저수준의 리소스와 오퍼레이션들이 이에 해당. KASA
프로그래머블 파이프라인 • 고정 함수 파이프라인은 사라짐. • 새로운 프로그래머블 유닛: • Vertex Shaders(VS) • Geometry Shaders(GS) • Pixel Shaders(PS) • 모두 “셰이더 모델 4.0”. • Geometry shader • 완전히 새로 추가된 셰이더 유닛. • 지오메트리를 추가하는 것이 가능. KASA
Stream Output(SO) • 일반적인 그래픽 파이프라인은 단방향. • 스트림 출력(SO)을 통해 GS의 결과를 다시 Input Assembler로 보낼 수 있음. • GS의 결과를 IA로 보내는 동시에 렌더링하는 것도 가능. • SO를 통해 CPU의 간섭을 최소화시킬 수 있음(병렬화). • 예. 첫번째 패스에는 스키닝을, 두번째 패스에는 셰도우 볼륨 익스트루션을. KASA
Input Assembler(IA) • 고정함수. • 인덱스/버텍스 스트림을 사용해 VS/GS의 실제 지오메트리 데이터를 구성. • 프리미티브 타입(선 리스트, 삼각형 스트립, 등등)으로 실제 삼각형을 구성. • 지오메트리 인스턴싱 및 스트림 출력 데이터 관련. • 버텍스 ID, 프리미티브 ID를 생성. KASA
Output Merger(OM) • 고정함수. • 파이프라인의 마지막. • 모든 결과를 모아 스크린의 최종 픽셀로 통합시키는 작업 수행. • 각 렌더타겟의 스텐실 값, 깊이 값 등을 다양한 블렌딩 함수를 사용하여 결정. KASA
Direct3D 10 파이프라인 KASA
Primitive ID • IA가 설정하는 속성(GS도 삼각형 레벨에서는 가능). • 재질 시스템이 GPU에 의해서 직접적으로 선택 가능. • IA에 의해 지정된 Primitive ID를 통해 GS 혹은 PS에서 어떻게 렌더링 시킬지 결정. • 애플리케이션 단에서의 재질 기반 소팅이 필요없게 될지도… KASA
Views • 뷰(Views)를 사용한 통합 리소스 모델. • 다른 스테이지(또는 같은 스테이지에서도)에서 동일한 리소스를 다르게 해석할 수 있음. • 복잡한 리소스들을 다소 융통성 있게 만듦. • 예. • 입방체 맵을 6개의 렌더타겟들로 해석하는 동시에 단 패스 입방체 맵 렌더링을 수행. • 다른 밉맵 레벨들들 입력/출력으로 사용하여, 다운샘플링 알고리즘의 “핑퐁”현상을 막음. KASA
Direct3D 10 애플리케이션 개발 • 새로운 API를 사용해야 하지만, 핵심은 변하지 않음. • 새로운 운영체제, 드라이버 모델이기 때문에 변수가 적음. • 테스트해야 할 하드웨어 개수도 적음. • IHV간에 기본 기능은 동일하기 때문에, 성능과 품질로 구분하는 수 밖에 없음. • 특정 기능이 벤더에 따라 너무 느리거나 하다면, 벤더 의존적인 다중 코드 패스가 여전히 존재할 가능성이 큼. KASA
생성시 리소스 유효성 체크 • 생성시에 리소스의 유효성을 체크함(성능을 위해서). • 사용할 때마다 매번 체크하는 비용을 줄임. • 생성시 한번만 체크하면 그 다음부터는 안심하고 사용할 수 있으므로 간결하고 간단한 코딩이 가능. KASA
렌더 스테이트 • 다수의 변경 불가능한 상태 객체. • 각 객체는 해당 파이프라인에 관계된 렌더 상태의 그룹을 구성. • 예. • D3D10_DEPTH_STENCIL_DESC 객체는 깊이/스텐실 버퍼링에 관련된 렌더 상태들을 보관. • 관리하기 편해짐. • 이펙트에 사용될 여러 상태 객체들을 한번에 생성. KASA
HLSL(이펙트 프레임웍) • 어셈블리 셰이더가 (거의) 사라짐. • 어셈블리는 디버깅 용도로만 사용 가능. • 컴파일러가 코어 런타임에 포함됨. • 예전에는 D3DX에 있었음. • HLSL의 기본기능은 변하지 않았지만, 많은 새로운 명령과 함수들이 추가됨. • SAS 도 아직 존재함. • 여러 상수들을 그룹화시킨 상수 버퍼 사용. KASA
HLSL(완전한 정수 연산 기능) • 정수 명령과 연산이 가능. • 논리 연산자와 비트 연산자. • 예. 비트 연산을 사용한 순수 바이너리 데이터 접근이 가능하므로 압축된 지오메트리를 GPU에서 사용 가능. KASA
HLSL(기타) • 명령어 개수가 무제한. • 루프 및 실행 시간은 비스타 드라이버 모델에 의해 관리. • GPU가 멈춰 있다면 리셋을 시켜야 하므로. • 기존 API보다는 새로운 API를 사용하면 이점 있음. • 재설계한 이펙트 파일은 기존보다 적은 메모리 사용. • 이펙트 파일 내부(상수/인자, 테크닉 등)를 액세스하는 인터페이스가 경량화됨. • 이펙트 풀 사용을 권장. KASA
앞으로 할일 • 고정 함수에 의존하지 말자. • 어셈블리 셰이더를 사용하지 말자. • 새로운 파이프라인 값(VertexID, PrimitiveID, InstanceID)들을 어떻게 사용할지 (창의적으로) 궁리하자. • GS에 너무 큰 기대는 금물. • 베이저 패치나 압축 메시 같은 용도로 생각하는 것은 무리. • 초기 하드웨어는 GS에 대해 원하는 성능을 내지 못할 가능성이 큼. • 윈도우XP와 DirectX 9이 갑자기 사라지는 것은 아님. • 호환성을 위해, DirectX9의 업데이트이며, 비스타의 새 드라이버 모델을 사용할 수 있는 “DirectX 9.L”를 고려. KASA
참고링크 • 원문: • http://www.gamedev.net/reference/programming/features/d3d10overview/default.asp • PDC 2005 Presentations: DirectX and Windows Vista • http://msdn.microsoft.com/directx/archives/pdc2005/ KASA