31-07-2008, 04:45 PM
Guest
Bà i gởi: n/a
Thá»i gian online: 0 giây
Tìm hiểu vỠDirectX 10
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 .
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.
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.
The DirectX 10 Pipeline:
Graphic pipeline cá»§a dx 10
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.
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.
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 : http://www.youtube.com/watch?v=EJ6aMxPh6k0
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.
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.a
Các chủ đỠkhác cùng chuyên mục nà y:
Tà i sản của gamo1302