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
12 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2340 | Lượt tải: 0
Bạn đang xem nội dung tài liệu 3D graphic pipeline, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu sưu tầm từ Internet
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
Tài liệu sưu tầm từ Internet
• 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 .
Tài liệu sưu tầm từ Internet
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 )
Tài liệu sưu tầm từ Internet
đó 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 đó .
Tài liệu sưu tầm từ Internet
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)
Tài liệu sưu tầm từ Internet
• 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
Tài liệu sưu tầm từ Internet
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
Tài liệu sưu tầm từ Internet
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 độ bóng trên bề mặt của tam giác ,từ đó dẫn đén các model sẽ có độ bóng . Ngoài ra ở giai đoạn
này các texture ( đáng lẽ phải gọi là texture map : bản đồ texture ) được dán vào những vật thể/model
,texture là những hình 2D có thể 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 .
Tài liệu sưu tầm từ Internet
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 xuất hiện.Tuy nhiên các bạn đừng
lầm lẫn ở đây fog không che lên những texture hoặc object đã xuất hiện ,ví dụ như căn nhà đã xuất hiện
trên frame thì ko bao giờ còn có fog trên căn 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 để render vụ nổ ,khói ,nước ,những tấm kính …..
Tóm tắt lại :
+ Giai đoạn này (Shading ,Fog và Alpha blending)là giai đoạn cho model những hiệu ứng đổ bóng ,dán
những texture lên model ,cho model có được hiệu ứng trong suốt …..
+ Giai đoạn này được thực hiện bởi bộ xử lý pixel shader
Tài liệu sưu tầm từ Internet
Sau những giai đoạn Shading ,Fog và Alpha blending những model hay vật thể đã gần như hoàn chỉnh
trên view space ,tuy nhiên để cho hình được xuất hiện trên monitor những texture trên model bây giờ cần
phải được biến thành những điểm trên monitor ( pixel ) .Nhớ lại trong quá trình scan_line convertion thì
trên monitor chỉ có bộ khung của model/vật thể chứ vẫn chưa có màu sắc ,màu sắc trên bộ khung này sẽ
được định ra bằng cách dán các texture trên model/vật thể vào ,bộ khung đó ( thực chất là 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 khá hay và đầy đủ về vấn đề này , nên thôi không dịch nữa ( khả năng có hạn ,người
ta dịch hay hơn mình thì cứ để người ta làm )
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 tranh luận dài vài
trăm trang về vấn đề này .
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 này làm giảm những “ Răng cưa “ ở những cạnh hình ảnh ( như chúng ta đã biết
trong quá trình scan_line convertion tạo ra những artifacts dạng những răng cưa này ). Những phương
pháp khử răng cưa mới giúp cho giảm những răng cưa này nhiều hơn mà tốn ít Fillrate và Bandwidth hơn.
Z_buffer and Z_stencil :
2 bộ nhớ đệm này làm việc có liên quan đến nhau do đó tôi xin mô tả chung với nhau . Như đã nói ở trên
khi quá trình scan_line convertion thì chuyển các toạ độ của điểm trên model thành toạ độ của pixel ( trên
Tài liệu sưu tầm từ Internet
monitor ) thì các giá trị Z của toạ độ trong model sẽ được ghi nhớ vào Z_buffer ,khi xuất hình 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 xám nằm lên những pixel mà tam giác đen đã chiếm ,thì lập
tức việc so sánh giữa 2 giá trị Z của 2 điểm tương ứng ,giá trị Z nào cho thấy tam giác nằm xa hơn thì sẽ
không được ghi vào Z_buffer hoặc sẽ bị xoá trên Z_buffer.
Bây giờ chuyển sang Z_Stencil buffer ,đây cũng là bộ nhớ đệm nhưng nó chứa những thông tin của các
model đặc biệt ,thế nào là model đặc biệt ? ví dụ như trong những game flight simulator thì nó sẽ chứa
thông tin của model tấm chắn gió của buồng lái ( HUD ), khi máy bay bay thì những model khác sẽ hiện
ra phía trước HUD ,do đó HUD bao giờ cũng nằm trước tất cả những model mới xuất hiện . Tuy nhiên
mỗi frame nếu có vật gì xuất hiện tại những pixel mà HUD chiếm thì nó vẫn đưa các giá trị Z của vật đó
và HUD vào Z_buffer để so sánh. Nhờ vào bộ nhớ đệm này mà những model thường xuyên nằm trước
các model khác không phải render lại nhiều lần ,mà chỉ thêm những texture ,hoặc effect mới mà thôi ( ví
dụ như đạn bắn vào HUD ,hoặc ánh nắng chiếu vào HUD )
Tóm lại :
+ Các giai đoạn thực hiện ( texture filtering ) do TMU ( texture mapping units ) thực hiện ,trong khi đó
(antiliasing ,shadow ,Z_buffer, Z_stencil ) thì do ROPs thực hiện ( Raster operation units )
Tài liệu sưu tầm từ Internet
+ Tốc độ của ROPs và TMU thể hiện ở pixel fillrate và texture fillrate ( có thể gọi là tốc độ phủ các pixel
và tốc độ phủ các texture ) 2 cái này có gì khác nhau ? .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à 100Mhz ,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à 100 Mhz thì nó có
số pixel fillrate là 100Mhz x 16 = 1600 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 = 100MHz
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 ) .
Các file đính kèm theo tài liệu này:
- 3D graphic pipeline.pdf