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ệ
Trang 13D 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)
Trang 22 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
Trang 3Khô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
Trang 4Scene 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
Trang 5cấ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
Trang 6Khô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ụ :
Trang 7Nhì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ờ
Trang 8và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
Trang 9trườ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
Trang 10phầ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 độ