Đây có phải là cách chính xác để thực hiện Luật của Charlie?


11

Khi tôi thực hiện luật của Charlie (sự hấp thụ màu theo khoảng cách thông qua một vật thể), vì một số lý do, nó không bao giờ trông rất tốt.

Khi tôi có màu phía sau đối tượng, tôi tính toán màu được điều chỉnh như thế này:

const vec3 c_absorb = vec3(0.2,1.8,1.8);
vec3 absorb = exp(-c_absorb * (distanceInObject));
behindColor *= absorb;

Điều đó sẽ cho tôi một cái gì đó trông như thế này (lưu ý một chút khúc xạ được áp dụng): nhập mô tả hình ảnh ở đây

Và đây là không khúc xạ: nhập mô tả hình ảnh ở đây

Lưu ý rằng điều này được thực hiện như một đồ chơi shader ở đây .

Điều đó đáp ứng mô tả về những gì luật pháp của Bobby thực hiện, nhưng nó trông không được tốt lắm, không phải khi so sánh với những bức ảnh như thế này: nhập mô tả hình ảnh ở đây

Nổi bật đặc biệt sang một bên, tôi đang cố gắng tìm ra sự khác biệt. Có thể chỉ là hình học của tôi quá đơn giản để thực sự thể hiện nó rất tốt? Hay tôi đang thực hiện nó không đúng?


2
Bạn đang so sánh một khối với một lưới phức tạp hơn tuy nhiên. Tại sao không lặp lại kịch bản tương tự? Mô hình Susan rất dễ để có được.
Bart

Thật không dễ dàng trong việc thực hiện shadertoy! (:
Alan Wolfe

2
Bạn có vẻ chính xác với tôi: Hãy minh bạch hơn khi nó tiếp cận các cạnh. Nếu bạn có thể thực hiện đầy đủ Suzanne, một quả cầu ít nhất nên đưa ra một xấp xỉ tốt hơn về diện mạo trong bức tranh khác.
yuriks

1
Tôi không thể tách khúc xạ ra khỏi sự suy giảm. Bạn có thể kết xuất khối với IOR = 1.0 không?
imallett

1
@AlanWolfe Kết xuất IOR của bạn = 1 trông giống hệt như tôi mong đợi, và tôi đã lướt qua shadertoy impl và nó có vẻ tốt.
imallett

Câu trả lời:


12

Hình ảnh của bạn chắc chắn trông không chính xác và có vẻ như bạn không tính toán chính xác đường đi bên trong của các tia sáng khi chúng truyền qua lưới của bạn. Từ vẻ bề ngoài của nó, tôi sẽ nói rằng bạn đang tính toán khoảng cách giữa điểm mà tia nhìn đầu tiên đi vào khối lập phương và nơi nó chạm vào bức tường bên trong và sử dụng nó làm khoảng cách hấp thụ của bạn. Điều này về cơ bản giả định rằng ánh sáng sẽ luôn thoát ra khỏi kính ngay lần đầu tiên chạm vào tường, đây là một giả định kém.

Trong thực tế, khi ánh sáng đi vào kính từ không khí, nó thường không thoát ra khỏi kính ngay lập tức. Điều này là do khi ánh sáng chiếu vào giao diện kính / không khí, một hiện tượng được gọi là phản xạ nội toàn phần (TIR) ​​có thể xảy ra. TIR xảy ra khi ánh sáng truyền từ môi trường có chỉ số khúc xạ (IOR) cao hơn sang IOR có IOR thấp hơn, đó chính xác là điều xảy ra trong trường hợp ánh sáng chiếu vào thành trong của vật thể thủy tinh. Hình ảnh này từ Wikipedia là một minh chứng trực quan tốt về những gì nó trông như thế nào khi nó xảy ra:

tổng phản ánh nội bộ

Nói một cách cơ bản, điều đó có nghĩa là nếu ánh sáng chiếu vào một góc nông, ánh sáng sẽ phản xạ hoàn toàn khỏi phần bên trong của môi trường. Để giải thích cho điều này, bạn cần đánh giá các phương trình Fresnelmỗi khi tia sáng của bạn chạm vào giao diện kính / không khí (AKA bề mặt bên trong của lưới của bạn). Các phương trình Fresnel sẽ cho bạn biết tỷ lệ ánh sáng phản xạ với lượng ánh sáng khúc xạ, trong khi sẽ là 1 trong trường hợp TIR. Sau đó, bạn có thể tính toán các hướng ánh sáng phản xạ và khúc xạ thích hợp và tiếp tục theo dõi đường đi của ánh sáng qua phương tiện hoặc bên ngoài nó. Nếu bạn giả sử một lưới lồi đơn giản với hệ số tán xạ đồng đều, thì khoảng cách sử dụng cho định luật của Charlie sẽ là tổng của tất cả các độ dài đường dẫn bên trong trước khi thoát khỏi môi trường. Đây là hình khối trông như thế nào với các hệ số tán xạ của bạn và IOR là 1.526 (thủy tinh vôi soda), được hiển thị bằng cách sử dụng công cụ theo dõi đường dẫn của riêng tôi, cho cả phản xạ và khúc xạ bên trong và bên ngoài:

khối kính đường dẫn

Cuối cùng, sự phản xạ và khúc xạ bên trong là một phần chính của những gì làm cho kính trông giống như thủy tinh. Các xấp xỉ đơn giản thực sự không cắt nó, như bạn đã tìm ra. Thậm chí còn tệ hơn nếu bạn thêm nhiều mắt lưới và / hoặc lưới không lồi, vì bạn không chỉ phải tính đến các phản xạ bên trong mà còn phải tính đến các tia rời khỏi môi trường và đi vào một điểm khác.


1
Here is what a cube looks like (...) using my own path tracer. Bạn có tình cờ mở nó bằng bất cứ cơ hội nào không?
lau

2
Không, chưa. Tôi đã lên kế hoạch hoàn thiện và phát hành biến thể đặc biệt này cùng với một bài đăng trên blog về kết xuất kính, nhưng nó đã tồn đọng trong một thời gian.
MJP
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.