Khử răng cưa / Lọc trong Truy tìm tia


20

Trong theo dõi tia / theo dõi đường đi, một trong những cách đơn giản nhất để chống bí danh hình ảnh là thay thế các giá trị pixel và lấy trung bình các kết quả. I E. thay vì chụp mọi mẫu thông qua trung tâm của pixel, bạn bù lại một số lượng mẫu.

Khi tìm kiếm trên internet, tôi đã tìm thấy hai phương pháp khác nhau để làm điều này:

  1. Tạo mẫu theo cách bạn muốn và cân kết quả với bộ lọc
    • Một ví dụ là PBRT
  2. Tạo các mẫu có phân phối bằng hình dạng của bộ lọc


Tạo và cân

Quy trình cơ bản là:

  1. Tạo các mẫu theo cách bạn muốn (ngẫu nhiên, phân tầng, trình tự sai lệch thấp, v.v.)
  2. Bù đắp tia camera bằng hai mẫu (x và y)
  3. Kết xuất cảnh với tia
  4. Tính trọng lượng bằng cách sử dụng chức năng lọc và khoảng cách của mẫu trong tham chiếu đến tâm pixel. Ví dụ: Bộ lọc hộp, Bộ lọc lều, Bộ lọc Gaussian, v.v.) Hình dạng bộ lọc
  5. Áp dụng trọng lượng cho màu từ kết xuất


Tạo theo hình dạng của bộ lọc

Tiền đề cơ bản là sử dụng Inverse Transform Sampling để tạo các mẫu được phân phối theo hình dạng của bộ lọc. Ví dụ, biểu đồ của một mẫu được phân phối theo hình dạng của Gaussian sẽ là:
Biểu đồ Gaussian

Điều này có thể được thực hiện chính xác hoặc bằng cách ghép hàm vào pdf / cdf riêng biệt. smallpt sử dụng cdf nghịch đảo chính xác của bộ lọc lều. Ví dụ về phương pháp binning có thể được tìm thấy ở đây


Câu hỏi

Những ưu và nhược điểm của từng phương pháp là gì? Và tại sao bạn sẽ sử dụng cái này hơn cái kia? Tôi có thể nghĩ về một vài điều:

Tạo và Cân dường như là mạnh nhất, cho phép mọi sự kết hợp của bất kỳ phương pháp lấy mẫu nào với bất kỳ bộ lọc nào. Tuy nhiên, nó yêu cầu bạn theo dõi các trọng số trong ImageBuffer và sau đó thực hiện giải quyết cuối cùng.

Tạo trong Hình dạng của Bộ lọc chỉ có thể hỗ trợ các hình dạng bộ lọc tích cực (ví dụ: không có Mitchell, Catmull Rom hoặc Lanczos), vì bạn không thể có pdf âm. Nhưng, như đã đề cập ở trên, việc thực hiện sẽ dễ dàng hơn vì bạn không cần theo dõi bất kỳ trọng lượng nào.

Mặc dù, cuối cùng, tôi đoán bạn có thể nghĩ phương pháp 2 là đơn giản hóa phương thức 1, vì về cơ bản, nó sử dụng trọng lượng của Bộ lọc Hộp ẩn.


Chỉ cần suy nghĩ lớn ... Bạn có thể mô hình hóa phần âm của bộ lọc riêng biệt để tạo hai bộ mẫu, một bộ được coi là dương và bộ kia là âm? Điều này có cho phép các bộ lọc tùy ý cho cách tiếp cận thứ hai của bạn (tạo theo hình dạng của bộ lọc) không?
trichoplax

Có lẽ? Hãy nói chuyện với nó một chút
RichieSams

1
Ok, nếu bạn theo dõi các số không của hàm, bạn có thể abs () đầu ra vào pdf. Sau đó, khi lấy mẫu, bạn có thể kiểm tra xem bạn có âm tính không. Mã mẫu tại đây: gist.github.com/RichieSams/aa7e71a0fb4720c8cb41
RichieSams

Câu trả lời:


9

Có một bài viết tuyệt vời từ năm 2006 về chủ đề này, Bộ lọc lấy mẫu quan trọng . Họ đề xuất phương pháp 2 của bạn, nghiên cứu các tính chất và nói chung có lợi cho nó. Họ cho rằng phương pháp này cho kết quả hiển thị mượt mà hơn vì nó cân nhắc tất cả các mẫu đóng góp cho một pixel bằng nhau, do đó làm giảm phương sai trong các giá trị pixel cuối cùng. Điều này có ý nghĩa, vì đó là một câu châm ngôn chung trong kết xuất Monte Carlo rằng việc lấy mẫu quan trọng sẽ cho phương sai thấp hơn so với các mẫu có trọng số.

Phương pháp 2 cũng có ưu điểm là song song dễ dàng hơn một chút vì các tính toán của từng pixel độc lập với tất cả các pixel khác, trong khi ở phương pháp 1, các kết quả mẫu được chia sẻ qua các pixel lân cận (và do đó phải được đồng bộ hóa / truyền đạt bằng cách nào đó khi các pixel được song song nhiều bộ xử lý). Vì lý do tương tự, việc lấy mẫu thích ứng sẽ dễ dàng hơn (nhiều mẫu hơn ở các khu vực có độ sai lệch cao của hình ảnh) với phương pháp 2 so với phương pháp 1.

Trong bài báo, họ cũng đã thử nghiệm bộ lọc Mitchell, lấy mẫu từ abs () của bộ lọc và sau đó tính trọng số của từng mẫu với +1 hoặc 1, như @trichoplax đề xuất. Nhưng điều này cuối cùng thực sự làm tăng phương sai và tệ hơn phương pháp 1, vì vậy họ kết luận rằng phương pháp 2 chỉ có thể sử dụng cho các bộ lọc tích cực.

Điều đó đang được nói, kết quả từ bài báo này có thể không được áp dụng phổ biến, và nó có thể phụ thuộc vào cảnh nào đó phương pháp lấy mẫu nào tốt hơn. Tôi đã viết một bài blog điều tra câu hỏi nàyđộc lập vào năm 2014, sử dụng "chức năng hình ảnh" tổng hợp thay vì hiển thị đầy đủ và tìm thấy phương pháp 1 để mang lại kết quả trực quan hơn do làm mịn các cạnh có độ tương phản cao độc đáo hơn. Benedikt Bitterli cũng bình luận về bài đăng đó báo cáo vấn đề tương tự với trình kết xuất của mình (nhiễu tần số cao quá mức xung quanh các nguồn sáng khi sử dụng phương pháp 2). Ngoài ra, tôi thấy sự khác biệt chính giữa các phương thức là tần số của nhiễu kết quả: phương pháp 2 cho nhiễu có tần số cao hơn, "cỡ pixel", trong khi phương thức 1 cho nhiễu "hạt" có độ rộng 2-3 pixel, nhưng biên độ của tiếng ồn là tương tự cho cả hai, vì vậy loại tiếng ồn nào trông kém hơn có lẽ là vấn đề sở thích cá nhân.


Cảm ơn! Đây là những tài nguyên tuyệt vời. Vậy, cuối cùng, có 3 phương pháp nào? 1. Tạo và Cân bằng cách ghép hình 2. Tạo và Cân mà không cần ghép 3. Tạo trong Hình dạng của Bộ lọc
RichieSams

Bạn có biết bất kỳ bài báo, blog, v.v ... khám phá cách song song Tạo và Trọng lượng với tính năng ghép hình không? Ngoài đỉnh đầu của tôi, bạn có thể có một mutex trên mỗi ô hoặc tạo từng pixel nguyên tử.
RichieSams

2
@RichieSams Tôi không biết lý do tại sao bạn sử dụng "tạo và cân mà không cần bắn", thực sự là dường như nó sẽ tệ hơn trong mọi trường hợp so với lấy mẫu quan trọng của bộ lọc. Tôi đã giả định rằng "tạo và cân" ngụ ý việc ghép hình. Đối với việc song song hóa việc ghép hình, ra khỏi đỉnh đầu của tôi, một cách sẽ là chia hình ảnh thành các ô, nhưng cung cấp cho mỗi ô một đường viền 2‒3 pixel để bắt các biểu tượng đi qua cạnh gạch. Sau đó, trong một lần vượt qua cuối cùng, kết hợp bổ sung các ô viền với nhau thành hình ảnh cuối cùng.
Nathan Reed
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.