Tiến trình xử lý đồ hoạ (tiếng Anh Graphics Pipeline; Computer Graphics Pipeline;Rendering Pipeline) là mô hình khái niệm mô tả các bước thực hiện việc kết xuất (render) kịch bản 3D thành hình ảnh trên màn hình 2D trong hệ thống đồ họa máy tính. tiến trình xử lý đồ hoạ thực hiện biến đổi mô hình 3D trong chương trình đồ họa (vd. trò chơi 3D hay phim hoạt hình máy tính) thành các điểm ảnh trên màn hình máy tính.
Hệ thống đồ họa máy tính thực hiện mô hình hóa cảnh trong thế giới thực để có thể quan sát chúng trên màn hình máy tính. Một cảnh bao gồm vô số đối tượng. Mỗi đối tượng bao gồm tập hợp các thành phần đồ họa nguyên thủy (vd. điểm, đoạn thẳng, đa giác). Mỗi thành phần đồ họa nguyên thủy bao gồm tập hợp các đỉnh (vertex). Vậy, tập hợp các kiểu đồ họa nguyên thủy và các đỉnh xác định hình học cảnh thế giới thực. Trong một cảnh phức tạp, nó có thể bao gồm hàng ngàn đến hàng triệu đỉnh để tạo nên vật thể. tiến trình xử lý đồ hoạ có nhiệm vụ xử lý toàn bộ các đỉnh này theo cùng một cách tương tự để sinh ra hình ảnh trong bộ nhớ đệm trong máy tính, trước khi hiển thị trên màn hình. Hình 1 biểu diễn sơ đồ tổng thể của tiến trình xử lý đồ hoạ.
Tiến trình xử lý đồ hoạ còn được gọi là đường ống đồ họa (Graphics Pipeline). Khái niệm “đường ống” được sử dụng vì việc chuyển đổi từ mô hình toán học thành hình ảnh trên màn hình đòi hỏi nhiều bước thực hiện theo trình tự; kết quả của bước trước được đẩy vào bước sau để có thể tiếp tục thực hiện lại nhiệm vụ của mình. Nhiệm vụ cụ thể trong các bước của “đường ống” phụ thuộc vào loại kiến trúc hệ thống đồ họa (vd. OpenGL, Direct3D). Các kiến trúc đồ họa này đều có giao diện lập trình ứng dụng (API) để nhóm nhiệm vụ thành các bước có chức năng tương tự nhau và để điều khiển tiến trình xử lý đồ hoạ trên phần cứng “đơn vị xử lý đồ họa” (GPU).
“Đường ống” đồ họa trên Hình 1 có bốn phần chính: (1) xử lý và biến đổi hình học tọa độ đỉnh đa giác hay tọa độ điểm mút đoạn thẳng, (2) xử lý đa giác hay đoạn thẳng (thông qua raster hóa) và tạo mảnh hình ảnh, (3) kết cấu (cg. tô trát) và chiếu sáng, (4) kết hợp mảnh để tạo ra hình ảnh cuối cùng trong bộ nhớ đệm trước khi hiển thị trên màn hình. Mỗi bước (cg. phần) trong tiến trình tiến trình xử lý đồ hoạ bao gồm nhiều nhiệm vụ. Nhiều thuật toán thực hiện nhiệm vụ trong “đường ống” được “cứng hóa” (do các vi mạch trên GPU thực hiện) và có thể xử lý đồng thời. Do vậy, kiến trúc “đường ống” cho khả năng trình diễn đồ họa trong thời gian thực.
Chương trình ứng dụng trên Hình 1 có nhiệm vụ sinh dữ liệu để “đường ống” đồ họa hiển thị chúng. Người sử dụng điều khiển ứng dụng thông qua đầu vào chương trình (input). Thông tin phản hồi tham gia vào việc tính toán hình ảnh tiếp theo để hiển thị. Nhiệm vụ của chương trình ứng dụng còn bao gồm tính toán phát hiện va chạm của các đối tượng chuyển động, hoạt hình, biến hình, các kỹ thuật tăng tốc tính toán và tối ưu bộ nhớ. Dữ liệu đầu vào của tiến trình xử lý đồ hoạ bao gồm: (1) vị trí, hướng và tiêu cự của camera ảo (cg. người quan sát); (2) thành phần đồ họa nguyên thủy, hình dạng và tính chất vật liệu của đối tượng; (3) hướng, vị trí, màu sắc và cường độ của nguồn chiếu sáng; (4) ảnh kết cấu để tô trát trong không gian 3D. Kết quả đầu ra là giá trị màu của từng điểm ảnh 2D trong bộ nhớ đệm.
Bước biến đổi hình học của tiến trình xử lý đồ hoạ bao gồm các thao tác trên tập đỉnh đa giác mô tả hình học của đối tượng. Vị trí mới của đỉnh được tính toán trên cơ sở các phép biến đổi. Đa giác hình thành bởi các đỉnh này mặc định biến đổi theo. Các phép biến đổi trong bước này bao gồm:
- Biến đổi mô hình: Áp dụng các phép biến đổi dịch chuyển, co dãn và xoay để sắp xếp các mô hình đối tượng vào một cảnh. Thực hiện chuyển đổi giá trị các đỉnh từ hệ thống tọa độ mô hình sang hệ thống tọa độ thế giới thực.
- Biến đổi quan sát: Chuyển đổi giá trị các đỉnh trong hệ tọa độ thế giới thực sang hệ tọa độ quan sát trên cơ sở các tham số camera ảo.
- Biến đổi chiếu: Chuyển đổi giá trị các đỉnh trong hệ tọa độ quan sát sang hệ tọa độ chiếu nhờ áp dụng phép chiếu nào đó (vd. chiếu phối cảnh, chiếu song song). Biến đổi này còn xác định khối quan sát, xác định phần đối tượng che khuất và bị cắt xén (không nhìn thấy trên màn hình).
Lưới đa giác là kết quả của mô hình hóa bề mặt vật thể. Mỗi đa giác của lưới và đoạn thẳng được rời rạc hóa (cg. raster hóa) nhằm chuyển đổi biểu diễn hình học liên tục (đa giác) thành hình học rời rạc (tập điểm ảnh) là một phần bề mặt vật thể cần hiển thị. Các điểm ảnh thuộc mảnh (fragments) hình ảnh sẽ được hiển thị trên màn hình khi nó không bị che khuất bởi các mảnh (một phần) hình ảnh khác. Nếu vài mảnh ảnh có cùng vị trí trong hình ảnh thì cái nào gần với người quan sát nhất sẽ không bị che khuất (được nhìn thấy). tiến trình xử lý đồ hoạ gán màu thích hợp trên cơ sở chiếu sáng trong cảnh ảnh và gán kết cấu cho các điểm ảnh trước khi trình diễn trên màn hình máy tính. tiến trình xử lý đồ hoạ sử dụng phép biến đổi khung nhìn để ánh xạ một cảnh ảnh trong bộ nhớ đệm vào màn hình máy tính.
Hai bộ thư viện chương trình máy tính xử lý đồ họa theo kiến trúc “đường ống” đồ họa thông dụng nhất là OpenGL và Direct3D.
OpenGL (Open Graphics Library) là giao diện lập trình ứng dụng API đa nền tảng và đa ngôn ngữ kết xuất đồ họa véc tơ 2D và 3D. Chương trình đồ họa sử dụng API để tương tác với GPU làm tăng hiệu năng kết xuất. Silicon Graphics Inc (SGI) bắt đầu phát triển OpenGL vào năm 1991 và hoàn thành phiên bản đầu tiên vào năm 1992. Từ năm 2006, OpenGL trở thành thư viện đồ họa mở, chuẩn và phi lợi nhuận. OpenGL được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau như thiết kế hỗ trợ bởi máy tính (CAD), thực tại ảo, trình diễn khoa học, trình diễn thông tin, mô phỏng bay và trò chơi video.
Direct3D là giao diện lập trình ứng dụng API kết xuất đồ họa 3D dành cho Microsoft Windows. Nó có thể sử dụng GPU để tăng tốc độ xử lý toàn bộ hay một phần “đường ống” đồ họa 3D nếu máy tính có sẵn vỉ đồ họa. Direct3D cũng được sử dụng trong nhiều ứng dụng đồ họa hiệu năng cao, đặc biệt trong các trò chơi điện tử. Phiên bản đầu tiên Direct3D 2.0 được Microsoft đưa ra vào năm 1996 trên Windows 95. Phiên bản Direct3D 12 version 1809 trên Windows 10 xuất hiện vào tháng 10 năm 2018.
Tiến trình xử lý đồ hoạ của OpenGL được thực hiện theo sáu bước sau: (1) Bước xử lý tọa độ đỉnh có nhiệm vụ nhập tọa độ đỉnh từ mảng dữ liệu trong bộ nhớ; thực hiện chia nhỏ mảnh và tách chuỗi đỉnh để xử lý về sau (nếu cần); xử lý hình học (nếu cần) để có dãy các chuỗi đỉnh; (2) Bước hậu xử lý các đỉnh có nhiệm vụ thu nhận chuỗi đỉnh ở đầu ra của bước 1 để lưu trữ vào đối tượng OpenGL; cắt xén chuỗi đỉnh và biến đổi khung nhìn trên cửa sổ màn hình; (3) Bước lắp ráp thành phần cơ sở thực hiện phân chia các chuỗi đỉnh vào các thành phần cơ sở (vd. tam giác); (4) Bước raster hóa và nội suy thực hiện chuyển đổi thành phần cơ sở thành các phần tử rời rạc (cg. mảnh ảnh). (5) Bước xử lý các mảnh ảnh để có tập giá trị màu điểm ảnh và độ sâu, xác định các hình ảnh đầu ra cho mỗi mảnh ảnh; (6) Bước xử lý từng mảnh ảnh bao gồm các nhiệm vụ như loại bỏ phần mảnh ảnh ngoài vùng quan sát, loại bỏ mảnh ảnh bị che khuất, loại bỏ điểm ảnh có cùng vị trí trên màn hình nhưng xa người quan sát hơn, trộn màu của mảnh ảnh với màu trong vùng đệm, v.v.
Tài liệu tham khảo[sửa]
- Donald Hearn, M. Pauline Baker and Warren Carithers, Computer Graphics with OpenGL, 4th Edition, Prentice Hall, USA, 2010
- Edward Angel, David Shreiner, Interactive Computer Graphics, 6th Edition, Addison-Wesley, 2012
- John F. Hughes, Andries Van Dam, Morgan McGuire, David F. Sklar, James D. Folay, Steven K. Fainer, Kurt Akeley, Computer Graphics: Principles and Practice, Third Edition, Addison-Wesley, 2014
- David Rogers (1998). Procedural Elements for Computer Graphics. McGraw-Hill.
- James D. Foley, Andries Van Dam, Steven K. Feiner and John F. Hughes (1995). Computer Graphics: Principles and Practice. Addison-Wesley.
- Donald Hearn and M. Pauline Baker (1994). Computer Graphics. Prentice-Hall.