Chọn phản xạ hoặc khúc xạ trong theo dõi đường dẫn


14

Tôi đang cố gắng thực hiện khúc xạ và truyền trong đường dẫn của mình và tôi hơi không chắc chắn về cách thực hiện nó. Đầu tiên, một số nền tảng:

Khi ánh sáng chiếu vào một bề mặt, một phần của nó sẽ phản xạ và một phần sẽ bị khúc xạ: nhập mô tả hình ảnh ở đây

Có bao nhiêu ánh sáng phản xạ so với khúc xạ được đưa ra bởi các phương trình Fresnel nhập mô tả hình ảnh ở đây

Trong một bộ dò tia đệ quy, việc thực hiện đơn giản sẽ là bắn một tia để phản xạ và một tia để khúc xạ, sau đó thực hiện một tổng trọng số bằng cách sử dụng Fresnel.

R=Fresnel()T=1RLo=RLi,reflection+TLi,refraction

Tuy nhiên, trong theo dõi đường dẫn, chúng tôi chỉ chọn một đường dẫn. Đây là câu hỏi của tôi:

  • Làm cách nào để chọn phản xạ hoặc khúc xạ theo cách không thiên vị

Dự đoán đầu tiên của tôi sẽ là chọn ngẫu nhiên dựa trên Fresnel. Aka:

float p = randf();
float fresnel = Fresnel();
if (p <= fresnel) {
    // Reflect
} else {
    // Refract
}

Điều này sẽ đúng? Hay tôi cần phải có một số loại yếu tố điều chỉnh? Vì tôi không đi cả hai con đường.


roulette Nga
v.oddou

Câu trả lời:


6

TL; DR

Vâng, bạn có thể làm điều đó như thế, bạn chỉ cần chia kết quả cho xác suất chọn hướng.

Trả lời đầy đủ

Chủ đề lấy mẫu trong các bộ dò đường dẫn cho phép các vật liệu có cả phản xạ và khúc xạ thực sự phức tạp hơn một chút.

Trước tiên hãy bắt đầu với một số nền tảng. Nếu bạn cho phép BSDF - không chỉ BRDF - trong trình theo dõi đường dẫn của bạn, bạn phải tích hợp trên toàn bộ khối cầu thay vì chỉ bán cầu dương. Các mẫu Monte Carlo có thể được tạo ra bằng nhiều chiến lược khác nhau: để chiếu sáng trực tiếp, bạn có thể sử dụng BSDF và lấy mẫu ánh sáng, để chiếu sáng gián tiếp, chiến lược có ý nghĩa duy nhất thường là lấy mẫu BSDF. Bản thân các chiến lược lấy mẫu thường chứa quyết định lấy mẫu bán cầu nào (ví dụ: phản xạ hay khúc xạ được tính toán).

Trong phiên bản đơn giản nhất, việc lấy mẫu ánh sáng thường không quan tâm nhiều đến sự phản xạ hoặc khúc xạ. Nó lấy mẫu các nguồn sáng hoặc bản đồ môi trường (nếu có) đối với các thuộc tính ánh sáng. Bạn có thể cải thiện việc lấy mẫu bản đồ môi trường bằng cách chỉ chọn bán cầu trong đó vật liệu có đóng góp khác không, nhưng phần còn lại của các thuộc tính vật liệu thường bị bỏ qua. Lưu ý rằng đối với vật liệu Fresnel mịn và lý tưởng, việc lấy mẫu ánh sáng không hoạt động.

Đối với lấy mẫu BSDF, tình huống thú vị hơn nhiều. Trường hợp bạn mô tả giao dịch với một bề mặt Fresnel lý tưởng, trong đó chỉ có hai hướng đóng góp (vì Fresnel BSDF trên thực tế chỉ là tổng của hai hàm delta). Bạn có thể dễ dàng chia tích phân thành tổng của hai phần - một phần phản xạ và một phần để khúc xạ. Vì, như bạn đã đề cập, chúng tôi không muốn đi theo cả hai hướng trong một đường dẫn, chúng tôi phải chọn một hướng. Điều này có nghĩa là chúng tôi muốn ước tính tổng số bằng cách chỉ chọn một trong số chúng. Điều này có thể được thực hiện bằng cách ước tính Monte Carlo rời rạc: chọn một trong số các phụ lục một cách ngẫu nhiên và chia nó cho xác suất được chọn. Trong trường hợp lý tưởng, bạn muốn có xác suất lấy mẫu tỷ lệ với các phần bổ sung, nhưng vì chúng tôi không biết giá trị của chúng (chúng tôi sẽ không phải ước tính tổng nếu chúng tôi biết chúng), chúng tôi chỉ ước tính chúng bằng cách bỏ qua một số yếu tố. Trong trường hợp này, chúng tôi bỏ qua lượng ánh sáng tới và chỉ sử dụng hệ số phản xạ / độ truyền Fresnel như ước tính của chúng tôi.

Do đó, thói quen lấy mẫu BSDF cho trường hợp bề mặt Fresnel mịn là chọn một trong các hướng ngẫu nhiên với xác suất tỷ lệ thuận với độ phản xạ Fresnel và, tại một số điểm, chia kết quả cho hướng đó cho xác suất chọn hướng. Công cụ ước tính sẽ trông như sau:

Li(ωi)F(θi)P(ωi)=Li(ωi)F(θi)F(θi)=Li(ωi)

ωi=(ϕi,θi)Li(ωi)F(θi)P(ωi)F(θi)

Trong trường hợp các mô hình BSDF phức tạp hơn như các mô hình dựa trên lý thuyết microfacet, việc lấy mẫu hơi phức tạp hơn một chút, nhưng ý tưởng chia toàn bộ tích phân thành một tổng hợp hữu hạn và sử dụng Monte Carlo rời rạc sau đó cũng có thể được áp dụng.


1
Điều này thật thú vị nhưng tôi bối rối bởi một điểm. Bạn có thể làm rõ ý nghĩa của việc "chia kết quả cho hướng đó theo xác suất chọn hướng" không? Nếu đó không phải là lựa chọn nhị phân mà là hướng được chọn từ phân phối liên tục, thì xác suất sẽ bằng không?
trichoplax

1
@trichoplax: Có, nhưng trong đoạn đó tôi đã mô tả kỹ thuật lấy mẫu chỉ dành cho một Fresnel BSDF (điện môi) - bề mặt nhẵn lý tưởng, là tổng của hai hàm delta Dirac. Trong trường hợp như vậy, bạn đang chọn một trong các hướng với xác suất rời rạc. Trong trường hợp BSDF không đồng bằng (hữu hạn), bạn tạo hướng theo hàm mật độ xác suất. Thật không may, các trường hợp delta và non-delta phải được xử lý riêng, điều này làm cho mã hơi lộn xộn. Thông tin chi tiết về lấy mẫu BSDF microfacet có thể được tìm thấy, ví dụ như trong Walter et. al. [2007] giấy.
ivokabel

2
@RichieSams: Walter et. al. [2007] về cơ bản vẫn là công nghệ tiên tiến cho các bề mặt gồ ghề điện môi, nhưng để làm cho nó hoạt động tốt, bạn cần một mẫu tốt được xuất bản gần đây bởi Heitz và D'Eon trên tờ báo 2014 "BSDF dựa trên mẫu lấy mẫu micropet sử dụng phân phối các chỉ tiêu hữu hình ". Và lưu ý rằng đó là một mô hình tán xạ đơn mà bỏ qua các phản xạ giữa các microfacet làm cho nó tối rõ ràng cho các giá trị độ nhám cao hơn. Xem câu hỏi của tôi "Bồi thường tổn thất năng lượng trong các mô hình BSDF microfacet tán xạ đơn" để biết thêm chi tiết.
ivokabel

5
Chỉ muốn chỉ ra rằng nếu bạn chọn xác suất = fresnel () làm câu hỏi được đề xuất, thì khi bạn chia cho xác suất, bạn hủy bỏ hệ số Fresnel thường được nhân lên. Vì vậy (trong trường hợp hai Dirac rời rạc ) bạn kết thúc với sự đóng góp của tia không bao gồm bất kỳ yếu tố Fresnel nào cả. Đó là lý thuyết lấy mẫu quan trọng tiêu chuẩn, nhưng tôi nghĩ tôi đã chỉ ra rằng đó là một vấn đề có thể gây nhầm lẫn.
Nathan Reed

2
@Nathan, tôi kết hợp thông báo của bạn vào câu trả lời.
ivokabel
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.