Tia phản xạ và tia bóng có thể dùng chung khái niệm DXR nào?
Tia phản xạ và tia bóng có thể dựa trên một số khái niệm nền tảng chung của DXR, nhưng điều đó không có nghĩa chúng dùng cùng một pipeline, dữ liệu hay chi phí. Cách hiểu an toàn là tách công cụ API khỏi quyết định của engine: cấu trúc tăng tốc cung cấp dữ liệu không gian, ray query biểu đạt phép truy vấn, còn shader stage xác định nơi mã hiệu ứng được thực hiện.
Điểm chính
- Acceleration structure là thành phần dữ liệu nền tảng để truy vấn hình học, không tự mô tả toàn bộ hiệu ứng.
- DXR có các cách tiếp cận truy vết tia khác nhau; ray query có thể được dùng trong shader stage phù hợp theo thiết kế ứng dụng [1].
- Tia phản xạ và tia bóng có thể chia sẻ khái niệm nhưng không mặc nhiên chia sẻ cùng một cấu trúc, lịch cập nhật hay chất lượng.
- Cần đồng bộ tài nguyên và thứ tự lệnh GPU khi cấu trúc acceleration được xây dựng, cập nhật hoặc đọc.
- Không thể suy ra chi phí, FPS hay khả năng của mọi trò chơi chỉ từ một khái niệm API.
Những lớp khái niệm thường bị gộp làm một
Khi nói về DXR, người ta thường dùng cụm “ray tracing” như thể nó là một thao tác đơn lẻ. Trên thực tế, một ứng dụng cần chuẩn bị dữ liệu, xây dựng cấu trúc để truy vấn, phát ra tia, xử lý kết quả và kết hợp kết quả với phần còn lại của khung hình. Acceleration structure thuộc lớp dữ liệu phục vụ truy vấn; shader chứa logic của hiệu ứng; lệnh GPU và đồng bộ nối các bước lại với nhau.
Tài liệu Microsoft về Direct3D 12 raytracing mô tả các khối API như acceleration structure, ray query và cách thực hiện shader. Đây là vốn từ hữu ích để hiểu thiết kế, nhưng không phải công thức buộc mọi ứng dụng phải tổ chức giống nhau [1]. Một engine có thể lựa chọn đường đi khác nhau theo mục tiêu, nội dung và yêu cầu chất lượng.
Phần có thể dùng chung giữa phản xạ và bóng
Cả tia phản xạ lẫn tia bóng đều có thể cần hỏi hình học nào nằm trên đường đi của một tia. Vì vậy, chúng có thể cùng dựa trên các khái niệm dữ liệu không gian và phép truy vấn. Trong một thiết kế cụ thể, nhiều lượt truy vấn có thể đọc cấu trúc tương ứng với cảnh; đây là khả năng kiến trúc, chứ không phải khẳng định rằng mọi engine dùng chung chính xác một đối tượng hay một lần xử lý.
Phần khác nhau nằm ở câu hỏi mà hiệu ứng muốn trả lời. Tia phản xạ thường cần biết bề mặt nào được nhìn thấy theo hướng phản xạ và cách dùng thông tin đó cho shading. Tia bóng thường hỏi liệu đường từ điểm cần chiếu sáng tới nguồn sáng có bị vật thể che hay không. Mục đích, số tia, quy tắc lấy mẫu, lọc nhiễu và cách xử lý trường hợp thiếu dữ liệu là các quyết định riêng của nội dung và engine.
Vì thế, “dùng chung DXR” nên được hiểu là có thể chia sẻ ngôn ngữ API và một số tài nguyên nền, không phải đảm bảo một pipeline duy nhất. Việc dùng chung có thể giảm trùng lặp ở một số thiết kế, nhưng cũng có thể làm phát sinh yêu cầu đồng bộ hoặc cập nhật dữ liệu. Chỉ phân tích mã và workload cụ thể mới cho biết lựa chọn nào hợp lý.
Ray query và shader stage trả lời câu hỏi nào?
Ray query là một cách biểu đạt truy vấn trong luồng shader của ứng dụng. Điểm quan trọng với người đọc là phân biệt nơi truy vấn được phát ra với cấu trúc acceleration mà truy vấn tham khảo. Hai hiệu ứng có thể dùng cùng kiểu truy vấn nhưng vẫn áp dụng logic khác nhau để diễn giải hit, miss, khoảng cách hoặc loại hình học.
Shader stage cũng không phải tên khác của hiệu ứng. Nó cho biết mã chạy trong ngữ cảnh nào của pipeline. DXR cung cấp nhiều khái niệm và lựa chọn; ứng dụng cần chọn theo thiết kế, điều kiện đầu vào và dữ liệu cần trao đổi. Không nên kết luận rằng một stage cụ thể luôn tốt hơn hoặc một lựa chọn API bắt buộc cho mọi hiệu ứng.
Khi xem một triển khai, hãy lần theo câu hỏi: dữ liệu nào tạo acceleration structure, lệnh nào bảo đảm dữ liệu đã sẵn sàng, shader nào phát tia, và kết quả được ghép vào ảnh ra sao? Trình tự này giúp nhìn thấy ranh giới giữa API và quyết định nội bộ, thay vì chỉ dựa vào tên gọi trong phần cài đặt đồ họa.
Đồng bộ và chi phí cần được đánh giá theo ứng dụng
Cấu trúc acceleration có thể cần xây dựng hoặc cập nhật trước khi lệnh đọc nó chạy. Nếu engine thay đổi hình học, transform hay dữ liệu liên quan, phải xác định thứ tự lệnh và trạng thái resource. Một cấu trúc được chia sẻ giữa nhiều hiệu ứng có thể hữu ích, nhưng các hiệu ứng vẫn phải đọc dữ liệu đúng thời điểm; không được coi tên API là sự bảo đảm đồng bộ tự động.
Chi phí phụ thuộc số lượng tia, độ phân giải, mức lấy mẫu, cấu trúc cảnh, cập nhật dữ liệu và thiết bị. Tài liệu API giải thích cơ chế, không đưa ra lời hứa FPS cho trò chơi cụ thể. Muốn so sánh, cố định cảnh và thiết lập, ghi nhận thời gian các giai đoạn, chất lượng đầu ra và điều kiện chạy. Đừng lấy một phép đo đơn lẻ làm kết luận phổ quát.
Bạn có thể khám phá các nội dung thể thao và theo dõi cộng đồng người xem thể thao của KLIVE tại <a href="https://www.klive68.com/">Trang theo dõi cộng đồng người xem thể thao của KLIVE</a>; nội dung động tại đó không phải nguồn để suy luận hiệu năng đồ họa hay hỗ trợ DXR của nền tảng.
Nguồn tham khảo
Câu hỏi thường gặp
Tia phản xạ và tia bóng có thể dùng chung acceleration structure không?
Có thể trong một thiết kế phù hợp, nhưng không phải yêu cầu hay kết quả mặc định của mọi engine. Cần xét dữ liệu cảnh, cập nhật, thứ tự GPU và mục tiêu từng hiệu ứng.
Ray query có phải là một hiệu ứng hình ảnh không?
Không. Đây là khái niệm truy vấn của DXR. Cách diễn giải kết quả để tạo phản xạ, bóng hoặc hiệu ứng khác do shader và ứng dụng quyết định.
Dùng chung khái niệm DXR có nghĩa chi phí hai hiệu ứng bằng nhau không?
Không. Số tia, dữ liệu, shader, độ phân giải và các bước lọc có thể khác đáng kể. Cần đo trong workload cụ thể.
Có thể từ tài liệu DXR kết luận một game hỗ trợ ray tracing không?
Không. Tài liệu API mô tả cơ chế phát triển, không xác nhận tính năng trong một trò chơi hay dịch vụ cụ thể.