Sau khi dữ liệu vertex được xử lý (thành tọa độ trong không gian chiếu) sẽđược chuyển qua để xử lý đối tượng cơ sở (Primitive Processing).
Hình 2-5 Qui trình xử lý đối tượng cơ sở
Clipping. Loại bỏ các các đối tượng hình học không nhìn thấy được trong khối quan sát (viewing frustum) để tăng hiệu suất dựng hình.
Chuẩn hóa hệ tọa độ thuần nhất (Homogeneous Divide). Chia các thành phần của dữ liệu cho phần tử cuối.
Ánh xạ Viewport (Viewport Scaling). Ánh xạ dữ liệu vào tọa độ trong Viewport.
Xử lý tam giác (Triangle Setup). Chuẩn bị cho việc nội suy tam giác và biến đổi các thuộc tính vertex thành thuộc tính điểm ảnh.
Sau khi qui trình xử lý đối tượng cơ sở hoàn tất, dữ liệu vertex đã được nội suy thành dữ liệu điểm ảnh sẵn sàng được chuyển sang qui trình xử lý điểm ảnh (điểm ảnh lúc này chưa phải là giá trị màu mà chỉ mang các thuộc tính do tính toán được từ việc nội suy tam giác mà thôi). Điểm ảnh sau đó sẽ tính toán kết hợp các thuộc tính màu sắc và lấy mẫu texture tạo thành điểm màu cuối cùng. Qui trình xử lý điểm ảnh bao gồm 2 công đoạn chính.
Hình 2-6 Qui trình xử lý điểm ảnh qua 2 giai đoạn
Giai đoạn 1 biến đổi dữ liệu nội suy trong vertex (bao gồm màu diffuse, màu specular và tọa độ texture) thành các thuộc tính màu của điểm ảnh. Gồm có các bước sau đây:
Lấy mẫu texture (Sample texture). Lấy mẫu 1 hay nhiều texture
Hòa màu (Blend colors). Kết hợp các màu trong thuộc tính của điểm ảnh chủ yếu là màu cơ bản (diffuse), màu phản chiếu (specular) với các màu lấy mẫu từ texture.
Giai đoạn 2 sẽ chuyển điểm màu ở cuối giai đoạn 1 thành điểm màu cuối cùng được dựng lên trên màn hình. Quá trình này bao gồm các công đoạn sau đây:
So sánh alpha (Alpha test). Tiến hành so sánh giá trị alpha để xem màu sắc của điểm ảnh có tham gia vào giá trị màu cuối cùng hay không.
So sánh cập nhật vùng đệm độ sâu (Depth test). Cập nhật vùng đệm độ sâu (Depth buffer) bằng độ sâu của điểm ảnh nẽu điểm ảnh được vẽ.
So sách stencil (Stencil test). Tiến hành kiểm tra stencil nếu điểm ảnh đợi vẽ.
Tính toán sương mù (Per-pixel fog). Kết hợp giá trị sương mù với màu của điểm ảnh.
Hòa màu dựa trên độ alpha (Alpha blend). Tiến hành kết hợp màu của điểm ảnh đang vẽ với màu của điểm ảnh tương ứng trên màn hình.
Dither. Thực hiện chuẩn hóa màu.
Hiệu chỉnh Gamma. Thực hiện hiệu chỉnh gamma trên điểm ảnh cuối cùng. Trong qui trình xử lý điểm ảnh ở trên, chỉ có giai đoạn 1 là có thể thay thế xử lý bằng Pixel Shader. Pixel Shader sau khi kết thúc sẽ trả giá trị màu tính được cho Fixed Function Pipeline. Ta hãy xem qua chi tiết xử lý trong giai đoạn 1 của Fixed Function Pipeline. Mô hình lý thuyết của Fixed Function Pipeline như sau:
Dữ liệu texture (Texture Data). Là dữ liệu của texture lấy từ tập tin hay khung hình (Render Target).
Sampler. Dùng để lấy mẫu texture. Có nghĩa là dùng tọa độ texture để tìm giá trị màu tương ứng tại tọa độđó. Các bộ lọc texture (texture filtering) có thể làm ảnh hưởng đến chất lượng mẫu nhận được (trừ chế độ lọc theo điểm (point filtering)). Fixed Function Pipeline có tất cả 8 samplers.
Cơ chế kết hợp đa texture (Multitexture Blender) bao gồm 8 tầng kết hợp (Blending Stage). Các tầng kết hợp được sắp chồng lên nhau sao cho đầu ra của đầu ra của tầng 0 trở thành đầu vào cho tầng 1, đầu ra của tầng 1 trở thành đầu vào cho tầng 2 và cứ thế. Mỗi tầng như vậy gọi là tầng texture (texture stage).
Cả giai đoạn 1 này ta có thể sử dụng Pixel Shader để xử lý thay cho Fixed Function. Mô hình lý thuyết của Pixel Shader thay thế tương ứng với Fixed Function như sau.
Hình 2-8 Mô hình xử lý điểm ảnh của Pixel Shader trong giai đoạn 1
Theo mô hình trên Pixel Shader cũng dùng các samplers để lấy mẫu texture, nhưng giờ đây cơ chế kết hợp đa texture (Multitexture Blender) đã được thực hiện
ngay trong bản thân của Pixel Shader, bằng cách này các tác vụ kết hợp (blending) hoàn toàn có thể được lập trình lại. Một khi đã sử dụng Pixel Shader, ta không còn phải hiệu chỉnh các trạng thái của các tầng texture (Texture Stage States) để điều khiển cơ chế kết hợp đa texture nữa vì mọi thứđã được làm trong Pixel Shader.
Đây chính là sức mạnh của Pixel Shader: người lập trình không còn phải tốn nhiều công sức để thiết lập các trạng thái cho các tầng texture nữa, họ giờ đây hoàn toàn có thể tự lập trình ra các thuật toán mới để sử dụng, thậm chí hoàn toàn có thể trung chuyển các luồng dữ liệu từ vertex shader vào pixel shader (nếu dùng kết hợp cả 2 shader). Tuy nhiên vẫn còn những hạn chế do người lập trình vẫn chưa can thiệp được vào giai đoạn 2 của qui trình xử lý pixel, giai đoạn này vẫn còn bị sự kiểm soát của Fixed function Pipeline. Phần sau ta sẽ xem qua kiến trúc của máy ảo Pixel Shader