Kiểm thử White Furnace
(lousodrome.net)- Trong ánh sáng môi trường đồng đều, một vật thể phản xạ 100% không nên phân biệt được với nền; đặc tính này có thể dùng để nhanh chóng kiểm chứng tính nhất quán vật lý của renderer
- Dù là vật liệu khuếch tán, gương hay ở giữa hai loại đó, nếu phản xạ hoàn toàn và được chiếu sáng đồng đều, nó phải trông giống hệt môi trường, như thể biến mất
- Tuyết mới có thể có albedo lên tới 90–98%, nên khi gặp trời âm u hoặc sương mù, có thể xảy ra hiện tượng whiteout khiến bầu trời và tuyết không thể phân biệt
- Kiểm thử này xác nhận BRDF có làm mất hoặc tạo thêm năng lượng hay không; trong môi trường xám, năng lượng phản xạ quá mức sẽ hiện ra sáng hơn, giúp dễ phát hiện lỗi
- BRDF Lambertian trắng tinh đơn giản và có bảo toàn năng lượng rõ ràng, nên hữu ích như một kiểm tra cơ bản để lộ các lỗi tích phân như thiếu phân bố lấy mẫu, trọng số, PDF, π hoặc hệ số 2
Vì sao vật thể phải biến mất dưới ánh sáng đồng đều
- Khi một vật thể phản xạ 100% được chiếu sáng bởi môi trường đồng đều, vật thể đó không nên phân biệt được với nền
- Đặc tính này không phụ thuộc vào việc vật thể là khuếch tán, phản xạ như gương, hay là vật liệu nằm giữa hai loại đó
- Nếu vật thể không thấy được trong kết quả render, đó là tín hiệu cho thấy kết quả khớp với kỳ vọng toán học
Trường hợp tương tự trong thực tế: whiteout
- Tuyết mới có albedo cao tới 90–98%, gần như trắng hoàn toàn
- Khi trời âm u hoặc có sương mù, có thể xảy ra trạng thái whiteout, khiến tuyết và bầu trời không phân biệt được
- Khi đó mọi hướng trông như một màu trắng đồng đều, khiến ngay cả độ dốc ngay trước mắt cũng khó nhận biết bằng mắt
Kiểm tra bảo toàn năng lượng của BRDF
- Kiểm thử White Furnace thường được dùng để xác nhận BRDF có thỏa mãn bảo toàn năng lượng hay không
- Cốt lõi là kiểm tra xem năng lượng có bị mất đi hay được tạo thêm trong quá trình phản xạ hay không
- Ví dụ, có thể kiểm tra các vấn đề như vật liệu trông tối hơn khi độ nhám (roughness) tăng, hoặc các tình huống mà phản xạ qua lại trở nên đáng kể đến mức không thể bỏ qua
- Không chỉ môi trường trắng, môi trường xám cũng hữu ích
- Nếu năng lượng phản xạ quá mức, nó sẽ sáng hơn xung quanh và làm lộ lỗi
Cách kiểm tra phần triển khai tích phân của renderer
- Kiểm thử White Furnace hiệu quả không chỉ với bản thân BRDF mà còn khi kiểm tra phần tích phân của renderer
- BRDF Lambertian với albedo 100% bảo toàn năng lượng hoàn toàn và triển khai đơn giản, nên rất phù hợp để làm lộ lỗi triển khai renderer
- Có nhiều điểm có thể phát sinh vấn đề
- Phân bố lấy mẫu
- Trọng số mẫu
- Tính toán PDF
- Thiếu các hệ số như π hoặc 2
- Những lỗi như vậy khó tìm vì ảnh kết quả vẫn có thể trông khá hợp lý
Ví dụ thất bại và cách dùng để debug
- Khi viết path tracer hoặc biến thể của nó, tạo pre-convolved environment map, hoặc thử các phân bố lấy mẫu khác, cách hữu ích là trước tiên cho BRDF Lambertian trắng tinh vượt qua kiểm thử White Furnace
- Sau khi vượt qua bước này, có thể tin tưởng ở mức nào đó vào phần triển khai rồi mới kiểm thử bản thân BRDF
- Sau bình luận trên Hacker News, ví dụ ShaderToy đã được thêm macro
SIMULATE_INCORRECT_INTEGRATIONđể có thể thấy trường hợp kiểm thử thất bại - Macro này mô phỏng lỗi tích phân sai như quên rằng tích phân trên bán cầu tương ứng với 2π, hoặc không xét đến phân bố lấy mẫu
- Khi lỗi được bật, quả cầu không phản xạ đúng lượng năng lượng và trở nên nhìn thấy được trên màn hình
1 bình luận
Ý kiến trên Hacker News
Gần đây tôi đã triển khai trình kết xuất dựa trên vật lý (PBR) theo tutorial PBR của learnopengl, nhưng không vượt qua được white furnace test.
Nhờ đó tôi nhận ra mình không hiểu rõ lắm phần toán mà mình đã triển khai, và đúng như tác giả nói, kiểu tùy tiện nhân thêm π hay 2 không làm mọi thứ khớp được.
Cũng có các mô hình xét đến phản xạ qua lại giữa các vi diện lý thuyết tạo nên phân bố pháp tuyến dùng làm BRDF, và chúng tốt hơn, nhưng ngay cả vậy cũng khó chắc liệu chúng có vượt qua nguyên vẹn bài kiểm tra này hay không.
Trên thực tế, hầu hết những thứ được dùng rộng rãi đều mất năng lượng, và đôi khi người ta còn đặt thêm bảng tra cứu lên trên BRDF để hiệu chỉnh điều đó.
Thật thú vị khi bài này lên phần đầu HN. Thực ra có hai loại furnace test, và loại còn lại là bài kiểm tra trong điều kiện phát xạ 0.5 và albedo 0.5, kết quả phải ra 1.0 nếu bỏ qua sai số pixel do nhiễu.
Từ lâu trước đây, trong https://graphics.stanford.edu/~boulos/papers/brdftog.pdf đã có một nỗ lực đánh đổi bảo toàn năng lượng và khả năng tái lập dữ liệu, nhưng cái giá là từ bỏ tính tương hỗ.
Cuối cùng thì không ai thật sự quá bận tâm đến việc tự động khớp dữ liệu vật liệu từ BRDF; và dù có quan tâm, họ vẫn chuộng các BSDF đối xứng và đủ bảo toàn năng lượng hơn.
Các nghiên cứu sau đó phần lớn cũng cải thiện theo hướng đó, đặc biệt vì nếu phá vỡ tính đối xứng thì các kỹ thuật như bidirectional path tracing trở nên khá kỳ lạ.
Tôi thắc mắc tại sao tên bài kiểm tra lại có furnace. Tôi hiểu khái niệm tổng thể, nhưng cái tên nghe khá tùy ý; không biết nó có cơ sở gì không.
Ở đây khái niệm cũng tương tự: vật thể bị nhốt trong một khoang có phổ phát xạ đồng nhất. Chỉ khác là trong trường hợp này không phải vật đen mà là màu trắng.
Tình cờ vài ngày trước YouTube đề xuất cho tôi một video về chủ đề này, liên quan đến nội dung của bản phát hành Blender 4.0 sắp tới.
BSDF sẽ có thêm hàm Multiscatter GGX mới, đi sâu hơn nhiều và cho thấy nhiều ví dụ.
https://www.youtube.com/watch?v=v6qXbV_Q7z4
Tôi không biết ShaderToy được nhúng vốn phải trông như thế nào. Tôi bấm phát và chờ nhưng hơn 1 phút vẫn không có gì xảy ra.
Chỉ cần vài ảnh chụp màn hình của các bài kiểm tra thất bại thôi cũng sẽ làm bài viết tốt hơn nhiều.
Sau đó quả cầu đỏ và xanh dương xuất hiện lại, và trên quả cầu trung tâm có thứ gì đó giống phản xạ, nhưng quả cầu trung tâm “hòa tan” vào nền nên khó nhận ra đó là một quả cầu.