DirectX 10 nền tảng đồ họa đa luồng [Phần 2]

icon-computer.jpg Ống lệnh DirectX 10 (pipeline)

Ngoài cuộc “lột xác” của API, ống lệnh của DirectX 10 cũng được Microsoft tân trang lại, đáng chú ý nhất là 2 khả năng mới: bộ đổ bóng hình học (geometry shader) và khả năng stream output.

icon-computer.jpg Geometry shader (bộ đổ bóng hình học)

Trước đây, khi có được dữ liệu đỉnh, DirectX đẩy dữ liệu lên CPU để dựng hình. Do đó, phần việc của CPU khá nặng nề, kéo chậm hệ thống. Trong DirectX10, Microsoft thêm vào ống lệnh bộ đổ bóng hình học (GS) để giải tỏa công việc này cho CPU, nhờ vậy gỡ bỏ được những giới hạn mà CPU vấp phải trong những bản DirectX trước. Bộ đổ bóng đỉnh (vertex shader) có nhiệm vụ dựng ảnh dựa trên các dữ liệu đỉnh, còn bộ đổ bóng điểm (pixel shader) có nhiệm vụ tạo hiệu ứng bóng đổ dựa trên điểm ảnh nên bộ đổ bóng hình học (nhập dữ liệu đỉnh) có thể xử lý kiêm nhiệm các công việc trên ngay từ đầu (như là dựng hình điểm, đường thẳng, tam giác…) và xuất sang giai đoạn khác mà không cần CPU can thiệp. Dữ liệu vertex (đỉnh) đi ra giai đoạn đổ bóng hình học này có thể nhiều hơn (amplification) hoặc ít hơn (minimisation) dữ liệu vertex đi vào. Bộ đổ bóng hình học có “ngưỡng” xuất từ 0 đến 1024 bề mặt đỉnh (vertice) cho mỗi vertex đi vào. Microsoft chọn trong khoảng dữ liệu xuất này là vì đây là giới hạn hợp lý giữa chi phí phần cứng và mức hoạt động hiệu quả của quá trình amplification hay minimisation.Ngoài công việc trên, GS còn có khả năng ánh xạ phủ bề mặt (displacement mapping) bằng kỹ thuật tessellation.

Kỹ thuật phủ tessellation là dạng phủ 3 chiều, tự tạo ra các khối đa giác phủ kín bề mặt trước khi được render. Trong DirectX 9 không có kỹ thuật phủ này vì phần cứng không có khả năng tự tạo ra dữ liệu. Kỹ thuật phủ tessellation tăng chi tiết hình ảnh rất nhiều nhưng lại tiêu hao khá nhiều sức mạnh tính toán hệ thống.Một chức năng phụ của GS là có thể lấy thông tin phụ của dữ liệu vertex. Những thông tin này là tập hợp dữ liệu từ các bề mặt đỉnh lân cận và sự liên quan giữa những bề mặt đỉnh này với nhau. Dữ liệu này giúp hệ thống nội suy ra được các thuật toán liên quan đến tạo hình lông, tóc, lượng bóng đổ, xử lý chi tiết hình ảnh…

icon-computer.jpg Stream output

Điểm mới thứ 2 trong ống lệnh của DirectX 10 là stream output. Giai đoạn này nằm ngay sau bộ đổ bóng hình học. Stream output ghi dữ liệu vào bộ nhớ sau khi bộ đổ bóng đỉnh và đổ bóng hình học tính toán xong lớp phủ bề mặt. Các GPU trước đây chưa hỗ trợ DirectX 10, chúng chỉ có thể ghi điểm ảnh vào bộ nhớ. Các GPU mới (dòng GeForce 8800 và ATI R600) có khả năng ghi cả dữ liệu đỉnh và hình học vào bộ nhớ đệm. Nhờ vậy mà khi các bộ bóng đỉnh và GS có thể dựng hình lại nhanh chóng hơn, và nhất là không cần đến nguồn lực từ CPU. Do vậy, quyền quyết định dữ liệu “đi đâu về đâu” trước đây thuộc về CPU, nay chuyển hết sang GPU, như là tạo mới, hủy, xuất dữ liệu… và các nhà phát triển cũng không còn lo ngại về tình trạng quá tải CPU.

 

icon-computer.jpg Các giai đoạn khác

Ngoài 2 giai đoạn mới kể trên, những giai đoạn còn lại của ống lệnh đồ họa DirectX 10 không có khác biệt nhiều so với ống lệnh trước đây. Một số tính năng được chỉnh sửa lại chút ít cho trơn tru hơn. Ví dụ như giai đoạn tạo mành lưới (rasterization) có thêm chức năng phỏng đoán render hoặc vẽ đối tượng để giảm tải cho CPU. Vì có nhiều cảnh 3D trùng nhau nên việc phỏng đoán dựng hình là cần thiết, nếu hệ thống phải dựng nhiều hình trùng nhau sẽ không hiệu quả và tiêu hao tài nguyên. Ngoài ra, trong giai đoạn rasterization có đệm dữ liệu Z (gọi là Early Z). Dữ liệu Z dựa trên điểm ảnh, loại bỏ những điểm ảnh nào không hiển thị ra màn hình trong quá trình render cuối cùng. Ví dụ bạn chỉ thấy được 3 mặt của một khối vuông 6 mặt ở bất kỳ góc độ nào. Nên nếu hệ thống render cả 3 mặt khuất thì phí nguồn lực và thời gian. Với các mô hình càng phức tạp thì Early Z càng tỏ ra có ích. Tuy nhiên, kỹ thuật Early Z không phải loại bỏ được hết những điểm ảnh không nhìn thấy.

Kỹ thuật Early Z đã có từ các phiên bản DirectX trước đây nhưng trong DirectX 10, nó không cần đến nguồn lực của CPU nữa. Giai đoạn cuối cùng trong ống lệnh DirectX 10 là Output Merger, tạo màu cho điểm ảnh, hay hiện hình điểm ảnh. Dữ liệu về điểm ảnh lấy từ bộ đổ bóng điểm, nội dung của đối tượng render và từ bộ đệm chiều sâu/khuôn. Dữ liệu từ bộ đệm chiều sâu/khuôn cũng quyết định điểm ảnh đó có được hiển thị hay không (còn gọi là z-buffering). Kế tiếp, Output Merger trộn nhiều điểm ảnh thành 1 điểm ảnh cuối cùng nếu cần thiết, còn không, điểm ảnh sẽ xuất trực tiếp từ Pixel Shader Output.

 

DirectX 10.1

 
  Tuy các nhà phát triển phần cứng và game đang phải vất vả bám theo Microsoft với bản DirectX 10 thì hãng đã hăm he tung ra bản nâng cấp DirectX 10.1. Tuy chưa có chi tiết cụ thể nhưng Microsoft cũng đã hé lộ cho các nhà phát triển một số điểm thêm vào của DirectX 10.1.
Tập API sẽ được chỉnh sửa lại, trong đó đáng chú ý là bộ lọc điểm động (floating-point filtering) 16-bit được nâng lên 32-bit. Điều này có nghĩa là chất lượng render High Dynamic Range sẽ được nâng lên đáng kể.

Bên cạnh đó, phiên bản mới sẽ có tính năng khử răng cưa toàn phần, cho phép ứng dụng sử dụng khử răng cưa theo cả multi-sample lẫn super-sample và khả năng chọn mẫu khử nào tốt nhất tùy cảnh. Khử răng cưa super-sample cho chất lượng hình ảnh mượt mà hơn nhiều so với multi-sample nhưng rất ngốn tài nguyên hệ thống. Ngoài ra, ứng dụng sẽ còn có khả năng tạo mặt phủ điểm ảnh (pixel coverage mask), mặt phủ này giúp ứng dụng ước lượng các mẫu cho một vùng điểm ảnh. Điều này thực sự hữu ích khi phải xử lý khử răng cưa cho các đối tượng, khung cảnh… có hiệu ứng chuyển động mờ. Để tăng cường khả năng khử răng cưa, DirectX 10.1 hỗ trợ tối thiểu 4 mẫu/điểm ảnh (4x anti-liasing).
WDDM phiên bản 2.0 được nâng lên phiên bản 2.1 với 2 cải tiến quan trọng: khả năng chuyển qua lại giữa các ứng dụng 3D tốt hơn và giải quyết được lỗi page fault.

Hiện thời, theo lộ trình sản phẩm mới nhất của AMD/ATI, hãng đang rục rịch chuẩn bị tung ra GPU RV670, R670 cho nền để bàn và 3 GPU cho nền di động là M88, M86 và M82. Các GPU trên đều sẽ hỗ trợ DirectX 10.1 và CrossFire, được sản xuất trên quy trình 55nm.

 

icon-computer.jpg Model Shader 4.0

Để có được một ống lệnh được nâng cấp chi tiết ở từng giai đoạn khác nhau như đề cập trên, mọi chuyện đều dựa trên định chuẩn mới: Model Shader 4.0. Từ bản Model Shader 1.1 (có trong DirectX 8) cho đến nay, cứ lên mỗi phiên bản thì số tập lệnh (instruction) và thanh ghi (register) nhiều hơn. Mục tiêu nâng cấp là Microsoft muốn nới càng lỏng ràng buộc càng tốt cho các nhà phát triển. Các chi tiết kỹ thuật giữa bộ đổ bóng điểm, bộ đổ bóng đỉnh gần như nhau (cả bộ đổ bóng hình học nữa). Tuy nhiên, với SM4 thì bộ đổ bóng đỉnh, điểm và hình học cùng chia sẻ công việc cho nhau, tối ưu hóa quá trình render đỉnh và điểm, điều mà Microsoft gọi là hợp nhất các bộ đổ bóng (xem thêm bài “NVIDIA GeForce 8 định chuẩn mới”, ID: A0702_94 để biết thêm mô hình hợp nhất này). Đây là điểm đột phá của SM 4.0 so với các phiên bản trước (bên cạnh việc tăng số lượng các tập lệnh, thanh ghi).

icon-important-small.jpg So sánh với bản SM 3.0 của DirectX 9.0c, bản SM 4.0 có những cải tiến vượt bậc:

Số tập lệnh tăng từ 512 lên 65536, hơn gấp 128 lần và không bị giới hạn số lệnh thực thi. Số thanh ghi tạm cũng tăng từ 32 lên 4096; nhưng với 32 thanh ghi tạm thì các nhà sản xuất không phải tích hợp nhiều thứ vào phần cứng, tối ưu hóa được tốc độ. Với 4096 thanh ghi tạm, trình điều khiển sẽ phải hỗ trợ bộ đổ bóng có khả năng tận dụng nhiều thanh ghi. Ngoài ra, SM 4.0 hỗ trợ hoàn toàn tính toán số nguyên 32 bit (integer) thêm vào tính toán dấu chấm động (floating point). Số đối tượng render cũng tăng lên 8 (SM 3.0 là 4)…

 

CÁC THƯ VIỆN ĐỒ HỌA ĐÁNG CHÚ Ý KHÁC (RENDERING API)

 
  DirectX 9.0Ex

Còn có tên khác là DirectX 9.L (có người cho rằng L viết tắt từ “Longhorn”), được xem là bước đệm của DirectX 10. Vì DirectX 10 chỉ chạy trên nền Vista, DirectX 9.0Ex có những tính năng (không hoàn toàn) của DirectX 10 và có thể chạy trên nền Windows XP. Đáng chú ý DirectX 9.0Ex có khả năng ảo hóa và một số chức năng khác. Ví dụ như bạn chạy 2 ứng dụng cùng lúc với giao diện bề mặt đồ họa khác nhau thì DirectX 9.0Ex có thể chia sẻ những dữ liệu bề mặt đồ họa chung. Vì có khả năng ảo hóa để chạy nhiều ứng dụng đồ họa, 9.0Ex tận dụng triệt để dung lượng bộ nhớ để đệm dữ liệu. Do đó hệ thống cần được trang bị bộ nhớ RAM thật nhiều. Đương nhiên 9.0Ex có chức năng quản lý hoàn toàn bộ nhớ. Ngoài ra, vì có khả năng xử lý cùng lúc đa luồng nên 9.0Ex cũng có cơ chế quản lý nguồn tài nguyên, đưa ra mức độ ưu tiên cho từng luồng. Hai chức năng mới khác của bản 9.0Ex là hỗ trợ khử răng cưa văn bản và giải quyết được sự cố đứng máy do lỗi trình điều khiển, ví dụ như thông báo lỗi device_lost.


OpenGL

Thư viện đồ họa OpenGL do SGI (Silicon Graphics) phát triển vào năm 1992 (OpenGL.org). Phiên bản mới nhất của OpenGL là 2.1 (tháng 8/2006, có tên mã là Longs Peak). Sắp đến (chưa biết thời gian cụ thể nhưng trong khoảng giữa năm nay), OpenGL sẽ nâng lên bản OpenGL 3.0 với tên mã là Mount Evans và chỉ hỗ trợ cho phần cứng DirectX 10 (được sản xuất sau ngày 8/11/2006). OpenGL 3.0 sẽ có những tính năng mới đáng chú ý như render tức thời, xuất dữ liệu đỉnh ra bộ đệm, hỗ trợ nhiều định dạng texture mới… và đáng chú ý nhất là OpenGL có liên kết với thư viện OpenGL ES là thư viện đồ họa 3D cho nền tảng di động. OpenGL ES được xem là át chủ bài trên nền di động, nền mà DirectX của Microsoft chưa thể chiếm lĩnh được. Ngoài ra, các ứng dụng thiết kế đồ họa lớn đều sử dụng OpenGL, không dùng DirectX, như là Maya, AutoCAD, Cinema4D, 3DS Max… Mảng game dùng OpenGL có lẽ đáng chú ý nhất là World Of Warcraft…

Khác với DirectX là tập lệnh “đóng”, OpenGL là tập API nguồn mở. OpenGL có trên hầu hết các nền hệ điều hành phổ biến: Windows, Unix, Linux, Mac OS X, cả trên hệ console Wii và PlayStation 3. Trừ 2 nền Windows và Xbox, các hệ điều hành khác đều có khả năng tận dụng thư viện API của OpenGL làm công cụ chính để tăng tốc đồ họa 3D trên phần cứng.
Với trình điều khiển OpenGL của riêng Microsoft, trừ Vista, các hệ điều hành Windows trước đó đều không có bộ tăng tốc phần cứng dựa trên OpenGL. Do đó, những phiên bản Windows cũ bắt người dùng phải cài trình điều khiển ICD (installable client drivers) do nhà sản xuất card đồ họa đưa ra cho riêng hỗ trợ phần cứng của OpenGL. Thực chất, những trình điều khiển ICD đã có trong trình điều khiển card đồ họa.

Trong Vista, Microsoft đưa bộ tăng tốc đồ họa OpenGL vào theo 3 cách. Cách đầu tiên là ánh xạ các lệnh OpenGL thành các lệnh Direct3D, điều này có thể xem là “chuẩn hóa” việc cài đặt nhưng các lệnh OpenGL ánh xạ sang Direct3D chỉ tương đương với bản OpenGL 1.4. Cách thứ 2 là cài đặt OpenGL của XP nhưng lúc này bạn sẽ không chạy được giao diện đồ họa Aero. Cách cuối cùng là cài đặt bản OpenGL đầy đủ, chạy chính trong Vista, có thể truy cập đến GPU.

GDI/GDI+

GDI (Graphics Device Interface) là một thư viện đồ họa khác, được xem là thư viện đồ họa cơ bản và già. GDI xử lý đồ họa ở mức cơ bản nhất, như vẽ đường, render font… và khả năng scaling (phóng to/thu nhỏ) đối tượng trên nhiều thiết bị.

 

Tuy nhiên, GDI chỉ dừng ở mức đồ họa 2D, không có khả năng đồ họa 3D. Trong Windows XP, GDI được nâng cấp lên GDI+, được phát triển trên ngôn ngữ C++, thêm vào một số tính năng như khử răng cưa cho đồ họa 2D, đổ bóng, thêm nhiều khả năng quản lý lệnh tiên tiến, hỗ trợ định dạng tập tin ảnh JPEG, PNG…
Sang đến Vista, GDI/GDI+ hầu như được nhúng trọn vào Desktop Windows Manager (DWM). Do đó, các vấn đề liên quan đến giao diện cửa sổ trong Windows Vista như phóng to/thu nhỏ cửa sổ, di chuyển cửa sổ, độ trong suốt… đều được thực hiện ở nền cho dù chưa được hiển thị lên màn hình. Khi bạn mở cửa sổ nào đó lên thì cửa sổ đó không cần render nữa nên tốc độ thực hiện hoặc tốc độ đáp ứng khi chuyển giữa các cửa sổ trong Vista rất nhanh.

 

 

icon-computer.jpg NVIDIA và ATI

Đối với 2 đại gia sản xuất chip đồ họa, DirectX 10 đã khiến họ phải chuyển hướng, định hướng lại sản phẩm vì bây giờ họ có thể đưa ra những khả năng mới, mạnh mẽ cho sản phẩm của mình. Có thể xem DirectX 10 là “vị cứu tinh” cho CPU vì mọi giai đoạn ống lệnh đồ họa của nó đều cố gắng tách ra khỏi CPU càng nhiều càng tốt. Bộ đổ bóng hình học, Stream Output và sự hợp nhất trong kiến trúc GPU rõ ràng khiến ATI và NVIDIA phải nghĩ ra những công nghệ mới hơn đem đến cho người dùng, mà cụ thể là game thủ. Tuy DirectX 10 có một ống lệnh mới, thống nhất nhưng qua bàn tay nhào nặn của NVIDIA và ATI, ống lệnh này có thay đổi chút ít.

Đối với AMD/ATI, chuyển sang kiến trúc hợp nhất các đơn vị bóng đổ có thể xem là một đà tiến mới từ các kiến trúc cũ. Kiến trúc hợp nhất cần có một cơ chế quản lý luồng xử lý dữ liệu tốt. Với dòng Radeon x1000 thì ATI đã làm được điều này rồi nhưng hãng chỉ dừng lại ở bộ đổ bóng điểm. Với kiến trúc hợp nhất mới, cả 3 bộ đổ bóng được xử lý trong 1 quá trình duy nhất, khép kín, tận dụng triệt để hiệu suất của GPU. Đây cũng là lợi thế của AMD/ATI so với NVIDIA vì hãng đã có những kinh nghiệm trong việc chế tác luồng xử lý điểm ảnh.

Với NVIDIA, xem biểu đồ, bạn thấy quá trình xử lý điểm ảnh nằm gần cuối ống lệnh. Do vậy, nếu chuyển từ ống lệnh xử lý tuần tự truyền thống sang kiến trúc hợp nhất thì NVIDIA sẽ gặp rủi ro cao hơn ATI vì sẽ ảnh hưởng đến quá trình render hình ảnh cuối cùng. Hơn nữa, chi phí sản xuất chip dựa trên kiến trúc hiện thời của NVIDIA thấp hơn so với của AMD/ATI. Vì thế việc không hợp nhất hoàn toàn cả 3 bộ đổ bóng trong dòng chip GeForce 8 giúp NVIDIA đảm bảo được tốc độ xử lý và duy trì ưu thế về chi phí.

NVIDIA đã tung ra chip GeForce 8800 hỗ trợ đầy đủ DirectX 10 và ATI/AMD tiếp bước với chip Radeon 2900XT và nhiều hãng sản xuất card đã đưa ra sản phẩm ứng dụng 2 GPU đồ họa này. Những “đối thủ” khác như XGI, S3 hay Matrox vẫn chưa có động thái gì về hỗ trợ DirectX 10. Hiện thời, ta không thể so sánh về hiệu năng của card NVIDIA và AMD/ATI ai hơn ai về DirectX 10 vì thị trường game hỗ trợ chưa “chín tới” và còn nhiều ứng dụng vẫn còn phát triển trên nền DirectX cũ. Hơn nữa, ta cũng chưa biết được sau này các nhà phát triển sẽ đứng về phe nào. Nhưng rõ ràng tốc độ xử lý đồ họa không hoàn toàn phụ thuộc vào kiến trúc mới, mà còn vào mật độ chip (kích thước wafer), tần số hoạt động… NVIDIA vẫn đi trước một bước về kích thước chip, AMD/ATI trội hơn về kiến trúc hợp nhất.

Ống lệnh của NVIDIA, dòng card GeForce 8800 (trái) và của AMD/ATI dòng Radeon 2900.

icon-source.jpg PCW VN

Tham khảo: MSDN; Behardware.com; Elitebastards.com.

Advertisements

~ bởi nguyenvu trên Tháng Mười 19, 2007.

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s

 
%d bloggers like this: