Cộng Đồng IT
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Tìm hiểu nghiên cứu về DiectX10

Go down

Tìm hiểu nghiên cứu về DiectX10 Empty Tìm hiểu nghiên cứu về DiectX10

Bài gửi by Admin 16/3/2016, 5:47 pm

Giới thiệu :

Dx9 ra đời từ tháng 12/2002 và đến tháng 12 2004 thì MS cho ra bản dx9c .Dx ra đời giúp cho các nhà làm game tạo nên các hình ảnh càng giống với thực hơn, giảm tải cho CPU từ đó CPU có thể thực hiện các nhiệm vụ như tính tóan AI của NPC... do vượt qua được những giới hạn của bản dx cũ Tuy nhiên MS muốn dành riêng bản dx10 cho Vista ,nên do đó sẽ ko co version dx10 nào trên WinXP.

Windows Display Driver Model:

Cùng với Dx10 ,MS giới thiệu 1 mẫu driver cho vista với mục đích làm tăng sự ổn định của Windows .WDDM giúp tạo nên các GPU và video memory ảo ,điều này có nghĩa là GPU cho phép chia sẻ tài nguyên cùng tại 1 thời điểm.

Nói đơn giản khi chạy cùng lúc nhiều ứng dụng 3D khi switch sang dễ gặp tình trạng treo máy (nhất là giao diện của Vista dùng rất nhiều ứng dụng 3D) do đó nhờ mẫu driver trên giúp tăng sự ổn định của hệ thống khi xài nhiều ứng dụng 3D.

Bên cạnh đó performance của hệ thống tăng lên việc sử dụng video memory ảo ,driver có thể chuyển thông tin từ video memory sang system memory nếu ứng dụng đó đòi hỏi

Ngoài ra WDDM giúp phục hồi display driver khi driver hay phần cứng bị crash .Khi driver bị crash ,nó sẽ ngăn chặn ngay quá trình gây ra crash đó ,không gây nên blue screen of death hoặc là treo máy.

Những giới hạn trong Dx9:

High API Overhead

-Mỗi khi nhận được lệnh từ ứng dụng ,Dx sẽ dịch ra cho driver hiểu và từ đó sẽ điều khiển phần cứng làm việc ,quá trình này giới hạn số lượng vật thể được vẽ cùng với các hiệu ứng trên nó.
-Số lượng vật thể có thể vẽ trong 1 frame bị giới hạn bởi số lệnh vẽ mà Dx có thể thực hiện được bởi vì mỗi lệnh vẽ phải chiếm 1 số nhất định tài nguyên của CPU ( overhead ). Trong Dx9 ta chỉ có thể vẽ khoảng 500 vật trong 1 frame ( vật có thể là cái cây ,NPC ,súng ,nhà ….) .Nếu bạn nào để ý khi chơi các game sử dụng Dx9 thì sẽ nhận ra điều này : ví dụ như cái cây trong game, để làm 1 rừng cây thì nhà sản xuất game chỉ có thể vẽ 1 vài loại cây ,sau đó để cho chúng có vẻ khác nhau ,người ta thay đổi số lá cây trên cành hoặc thay đổi màu sắc của cây .Ngoài ra số lượng effect trên các vật thể cũng bị giới hạn tương tự theo cách trên.
Tìm hiểu nghiên cứu về DiectX10 2
Fixed Function Hardware Limitations:

Giới hạn thứ 2 của dx9 là mỗi phần( vertex shader ,pixel shader ,geometry shader …) trong quá trình đồ hoạ vật thể từ trứoc đến nay đều tách biệt ,mỗi phần điều thực hiện 1 nhiệm vụ riêng biệt ,sự giới hạn này dẫn đến hiện tượng thắt cổ chai .Một điều quan trọng nữa là sự giới hạn này làm cho các nhà sản xuất game không thể hiện đuợc những ý tưởng của họ trong game hay ứng dụng 3D.
Tìm hiểu nghiên cứu về DiectX10 F_dx1016m_3447d6e
Như hình trên trước đây việc xử lý hình ảnh phải theo 1 trình tự vetex shader --> geometry shader --> pixel shader, việc này gây ra hiện tượng quá trình xử lý hình ảnh này phải chờ quá trình kia ,việc này gây ra sự giới hạn trong dx9

Resource Limitations:

Sự giới hạn về resource trong các bản Dx trước đã gây cản trở cho các nhà làm game do các thuật toán muốn thực hiện được phải chia nhỏ ra ,từ đó lại tiếp tục gây ra sự hao tốn tài nguyên của CPU.
Resource để xây dựng 1 ứng dụng 3D bao gồm : dependent texture reads, bound textures, programme instructions.
Ngoài ra trong dx9 resource được xác nhận mỗi khi vật thể được sử dụng trong 1 frame ( do đó có thể lên đến hàng triệu lần ) trứơc khi resource đuợc sử dụng và vẽ .Việc xác nhận resource này sẽ hoàn tất truớc lệnh vẽ và sẽ được loại đi để giúp cho thông tin không bị sai lệch , việc thực hiện xác nhận resource đuợc thực hiện bởi CPU, do đó dẫn tới việc hao tốn tài nguyên của CPU.

Caps bits ( Hardware capabilities )
Từ Dx9 trở về trước ,các game/ứng dụng muốn nhận ra được các feature của card ( hay còn gọi là caps bits ) các nhà làm game phải thiết lập code paths .Do có rất nhiều series card, mỗi loại series các nhà hardware vendor chọn các feature riêng cho từng loại card ,ngoài ra 2 hãng Ati và nVidia đều có những feature riêng .Việc này dẫn đến việc thiết lập code paths rất tốn thời gian ,những dòng card cũ sẽ không đựơc viết code paths --> do đó những vid cũ ko đc các ứng dụng/game support.

Từ Dx10 việc thiết lập code path này các nhà làm game không cần thực hiện nữa ,họ chỉ cần sử dụng các feature mà directx có để thực hiện game của họ mà không cần quan tâm về phía hardware vendor. Những vid nào có feature chạy được game của họ thì khi chạy game các feature này sẽ thể hiện ra ,những vid không có thì các feature đó sẽ không có.

Những bản Directx sau : 10.1 ,10.2 ...... sẽ đưa 1 số feature mới vào ( những feature này có thể đã có ở những card đã sản xuất trước đây ,hoặc chưa có ) từ đó các nhà hardware vendor sẽ phát triển theo để có thể chạy được những feature này, các nhà làm game sẽ đưa những feature này vào game .

Giải pháp cho các giới hạn này :

- Để giảm sử dụng tài nguyên của CPU : Dx10 có 1 số feature giúp giảm thiểu việc sử dụng tài nguyên của CPU như: texture arrays, predicated draw and stream out.

- Thêm vào đó việc thay đổi trong việc xác nhận resource cũng giảm nhẹ cho CPU ,thay vì resource sẽ được xác nhận mỗi khi vật được dùng trong frame thì ở dx10 việc xác nhận resource đựơc hoàn tất khi vật thể được tạo ra, điều này có nghĩa là vật thể được tạo ra 1 lần thì việc xác nhận resource cũng chỉ được thực hiện 1 lần.
Tìm hiểu nghiên cứu về DiectX10 F_4m_9a66602
The DirectX 10 Pipeline:
Tìm hiểu nghiên cứu về DiectX10 F_5m_35cb2d0
Như đã nói ở trên trước đây graphic pipeline được chia làm nhiều phần : pixel shader pipeline , vertex shader pipeline …. ( khi ứng dụng đòi hỏi vẽ 1 hình sẽ truyền thông tin đến vid card, vid card tiếp nhận thông tin ,bộ xử lý vertex sẽ dựng nên hình ảnh của vật đó trên màn hình, trong khi bộ xử lý pixel shader làm nhiệm vụ cho các hình ảnh đó màu sắc ) Ở Dx10 pipeline thì không còn phân biệt ra pixel pipeline hay vertex pipeline mà hợp chung thành unified pipeline và bộ xứ lý chúng cũng đều giống nhau ,nhờ việc này giúp giải quyết vấn đề thắt cổ chai do như đã nói ở trên.
Bước xử lý thông tin vào ( input assembler ) và Vertex Shader:

Input assembler ( IA ) là nơi mà thông tin sẽ đi vào graphic pipeline, nó sẽ thu thập những thông tin 1 chiều về vertex trong những thông tin đi vào nằm trong vertex buffer, sau đó chuyển thành thông tin dưới dạng 32 bit Floating point ( với các dx trước đây là 16 bits ) ,việc tăng số bits lên giúp cho việc tính toán chính xác từ đó dẫn đến hình ảnh đẹp hơn. Sau đó các thông tin về vertex sẽ được phân loại theo 16 yếu tố ,những thông tin giống nhau sẽ di chuyển theo hướng cùng nhau trong IA.

IA còn có khả năng đưa các vật đã được sao chép đến tất cả các phần của pipeline ,điều này cũng có ở dx 9 tuy nhiên những vật đc sao chép là hoàn toàn giống như vật gốc ,còn với dx 10 những vật sao chép có hình dạng đã được biến đổi từ vật gốc.

Như đã nói ở trên texture arrays là tính năng mới của dx 10, nó cho phép các developer chứa lên đến 512 loại texture vào trong 1 array, và lên đến 128 texture trong 1 array bất kì gắn với shader độc lập. Ngoài ra độ phân giải của texture cũng tăng lên ( 8192x8192 so với 4096x4096 của dx 9 ).

Texture arrays thể hiện trong quá trình dán các texture :

+ Việc dán nhiều lớp texture ( multi-texture ) ko cần đến sự hỗ trợ của CPU nữa
+ Cho phép dán các texture trên các vật sao chép từ vật gốc. ( các vật trong dx 10 ko chỉ khác nhau về hình dạng mà nhờ có texture arrays còn khác nhau về màu sắc )

Vertex shader 4.0 hỗ trợ thay đổi hình dạng chất liệu và hiệu ứng trên từng vật nhờ vào việc thiết lập 1 chương trình shader phức tạp. Ví dụ : những cái cây trong dx 10 sẽ được thể hiện khác nhau về hình dạng cây, màu sắc, chất liệu của cây, và những hiệu ứng.
Tìm hiểu nghiên cứu về DiectX10 Instancing
Hình trên thể hiện sự khác nhau ở các cây mà không gặp ở dx 9

Geometry Shader:

Trong dx10 có 1 giai đoạn trong shader pipeline được giới thiệu đó là Geometry shader, những hình thô ban đầu do giai đoạn vertex shader thực hiện sẽ được sử dụng như thông tin của giai đoạn geometry shader ,từ đó nó có thể được taọ ra mới, biến đổi những hình có sẵn. Nhờ khả năng biến đổi thông tin trên, khi xuất ra từ quá trình này thì thông tin vertex được xuất ra với số lượng nhiều hơn hoặc ít hơn ban đầu và không cần sợ hỗ trợ của CPU.

Geometry shader có khả năng sử dụng kĩ thuật displacement mapping cùng với kĩ thuật tessellation ( ở dx 9 không có kĩ thuật tessellation và việc xử dụng displacement mapping rất hạn chế ) nhờ đó bề mặt của các vật thể ( khuôn mặt hoặc mặt đất ... ) được thể hiện 1 cách chi tiết và giống thật hơn.
Tìm hiểu nghiên cứu về DiectX10 Dispmap2
Hình phía trên là mặt đất đã được áp dụng kĩ thuật displacement mapping và tessellation.

Giải thích sơ vể 2 kĩ thuật này :
+ Displacement mapping là kĩ thuật dán texture, tuy nhiên nó dùng height map để tạo nên hiệu ứng lồi lên ở trên mặt phẳng, ngoài ra trên miếng dán này còn tính toán trước các điểm bị che khuất, để không phải vẽ nó lên, tính toán trước bóng của các điểm lồi lên.

+Tessellation là kĩ thuật điều khiển nhiều polygon sau đó chia nó ra thành những cấu trúc thích hợp cho việc render.

Ngoài ra, Geometry shader còn có thể truy cập vào những thông tin nối từ vertex data ( thông tin nối là tập hợp các thông tin của các vertice gần nhau và thông tin về sự tương tác của chúng ), nhờ việc sử dụng những thông tin đó GPU có thể tính toán để tạo ra những hình ảnh như thật. ( lông thú, bóng của vật, giả lập các hình ảnh của hiện tượng tự nhiên : lửa cháy, khói bốc lên, vật bị nổ, tia chớp, lá rơi, sương mù, mây, tuyết rơi ... ).

Stream output :

Đây cũng là 1 tính năng quan trọng của dx 10 trong graphic pipeline, tính năng này cho phép vertex shader và geometry shader ghi thông tin trực tiếp vào frame buffer memory ở giữa pipeline, nhờ vào việc này những vật được nhân lên ở giai đoạn vertex shader và geometry shader sẽ quay ngược lại để được vẽ lại 1 lần nữa mà ko cần sự giúp đỡ của CPU.
Sự phối hợp giữa Stream output với Geometry shader, cho phép áp dụng các thuật toán về đồ hoạ mới khi thể hiện những hiệu ứng vật lý.

Đây là đoạn demo R600 của Ati :CLICK VÀO ĐÂY ĐỂ XEM
Ví dụ để mô tả hình ảnh nổ trong đoạn demo trên ( các bạn chú ý đoạn Ruby bị bắn nổ miếng ván trượt dưới chân ), ban đầu khói được tạo ra từ vụ nổ, sau đó nhờ vào Geometry shader mà hiệu ứng này được nhân lên, tiếp đó thông tin được chuyển vào frame buffer nhờ stream output để quay ngược lại vertex shader ( tính toán cho sự chuyển động của khói ). Sau đó, geometry sẽ giảm các thông tin ( minimication ) 1 cách từ từ, do đó khói sẽ tan dần đi cho đến khi biến mất hoàn toàn. ( trước đây để làm như vậy, GPU cần sự hỗ trợ rất nhiều từ phía CPU )

Predicated rendering:

-Những vật thể trong 1 cảnh 3D thường xuyên che lấp lẫn nhau dẫn đến việc tiêu tốn nhiều resource ở những GPU hiện nay đều hỗ trợ tính năng per-pixel Early Z cull, tính năng này giúp test trứơc các giá trị Z của các pixel để định vật nào nằm trước hay nằm sau sau đó định ra vât nào được xuất ra màn hình vật nào không tuy nhiên với kĩ thuật này thì đôi khi việc tạo nên những đường vẽ dư thừa vẫn xảy ra.

Ở Dx 10 MS đề ra 1 tính năng mới đó là Predicated rendering là 1 sự phát triển từ tính năng Early Z . Tính năng này cho phép các nhà thiết kế vẽ 1 vật phức tạp từ các hình hộp đơn giản, nếu như trong hình vẽ cuối cùng không thể hiện được trên màn hình ( do ở 1 hướng khác không nhìn thấy được ) thì trong cái hộp đó không vẽ vật phức tạp bên trong đó không được vẽ lên ( xem hình ) . Ở dx9 thì việc xét xem vật đó có nên được vẽ ra hay không được vẽ ra cần cả CPU và GPU thực hiện ,nhưng ở dx10 chỉ có GPU làm việc này thôi.
Tìm hiểu nghiên cứu về DiectX10 Predicatedraw1
Resource của Dx10

Như đã nói ở trên ở Dx9 resource bị giới hạn thì ở Dx10 số lượng resource để tạo nên 1 hình ảnh 3D nhiều hơn dx9 gấp hàng trăm lần .

Shader Model 4.0

Dưới đây là bảng so sánh giữa SM 1.1,2.0,3.0 và 4.0



Kết luận :
Những điều lợi từ Dx10 là sẽ giúp cho những nhà làm game thực hiện được những hiệu ứng ,những hình ảnh giống thật hơn ,giúp CPU giảm tải trong việc thực hiện các ứng dụng đồ hoạ .Tuy nhiên cũng có những bất lợi cho gamer là muốn thưởng thức được những game support dx10 phải tốn 1 khoản tiền khá lớn không phải chỉ là khoản tiền để mua vid support dx10 mà phải chi vào 1 hệ thống chạy tốt trên Vista ( vì dx10 chỉ có trên hệ điều hành vista thôi )
Những vid card support dx9 vẫn có thể hoạt động trên 1 game dx10 tuy nhiên nó sẽ gây 1 gánh nặng lớn trên CPU do đó sẽ giảm performance của game . Tuy nhiên đây chỉ là lý thuyết còn thực tế thì phải đợi 1 game dx10 ra rồi mới có thể kiểm chứng được.
Hiện tại 1 số game nổi tiếng đang tìm cách ứng dụng dx10 vào game của mình như nreal Tournament 2007, Hellgate: London, Microsoft’s Flight Simulator X .

Bài trên đây dịch từ nguồn _http://www.bit-tech.net/hardware/2006/11/30/directx10_future_of_pc_gaming/6.html . Rock không phải chuyên ngành về đồ hoạ nên có những điểm dịch còn sai sót ,dịch chưa tới nên nếu ai cần biết rõ hơn thì nên đọc lại bài trên và góp ý dùm .Bài post đây mang tính chất thảo luận nên mọi người cứ tự nhiên đóng góp những gì mình biết về dx10.
Admin
Admin
Adminstrator
Adminstrator

bài viết : 52
Ngày tham gia : 14/03/2016
Vị trí trong forum : Admin

https://congdonghack.forum-viet.com

Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết