Основы сферической гармоники
l
Одна такая операция, которая может быть эффективно выполнена в SH, называется « сверткой », что означает интеграцию произведения двух сферических 2D-функций над сферой. Это обычная операция в расчетах освещения, например, одна из функций может быть вашим падающим освещением, а другая - BRDF. Когда эта операция представлена в виде SH, она представляет собой просто произведение двух векторов коэффициентов SH.
Еще одной интересной операцией является возможность эффективной фильтрации нижних частот. Поскольку SH представлен в частотной области, это просто вопрос масштабирования или обнуления некоторых из коэффициентов SH. С другой стороны, некоторые другие операции могут быть трудны для выполнения в SH по сравнению с пространственной областью, например, если вы хотите повернуть функцию, представленную как SH, она может стать довольно дорогой для SH более высокого порядка. Так что это действительно зависит от проблемы, подходит ли она для SH или нет.
SH обычно используется для представления только низкочастотных функций (т.е. плавно изменяющихся функций), поскольку более высокие частоты требуют увеличения объема памяти (коэффициентов SH) и обработки. Вот почему вы не видите, что SH используется, например, для замены зеркальных отражений на блестящих поверхностях. Существуют также зональные сферические гармоники , которые можно использовать для уменьшения объема памяти и вычислений для двумерных функций, которые являются симметричными относительно оси z, просто сохраняя диагональные элементы матрицы коэффициентов SH. Также можно использовать полусферические гармоники , если вам нужно иметь дело только с полусферическими функциями (также распространенными в освещении) с преимуществом возможности представлять частоты, аналогичные SH, с меньшими коэффициентами.
Одной из операций, которые вам также необходимо выполнить, является «проекция SH» для преобразования данных пространственной области в SH. Вы можете сделать эту операцию, выполнив свертку данных пространственной области с базисными функциями SH. Интересным свойством SH является то, что в отличие от пространственных доменных представлений SH не страдает от алиасов, поэтому у вас нет артефактов алиасинга даже при проецировании на SH очень низкого порядка.
Световые зонды
Теперь, когда вы понимаете основные операции и свойства SH, мы можем подумать, как применить их к GI. Световой зонд регистрирует, сколько света исходит от каждого направления к точке, в которой расположен зонд. Это двухмерная функция на сфере и может быть представлена как SH (или функция 3 SH для красного, зеленого и синего). В зависимости от количества деталей освещения, которые мы хотим закодировать в датчиках, мы можем выбрать порядок SH.
Для световых зондов, которые используются только для рассеянного освещения Ламберта, достаточно SH низкого порядка, поскольку свертка выполняется с косинусной долей, которая может быть представлена с SH-порядка 2 (9 коэффициентов). Коэффициенты SH для световых зондов могут быть сгенерированы просто путем рендеринга кубической карты в точке зонда и затем проецирования ее на SH.
При рендеринге геометрии берется несколько ближайших световых зондов, и их результаты интерполируются, чтобы получить функцию падающего освещения в точке в пространстве. Это может быть сделано, например, путем прямой интерполяции коэффициентов SH близлежащих зондов и последующего выполнения свертки с долей косинусоидально ориентированного пикселя в области SH.
Сферические гармоники
Если вы не знаете, что такое преобразование Фурье, вам нужно знать, прежде чем вы сможете понять сферические гармоники. Преобразование Фурье позволяет вам представить сигнал в виде серии синусоидальных и косинусных волн, каждая из которых в два раза больше частоты последней. То есть вы можете представить сигнал как его среднее значение, плюс синусоидальную волну, длина волны которой равна длине сигнала, плюс синусоидальную волну, вдвое превышающую эту длину волны, и так далее. Поскольку преобразование Фурье фиксирует вас к этим конкретным длинам волн, вам нужно только записать амплитуду каждого из них.
Мы обычно используем преобразования Фурье для представления изображений, которые являются просто 2D цифровыми сигналами. Это полезно, потому что вы можете отбрасывать некоторые синусоидальные волны (или снижать точность, с которой вы сохраняете их амплитуду) без значительного изменения того, как изображение выглядит для человеческого глаза. OTOH, выбрасывание пикселей сильно меняет внешний вид изображения.
В сэмплированном сигнале, подобном изображению, если вы используете то же число синусоид, что и на оригинальном изображении, то вы можете точно восстановить изображение, поэтому, как только вы начнете выбрасывать любые частоты, вы создаете изображение занимает меньше памяти.
Сферические гармоники аналогичны преобразованиям Фурье, но вместо синусоидальных волн они используют сферическую функцию, поэтому вместо линейных функций (таких как изображения) они могут представлять функции, определенные на сфере (например, карты окружения).
Световые зонды
Так же, как стандартное изображение регистрирует весь свет, достигающий определенной точки через плоскость изображения, так и световой зонд регистрирует весь свет, достигающий определенной точки со всех сторон. Они впервые вышли из киноэффектов. Если вы хотите добавить сгенерированный компьютером объект на сцену реального мира, вы должны иметь возможность освещать синтетический объект с помощью освещения реального мира. Для этого вам нужно знать, какой свет достигает точки в сцене, где будет находиться синтетический объект. (NB. Хотя я говорю «освещение», вы записываете изображение всего света, поэтому его можно использовать и для отражений.)
Поскольку у вас не может быть камеры со сферической линзой, которая регистрирует весь свет, достигающий одной точки со всех сторон, вы записываете это, делая нормальные фотографии сферического зеркала, а затем перепроецируете изображения на сферу.
Вне киноэффектов более распространено использование световых зондов, генерируемых искусственной сценой. Представьте, что у вас есть какой-то дорогой алгоритм для вычисления глобального освещения (GI) в сцене, и у вас также есть несколько меньших объектов, движущихся в этой сцене (например, игровой уровень с игроками в нем). Вы не можете запускать весь алгоритм GI каждый раз, когда перемещается какой-либо объект, поэтому вы запускаете его один раз со статической сценой и сохраняете световые зонды, снятые в различных точках уровня. Тогда вы можете получить хорошее приближение к GI, освещая игрока любым тем световым датчиком, к которому они ближе всего.
Используя их вместе
В общем, вы все равно хотите отфильтровать острые края в вашем общем освещении, поэтому вам нужен способ представить их компактными и легко позволяющими отбрасывать высокие частоты. Вот в чем действительно хороши сферические гармоники! Вот почему вы часто слышите, как эти два термина используются вместе.
Вы вычисляете световые зонды с помощью дорогого алгоритма GI - обычно в инструменте проектирования уровней или, может быть, один раз в секунду (вместо одного раза на кадр), если вы хотите включить ваши динамические объекты. Вы сохраняете их дешево со сферическими гармониками - 16 поплавков достаточно для довольно качественного освещения, но не для отражений. Затем для каждого динамического объекта, который вы хотите осветить, вы выбираете ближайший датчик освещенности (или линейно интерполируете несколько вместе) и используете его как равномерный или постоянный вход для вашего шейдера. Также обычным является использование сферических гармоник для представления окружающих данных окклюзии, и это очень дешево сделать так, чтобы с помощью светового зонда, хотя есть некоторая сложность с вращением сферических гармонических функций.
источник
Сферические гармоники
Допустим, у вас есть некоторые данные в массиве, но вы хотите представить эти данные с меньшим количеством байтов.
Одним из способов сделать это может быть выражение данных в виде функции вместо необработанных значений.
Проблема в том, что линейное уравнение, вероятно, плохое приближение к вашим данным.
Мы увеличили объем памяти, а также вычислительную сложность хранения и извлечения ваших данных по сравнению с линейным уравнением, но это лучшее приближение к вашему массиву данных. Мы могли бы также взять это до кубической функции или выше. Увеличение порядка увеличивает хранение, вычисление и точность.
Как и в приведенных выше примерах, вы можете использовать функцию сферических гармоник более низкого порядка, чтобы создать что-то с меньшим объемом памяти и меньшими вычислениями для вычисления данных, но и с более низкой точностью.
С другой стороны, вы можете увеличить порядок и получить лучшее приближение к исходным данным, но за счет увеличения необходимого пространства для хранения и большего объема вычислений, необходимых для вычисления точки данных.
В крайнем случае, вы можете использовать столько сферических гармонических терминов, сколько у вас было сэмплов в вашем массиве, а затем вы можете точно восстановить свой исходный массив, но вы тратите на это много вычислений и используете столько же места для хранения как вы начали с.
Из-за этого на практике функции сферических гармоник не дают большого преимущества, если вам необходимо представлять мелкие детали - например, резкое отражение в сфере - но они могут быть дешевыми для данных, которые не имеют мелких деталей (данных, которые не не имеет много высокочастотного контента). Они также полезны для выполнения вычислений в частотной области, таких как спектральный анализ или свертка.
Одной из таких данных, которые они хорошо хранят, является «излучение», которое представляет собой количество света, попадающего в точку с других направлений. Он выглядит немного размытым, что означает, что он имеет только низкочастотный контент, и является хорошим кандидатом для сохранения в функции сферических гармоник.
Я оставлю объяснения в свете пробников другому человеку: p
источник