Tôi đã triển khai thuật toán Khối lượng lan truyền ánh sáng Cascaded (chưa có bóng gián tiếp) để chiếu sáng toàn cầu khuếch tán theo thời gian thực chi tiết tại đây và đây . Nó hoạt động tốt nhưng tôi vẫn đang cố gắng sửa một vật phẩm cụ thể.
Tóm tắt ngắn
Bạn có thể bỏ qua điều này nếu bạn đã biết thuật toán hoạt động như thế nào.
Thuật toán hoạt động bằng cách lưu trữ thông tin chiếu sáng dưới dạng sóng hài hình cầu trong lưới 3D, trong đó ban đầu dữ liệu trong mỗi ô của lưới xuất phát từ việc hiển thị bản đồ bóng mở rộng ( bản đồ bóng phản chiếu) cũng bao gồm màu sắc và thông tin bình thường, bên cạnh độ sâu. Ý tưởng là về cơ bản tất cả các pixel được nhìn thấy bởi một nguồn sáng là nguyên nhân của lần chiếu sáng gián tiếp đầu tiên, vì vậy bạn lưu trữ thông tin cần thiết bên cạnh bộ đệm độ sâu thông thường bạn sử dụng để ánh xạ bóng và lấy mẫu tất cả dữ liệu để khởi tạo lưới 3D . Thông tin trong lưới 3D sau đó được truyền đi lặp lại bằng cách (cho mỗi lần lặp) truyền thông tin trong một ô tới tất cả 6 hàng xóm trực tiếp của nó (trên, dưới, trái, phải, trên, dưới). Để chiếu sáng cảnh bằng cách sử dụng thông tin trong lưới, bạn áp dụng chế độ toàn màn hình cho cảnh của mình và với mỗi pixel rasterized, bạn có vị trí không gian thế giới của bề mặt rasterized (ví dụ: từ G-Buffers trong bóng mờ bị trì hoãn), vì vậy bạn biết ô nào của lưới mà một pixel nhất định trên màn hình thuộc về.
Điều này hoạt động tốt với hầu hết các phần, đây là hai hình ảnh không có GI mô phỏng và chỉ là một thuật ngữ môi trường được mã hóa cứng, và bên cạnh đó là một hình ảnh với thuật toán LPV. Chú ý phản xạ màu trên bề mặt, chi tiết độ sâu tốt hơn, vv
Vấn đề
Khi tra cứu các ô trong giai đoạn chiếu sáng, phép nội suy tam tuyến (sử dụng bộ lọc kết cấu phần cứng) được sử dụng để nội suy trơn tru dữ liệu giữa trung tâm của ô, các ô lân cận và tọa độ kết cấu được tra cứu thực tế. Về cơ bản, phép nội suy này bắt chước sự lan truyền thông tin chiếu sáng ở trung tâm của một ô đến các pixel cụ thể xung quanh tâm nơi thông tin được tra cứu. Điều này là cần thiết bởi vì nếu không ánh sáng sẽ trông rất thô và xấu. Tuy nhiên, do phép nội suy tam giác không tính đến hướng truyền ánh sáng của thông tin chiếu sáng được mã hóa trong một tế bào (hãy nhớ rằng, trong sóng hài hình cầu), ánh sáng có thể được truyền không chính xác đến pixel nhìn lên. Ví dụ: nếu bức xạ được mã hóa trong ô chỉ lan truyền về phía (1,0,0) ("
Điều này gây ra hiện tượng chảy máu tường không chính xác khi kích thước ô trong lưới lớn so với các bề mặt trong cảnh (điều này là cần thiết vì bạn cần các tế bào lớn để truyền ánh sáng vào cảnh với càng ít lần lặp lan truyền càng tốt). Đây là những gì nó trông giống như:
Như bạn có thể thấy (từ bóng tối ở phía trên bên phải), cảnh được thắp sáng bởi một nguồn sáng định hướng ở đâu đó phía trên cảnh phía trên bên trái. Và vì chỉ có một tế bào ngăn cách bên ngoài tâm nhĩ và bên trong, ánh sáng chảy qua và bức tường bên trái được chiếu sáng không chính xác.
Câu hỏi thực tế
Tác giả đề xuất một hình thức lọc bất đẳng hướng thủ công để khắc phục điều này. Anh ta đưa ra một độ dốc bức xạ (tôi giả sử các hệ số SH được lấy mẫu từ ô hiện tại) theo hướng của bề mặt n bình thường như:
Và tiểu bang
Do đó, bằng cách so sánh đạo hàm hướng rạng rỡ với hướng rạng rỡ thực tế, có thể tính được liệu phân phối rạng rỡ có bắt đầu xa hơn nội suy tam giác của nó đối với điểm này hay không.
Những câu hỏi của tôi):
Trong phương trình, hàm c (x) dường như là các hệ số SH tại điểm (x). Vì vậy, độ dốc bức xạ dường như được tính như một đạo hàm số thông thường khi chênh lệch trọng số của các hệ số SH tại các điểm x - (n / 2) và x + (n / 2). Tuy nhiên, c (x) trong bối cảnh của tôi là gì? Hiện tại tôi đang giả sử rằng c (x) đề cập đến các hệ số được nội suy theo tam tuyến tại vị trí bề mặt (x), nhưng tôi không chắc chắn gì cả, vì tôi không biết làm thế nào để cung cấp cho bạn thêm thông tin về hướng phân phối các hệ số SH.
Và độ dốc đó được sử dụng như thế nào để thay đổi cách chiếu sáng lấy mẫu từ ô được áp dụng cho các bề mặt, chính xác? Tác giả chỉ viết "so sánh đạo hàm hướng rạng rỡ với hướng rạng rỡ thực tế", nhưng điều này khá mơ hồ.
Ông đề cập đến việc sử dụng "sơ đồ khác biệt trung tâm" và tham chiếu các slide này cho sự khác biệt trung tâm của các hệ số SH, và cũng tham khảo bài viết này cho thấy các dẫn xuất của gradient, nhưng ngay bây giờ tôi không thể rút ra bất kỳ kết luận hữu ích nào từ chúng.