direct3d 10 api 개요

21
Direct3D 10 API 개개 개개 : Jack Hoxley 개개 : 개개개 ([email protected] ) 2005.12.18 KASA(http://www.dev3d.net )

Upload: isi

Post on 27-Jan-2016

85 views

Category:

Documents


3 download

DESCRIPTION

Direct3D 10 API 개요. 원저 : Jack Hoxley 발표 : 최지호 ( [email protected] ) 2005.12.18 KASA( http://www.dev3d.net ). DirectX 10 에 대하여. 이전 버전 (DirectX 9) 과 상당 부분 유사 . 완전히 다시 설계 . 윈도우 비스타 전용 . XP 에서 실행되지 않음. VDDM. Vista Display Driver Model. 비스타는 이전 운영체제보다 그래픽 기능과 이펙트에 신경을 많이 씀 . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Direct3D 10 API  개요

Direct3D 10 API 개요

원저 : Jack Hoxley발표 : 최지호 ([email protected])

2005.12.18

KASA(http://www.dev3d.net)

Page 2: Direct3D 10 API  개요

KASA 2

DirectX 10 에 대하여• 이전 버전 (DirectX 9) 과 상당 부분 유사 .• 완전히 다시 설계 .• 윈도우 비스타 전용 .• XP 에서 실행되지 않음 .

Page 3: Direct3D 10 API  개요

KASA 3

VDDM

• Vista Display Driver Model.• 비스타는 이전 운영체제보다 그래픽

기능과 이펙트에 신경을 많이 씀 .• “Aero Glass” GUI 스킨이 그 예 .

Page 4: Direct3D 10 API  개요

KASA 4

GPU

• 비스타에서 , GPU 는 여러 애플리케이션이 공유하는 자원 .

• VDDM 은 명령 스케쥴링 및 번역을 “ User Mode” 로 옮기고 , “Kernel Mode” 에는 핵심 기능만 남김 .– 하드웨어나 드라이버가 죽어도 운영체제는

죽지 않고 , 드라이버 / 하드웨어만 리셋 .

Page 5: Direct3D 10 API  개요

KASA 5

GPU 공유• GPU 를 공유한다는 것이 VDDM 의 핵심 .• 운영체제에 의한 가상 비디오 메모리 관리 .• 쓰레드간 리소스 공유가 가능 .• “ 디바이스 손실”이 없어짐 .

– 애플리케이션에서 처리할 필요가 없어짐 .• “ 디바이스 제거됨” 상태가 생김 .

– 노트북이 도킹 스테이션에 연결된 경우 .– 드라이버 업그레이드 시 .

Page 6: Direct3D 10 API  개요

KASA 6

DXGI

• DirectX Graphics Infrastructure.• Direct3D 10.1, 10.2, 11, 12 등이 새로

나와도 변하지 않는 인터페이스 .• 기본적인 저수준의 리소스와

오퍼레이션들이 이에 해당 .

Page 7: Direct3D 10 API  개요

KASA 7

프로그래머블 파이프라인

• 고정 함수 파이프라인은 사라짐 .• 새로운 프로그래머블 유닛 :

– Vertex Shaders(VS)– Geometry Shaders(GS)– Pixel Shaders(PS)

• 모두 “셰이더 모델 4.0”.• Geometry shader

– 완전히 새로 추가된 셰이더 유닛 .– 지오메트리를 추가하는 것이 가능 .

Page 8: Direct3D 10 API  개요

KASA 8

Stream Output(SO)

• 일반적인 그래픽 파이프라인은 단방향 .• 스트림 출력 (SO) 을 통해 GS 의 결과를

다시 Input Assembler 로 보낼 수 있음 .• GS 의 결과를 IA 로 보내는 동시에

렌더링하는 것도 가능 .• SO 를 통해 CPU 의 간섭을 최소화시킬 수

있음 ( 병렬화 ).• 예 . 첫번째 패스에는 스키닝을 , 두번째

패스에는 셰도우 볼륨 익스트루션을 .

Page 9: Direct3D 10 API  개요

KASA 9

Input Assembler(IA)

• 고정함수 .• 인덱스 / 버텍스 스트림을 사용해 VS/GS

의 실제 지오메트리 데이터를 구성 .• 프리미티브 타입 ( 선 리스트 , 삼각형

스트립 , 등등 ) 으로 실제 삼각형을 구성 .• 지오메트리 인스턴싱 및 스트림 출력

데이터 관련 .• 버텍스 ID, 프리미티브 ID 를 생성 .

Page 10: Direct3D 10 API  개요

KASA 10

Output Merger(OM)

• 고정함수 .• 파이프라인의 마지막 .• 모든 결과를 모아 스크린의 최종 픽셀로

통합시키는 작업 수행 .• 각 렌더타겟의 스텐실 값 , 깊이 값 등을

다양한 블렌딩 함수를 사용하여 결정 .

Page 11: Direct3D 10 API  개요

KASA 11

Direct3D 10 파이프라인

Page 12: Direct3D 10 API  개요

KASA 12

Primitive ID

• IA 가 설정하는 속성 (GS 도 삼각형 레벨에서는 가능 ).

•재질 시스템이 GPU 에 의해서 직접적으로 선택 가능 .

• IA 에 의해 지정된 Primitive ID 를 통해 GS 혹은 PS 에서 어떻게 렌더링 시킬지 결정 .

• 애플리케이션 단에서의 재질 기반 소팅이 필요없게 될지도…

Page 13: Direct3D 10 API  개요

KASA 13

Views

• 뷰 (Views) 를 사용한 통합 리소스 모델 .• 다른 스테이지 (또는 같은 스테이지에서도 ) 에서

동일한 리소스를 다르게 해석할 수 있음 .• 복잡한 리소스들을 다소 융통성 있게 만듦 .• 예 .

– 입방체 맵을 6 개의 렌더타겟들로 해석하는 동시에 단 패스 입방체 맵 렌더링을 수행 .

– 다른 밉맵 레벨들들 입력 / 출력으로 사용하여 , 다운샘플링 알고리즘의 “핑퐁”현상을 막음 .

Page 14: Direct3D 10 API  개요

KASA 14

Direct3D 10 애플리케이션 개발• 새로운 API 를 사용해야 하지만 , 핵심은 변하지

않음 .• 새로운 운영체제 , 드라이버 모델이기 때문에 변수가

적음 .• 테스트해야 할 하드웨어 개수도 적음 .• IHV 간에 기본 기능은 동일하기 때문에 , 성능과

품질로 구분하는 수 밖에 없음 .• 특정 기능이 벤더에 따라 너무 느리거나 하다면 ,

벤더 의존적인 다중 코드 패스가 여전히 존재할 가능성이 큼 .

Page 15: Direct3D 10 API  개요

KASA 15

생성시 리소스 유효성 체크• 생성시에 리소스의 유효성을 체크함 ( 성능을

위해서 ).• 사용할 때마다 매번 체크하는 비용을 줄임 .• 생성시 한번만 체크하면 그 다음부터는

안심하고 사용할 수 있으므로 간결하고 간단한 코딩이 가능 .

Page 16: Direct3D 10 API  개요

KASA 16

렌더 스테이트

• 다수의 변경 불가능한 상태 객체 .• 각 객체는 해당 파이프라인에 관계된 렌더

상태의 그룹을 구성 .• 예 .

– D3D10_DEPTH_STENCIL_DESC 객체는 깊이 /스텐실 버퍼링에 관련된 렌더 상태들을 보관 .

• 관리하기 편해짐 .– 이펙트에 사용될 여러 상태 객체들을 한번에

생성 .

Page 17: Direct3D 10 API  개요

KASA 17

HLSL( 이펙트 프레임웍 )

• 어셈블리 셰이더가 ( 거의 ) 사라짐 .• 어셈블리는 디버깅 용도로만 사용 가능 .•컴파일러가 코어 런타임에 포함됨 .

– 예전에는 D3DX 에 있었음 .• HLSL의 기본기능은 변하지 않았지만 ,

많은 새로운 명령과 함수들이 추가됨 .• SAS 도 아직 존재함 .• 여러 상수들을 그룹화시킨 상수 버퍼 사용 .

Page 18: Direct3D 10 API  개요

KASA 18

HLSL( 완전한 정수 연산 기능 )

• 정수 명령과 연산이 가능 .– 논리 연산자와 비트 연산자 .

• 예 . 비트 연산을 사용한 순수 바이너리 데이터 접근이 가능하므로 압축된 지오메트리를 GPU 에서 사용 가능 .

Page 19: Direct3D 10 API  개요

KASA 19

HLSL( 기타 )

• 명령어 개수가 무제한 .• 루프 및 실행 시간은 비스타 드라이버 모델에 의해

관리 .– GPU 가 멈춰 있다면 리셋을 시켜야 하므로 .

• 기존 API 보다는 새로운 API 를 사용하면 이점 있음 .

• 재설계한 이펙트 파일은 기존보다 적은 메모리 사용 .

• 이펙트 파일 내부 ( 상수 / 인자 , 테크닉 등 ) 를 액세스하는 인터페이스가 경량화됨 .

• 이펙트 풀 사용을 권장 .

Page 20: Direct3D 10 API  개요

KASA 20

앞으로 할일• 고정 함수에 의존하지 말자 .• 어셈블리 셰이더를 사용하지 말자 .• 새로운 파이프라인 값 (VertexID, PrimitiveID, InstanceID)

들을 어떻게 사용할지 (창의적으로 ) 궁리하자 .• GS 에 너무 큰 기대는 금물 .

– 베이저 패치나 압축 메시 같은 용도로 생각하는 것은 무리 .– 초기 하드웨어는 GS 에 대해 원하는 성능을 내지 못할 가능성이 큼 .

• 윈도우 XP 와 DirectX 9 이 갑자기 사라지는 것은 아님 .– 호환성을 위해 , DirectX9 의 업데이트이며 , 비스타의 새

드라이버 모델을 사용할 수 있는 “ DirectX 9.L” 를 고려 .

Page 21: Direct3D 10 API  개요

KASA 21

참고링크• 원문 :

– http://www.gamedev.net/reference/programming/features/d3d10overview/default.asp

• PDC 2005 Presentations: DirectX and Windows Vista– http://msdn.microsoft.com/directx/archiv

es/pdc2005/