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