Ngày xửa ngày xưa, việc xóa bộ đệm màu và độ sâu thực sự mất thời gian. Làm rõ ràng có nghĩa là card đồ họa sẽ phải đi từng pixel của bộ đệm khung và viết một giá trị cho nó.
Bởi vì điều này, các nhà phát triển trò chơi nhận thấy rằng sẽ hiệu quả hơn khi chỉ cần giả định rằng mọi pixel sẽ được hiển thị lại. Họ đã phát triển nhiều kỹ thuật để làm việc này.
Bộ đệm màu là dễ nhất để bỏ qua. Ít dễ dàng hơn là bộ đệm sâu, bởi vì nó sẽ bị ô nhiễm với dữ liệu cũ. Vì vậy, những gì họ đã làm là đơn giản.
Trên khung 0, chúng sẽ hiển thị với một glDepthRange
(hoặc D3D tương đương) của (0, 0,5), và họ sẽ sử dụng một glDepthFunc
sốGL_LESS
(hoặc GL_LEQUAL
). Điều này có nghĩa là giá trị độ sâu xa nhất bạn từng có trong bộ đệm độ sâu là 0,5. Vì vậy, giá trị lớn nhất trong bộ đệm độ sâu ở cuối khung 0 là 0,5 (giả sử bạn đã viết cho mọi pixel).
Trên khung 1, họ sẽ thay đổi phạm vi độ sâu thành (1, 0,5). Lưu ý rằng trong trường hợp này, giá trị độ sâu gần lớn hơn độ sâu xa. Nhưng họ cũng sẽ thay đổi độ sâu func thành GL_GREATER
(hoặc GL_GEQUAL
), đảo ngược ý nghĩa của kiểm tra độ sâu. Vì giá trị lớn nhất trong bộ đệm sâu là 0,5, mọi thứ bạn viết sẽ có giá trị lớn hơn giá trị này. Vì kiểm tra độ sâu đã được đảo ngược, điều này có nghĩa là mọi thứ được viết trên khung 0 giờ đây sẽ xa hơn bất kỳ thứ gì có thể được viết trên khung 1. Ở cuối khung 1, nhỏ nhất giá trị trong bộ đệm độ sâu hiện là 0,5.
Và sau đó họ lặp lại.
Trên bất kỳ phần cứng nào được sản xuất từ khoảng năm 2003, đây không còn là một sự tối ưu hóa nữa. Thật vậy, nó là một tối ưu hóa tiêu cực . Xóa bộ đệm sâu thực sự làm cho phần cứng nhanh hơn . Không, thực sự.
Về cơ bản, những gì xảy ra là việc xóa bộ đệm không thực sự viết bất cứ điều gì. Họ lưu trữ một số bit trong bộ nhớ cache của GPU cho phép hệ thống biết màu sắc / độ sâu mà chúng đã bị xóa. Khi hệ thống cố ghi vào dòng bộ đệm của bộ đệm khung, bạn không cần phải đọc những gì ở đó, vì nó đã biết rằng đó là một trường trống có giá trị màu / độ sâu rõ ràng. Nếu bạn cố gắng pha trộn với những gì ở đó hoặc làm một bài kiểm tra chuyên sâu, một lần nữa, không cần phải đọc: nó biết giá trị nào để pha trộn / kiểm tra với / chống lại.
Vì vậy, mỗi lần đọc / sửa đổi / ghi đầu tiên bạn thực hiện trên mỗi dòng bộ đệm sau khi xóa về cơ bản là ghi. Nó miễn phí .
Thêm vào đó, có một bộ đệm có chiều sâu lởm chởm có thể hoạt động chống lại Hyper-Z / HVELial-Z / bất kỳ tối ưu hóa loại bỏ Z nào trong phần cứng. Vâng, cảnh của bạn sẽ chống lại những người cuối cùng khi bạn thêm chi tiết. Nhưng nếu bộ đệm độ sâu của bạn bị lởm chởm từ các kết xuất trước đó, ngay cả khi các đối tượng nền đó ở dưới nền, nó có thể ảnh hưởng đến hiệu quả của các kỹ thuật loại bỏ Z. Và điều đó sẽ không giúp hiệu suất.
Vì vậy, bạn không bao giờ nên làm kỹ thuật đảo ngược độ sâu này trong các trò chơi hiện đại.
Lưu ý: Jari tạo ra một điểm tốt trên các kiến trúc kết xuất dựa trên gạch (như được tìm thấy trong hầu hết các nền tảng di động). Không xóa độ sâu có thể làm cho mọi thứ khó chịu ở đó quá.