Hình cầu sóng hài & thăm dò ánh sáng là gì?


13

Là gì Spherical hài & Ánh sáng dò ? Chúng hữu ích như thế nào trong đồ họa máy tính? Chính xác thì họ làm gì? Tôi đã nghe thấy từ hài hòa hình cầu & Thăm dò ánh sáng ở khắp mọi nơi, từ các bài thuyết trình cho đến các bài đăng trên blog.

Gần đây Matt Pettineo đã đăng một loạt blog gồm 6 phần về họ nhưng tôi vẫn không hiểu chúng là gì.

Có phải là một cách khác để cải thiện ánh sáng xung quanh?

Câu trả lời:


11

Khái niệm cơ bản về sóng hài

Hình cầu hài là một cách để thể hiện chức năng 2D trên bề mặt của hình cầu. Thay vì miền không gian (như cubemap), SH được xác định trong miền tần số với một số thuộc tính và hoạt động thú vị liên quan đến chiếu sáng có thể được thực hiện hiệu quả. Với việc tăng "thứ tự" của SH, bạn có thể biểu thị tần số cao hơn (chi tiết) của các chức năng như được minh họa trong hình ảnh bên dưới ( là thứ tự SH). Bằng cách chia tỷ lệ và tính tổng các "hàm cơ bản" bên dưới, bạn có thể biểu diễn bất kỳ loại hàm 2D nào trên quả cầu cho đến tần số được xác định bởi các hàm. Các hàm cơ bản được định nghĩa bằng " đa thức Legendre liên quan ", nhưng thông thường bạn không cần phải tự lấy chúng mà có thể sử dụng các đạo hàm hiện có cho các hài bậc cầu thực sự . tôinhập mô tả hình ảnh ở đây

Một hoạt động như vậy có thể được thực hiện hiệu quả trong SH được gọi là " tích chập ", có nghĩa là tích hợp sản phẩm của hai hàm 2D hình cầu trên một hình cầu. Đây là một hoạt động phổ biến trong tính toán ánh sáng, ví dụ một trong các chức năng có thể là ánh sáng sự cố của bạn và một chức năng BRDF. Khi được biểu diễn dưới dạng SH, thao tác này chỉ đơn giản là sản phẩm chấm của hai vectơ hệ số SH.

Một hoạt động thú vị khác là khả năng thực hiện lọc thông thấp hiệu quả. Bởi vì SH được biểu diễn trong miền tần số, đây đơn giản chỉ là vấn đề nhân rộng hoặc loại bỏ một số hệ số SH. Mặt khác, một số thao tác khác có thể khó thực hiện trong SH so với miền không gian, ví dụ: nếu bạn muốn xoay chức năng được biểu thị là SH, nó có thể khá tốn kém cho SH bậc cao. Vì vậy, nó thực sự phụ thuộc vào vấn đề nếu nó phù hợp để được thực hiện trong SH hay không.

SH thường được sử dụng để chỉ đại diện cho các chức năng tần số thấp (nghĩa là các chức năng thay đổi trơn tru) vì tần số cao hơn yêu cầu tăng dung lượng lưu trữ (hệ số SH) và xử lý. Đây là lý do tại sao bạn không thấy SH được sử dụng ví dụ để thay thế các phản xạ gương trên bề mặt sáng bóng. Ngoài ra còn có Zonal Sphereical Harmonics , có thể được sử dụng để giảm lưu trữ & tính toán cho các hàm 2D đối xứng xoay quanh trục z, chỉ bằng cách lưu trữ các phần tử đường chéo của ma trận hệ số SH. Ngoài ra sóng hài bán cầu có thể được sử dụng nếu bạn chỉ cần xử lý các chức năng bán cầu (cũng phổ biến trong chiếu sáng) với lợi thế là có thể biểu thị các tần số tương tự như SH với hệ số ít hơn.

Một thao tác bạn cũng cần thực hiện là "Chiếu SH" để chuyển đổi dữ liệu miền không gian thành SH. Bạn có thể thực hiện thao tác này bằng cách thực hiện tích chập dữ liệu miền không gian với các hàm cơ sở SH. Một đặc tính thú vị của SH là không giống như các biểu diễn miền không gian SH không bị răng cưa, do đó bạn không có các tạo tác răng cưa ngay cả khi chiếu lên SH có thứ tự rất thấp.

Thăm dò ánh sáng

Bây giờ bạn đã hiểu các hoạt động và thuộc tính cơ bản của SH, chúng ta có thể nghĩ cách áp dụng chúng cho GI. Đầu dò ánh sáng ghi lại lượng ánh sáng chiếu từ mọi hướng đến điểm đặt đầu dò. Đây là một chức năng 2D trên một hình cầu và có thể được biểu diễn dưới dạng SH (hoặc chức năng 3 SH cho màu đỏ, xanh lá cây và xanh dương). Tùy thuộc vào lượng chi tiết ánh sáng mà chúng tôi muốn mã hóa vào các đầu dò, chúng tôi có thể chọn thứ tự SH.

Đối với các đầu dò ánh sáng chỉ được sử dụng cho chiếu sáng khuếch tán Lambertian, SH có thứ tự khá thấp là đủ vì phép tích chập được thực hiện với thùy cosine, có thể được biểu thị bằng SH thứ tự 2 (9 hệ số). Các hệ số SH cho các đầu dò ánh sáng có thể được tạo ra đơn giản bằng cách hiển thị sơ đồ khối tại điểm của đầu dò và sau đó chiếu nó lên SH.

Khi kết xuất hình học, một vài đầu dò ánh sáng gần nhất được thực hiện và kết quả của chúng được nội suy để có được chức năng chiếu sáng tới một điểm trong không gian. Điều này có thể được thực hiện ví dụ bằng cách nội suy các hệ số SH của các đầu dò gần đó và sau đó thực hiện tích chập với thùy cosine định hướng pixel trong miền SH.


Lợi ích của việc sử dụng phương pháp này so với Chiếu sáng dựa trên hình ảnh đơn giản hơn là gì?
Arjan Singh

Bạn có thể có ánh sáng tần số thấp chất lượng tốt hơn với các yêu cầu về hiệu suất và lưu trữ tương tự so với sử dụng hình khối.
JarkkoL

15

Hình cầu hài

f(x)f(θ,φ)

Nếu bạn không biết biến đổi Fourier là gì, bạn cần phải biết trước khi bạn có thể hiểu được sóng hài hình cầu. Biến đổi Fourier cho phép bạn biểu thị một tín hiệu dưới dạng một loạt các sóng hình sin và cosin, mỗi sóng có tần số gấp đôi tần số cuối cùng. Nghĩa là, bạn có thể biểu thị tín hiệu là trung bình của nó, cộng với một sóng hình sin có bước sóng bằng với độ dài của tín hiệu, cộng với một sóng hình sin gấp đôi bước sóng đó, v.v. Vì biến đổi Fourier cố định bạn theo các bước sóng cụ thể này, bạn chỉ cần ghi lại biên độ của từng bước.

Chúng tôi thường sử dụng các biến đổi Fourier để thể hiện hình ảnh, đó chỉ là tín hiệu số 2D. Điều này hữu ích vì bạn có thể loại bỏ một số sóng hình sin (hoặc giảm độ chính xác mà bạn lưu trữ biên độ của chúng) mà không làm thay đổi đáng kể hình ảnh trông như thế nào đối với mắt người. OTOH, vứt bỏ pixel làm thay đổi diện mạo của hình ảnh rất nhiều.

Trong tín hiệu được lấy mẫu như hình ảnh, nếu bạn sử dụng cùng số sóng hình sin như có mẫu (pixel) trong ảnh gốc, bạn có thể tái tạo lại hình ảnh chính xác, vì vậy khi bạn bắt đầu loại bỏ mọi tần số, bạn sẽ tạo ra hình ảnh mất ít lưu trữ.

Các sóng hài hình cầu giống như các phép biến đổi Fourier, nhưng thay vì sóng hình sin, chúng sử dụng hàm hình cầu, vì vậy thay vì các hàm tuyến tính (như hình ảnh), chúng có thể biểu diễn các hàm được xác định trên hình cầu (như bản đồ môi trường).

Đầu dò ánh sáng

Giống như cách một hình ảnh tiêu chuẩn ghi lại tất cả ánh sáng đến một điểm nhất định qua mặt phẳng hình ảnh, một đầu dò ánh sáng ghi lại tất cả ánh sáng đạt đến một điểm nhất định từ mọi hướng. Họ lần đầu tiên ra khỏi hiệu ứng phim. Nếu bạn muốn thêm một đối tượng do máy tính tạo vào cảnh trong thế giới thực, bạn cần có khả năng chiếu sáng đối tượng tổng hợp bằng ánh sáng trong thế giới thực. Để làm điều đó, bạn cần biết ánh sáng nào đạt đến điểm trong cảnh mà vật thể tổng hợp sẽ ở. (NB Mặc dù tôi nói "chiếu sáng", bạn đang ghi lại hình ảnh của tất cả ánh sáng, vì vậy nó cũng có thể được sử dụng để phản chiếu.)

Vì bạn không thể có một máy ảnh có thấu kính hình cầu ghi lại tất cả ánh sáng chiếu tới một điểm từ mọi hướng, bạn ghi lại điều này bằng cách chụp những bức ảnh bình thường của một chiếc gương hình cầu, sau đó chiếu lại hình ảnh lên một quả cầu.

Ngoài hiệu ứng phim, việc sử dụng các đầu dò ánh sáng được tạo ra từ một cảnh nhân tạo là phổ biến hơn. Hãy tưởng tượng bạn có một số thuật toán đắt tiền để tính toán chiếu sáng toàn cầu (GI) trong một cảnh và bạn cũng có một số vật thể nhỏ hơn di chuyển xung quanh trong cảnh này (chẳng hạn như cấp độ trò chơi với người chơi trong đó). Bạn không thể chạy toàn bộ thuật toán GI mỗi khi bất kỳ đối tượng nào di chuyển, vì vậy bạn chạy nó một lần với cảnh tĩnh và lưu các đầu dò ánh sáng được thực hiện ở nhiều điểm khác nhau trong cấp độ. Sau đó, bạn có thể có được xấp xỉ tốt với GI bằng cách chiếu sáng trình phát với bất kỳ đầu dò ánh sáng nào gần nhất.

Sử dụng chúng cùng nhau

Nói chung, bạn muốn lọc ra các cạnh sắc nét trong chiếu sáng toàn cầu của mình, vì vậy bạn muốn có một cách để thể hiện chúng nhỏ gọn và dễ dàng cho phép bạn loại bỏ tần số cao. Đó là những gì điều hòa hình cầu thực sự tốt! Đó là lý do tại sao bạn sẽ nghe hai thuật ngữ này được sử dụng cùng nhau rất nhiều.

Bạn tính toán các đầu dò ánh sáng bằng thuật toán GI đắt tiền của bạn - thường là trong công cụ thiết kế mức hoặc có thể một lần mỗi giây (thay vì một lần trên mỗi khung hình) nếu bạn muốn đưa các đối tượng động của mình vào. Bạn lưu trữ những thứ rẻ tiền với các sóng hài hình cầu - 16 phao là đủ cho ánh sáng chất lượng khá cao, nhưng không phản chiếu. Sau đó, đối với mỗi đối tượng động mà bạn muốn phát sáng, bạn chọn đầu dò ánh sáng gần nhất (hoặc nội suy tuyến tính với nhau) và sử dụng nó làm đầu vào đồng nhất hoặc liên tục cho trình đổ bóng của bạn. Người ta cũng thường sử dụng sóng hài hình cầu để biểu thị dữ liệu tắc xung quanh và rất rẻ để kết luận điều đó với đầu dò ánh sáng, mặc dù có một số phức tạp xung quanh các chức năng điều hòa hình cầu xoay.


Câu trả lời tuyệt vời này thực sự làm rõ mọi thứ! Vì vậy, về cơ bản Light Probes là một cách dễ dàng để tính toán ánh sáng trên các nhân vật chuyển động, điều đó ngăn chúng ta tính lại GI cho toàn bộ cảnh. Mặt khác, sóng hài được sử dụng để lọc các tần số cao. (Sửa lỗi cho tôi nếu tôi sai, tôi chỉ đang cố gắng xem liệu tôi có hiểu đúng không).
Arjan Singh

"Nếu bạn sử dụng cùng số lượng sóng hình sin như có các mẫu (pixel) trong ảnh gốc, bạn có thể tái tạo lại hình ảnh chính xác", thực tế không phải vậy. Ví dụ: sóng vuông yêu cầu số lượng tần số vô hạn để thể hiện chính xác
JarkkoL

@JarkkoL Chắc chắn, một sóng vuông thực sự. Nhưng nếu bạn đã loại bỏ nó bằng cách lấy mẫu, thì bạn chỉ cần có cùng số tần số để tạo ra lỗi nhỏ hơn lỗi lấy mẫu. Đó là một kết quả có ích của định lý Nyquist (rằng tần số cao nhất có trong tín hiệu được lấy mẫu là một nửa tốc độ mẫu).
Dan Hulme

À vâng, điều đó đúng tất nhiên. Tôi cho rằng bạn cần một nửa kết quả miền tần số nhưng phức tạp (so với thực). Hoặc sử dụng DCT & tên miền thực với tần suất gấp đôi DFT.
JarkkoL

5

Hình cầu hài

Giả sử bạn có một số dữ liệu trong một mảng nhưng bạn muốn biểu thị dữ liệu đó với số byte ít hơn.

Một cách để làm điều đó có thể là biểu thị dữ liệu dưới dạng hàm thay vì các giá trị thô.

y= =mộtx+b

mộtb

Vấn đề là, một phương trình tuyến tính có lẽ là một xấp xỉ kém với dữ liệu của bạn.

y= =mộtx2+bx+c

mộtbmộtbc

Chúng tôi đã tăng dung lượng bộ nhớ và độ phức tạp tính toán của việc lưu trữ và truy xuất dữ liệu của bạn, so với phương trình tuyến tính, nhưng đó là một xấp xỉ tốt hơn với mảng dữ liệu của bạn. Chúng ta cũng có thể đưa nó lên đến một hàm khối hoặc cao hơn. Tăng thứ tự làm tăng lưu trữ, tính toán và độ chính xác.

f(x)

Giống như trong các ví dụ trên, bạn có thể sử dụng hàm điều hòa hình cầu bậc thấp hơn để tạo ra thứ gì đó có lưu trữ thấp hơn và tính toán thấp hơn để tính toán dữ liệu, nhưng độ chính xác cũng thấp hơn.

Mặt khác, bạn có thể tăng thứ tự và có được xấp xỉ tốt hơn với dữ liệu gốc của mình, nhưng với chi phí cần thêm dung lượng lưu trữ và cần nhiều tính toán hơn để tính điểm dữ liệu.

Cuối cùng, bạn có thể sử dụng nhiều thuật ngữ điều hòa hình cầu như bạn đã lấy mẫu trong mảng của mình và sau đó bạn có thể xây dựng lại chính xác mảng ban đầu của mình, nhưng bạn dành rất nhiều tính toán để làm điều đó và bạn đang sử dụng nhiều không gian lưu trữ như bạn đã bắt đầu với.

Do đó, trong thực tế, các hàm điều hòa hình cầu không mang lại nhiều lợi ích nếu bạn cần thể hiện các chi tiết tốt - như phản xạ sắc nét trên một hình cầu - nhưng chúng có thể rẻ đối với dữ liệu không có chi tiết tốt (dữ liệu không có 't có nhiều nội dung tần số cao). Chúng cũng hữu ích để thực hiện các tính toán miền tần số như phân tích quang phổ hoặc tích chập.

Một trong những dữ liệu như vậy họ rất giỏi trong việc lưu trữ là "sự chiếu xạ", đó là lượng ánh sáng chiếu vào một điểm từ các hướng khác. Nó có xu hướng trông hơi mờ, có nghĩa là nó chỉ có nội dung tần số thấp và là một ứng cử viên tốt để được lưu trữ trong một chức năng điều hòa hình cầu.

Tôi sẽ để lại lời giải thích thăm dò ánh sáng cho người khác: p


Tại sao bỏ phiếu xuống? : P
Alan Wolfe

Không đúng khi các sóng hài hình cầu không tốt trong việc thể hiện các chi tiết tốt. Giống như biến đổi Fourier, chúng có thể tái tạo lại tín hiệu gốc chính xác nếu bạn giữ tất cả các tần số. Chỉ là họ làm cho nó dễ dàng tiết kiệm không gian bằng cách vứt bỏ tần số cao nếu bạn không cần chúng.
Dan Hulme

Và xin lỗi, tôi nghĩ sau khi bỏ phiếu, thật khó để hạ bệ cho một yêu cầu không rõ ràng trong một câu trả lời hữu ích khác, nhưng phiếu bầu của tôi đã bị khóa khi tôi có suy nghĩ thứ hai.
Dan Hulme

Ah. Vâng, có thể, giống như cách có thể biểu diễn bất kỳ tập dữ liệu nào với đa thức, nhưng trong thực tế, cả hai đều là những lựa chọn tồi cho việc cần phù hợp với nhiều điểm dữ liệu. Với đa thức, bạn cần N thuật ngữ của hàm N để khớp chính xác với các điểm dữ liệu N, điều này làm cho nó trở thành một lựa chọn tồi tệ hơn chỉ là một mảng kể từ khi tính toán, không phải tra cứu, để chỉ ra dữ liệu. Tương tự, trong điều kiện thực tế, sóng hài hình cầu là một lựa chọn tồi cho dữ liệu hình cầu có nội dung tần số cao mà bạn muốn bảo tồn. Đó không phải là một lựa chọn tốt trong những tình huống đó.
Alan Wolfe

Điều đó đúng nếu bạn muốn có thể xây dựng lại các mẫu riêng lẻ, nhưng không phải tất cả các sử dụng Fourier đều yêu cầu điều đó - tương tự đối với không phải tất cả các sử dụng SH. Nếu bạn định thực hiện tích chập, sẽ rẻ hơn nhiều khi thực hiện điều đó trong miền tần số trước khi chuyển đổi trở lại mẫu. Bạn có phiền tôi đề xuất một chỉnh sửa để làm cho câu trả lời rõ ràng hơn trong câu trả lời của bạn không, sau khi tôi đã hoàn thành câu trả lời của riêng mình?
Dan Hulme
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.