Tải bản đầy đủ (.pptx) (28 trang)

Tìm hiểu Công nghệ DirectX

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.57 MB, 28 trang )

NHÓM 9
TÌM HIỂU VỀ DIRECTX
Môn học: Kĩ Thuật Đồ Họa
Giáo viên: Hà Thị Kim Dung
Thực hiện:
Nguyễn Viết Tùng
Nguyễn Hữu Dương


MỤC LỤC
Giới thiệu về DirectX
Những thành phần cơ bản của DirectX
Mô hình đối tượng thành phần (COM)
Ưu điểm của DirectX
Ví dụ mô phỏng


I.Giới thiệu về DirectX


I.Giới thiệu về DirectX
DirectX là gì?

 DirectX là một tài sản của tập đoàn Microsoft. Logo của bộ thư viện này đơn giản chỉ là tên

gọi DirectX đi cùng tên của công ty.

 DirectX là một tập hợp thư viện các hàm API được Microsoft thiết kế để cung cấp cho

những người phát triển game một giao diện lập trình cấp thấp để liên kết tới các phần cứng
của PC chạy trên hệ điều hành Windows.




I.Giới thiệu về DirectX
DirectX là gì?
• Thuở ban đầu, tên gọi của tất cả các API nay đều được bắt đầu bởi tiền tố Direct,

ví dụ như Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound …Tên gọi
DirectX đôi khi được rút gọn chỉ còn X. Khi Microsoft tiến hành phát triển một hệ
máy chơi game mới, kí tự X được dùng trong từ Xbox để ám chỉ việc thế hệ máy
chơi game này được xây dựng trên những công nghệ của DirectX. Kí tự X sau đó
được dùng để đặt tên cho những API được thiết kế dành riêng cho Xbox như
XInput, XACT (Audio Creation Tool) … trong khi tiền tố Direct được Microsoft sử
dụng để đặt tên cho các API dành cho Windows như Direct2D, DirectWrite …

• Mỗi một đối tượng API của DirectX cung cấp một khả năng truy cập khác nhau tới

từng loại phần cứng của hệ thống, tất cả chúng đều được xây dựng trên một giao
diện chuẩn. Giao diện này cho phép những người phát triển có thể viết những
game của họ bằng cách sử dụng tập hợp cách hàm này lại với nhau mà không cần
phải quan tâm nhiều tới phần cứng mà nó sẽ được sử dụng.


I.Giới thiệu về DirectX
Sự ra đời và phát triển

Craig Eisler

Alex St. John

Eric Engstrom



I.Giới thiệu về DirectX
Sự ra đời và phát triển
• Phiên bản đầu tiên của DirectX phát hành vào tháng 9 năm 1995 với tên gọi Windows

Games SDK – cũng là sự thay thế cho DCI và WinG API trên Windows 3.1. Nhờ có
DirectX (được tích hợp vào trong Windows 95 trở về sau), ứng dụng có thể tận dụng
sức mạnh phần cứng để xử lý nhiều tác vụ đa phương tiện.

• DirectX 2.0 trở thành một thành phần của Windows trong phiên bản Windows 95

OSR2 và Windows NT 4.0 vào giữa năm 1996. Do Windows 95 còn quá mới mẻ lúc
này nên có rất ít tựa game được phát hành cho nó. Microsoft đã triển khai những
chiến dịch quảng bá mạnh mẽ cho DirectX nhằm đánh tan sự hoài nghi của giới lập
trình viên về nền tảng này.


I.Giới thiệu về DirectX
Sự ra đời và phát triển
• Sau khi DirectX 3 phát hành, Microsoft tiến hành phát triển phiên bản

DirectX 4 và 5 song song với nhau. Trong đó, DirectX 4 dự định sẽ là một bản
cập nhật một số tính năng, trong khi DirectX 5 dự định sẽ là một phiên bản
lớn với nhiều cải tiến.

• Năm 2002, Microsoft phát hành DirectX 9, hỗ trợ lập cho việc lập trình vertex

và pixel shader – Shader Model 2.0. Phiên bản Direct9.0c với Shader Model
3.0 được phát hành không lâu sau đó, vào tháng 8 năm 2004.


• Tháng 4 năm 2005, DirectShow được gỡ khỏi DirectX và chuyển qua tích hợp

vào Microsoft Platform SDK.

• Phiên bản mới nhất hiện tại của DirectX là 12 ra mắt ngày 29/7/2015 hỗ trợ trên nền

Windows 10 và Xbox One


II.Những thành phần cơ bản
Dưới đây là những thành phần cơ bản của DirectX từ phiên bản 9.0(c) trở về các phiên
bản trước đó đã bị gỡ bỏ ra khỏi DirectX SDK:
 DirectX Graphic: Thành phần này đảm nhiệm tất cả các chức năng kết xuất đồ
hoạ của hệ thống. Nó cung cấp những hàm API để người dùng có thể quản lý quá
trình vẽ 2D cũng như 3D.
 DirectInput: Tất cả những gì người dùng nhập vào sẽ được quản lý bởi các hàm
API trong thành phần này. Nó bao gồm khả năng hỗ trợ các thiết bị như bàn
phím, chuột, gamepad, joystick.
 DirectPlay: Khả năng kết nối mạng được cung cấp cho những hệ thống game của
bạn thông qua thành phần DirectPlay này. Những hàm phục vụ kết nối này đem
đến cho bạn khả năng phát triển ứng dụng có thể giao tiếp với bất kỳ một máy
nào khác, cho phép không chỉ một người có thể chơi game đó. DirectPlay đem
đến cho bạn một giao diện lập trình cấp cao nhằm giúp bạn tránh khỏi những
vấn đề khó khăn trong quá trình lập trình ứng dụng liên kết mạng.


II.Những thành phần cơ bản
 DirectSound: Chức năng của DirectSound là cho phép bạn có thể tải và chơi một


hoặc nhiều file nhạc dạng WAV cũng như toàn bộ khả năng điều khiển quá trình
chơi nhạc đó. Nếu bạn muốn chèn thêm các hiệu ứng âm thanh hoặc nhạc nền, bạn
sẽ cần phải sử dụng tới những hàm API do thành phần này cung cấp.
 DirectMusic: Nó có khả năng hỗ trợ hầu hết các chức năng chính của một phần

mềm chơi nhạc midi như tự chạy lại theo một qui trình đã xác lập, biến đổi âm
lượng để phù hợp với hoạt cảnh trong game, thay đổi nhịp của giai điệu và nhiều
chức năng cao cấp khác.
 DirectShow: Bạn có thể cắt một hoạt cảnh phim hoặc lồng ghép âm thanh và game

của mình thông qua thành phần này. DirectShow hỗ trợ rất nhiều định dạng file như:
AVI, MP3, MPEG , ANF, .v.v... Với DirectShow, bạn sẽ không phải tải tất cả các đối
tượng file này lên bộ nhớ, thay vào đó là truy cập trực tiếp dữ liệu trên ổ cứng hoặc
CD-ROM.


II.Những thành phần cơ bản
Các thành phần cơ bản của phiên bản DirectX11:
 Direct2D: được sử dụng cho đồ họa 2D trong các ứng dụng Win32. Nó có khả năng dựng

hình đồ họa vector với hiệu suất cao.
 DirectWrite : được sử dụng để tạo các phông chữ và vẽ chữ trong ứng dụng Direct2D.
 DXGI (DirectX Graphics Infrastructure): tạo ra các chuỗi trao đổi Direct3D và liệt kê các bộ

chuyển đổi thiết bị.
 Direct3D: được sử dụng cho tất cả các công việc về đồ họa 3D trong DirectX. Đây cũng

là bộ API mà nhận được nhiều sự chú ý và được cập nhật thường xuyên nhất.

 XAudio2: là bộ API xử lý âm thanh ở mức độ thấp, đây là 1 phần của XDK (Xbox


Development Kit), và hiện nay là DirectX XDK. XAudio2 là sự thay thế DirectSound. Các
nhà phát triển sẽ sử dụng XAudio 2 nếu họ cần tạo các âm thanh hệ thống ở mức độ thấp.


II.Những thành phần cơ bản
 XACT3 (Microsoft Cross-Platform Audio Creation Tool 3): là bộ API xử lý âm

thanh cao cấp hơn được xây dựng dựa trên XAudio2. XACT3 cho phép các nhà phát
triển ứng dụng sử dụng Cross-Platform Audio Creation Tool để tạo ra những âm
thanh ở trong các ứng dụng của họ. Đây là một công cụ mạnh mẽ để tạo ra hệ thống
âm thanh trong các trò trơi.
 XInput: là bộ API đầu vào cho XDK và Direct X SDK để xử lý đầu vào tất cả các

thiết bị điều khiển của Xbox 360. Về cơ bản, các thiết bị điều khiển có thể sử dụng
cho Xbox 360 thì cũng có thể sử dụng trên PC và XInput là bộ API làm việc với các
thiết bị này. XInput là sự thay thế cho DirectInput.
 XNA Math: XNA Math không phải là một bộ API mà là một thư viện toán học tối

ưu hóa hoạt động toán học thông thường đối với video games. XNA Math sử dụng
SIMD (Single Instruction Multi Data) để thực hiện nhiều hoạt động bằng việc gọi
một lệnh duy nhất. Thư viện XNA Math có sẵn cho Xbox 360 và Windows PC.


II.Những thành phần cơ bản
 DirectCompute: là một bộ API mới được thêm vào DirectX 11 cho phép tính toán đa

luồng trong GPU. GPU có khả năng xử lý nhiều nhiệm vụ song song ở mức độ vật
lý như: nén và giải nén video, xử lý âm thanh, và còn nhiều hơn nữa.
 DirectSetup: Sau khi game của bạn đã hoàn thành, bạn sẽ muốn phát hành nó.


DirectSetup cung cấp cho bạn những chức năng giúp ứng dụng có thể tự động cài
đặt những phiên bản DirectX mới nhất lên hệ thống của người sử dụng.


III.Mô hình đối tượng thành phần
 Các hàm DirectX API được thiết kế trên nền tảng Component Object Model (COM).

Đối tượng COM bao gồm tập hợp các giao diện nhằm cung cấp các phương thức
cho những người lập trình có thể truy cập DirectX. Đối tượng COM có thể hiểu nôm
na là các tệp tin DLL đã được đăng ký với hệ thống. Đối với những đối tượng
DirectX COM, quá trình này xảy ra khi DirectX được cài đặt vào hệ thống. Mặc dù
nó khá giống với các đối tượng C++, nhưng các đối tượng COM cần thiết phải có
một giao diện để truy cập tới các phương thức bên trong nó. Đây thực sự là một
thuận lợi so với cách sử dụng các đối tượng thông thường bởi vì ta có thể xây dựng
rất nhiều kiểu giao diện cho một đối tượng COM, nó rất thuận lợi cho việc tương
thích ngược (hỗ trợ các ứng dụng đã xây dựng trước đó).
 Điều này được thể hiện ở việc, mỗi một phiên bản của DirectX đều chứa những giao

diện mới của DirectDraw và nó có thể truy cập thông qua các hàm API, ngoài ra nó
vẫn chứa phiên bản trước đó nên nó không hề tác động tới những mã lệnh đã được
viết trước đó. Những game được viết để sử dụng Direct7 hoàn toàn có thể hoạt động
với Direct9 hay Direct11 mà không gặp bất kỳ vấn đề gì.


III.Mô hình đối tượng thành phần
 Thêm một lợi điểm nữa của kỹ thuật này là các đối tượng COM có khả năng hoạt

động với rất nhiều ngôn ngữ khác chứ không phải chỉ bằng C++. Người lập trình có
thể sử dụng Visual Basic, C++ hay C# mà vẫn có thể sử dụng cùng một thư viện

DirectX.


IV.Ưu điểm của DirectX
Ưu điểm của DirectX (DirectX 11):
 Công nghệ đường ống (Pipeline): Microsoft giới thiệu 3 lớp mới trong công nghệ

đường ống (pipeline) DirectX 11: Đổ bóng bề mặt (Hull Shader), công cụ phủ
Tessellator và đổ bóng vùng (Domain Shader). Bổ sung vào 3 lớp trên, quá trình đổ
bóng điểm trong cấu trúc đường ống đã có vài thay đổi, cho phép tính toán đổ bóng
(Compute Shader - CS) nhiều tác vụ đa năng. Theo ý kiến của các nhà phát triển
game và ứng dụng, CS có nhiều cách sử dụng. Chỉ cần có một cách phân luồng cho
một ứng dụng, thì sẽ có một cách dùng cho CS.


IV.Ưu điểm của DirectX
 Công nghệ phủ (Tessellation): Công nghệ phủ đã xuất hiện ngay từ khi Microsoft

công bố Xbox 360 vào cuối năm 2005 nhằm cải thiện quá trình chỉnh sửa nội dung và
cho phép các nhà phát triển cũng như chuyên gia đồ họa sáng tạo nhiều đối tượng thực
tế hơn và phức tạp hơn mà không cần bộ nhớ đồ họa quá lớn.
 Về cơ bản, một đối tượng khi ở xa sẽ ít chi tiết và ít các hình tam giác, nhưng khi tiến

lại gần người xem thì số lượng tam giác và chi tiết sẽ tăng theo hàm mũ. Hình ảnh đẹp
chỉ khi nó xuất toàn bộ, tổng số tam giác trung bình phải lớn hơn hằng số cho phép thì
sẽ ít xuất hiện hiện tượng dừng hình, nhảy hình trong lúc hiển thị.
 Theo truyền thống, việc tạo đối tượng bắt đầu từ mô hình khung Sub-D, đến hoạt cảnh

và ánh xạ phủ bề mặt trước khi một lưới đa giác áp dụng nó. Một khi lưới đã được áp
dụng, nó được chia lại nhiều cấp bậc chi tiết (LOD – Level Of Detail) trước khi được

gửi đến GPU. Các cấp bậc khác nhau có thể được sử dụng cho những lớp khác nhau của
phần cứng hoặc chúng có thể được dùng khi nhân vật hay đối tượng của nội dung xa
màn hình, bổ sung nhiều chi tiết hơn cho người xem, nhưng tốn càng ít “công sức” càng
tốt.


IV.Ưu điểm của DirectX
 Công nghệ phủ (Tessellation) (Tiếp):
 Công nghệ đường ống đồ họa DirectX 11 là một tập hợp mẹ của DirectX 10 mà sự

bổ sung chủ yếu là công nghệ phủ. Tuy công cụ phủ DirectX 11 mạnh mẽ và linh
hoạt hơn các thành phần phủ của GPU AMD gần đây (bao gồm cả Xenos). Nhưng
thật sự, Tessellator vẫn không thể lập trình được mà chỉ dựa vào thành phần Hull
Shader (đổ bóng bề mặt), Hull shader cung cấp thông tin phù hợp và sau đó,
Domain Shader nhận dữ liệu phủ và xuất ra các đỉnh trước khi nó chuyển xuống các
phần tiếp theo của cấu trúc đường ống.


IV.Ưu điểm của DirectX
 Công nghệ phủ có cả trong Hull Shader và Domain Shader:
 Hull Shader là nơi tiến trình phủ một đối tượng được thiết lập – nó điều

khiển các điểm của mảng rồi sau đó tính toán cấp độ phủ yêu cầu. Sau bước
chuyển đổi cơ bản, các điểm điều khiển sẽ được chuyển vào Domain Shader –
bộ phận phủ không thấy được các điểm điều khiển. Thay vào đó, công cụ phủ
Tessellator được cung cấp một số TessFactor, về cơ bản sẽ cho biết cấp độ phủ
được yêu cầu trên một miếng khảm cụ thể. Hull Shader cũng báo cho bộ phận
phủ phương thức (mode) mà nó nên thực hiện – nhà phát triển có thể định
rõ cách mà tiến trình phủ thực hiện công việc (mặc dù đơn vị phủ là tính
năng cố định, nhưng có vài phương thức để lựa chọn).


 Sau đó, Tessellator nhận những gì được cung cấp bởi Hull Shader rồi kết hợp

các mảng để tạo yêu cầu hình học bổ sung. Khi quá trình này hoàn thành, các
điểm vùng (domain point) và dữ liệu hình học sẽ xuất hiện.


IV.Ưu điểm của DirectX
 Các điểm vùng được chuyển xuống Domain Shader (làm việc trên từng điểm

cơ bản), khi đó bộ phận này sẽ nhận điểm vùng và tạo đỉnh cho các giai đoạn
tiếp theo. Trong khi đó, dữ liệu hình học đi thẳng xuống lớp gốc của đường
ống – lý do là dữ liệu này không cần đổ bóng, nhưng lại cần chuyển đổi.

 Điều quan trọng ở đây là cả lớp phủ của đường ống không làm việc với các

tam giác mà chỉ làm việc với các miếng khảm và điểm. Các miếng khảm sẽ mô
tả đường cong hoặc vùng bề mặt bởi 4 cạnh. Tất nhiên, các mảng có thể được
mô tả với những tam giác, nhưng điều đó không phổ biến, vì hầu hết các ứng
dụng chỉnh sửa 3D đều làm việc với 4 cạnh. Đây là lần đầu tiên DirectX không
làm việc với tam giác, đó là một bước tiến đáng kể.


IV.Ưu điểm của DirectX
 Bộ đổ bóng Compute Shader:
 Compute Shader sẽ nhận dữ liệu từ Pixel Shader. Bộ đổ bóng tính toán mới

này hỗ trợ tốt hơn cho nhiều hãng phần cứng khác nhau, gia tăng khả năng
lập trình cho các GPU đa năng (GPGPU – General Purpose GPU) mà NVIDIA
và AMD đang tích cực cải tiến trong những năm gần đây. Nhờ cải tiến

Compute Shader, ngoài việc dựng hình, các GPU giờ đây thực hiện cả những
tính toán khác, chẳng hạn như tạo hiệu ứng bóng mờ.

 Microsoft cho rằng các nhà phát triển sẽ cảm thấy dễ dàng hơn trong việc

phát triển các ứng dụng game trong khi các phần cứng được tận dụng hết khả
năng.


IV.Ưu điểm của DirectX
 Hỗ trợ đa luồng:
 API của DirectX 11 đem lại cho lập trình viên khả năng điều khiển GPU từ CPU đa nhân.

Những thay đổi trong mô hình API và mô hình trình điều khiển của DirectX 11 đã cải
thiện việc tính toán của CPU. Việc truy cập các thiết bị không đồng bộ giờ đây đã được
thực hiện thông qua hai tính năng chính của đối tượng thiết bị trong thư viện Direct3D 11.
 Cách để Microsoft đạt được điều này là tách một thiết bị Direct3D thành 3 giao diện riêng

biệt: giao diện ngữ cảnh thiết bị (Device Context), giao diện ngữ cảnh trực tiếp
(Immediate Context) và giao diện ngữ cảnh trì hoãn (Deferred Context). Immediate
Context có một luồng trong khi giao diện Device Context và Deferred Context thì có
nhiều luồng hơn, được chỉ định xếp hàng các tác vụ cho Immediate Context hoặc Render.
 Mỗi giao diện thiết bị có thể tải luồng tài nguyên khi và chỉ khi nó cần, trong khi giao

diện ngữ cảnh trì hoãn (Deferred Context interface) hoạt động như một ngữ cảnh thiết bị
đơn luồng cho các toán tử dựng hình tương lai, nó xếp hàng các lệnh gọi (hoặc Display
Lists) trước khi chuyển chúng vào giao diện ngữ cảnh trực tiếp.


IV.Ưu điểm của DirectX

 Liên kết đổ bóng động (Dynamic Shader Linkage):
 Một trong những vấn đề mà các nhà lập trình game đối mặt hiện nay là sự mở rộng

và tính linh hoạt đổ bóng quá phức tạp. Ví dụ, nếu trong vài trường hợp cần nhiều
shader thì một Uber Shader lớn thường được dùng vì nó kết nối được tất cả các
shader cần thiết vào trong một đoạn mã (code), tối giản lập trình.
 Tuy nhiên, việc tối giản lập trình theo hướng này lại làm cho việc đổ bóng phức tạp

vô cùng, nó không chỉ kém hiệu quả hơn các shader riêng lẻ mà còn khó bẫy lỗi.
Giải pháp viết các shader chuyên dụng không những phù hợp cho tất cả các trường
hợp mà còn phù hợp cho các lớp khác nhau của phần cứng. Giải pháp này lại trở
nên phức tạp và tốn nhiều chi phí liên quan đến việc chuyển đổi các shader, vì vậy
Uber shader là một tuỳ chọn dễ dàng nhất cho nhà lập trình trong viết mã dù chưa
phải lý tưởng.


IV.Ưu điểm của DirectX
 Microsoft tin rằng câu trả lời cho vấn đề này là các thủ tục con (subroutine), cho

phép các nhà lập trình liên kết các shader với nhau, các nhà lập trình có thể tạo các
shader chuyên dụng cho các lớp khác nhau của phần cứng được chỉ định, trong khi
đó lại giảm phần lớn việc sử dụng thanh ghi so với việc dùng một shader đơn lẻ để
điều khiển tất cả. Hi vọng rằng, điều này làm cho các nhà lập trình có hứng thú hơn
khi viết shader, nhưng không có nghĩa là sẽ ảnh hưởng trực tiếp đến chất lượng hình
ảnh mà cụ thể là chất lượng đổ bóng.


IV.Ưu điểm của DirectX
 Cải thiện nén kết cấu (Texture Compression):
 Đã lâu kể từ khi Microsoft nâng cấp thuật toán nén kết cấu của DirectX, giờ đây


Microsoft lưu ý đến những thiếu sót của việc hỗ trợ cho các định dạng kết cấu HDR
(High Dynamic Range), khi đa kết cấu không chú ý đến giải pháp nén gốc.
 Để bổ sung những gì cần thiết, Direct3D 11 sẽ giới thiệu 2 định dạng kết cấu là BC6

(hay BC6H) và BC7. BC6 là một kết cấu định dạng cao nhưng chỉ tiếc là mất dữ
liệu gốc khi nén, thay vào đó, nó hỗ trợ công nghệ nén 6:1 với tốc độ 16bpc (bits per
channel), điều này mang lại hiệu quả nhưng chất lượng kết cấu chưa cao trong
trường hợp sử dụng mở rộng dải sáng có độ nhạy cao (high-dynamic) và không thật
sự còn nguyên gốc.


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×