Đề can hoãn lại vấn đề bình thường


11

Tôi đã làm việc trên một hệ thống decal hoãn lại. Cho đến nay tôi đã hoàn thành phần chiếu, nghĩa là tôi có thể nhấp vào một cái gì đó trong cảnh và nó sẽ chiếu một miếng decal lên bề mặt của vật thể.

Có một vài điều khác tôi muốn thêm vào hệ thống này: cắt bình thường và đề can ánh xạ bình thường. Cắt bình thường là khi tôi loại bỏ các mảnh được trải dài trên một góc nhọn. Nhìn thấy ở đây . Một cách để giải quyết vấn đề này là loại bỏ các mảnh có sự khác biệt lớn giữa bình thường trong G-Buffer và decal thông thường. Điều này sẽ yêu cầu đọc kết cấu bình thường của G-buffer.

Để thực hiện ánh xạ bình thường cho decal, tôi cần pha trộn bình thường của decal (từ bản đồ bình thường) với bình thường của G-buffer. Yêu cầu ghi vào kết cấu bình thường của G-buffer.

Tôi hy vọng rõ ràng rằng để hỗ trợ hai tính năng này, tôi cần đọc và ghi vào kết cấu bình thường trong cùng một shader pass. Đáng buồn thay, đây là hành vi không xác định, vì vậy tôi tự hỏi nếu có một số cách khác để thực hiện các tính năng này.

Câu trả lời:


1

Bạn sử dụng hệ thống kết xuất nào? Thông tin sau phải hợp lệ cho tất cả các hệ thống kết xuất, nhưng trong các phiên bản OpenGL của DX11 trở lên, có thể có một giải pháp tốt hơn bằng cách sử dụng UAV.

-

Bạn sẽ phải sao chép bộ đệm bình thường trước mỗi lần vượt qua. Miễn là bạn biết rằng đề can không sửa đổi các đoạn không gian màn hình giống nhau, bạn không phải cập nhật bản sao.

Bạn cũng có thể kết xuất tất cả các đề can của mình thành các bộ đệm riêng biệt và chỉ thực hiện một pha trộn vào bộ đệm thông thường của bạn bằng cách sử dụng một bản sao bộ đệm bình thường duy nhất. Điều này sẽ mở rộng quy mô tốt hơn nhiều với số lượng đề can bạn có.

Miễn là bạn không viết bộ đệm thông thường, ví dụ: chỉ thực hiện cắt bình thường, như bạn gọi nó, bạn chỉ có thể lấy mẫu bộ đệm thông thường ban đầu nhưng bạn không thể liên kết nó làm mục tiêu kết xuất.

Trong DX9, tôi thấy rằng việc đọc và ghi vào cùng một kết cấu dẫn đến kết quả đầu ra dự kiến ​​miễn là bạn chỉ sử dụng bộ lọc điểm gần nhất và không bao giờ đọc một pixel khác với điểm bạn hiện đang viết, NHƯNG! vì đây là hành vi không xác định, có thể có trình điều khiển và card đồ họa không hoạt động theo cách này. DX10 sẽ ngăn bạn thực hiện điều này bằng cách hủy kết cấu hiện đang bị ràng buộc làm mục tiêu kết xuất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.