Skip to content
Maximum Tuning Maximum Tuning Shop Open Book Your Dyno Session
EST. 2011 · BAKERSFIELD, CA

Scissor test và viewport transform đảm nhiệm hai bước khác nhau ra sao?

TECHNICAL DEEP-DIVE
Tóm tắt

Viewport transform và scissor test không làm cùng một việc: một bước ánh xạ tọa độ sang vùng hiển thị, bước kia giới hạn phần vùng có thể được giữ lại theo trạng thái scissor. Phân biệt chúng giúp đọc pipeline chính xác hơn mà không biến một vùng cắt nhỏ thành lời hứa giảm thời gian GPU theo tỷ lệ cố định.

Điểm chínhViewport transform chuyển tọa độ sau các bước trước đó sang không gian viewport. · Scissor test giới hạn vùng pixel được giữ lại bằng hình chữ nhật scissor. · Hai cơ chế có vai trò riêng trong quá trình rasterization và không nên gọi thay thế cho nhau. · Vùng scissor nhỏ hơn không tự chứng minh một mức giảm cố định về thời gian dựng hình.

Viewport transform: ánh xạ vào vùng hiển thị

Sau khi các đỉnh đã qua những bước xử lý trước đó, tọa độ cần được chuyển sang không gian màn hình hoặc vùng đích thích hợp. Viewport xác định một vùng trong render target, với các thông số như vị trí và kích thước. Viewport transform ánh xạ tọa độ vào vùng này để hình học có thể được biểu diễn trong không gian raster. Nếu đổi kích thước viewport, quan hệ ánh xạ thay đổi; điều đó không tương đương với việc loại bỏ toàn bộ hình học nằm ngoài vùng.

Tài liệu Microsoft về rasterizer trong Direct3D mô tả viewport và scissor như trạng thái có chức năng khác nhau. Viewport xác định vùng ánh xạ, trong khi scissor giới hạn vùng pixel được giữ lại. [1] Đọc hai khái niệm riêng giúp tránh suy luận rằng chỉ cần thu nhỏ viewport là mọi công việc ngoài nó tự biến mất theo cùng một cơ chế.

Scissor test: giới hạn pixel được giữ

Scissor test kiểm tra vị trí pixel so với hình chữ nhật scissor được thiết lập. Pixel nằm ngoài vùng giới hạn có thể bị loại khỏi phần kết quả cần giữ theo quy tắc pipeline. Cơ chế này hữu ích khi một ứng dụng chỉ muốn cập nhật hoặc hiển thị một khu vực, chẳng hạn vùng giao diện hoặc một phần bề mặt. Nó là phép giới hạn theo tọa độ pixel, không phải phép biến đổi hình học và cũng không làm thay đổi vị trí đỉnh trong không gian viewport.

Illustration: Scissor test Decorative illustration for the section "Scissor test"; visual only, carries no data.

Kết quả phụ thuộc trạng thái đang bật, tọa độ vùng scissor, render target và các công việc đã xảy ra trước đó. Một hình chữ nhật nhỏ có thể giảm số pixel được ghi hoặc xử lý ở một số bước, nhưng tổng thời gian khung hình còn chịu ảnh hưởng của vertex processing, shader, băng thông, đồng bộ và chi phí CPU. Vì thế, không có cơ sở để gán một hệ số tiết kiệm cố định chỉ nhìn vào diện tích vùng scissor.

Đọc đúng thứ tự và phạm vi

Có thể hình dung đơn giản: viewport trả lời tọa độ được đặt vào vùng hiển thị nào; scissor trả lời những pixel nào trong vùng đích được phép đi tiếp hoặc được giữ. Cách diễn đạt này hữu ích để phân biệt, nhưng hiện thực pipeline có nhiều trạng thái và bước khác liên quan, nên không nên dùng nó thay tài liệu API khi đọc mã đồ họa cụ thể. Tên hàm hoặc trạng thái cũng cần được đặt trong ngữ cảnh phiên bản Direct3D và cấu hình thiết bị.

Khi phân tích một khung hình, xác minh viewport và scissor được cấu hình tại thời điểm lệnh vẽ chạy, thay vì chỉ xem giá trị cuối cùng của toàn ứng dụng. Một ứng dụng có thể thay đổi trạng thái nhiều lần giữa các lượt vẽ. Công cụ capture và log có thể giúp xác định lượt nào dùng vùng nào, nhưng ảnh chụp cuối màn hình không cho biết riêng cơ chế nào đã loại pixel.

Đo hiệu năng thay vì phỏng đoán

Nếu mục tiêu là giảm thời gian dựng hình, hãy tạo phép đo lặp lại trên cùng cảnh, cùng độ phân giải và cùng cấu hình; chỉ thay đổi trạng thái scissor hoặc viewport trong một biến thể thử nghiệm. Theo dõi thời gian GPU và CPU, cùng số lượt vẽ hoặc dữ liệu liên quan nếu công cụ hỗ trợ. Kết quả cần được kiểm tra qua nhiều lượt vì biến động tải nền và đồng bộ có thể làm sai khác nhỏ khó diễn giải. Không nên so sánh hai cảnh khác nhau rồi quy toàn bộ chênh lệch cho scissor.

Illustration: Đo hiệu năng thay vì phỏng Decorative illustration for the section "Đo hiệu năng thay vì phỏng"; visual only, carries no data.

Một vùng scissor hẹp chủ yếu trả lời câu hỏi về giới hạn vùng pixel, không tự chứng minh shader hay hình học ngoài vùng đã được bỏ từ đầu pipeline. Tối ưu hóa chỉ có ý nghĩa nếu phép đo xác nhận nút thắt phù hợp. Để đổi chủ đề từ kỹ thuật đồ họa sang thể thao, người đọc có thể <a href="https://www.klive68.com/">Khám phá các trận đấu quốc tế hôm nay cùng KLIVE</a>; trang này không cung cấp tài liệu Direct3D.

Nguồn tham khảo

  1. Microsoft Learn — Rasterizer stage

Câu hỏi thường gặp

Viewport transform có giống scissor test không?

Không. Viewport transform ánh xạ tọa độ vào vùng hiển thị; scissor test giới hạn vùng pixel được giữ theo hình chữ nhật scissor.

Scissor nhỏ hơn có luôn làm GPU nhanh hơn không?

Không thể kết luận như vậy. Mức ảnh hưởng phụ thuộc pipeline và tải công việc; cần đo trong cùng điều kiện và chỉ thay đổi một biến.

Scissor test có loại bỏ hình học trước khi rasterize không?

Không nên hiểu như vậy. Đây là giới hạn theo vùng pixel; nó không đồng nghĩa với việc hình học đã bị loại khỏi mọi bước trước đó.

Stop guessing. Start measuring.

Every tune developed and validated on our in-house Dynapack — gains you can verify on the screen and feel on the road.

Book Your Dyno Session →