Сферические гармоники
f(x)f(θ,ϕ)
Если вы не знаете, что такое преобразование Фурье, вам нужно знать, прежде чем вы сможете понять сферические гармоники. Преобразование Фурье позволяет вам представить сигнал в виде серии синусоидальных и косинусных волн, каждая из которых в два раза больше частоты последней. То есть вы можете представить сигнал как его среднее значение, плюс синусоидальную волну, длина волны которой равна длине сигнала, плюс синусоидальную волну, вдвое превышающую эту длину волны, и так далее. Поскольку преобразование Фурье фиксирует вас к этим конкретным длинам волн, вам нужно только записать амплитуду каждого из них.
Мы обычно используем преобразования Фурье для представления изображений, которые являются просто 2D цифровыми сигналами. Это полезно, потому что вы можете отбрасывать некоторые синусоидальные волны (или снижать точность, с которой вы сохраняете их амплитуду) без значительного изменения того, как изображение выглядит для человеческого глаза. OTOH, выбрасывание пикселей сильно меняет внешний вид изображения.
В сэмплированном сигнале, подобном изображению, если вы используете то же число синусоид, что и на оригинальном изображении, то вы можете точно восстановить изображение, поэтому, как только вы начнете выбрасывать любые частоты, вы создаете изображение занимает меньше памяти.
Сферические гармоники аналогичны преобразованиям Фурье, но вместо синусоидальных волн они используют сферическую функцию, поэтому вместо линейных функций (таких как изображения) они могут представлять функции, определенные на сфере (например, карты окружения).
Световые зонды
Так же, как стандартное изображение регистрирует весь свет, достигающий определенной точки через плоскость изображения, так и световой зонд регистрирует весь свет, достигающий определенной точки со всех сторон. Они впервые вышли из киноэффектов. Если вы хотите добавить сгенерированный компьютером объект на сцену реального мира, вы должны иметь возможность освещать синтетический объект с помощью освещения реального мира. Для этого вам нужно знать, какой свет достигает точки в сцене, где будет находиться синтетический объект. (NB. Хотя я говорю «освещение», вы записываете изображение всего света, поэтому его можно использовать и для отражений.)
Поскольку у вас не может быть камеры со сферической линзой, которая регистрирует весь свет, достигающий одной точки со всех сторон, вы записываете это, делая нормальные фотографии сферического зеркала, а затем перепроецируете изображения на сферу.
Вне киноэффектов более распространено использование световых зондов, генерируемых искусственной сценой. Представьте, что у вас есть какой-то дорогой алгоритм для вычисления глобального освещения (GI) в сцене, и у вас также есть несколько меньших объектов, движущихся в этой сцене (например, игровой уровень с игроками в нем). Вы не можете запускать весь алгоритм GI каждый раз, когда перемещается какой-либо объект, поэтому вы запускаете его один раз со статической сценой и сохраняете световые зонды, снятые в различных точках уровня. Тогда вы можете получить хорошее приближение к GI, освещая игрока любым тем световым датчиком, к которому они ближе всего.
Используя их вместе
В общем, вы все равно хотите отфильтровать острые края в вашем общем освещении, поэтому вам нужен способ представить их компактными и легко позволяющими отбрасывать высокие частоты. Вот в чем действительно хороши сферические гармоники! Вот почему вы часто слышите, как эти два термина используются вместе.
Вы вычисляете световые зонды с помощью дорогого алгоритма GI - обычно в инструменте проектирования уровней или, может быть, один раз в секунду (вместо одного раза на кадр), если вы хотите включить ваши динамические объекты. Вы сохраняете их дешево со сферическими гармониками - 16 поплавков достаточно для довольно качественного освещения, но не для отражений. Затем для каждого динамического объекта, который вы хотите осветить, вы выбираете ближайший датчик освещенности (или линейно интерполируете несколько вместе) и используете его как равномерный или постоянный вход для вашего шейдера. Также обычным является использование сферических гармоник для представления окружающих данных окклюзии, и это очень дешево сделать так, чтобы с помощью светового зонда, хотя есть некоторая сложность с вращением сферических гармонических функций.