Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
296,56 KB
Nội dung
3D graphic pipeline Lời mở đầu: Rock không học về ngành gì liên quan đến vi tính từ trước đến gìơ ,cho đến cả word/excel/acess còn chưa bao giờ đi học ,tuy nhiên với đam mê về vi tính nói chung và về đồ hoạ nói riêng nên tự mình tìm tòi trên các website các bài review, artice …. .,trong quá trình dịch liên tục sử dụng tự đỉên lạc việt và các từ điển online . Do đó bài này có thể có nhiều sai sót ,nhiều chỗ dịch chưa tới , nên khi xem xong vui lòng các bro nào có hiểu biết về vấn đề này nếu thấy có sai sót xin góp ý dùm . Ngoài ra bài này mang tính chất thảo luận ,không phải là bài hướng dẫn hay chỉ bảo ai nên ai có ý kiến xin góp vào để xây dựng thread ,các đóng góp của bro sẽ được dùng để chỉnh sửa thread này . 3D graphic pipeline : Bởi vì tính chất làm việc lập đi lập lại của đồ họa 3D và cũng vì khối lượng tính tóan ,khối lượng thông tin nhiều , nên toàn bộ quá trình xử lý đồ họa được chia nhỏ thành những bước .Những bước nay họat động 1 cách trình tự và được gọi là 3D graphic pipeline . Một ví dụ về pipeline là việc giặt đồ ,công việc giặt đồ gồm 3 bước : giặt ,sấy và phơi đồ ,nếu họat động theo kiểu pipeline thì lượt đồ thứ 1 sau khi giặt sẽ được chuyển sang giai đọan sấy thì lượt đồ thứ 2 sẽ được chuyển qua giai đọan giặt . Khi lượt đồ thứ 1 được đem phơi thì lượt thứ 2 được sấy ,lượt đồ thứ 3 được bỏ vào giặt . Trên thực tế GPU sẽ họat động theo những trình tự như vậy . Đây là ý nghĩa của 3 D graphic pipeline . Ở đây cần phân biệt với số pipeline mà các nhà sản xuất thường đưa ra để quảng cáo , đây là số lượng pixel pipeline ( số lượng pixel shader ) hoặc ROPs ( tùy website ) ,ở đây có sử dụng từ pipeline vì các units này hoạt động 1 cách song song ,ví dụ như vid có 16 pixel pipeline thì 16 cái này cùng làm việc trong 1 lúc chứ không phải là cái này làm xong mới đến cái kia làm ,tương tự đối với ROPs ,tuy nhiên theo quan điểm của Rock thì sử dụng số ROPs để so sánh tốc độ mạnh yếu của vid trong thời điểm hiện nay đúng hơn ( sẽ giải thích ở cuối bài ) Đây là các giai đọan của 3D graphic pipeline : 3D Pipeline _Tổng quát về các giai đoạn của nó 1. Application/Scene • Scene/Geometry database traversal • Movement of objects, and aiming and movement of view camera • Animated movement of object models • Description of the contents of the 3D world • Object Visibility Check including possible Occlusion Culling • Select Level of Detail (LOD) 2. Geometry • Transforms (rotation, translation, scaling) • Transform from Model Space to World Space (Direct3D) • Transform from World Space to View Space • View Projection • Trivial Accept/Reject Culling • Back-Face Culling (can also be done later in Screen Space) Lighting • Perspective Divide - Transform to Clip Space • Clipping • Transform to Screen Space 3. Triangle Setup • Back-face Culling (or can be done in view space before lighting) • Slope/Delta Calculations • Scan-Line Conversion 4. Rendering / Rasterization • Shading • Texturing • Fog • Alpha Translucency Tests • Depth Buffering • Antialiasing (optional) • Display API : Trước khi đi vào các bước này tôi xin giải thích sơ về API .API viết tắt của từ Application Programming Interface hiện tại bao gồm : SGI's OpenGL, Microsoft's Direct3D, và Pixar's Renderman. API giống như 1 cổng giao tiếp giữa phần cứng và phần mêm ,các nhà viết phần mêm sẽ víêt những việc mà vid cần làm để API dịch lại cho driver của vid hiểu những việc cần làm .Ngược lại các nhà sản xuất cũng viết driver để API hiểu . Không gian 3D : Model space : Model ở đây là các hình người ,nhà cửa ,đồ vật …. .( ta sẽ nhắc lại ở phần sau của bài ) .Mỗi model sẽ có 1 hệ thông tọa độ riêng của nó . Trên mỗi model cũng có 1 điểm “ điều khiển “ ( control point hay handle ) ,để di chuyển model này thì các nhà thiết kế chỉ cần di chuyển điểm này và cũng nhờ điểm này có thể giúp việc rotate model lại . World space : Khi các model được đem ra từ các engine ( hệ thống các model ) và đưa vào world space ,ở đây hệ thống tọa độ của model sẽ được đổi thành 1 hệ thống chung ( do các model có hệ thống tọa độ khác nhau ) View space : Trong không gian này góc nhìn sẽ được đem vào, góc nhìn này sẽ được phần mềm quy định .Nhìn trong hình, góc nhìn sẽ được diễn tả dưới hình tháp bị cắt cụt ,những model ở gần sẽ được sắp xếp về phía near clipping plane, những model nằm xa sẽ được sắp xếp gần với far clipping plane trong 1 frame .Những vật nằm ngoai hình này sẽ không được vẽ lên trên frame . Scene space : Đây cũng chính là không gian trong monitor của ta ,những model sau khi đã được sắp xếp trong view space sẽ được chuyển sang scene space ,đồng nghĩa với việc chuyển các tọa độ 3D của hình model sang tọa độ 2D ( x,y ) .Các giá trị z không phải được bỏ đi mà sẽ được nhớ để ứng dụng vào việc cắt đi những hình bị chồng lên nhau ,cắt đi những texture ở mặt sau của hình . Bây giờ ta đi sâu vào phân tích 3D từng bước của 3d Graphic pipeline : Bước 1 : application/scene : Trong quá trình này bao gồm các nhiệm vụ : Scene/Geometry database traversal Movement of objects, and aiming and movement of view camera Animated movement of object models Description of the contents of the 3D world Object Visibility Check including possible Occlusion Culling Select Level of Detail (LOD) Hầu hết các game hiện tại khi tạo ra không thể vẽ lại tất cả các hình người ,nhà cửa ,súng … nói chung tất cả những vật thể trong game ( những cái này gọi là model như đã nói trên ) mà thường lấy những model có sẵn của 1 số hãng chuyên tạo model ( engine ), ví dụ hiện tại có các engine như Doom ,unreal ,Valve, Crytek … .Nói thêm rằng những model này được tạo bởi các hình cơ bản ( geometric primitive ) đó thường là những hình tam giác ,các hình tam giác này hợp lại với nhau để tạo nên hình người ,cây cối ,căn nhà …., ngoài việc cung cấp những model ,engine còn cung cấp cả AI ,physic ( quần áo của nhân vật ,nước ,khói ,vụ nổ … ), audio ,network Những model này khi được sử dụng trong các game thì sẽ được sửa lại chút ít tùy theo nhu cầu của game . Trong quá trình (Geometry database traversal , Movement of objects, and aiming and movement of view camera, Description of the contents of the 3D world) thì phần mềm sẽ search trong engine những model nào cần dùng trong frame của mình , sau đó đem vào để cho gpu xử lý ( render ) ,việc đem các hình từ frame này sang frame khác sẽ tạo nên sự chuyển động của hình ảnh, ngòai ra chính phần mềm cũng đem vào game góc nhìn của 1 cảnh của game . Ngoài ra ở bước đầu này ,phần mềm cũng đã có quá trình lọai bỏ những vật không thể thấy (Object Visibility Check including possible Occlusion Culling ) ,trong quá trình này phần mêm sẽ check xem những vật nào bị che phủ bởi những vật khác ,nếu bị che hòan toàn thì loại hoàn toàn nó ra ,nếu che 1 phần thì bỏ 1 phần . Ngòai việc check vật trước vật sau ,phần mềm còn check trên từng model xem model đó có lọt vào trong cái hình tháp bị cắt cụt ( view space ) hay không ? Nếu vật không lọt vào nó sẽ bị loại ra ,nếu lọt vào 1 phần ,những phần nằm ngoài sẽ bị lọai bỏ .Việc tính tóan sự hỉên thị này sẽ giúp giảm 1 công vịêc vẽ 1 cái vô ích của GPU. Không chỉ dừng ở đó các nhà lập trình còn sử dụng các thủ thuật để giảm tải cho GPU ,khi check xem model có nằm được trong view space hay không ,thay vì dùng model đó check thì người ta sử dụng 1 hình hộp để xem sự hiển thị của model . Vi dụ : 1 model gồm 10 000 tam giác ,thì người ta dùng 1 hình hộp gồm 12 tam giác để thay thế ( mỗi mặt gồm 2 tam giác ) để đại diện ,nếu hình hộp đó có thể hiện thị được thì model đó sẽ được vẽ ngay trong hình hộp .Nhờ đó nếu hình hộp đó không hiển thị được trên frame đó thì nó giảm được việc phải render cho 10 000 tam giác đó . Các model thường được build ở những mức detail khá nhau ( để phù hợp với setting của game như low ,medium ,high detail ) ví dụ 1 model cái máy bay có thể được build ở 10.000 tam giác ,5.000 tam giác ,3000 tam giác ….tùy người chơi chọn setting mà đưa model vào .Nhờ vào tính chất này mà khi đưa vào GPU các model ,các nhà lập trình lại thực hiện 1 thủ thuật tinh giảm khối lượng công việc của GPU ,khi những model ở vị trí xa ( gần far clipping plane ) thì họ sẽ làm giảm số lượng tam giác của model lại ,sự giảm này không ảnh hưởng tới người chơi vì những vật ở quá xa rất khó cho người chơi nhận ra được. Mỗi model càng nhiều tam giác thì càng trông giống thật ,mỗi đỉnh của tam giác ( vertice ) bao gồm nhiều thông in về nó ( tọa độ ,màu sắc ) Một số model để trông giống thật đòi hỏi phải tốn rất nhiều tam giác nhất là những vật có hình cong ,sự giảm detail của các vật cong này có thể tạo nên hiệu ứng ( bumpy ) ( không biết nên dịch thế nào cho thóang nên xin phép để nguyên nó ) .Do đó để tinh giảm số lượng việc phải làm của GPU các nhà lập trình phải thực hiện công việc giảm các vertice nhưng không làm giảm chất lượng của model ,bằng cách ghép các tam giác tạo nên những dải ( strip ) hay hình quạt ( fan ) . Dưới đây là ví dụ : Nhìn trên hình bạn sẽ thấy nếu ghép 2 hình tam giác lại thì số lượng đỉnh của model sẽ giảm đi 2 đỉnh ,nghĩa là sẽ giảm thông tin về 2 đinh đó ( tọa độ ,màu sắc … ) ,tương tự với hình quạt kia . Sau việc tinh giảm đó ,model được đưa vào cho GPU xử lý . Tóm lại những gì bạn nên nhớ ở bước 1 của 3D graphic pipeline này là : + Những model của game đều trong các engine + Quá trình này được CPU xử lý ,đưa thông tin vào GPU ,tính toán AI ,physic ,audio ,network … + Trứơc khi các hình ảnh được đưa vào cho GPU xử lý thì đã được quá 1 quá trình optimize do các nhà lập trình thực hiện ,do đó game mới có bản pre beta ,beta … ( một trong những ví dụ về việc tranh cãi “ G80 yếu ớt trên nền game dx 10 “ trong forum amtech đã chứng minh việc này ) Bước 2 : Geometry Trong quá trình này bao gồm các nhiệm vụ : • Transforms (rotation, translation, scaling) • Transform from Model Space to World Space (Direct3D) • Transform from World Space to View Space • View Projection • Trivial Accept/Reject Culling (or can be done later in Screen Space) • Back-Face Culling (can also be done later in Screen Space) Lighting • Perspective Divide - Transform to Clip Space • Clipping • Transform to Screen Space Ở 3D world vật thể or model có thể được dịch chuyển hoặc biến đổi nhờ vào 4 phép biến đổi chính ( transform ) .Phép biến đổi thực hiện trên vật thể nhưng thực chất nó biến đổi các vertices của các vật thể bằng các phép toán phức tạp. Chính các phép biến đổi này sẽ làm cho các model trong các game khác nhau đôi chút . Translation : phép biến đổi này cho phép di chuyển vật theo 3 trục của toạ độ Rotation : phép biến đổi giúp vật xoay theo 1 trục tuỳ ý Scaling : phép biến đổi giúp vật thay đổi kích thước của vật ( làm cho vật to hơn hoặc nhỏ đi ) Skewing : thay đổi hình dạng của vật thể Trong giai đoạn geometry này cũng có sự di chuyển model từ Model space vào World space rồi từ World space vào View space ( tất nhiên những không gian này là không gian ảo ,chỉ là không gian mà card đồ hoạ dựng nên để tính toán ) .Khi di chuyển vào các không gian này thì toạ độ của vật sẽ theo không gian đó và cũng tuỳ thuộc vào phép biến đổi phía trên sử dụng . • Trivial Accept/Reject Culling (or can be done later in Screen Space) • Back-Face Culling (can also be done later in Screen Space) Lighting • Perspective Divide - Transform to Clip Space • Clipping • Transform to Screen Space Ở giai đoạn Geometry này cũng có 1 số kĩ thuật làm giảm việc tính toán cho các giai đoạn sau đó là Trivial Accept hay Reject Culling và Back Face Culling Reject Culling/Trivial Accept :kĩ thuật này cũng giống như kĩ thuật đã nhắc tới ở giai đoạn trên ,nó xem xét vật có nằm trong view space hay không ,sau đó tìm những phần thừa ra ngoài view space để cắt đi . Kĩ thuật này thực hiện khá đơn giản ,nó xác định những vật cần phải cắt bằng cách định xem toạ độ ( x,y,z ) của vertices có nằm trong view space hay ko ? nếu không nằm trong thì sẽ bỏ đi toàn bộ tam giác này . Việc cắt như kiểu này sẽ thừa lại những tam giác có 1 hoặc 2 đỉnh nằm trong view space nhưng 1,2 đỉnh còn lại nằm ngoài . Back Face Culling : Kĩ thuật này cho phép bỏ đi những tam giác nằm ở mặt sau của model ,tính trung bình ra thì có ½ số tam giác bị loại bỏ do nằm ở mặt sau của model tại 1 thời điểm nhất định .Tuy nhiên chỉ 1 vài trường hợp những tam giác ở mặt sau model không bị bỏ đi đó là trường hợp model có tính chất trong suốt . Lighting : Không ít người đã từng nghe từ “ Transform and lighting” 2 từ này ít khi đi riêng rẽ 1 mình nhưng không có nghĩa là sau qúa trình transform như nói ở trên thì sẽ đến giai đoạn tính toán ánh sáng ,mà giai đoạn này thường xảy ra ngay sau khi vật đã được chuyển vào view space .Hiệu ứng ánh sáng trên vật thể được thực hiện bằng các đặt các model về ánh sáng và sự phản chiếu vào các vật thể . Clipping : Ở giai đoạn clipping này vật cũng sẽ được cắt như giai đoạn Culling trên nhưng quá trình thực hiện phức tạp hơn ,ở giai đoạn trên khi định ra 3 toạ độ (x,y,z ) của vertices nằm ngoài view space thì nó sẽ bỏ hoàn toàn còn với Clipping thì nó không bỏ hoàn toàn tam giác mà cắt những phần thừa của tam giác nằm ngoài view space mà thôi. Tóm tắt lại : + Trong giai đoạn Geometry này bộ xử lý vertex shader ( vertex shader processor ) sẽ thực hiện nhiệm vụ biến đổi ( transform ) và tính toán ánh sáng cho hình ảnh ( lighting ) Bước 3 : Triangle setup Trong quá trình này gồm các nhiệm vụ : Back-face Culling (or can be done in view space before lighting) Slope/Delta Calculations Scan-Line Conversion Nếu Back face culling đã được thực hiện ở giai đoạn trên thì gian đoạn này không còn thực hiện nữa . Slope/Delta calculations : Cứ 2 điểm của 1 tam giác ( tam giác thành phần model ) ta sẽ có 1 cạnh hay 1 đừơng thẳng ,đường thẳng đó sẽ có dạng y= mx + b ,chính m là giá trị delta hay slope . Sau đó nhờ vào giá trị slope, thuật toán digital differential analyzer (DDA) sẽ chuyển các cạnh của tam giác ( tam giác thành phần của model ) sang giá trị x,y của pixel. Kết quả của quá trình này là thông tin về vị trị của model sẽ được chuyển thành các thông tin vị trí của pixel ( trên monitor ) ,thông tin về màu sắc của pixel vẫn chưa có và sẽ được thực hiện nhờ vào giai đoạn rendering phía sau sẽ trình bày . Trong quá trình chuyển đổi thông tin này , chỉ có thông tin của 2 vertices ( đỉnh ) là được chuyển trực tiếp thành thông tin của pixels, còn những điểm còn lại trên cạnh ( tạo bởi 2 vertices ) thì được DDA suy ra , từ việc này sẽ dẫn đến hình ảnh bị hiện tượng “ răng cưa “ . Tóm lai : + Quá trình này để tìm các chuyển các vị trí của model từ view space sang scene space ( không gian monitor ) + Do cách tính toán của quá trình này mà hình ảnh có thể bị hiện tượng “ răng cưa “ Bước 4: Rendering / Rasterization Trong quá trình này gồm các nhiệm vụ : Shading Fog Alpha Translucency Tests Shadowing Antialiasing Depth buffering Display Shading :Quá trình này được thực hiện bởi nhiều thuật toán : Flat shading ,Gouraund shading ,Phong shading .Những thuật toán này được sử dụng các giá trị về ánh sáng trên các vertices của tam giác sau đó nội suy ra độ [...]... Khi 1 model được xuất ra monitor thì trên model đó sẽ được phủ nhiều texture Ví dụ : 1 vid có 16 ROPs ,32 TMU và có core clock là 10 0Mhz ,khi xuất ra 1 vật/model thì nó chỉ xuất ra được tối đa là 16 pixels và mỗi pixel này chỉ có 1 texture duy nhất ,vid có core clock là 10 0 Mhz thì nó có số pixel fillrate là 10 0Mhz x 16 = 16 00 pixels/s Vid đó có khả năng gắn được 32 texture lên 1 pixel trong 1 clock... 5f5e5d5e5d5857 Phần texture filtering này rất quan trọng trong việc so sánh về chất lượng hình ảnh của 2 dòng GPU ,từ đó các bro có thể hiểu được tại sao người ta nói vid của ATi cho hình ảnh đẹp hơn vid của nVidia ( tuy nhiên chỉ trên lý thuyết ) Sau bài này Rock sẽ cố gắng dịch 1 bài nữa so sánh về bộ lọc của 2 hãng này ,tuy nhiên nếu các bro không đọc và không hiểu sơ về vấn đề này thì sẽ tạo nên 1 thread... dán các phần tử nhỏ nhất/texels của texture vào ) Việc dán này được thực hiện nhờ bộ lọc texture filtering ( bộ lọc vật liệu ) Texture filtering : Bộ lọc vật liệu này có nhiều loại : Point sampling Bilinear filtering Trilinear MIP-mapping Anisotropic filtering Anisotropic filtering Lúc đầu Rock tính viết luôn 1 bài về cái này tuy nhiên sau khi search web của Việt Nam thì thấy trên Pcworld vn có 1 bài... pixel fillrate là 10 0Mhz x 16 = 16 00 pixels/s Vid đó có khả năng gắn được 32 texture lên 1 pixel trong 1 clock có nghĩa là số texture fillrate = 10 0MHz x32 texture /s , hoặc xuất được 2 pixels mỗi pixel có 16 textures ,tuy nhiên số lượng pixel giới hạn vẫn là 16 pixels ( mỗi pixel có 2 textures ) ... là bức tường ,mặt đất …… ( Xem hình ).Trong những game/ứng dụng hiện tại mỗi một vật không chỉ là 1 lớp texture được dán vào mà là nhiều lớp ( multitexture ),các lớp có thể là gồm base texture , bump map ,light vector kết hợp lại Fog : Kĩ thuật này tính toán để cho nền của cảnh vật như bị che phủ bởi 1 màn sương và che đậy đi những chỗ ko có texture hay nói cách khác nó che lên những chỗ texture chưa... Antialiasing : Antialiasing là 1 mảng khá lớn và cũng khá cũ tuy nhiên hiện tại Rock chỉ biết được 2 loại Ordered Grid Super Sampling (OGSS) và Jittered Grid Super Sampling (JGSS) ,2 lọai này ít còn sử dụng trong các game hay software vì nó làm tốn Fillrate và Bandwidth rất nhiều ,còn những kĩ thuật AA khác thì Rock đang nghiên cứu hy vọng sớm có thể dịch được và bổ sung vào phần này Đơn giản các kĩ thuật... nhà đó ,sự mờ nhạt của những texture trên căn nhà nguyên nhân là do bộ lọc vật liệu ( texture filtering ) ( vì Rock thấy nhiều post các bạn hay ghi ,đại loại như là hình ảnh bị fog … ) ,nhấn mạnh lại 1 lần nữa fog chỉ xuất hiện ở những vùng không có texture ,không có model hay vật thể Alpha transluscency tests : Đây là một kĩ thuật nhằm tạo nên những vật có tính chất trong suốt và được ứng dụng để... ra monitor GPU sẽ biết xuất pixel nào ra ,pixel nào không nên xuất ra Nhìn trên hình bạn sẽ thấy 2 hình tam giác xám và đen ,hình tam giác đen bị hình tam giác xám chồng lên ,khi xuất ra monitor thì phần bị che phủ bởi tam giác xám sẽ không được xuất ra Trước tiên tất cả các giá trị của điểm Z trên tam giác màu đen sẽ được ghi vào Z_buffer ,khi render đến tam giác xám nếu những điểm của tam giác . là 16 pixels và mỗi pixel này chỉ có 1 texture duy nhất ,vid có core clock là 10 0 Mhz thì nó có số pixel fillrate là 10 0Mhz x 16 = 16 00 pixels/s Vid đó có khả năng gắn được 32 texture lên 1. tùy website ) ,ở đây có sử dụng từ pipeline vì các units này hoạt động 1 cách song song ,ví dụ như vid có 16 pixel pipeline thì 16 cái này cùng làm việc trong 1 lúc chứ không phải là cái này. hơn ( sẽ giải thích ở cuối bài ) Đây là các giai đọan của 3D graphic pipeline : 3D Pipeline _Tổng quát về các giai đoạn của nó 1. Application/Scene • Scene/Geometry database traversal •