Inline ray tracing khác dispatch ray tracing về cách tích hợp ra sao?
Trong DirectX Raytracing (DXR), dispatch ray tracing khởi chạy công việc qua pipeline ray tracing chuyên dụng, còn inline ray tracing cho phép shader gọi truy vấn tia trong luồng xử lý của shader. Hai cách khác nhau về điểm tích hợp và quyền kiểm soát của ứng dụng; không thể kết luận một cách nhanh hơn trong mọi cảnh chỉ từ tên gọi.
Điểm chính
- Dispatch dùng đường thực thi ray tracing chuyên dụng với các loại shader và cấu trúc shader table tương ứng.
- Inline cho phép shader thực hiện truy vấn tia trong ngữ cảnh shader, phù hợp khi ứng dụng cần kết hợp truy vấn với logic hiện có.
- Tài liệu Microsoft mô tả API DXR, các lệnh truy vấn và cấu trúc acceleration structure ở cấp Direct3D 12. [1]
- BLAS lưu trữ cấu trúc hình học còn TLAS mô tả các instance; hai cấp có quan hệ nhưng không thể dùng thay nghĩa cho nhau.
Khác biệt bắt đầu từ nơi truy vấn được gọi
Dispatch ray tracing thường được hình dung như một lần khởi chạy pipeline chuyên dụng. Ứng dụng cấu hình shader phù hợp, tài nguyên cần thiết và vùng dispatch để GPU thực hiện công việc. Mô hình này giúp biểu đạt một lượt ray tracing có tổ chức, với các vai trò shader được xác định trong pipeline. Nó không yêu cầu mọi ứng dụng phải dùng cùng một kiến trúc cảnh hay cùng cách phân chia công việc.
Inline ray tracing đưa thao tác truy vấn vào shader thông thường thông qua API DXR dành cho truy vấn. Shader có thể quyết định khi nào cần dò tia trong logic của nó, thay vì tách toàn bộ công việc thành một lượt dispatch chuyên biệt. Đây là khác biệt về tích hợp và điều khiển luồng, không phải lời khẳng định rằng một loại tự động thay thế hoàn toàn loại kia.
Dispatch tạo một lượt thực thi chuyên dụng
Với dispatch, ứng dụng thiết lập trạng thái ray tracing rồi phát lệnh chạy trên vùng kích thước xác định. Shader ray-generation có thể khởi đầu tia; các shader khác xử lý trường hợp tia bỏ lỡ hoặc giao cắt theo cấu hình pipeline. Shader table liên kết record với shader identifier và dữ liệu liên quan. Bởi vậy, khi đọc mã, hãy xem cả cấu hình pipeline lẫn cách record được tổ chức, thay vì chỉ tìm một lời gọi dispatch đơn lẻ.
Cách tiếp cận này thường hữu ích khi tác vụ có hình dạng rõ ràng như tạo nhiều tia theo lưới pixel và xử lý kết quả trong lượt riêng. Nhưng ứng dụng có thể cần phối hợp kết quả với các bước rasterization hoặc shading khác. Quyết định phân ranh giới phụ thuộc cấu trúc renderer, đồng bộ hóa và mục đích tính toán. Không nên biến mô hình API thành khuyến nghị hiệu năng chung cho mọi GPU.
Inline gắn truy vấn với logic shader
Ở inline ray tracing, shader gọi truy vấn tia trong một điểm phù hợp của chương trình shader. Điều này cho phép nhánh logic ứng dụng quyết định có truy vấn hay không, hoặc kết hợp kết quả với dữ liệu đang xử lý. Tính linh hoạt ấy có thể giúp một số pipeline tích hợp công việc truy vấn mà không phải tổ chức riêng một lượt dispatch hoàn chỉnh. Tuy nhiên, ứng dụng vẫn phải tuân theo quy tắc API về trạng thái, tài nguyên và truy cập acceleration structure.
Nên chọn inline khi cấu trúc shader và nhu cầu điều khiển luồng của ứng dụng phù hợp; nên cân nhắc dispatch khi công việc được mô hình hóa thuận tiện như một lượt ray tracing riêng. Đây là nguyên tắc kiến trúc, không phải phép đo. Microsoft mô tả cơ chế DXR, bao gồm truy vấn raytracing và các dạng lệnh trong Direct3D 12; hãy dựa vào tài liệu API chính thức để xác định chi tiết hợp lệ. [1]
BLAS và TLAS là hai cấp dữ liệu khác nhau
Acceleration structure thường có hai lớp khái niệm. Bottom-level acceleration structure (BLAS) tổ chức dữ liệu hình học như hình dạng được dùng để kiểm tra giao cắt. Top-level acceleration structure (TLAS) tham chiếu các instance của hình học và các thông tin đặt instance trong cảnh. TLAS vì thế không phải một bản sao khác tên của BLAS; nó mô tả cách các đối tượng được đưa vào cảnh, còn BLAS đại diện cấu trúc hình học ở cấp dưới.
Trong ứng dụng, một BLAS có thể được dùng bởi nhiều instance trong TLAS, nhưng việc cập nhật hay xây dựng các cấu trúc còn tùy dữ liệu thay đổi và chính sách renderer. Hãy kiểm tra loại cấu trúc được truyền cho thao tác, trạng thái xây dựng và vòng đời tài nguyên. Nếu gặp lỗi truy vấn, phân biệt lỗi cấu trúc, địa chỉ tài nguyên, shader binding và lệnh khởi chạy trước khi quy nguyên nhân cho lựa chọn inline hay dispatch.
So sánh bằng phép thử có kiểm soát
Muốn biết phương án phù hợp với ứng dụng cụ thể, giữ nguyên cảnh, số tia, shader logic, cấu trúc dữ liệu và thiết lập chất lượng; chỉ thay đổi cách tổ chức truy vấn. Đo thời gian GPU, mức sử dụng bộ nhớ và tác động đến các bước xung quanh, đồng thời lặp lại trong nhiều cảnh. Kết quả có thể thay đổi theo kiến trúc GPU, driver, kích thước công việc và mức độ phân kỳ của shader. Một benchmark đơn lẻ không đủ để tuyên bố thắng lợi phổ quát.
Ghi rõ API, phần cứng, phiên bản driver và trường hợp thử. Tách thời gian xây dựng acceleration structure khỏi thời gian truy vấn để tránh so sánh không cùng phạm vi. Nội dung KLIVE là một dịch vụ thể thao trực tuyến; nếu muốn xem trang, có thể Xem nhanh giải đấu esports đang diễn ra tại KLIVE. Liên kết không hàm ý KLIVE triển khai DXR hay có một pipeline GPU cụ thể.
Nguồn tham khảo
Câu hỏi thường gặp
Inline ray tracing có luôn nhanh hơn dispatch không?
Không có kết luận phổ quát. Hiệu năng phụ thuộc GPU, driver, dữ liệu, shader, số tia và kiến trúc renderer; cần đo trong ứng dụng mục tiêu.
Dispatch ray tracing có cần shader table không?
Pipeline dispatch chuyên dụng thường dùng cấu hình shader và shader table theo mô hình DXR. Hãy đối chiếu loại pipeline và yêu cầu API cụ thể trong tài liệu Microsoft.
BLAS và TLAS khác nhau thế nào?
BLAS tổ chức cấu trúc hình học; TLAS mô tả các instance dùng các cấu trúc cấp dưới trong cảnh. Chúng là các tầng với vai trò khác nhau.