Что такое сферические гармоники и световые зонды?

14

Что такое сферические гармоники и световые зонды ? Насколько они полезны в компьютерной графике? Что именно они делают? Я слышал слово «сферические гармоники и световые зонды» повсюду, от презентаций в сигграфах до постов в блогах.

Недавно Мэтт Петтинео опубликовал серию из 6 блогов, но я до сих пор не понимаю, что это такое.

Это еще один способ улучшить окружающее освещение?

Арджан Сингх
источник

Ответы:

11

Основы сферической гармоники

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.

JarkkoL
источник
Каковы преимущества использования этого метода по сравнению с более простым освещением на основе изображений?
Арджан Сингх
Вы можете получить низкочастотное освещение лучшего качества с такими же требованиями к хранению и производительности, как, например, использование кубических карт.
JarkkoL
16

Сферические гармоники

f(x)f(θ,ϕ)

Если вы не знаете, что такое преобразование Фурье, вам нужно знать, прежде чем вы сможете понять сферические гармоники. Преобразование Фурье позволяет вам представить сигнал в виде серии синусоидальных и косинусных волн, каждая из которых в два раза больше частоты последней. То есть вы можете представить сигнал как его среднее значение, плюс синусоидальную волну, длина волны которой равна длине сигнала, плюс синусоидальную волну, вдвое превышающую эту длину волны, и так далее. Поскольку преобразование Фурье фиксирует вас к этим конкретным длинам волн, вам нужно только записать амплитуду каждого из них.

Мы обычно используем преобразования Фурье для представления изображений, которые являются просто 2D цифровыми сигналами. Это полезно, потому что вы можете отбрасывать некоторые синусоидальные волны (или снижать точность, с которой вы сохраняете их амплитуду) без значительного изменения того, как изображение выглядит для человеческого глаза. OTOH, выбрасывание пикселей сильно меняет внешний вид изображения.

В сэмплированном сигнале, подобном изображению, если вы используете то же число синусоид, что и на оригинальном изображении, то вы можете точно восстановить изображение, поэтому, как только вы начнете выбрасывать любые частоты, вы создаете изображение занимает меньше памяти.

Сферические гармоники аналогичны преобразованиям Фурье, но вместо синусоидальных волн они используют сферическую функцию, поэтому вместо линейных функций (таких как изображения) они могут представлять функции, определенные на сфере (например, карты окружения).

Световые зонды

Так же, как стандартное изображение регистрирует весь свет, достигающий определенной точки через плоскость изображения, так и световой зонд регистрирует весь свет, достигающий определенной точки со всех сторон. Они впервые вышли из киноэффектов. Если вы хотите добавить сгенерированный компьютером объект на сцену реального мира, вы должны иметь возможность освещать синтетический объект с помощью освещения реального мира. Для этого вам нужно знать, какой свет достигает точки в сцене, где будет находиться синтетический объект. (NB. Хотя я говорю «освещение», вы записываете изображение всего света, поэтому его можно использовать и для отражений.)

Поскольку у вас не может быть камеры со сферической линзой, которая регистрирует весь свет, достигающий одной точки со всех сторон, вы записываете это, делая нормальные фотографии сферического зеркала, а затем перепроецируете изображения на сферу.

Вне киноэффектов более распространено использование световых зондов, генерируемых искусственной сценой. Представьте, что у вас есть какой-то дорогой алгоритм для вычисления глобального освещения (GI) в сцене, и у вас также есть несколько меньших объектов, движущихся в этой сцене (например, игровой уровень с игроками в нем). Вы не можете запускать весь алгоритм GI каждый раз, когда перемещается какой-либо объект, поэтому вы запускаете его один раз со статической сценой и сохраняете световые зонды, снятые в различных точках уровня. Тогда вы можете получить хорошее приближение к GI, освещая игрока любым тем световым датчиком, к которому они ближе всего.

Используя их вместе

В общем, вы все равно хотите отфильтровать острые края в вашем общем освещении, поэтому вам нужен способ представить их компактными и легко позволяющими отбрасывать высокие частоты. Вот в чем действительно хороши сферические гармоники! Вот почему вы часто слышите, как эти два термина используются вместе.

Вы вычисляете световые зонды с помощью дорогого алгоритма GI - обычно в инструменте проектирования уровней или, может быть, один раз в секунду (вместо одного раза на кадр), если вы хотите включить ваши динамические объекты. Вы сохраняете их дешево со сферическими гармониками - 16 поплавков достаточно для довольно качественного освещения, но не для отражений. Затем для каждого динамического объекта, который вы хотите осветить, вы выбираете ближайший датчик освещенности (или линейно интерполируете несколько вместе) и используете его как равномерный или постоянный вход для вашего шейдера. Также обычным является использование сферических гармоник для представления окружающих данных окклюзии, и это очень дешево сделать так, чтобы с помощью светового зонда, хотя есть некоторая сложность с вращением сферических гармонических функций.

Дэн Халм
источник
Отличный ответ, это действительно прояснило все! Так что в основном Light Probes - это простой способ рассчитать освещение движущихся персонажей, что не позволяет нам пересчитать GI для всей сцены. Сферические гармоники, с другой стороны, используются для фильтрации высоких частот. (Поправьте меня, если я ошибаюсь, я просто пытаюсь понять, правильно ли я понимаю).
Арджан Сингх
«если вы используете то же количество синусоидальных волн, что и в исходном изображении, были сэмплы (пиксели), вы можете точно восстановить изображение», на самом деле это не так. Например, прямоугольная волна требует бесконечного количества частот для точного представления
JarkkoL
@JarkkoL Конечно, настоящая прямоугольная волна. Но если вы дискретизировали его с помощью сэмплирования, то вам нужно только то же количество частот, чтобы ошибка была меньше, чем ошибка сэмплирования. Это удобный результат теоремы Найквиста (самая высокая частота, присутствующая в дискретизированном сигнале, составляет половину частоты дискретизации).
Дэн Халм
Ах да, это правда, конечно. Я полагаю, вам нужна половина частоты, но результаты комплексной (по сравнению с реальной) частотной области. Или используйте DCT & real domain с удвоенной частотой DFT.
JarkkoL
5

Сферические гармоники

Допустим, у вас есть некоторые данные в массиве, но вы хотите представить эти данные с меньшим количеством байтов.

Одним из способов сделать это может быть выражение данных в виде функции вместо необработанных значений.

y=ax+b

ab

Проблема в том, что линейное уравнение, вероятно, плохое приближение к вашим данным.

y=ax2+bx+c

ababc

Мы увеличили объем памяти, а также вычислительную сложность хранения и извлечения ваших данных по сравнению с линейным уравнением, но это лучшее приближение к вашему массиву данных. Мы могли бы также взять это до кубической функции или выше. Увеличение порядка увеличивает хранение, вычисление и точность.

f(x)

Как и в приведенных выше примерах, вы можете использовать функцию сферических гармоник более низкого порядка, чтобы создать что-то с меньшим объемом памяти и меньшими вычислениями для вычисления данных, но и с более низкой точностью.

С другой стороны, вы можете увеличить порядок и получить лучшее приближение к исходным данным, но за счет увеличения необходимого пространства для хранения и большего объема вычислений, необходимых для вычисления точки данных.

В крайнем случае, вы можете использовать столько сферических гармонических терминов, сколько у вас было сэмплов в вашем массиве, а затем вы можете точно восстановить свой исходный массив, но вы тратите на это много вычислений и используете столько же места для хранения как вы начали с.

Из-за этого на практике функции сферических гармоник не дают большого преимущества, если вам необходимо представлять мелкие детали - например, резкое отражение в сфере - но они могут быть дешевыми для данных, которые не имеют мелких деталей (данных, которые не не имеет много высокочастотного контента). Они также полезны для выполнения вычислений в частотной области, таких как спектральный анализ или свертка.

Одной из таких данных, которые они хорошо хранят, является «излучение», которое представляет собой количество света, попадающего в точку с других направлений. Он выглядит немного размытым, что означает, что он имеет только низкочастотный контент, и является хорошим кандидатом для сохранения в функции сферических гармоник.

Я оставлю объяснения в свете пробников другому человеку: p

Алан Вульф
источник
Почему голосование против? : P
Алан Вулф
Это не правда, что сферические гармоники не очень хорошо представляют мелкие детали. Как и преобразование Фурье, они могут точно восстановить исходный сигнал, если вы сохраните все частоты. Просто они позволяют экономить место, выбрасывая высокие частоты, если они вам не нужны.
Дэн Халм
И извините, я подумал, что после того, как я проголосовал, было бы трудно понизить число сомнительных утверждений в другом полезном ответе, но мой голос был заблокирован ко времени, когда у меня появились вторые мысли.
Дэн Халм
Ах. Да, это возможно, точно так же, как можно представить любой набор данных с помощью полинома, но на практике оба варианта являются плохим выбором для необходимости подгонки ко многим точкам данных. С полиномом вам нужно N членов функции порядка N, чтобы точно соответствовать, например, N точкам данных, что делает его худшим выбором, чем просто массив, так как это вычисление, а не поиск, чтобы получить точку данных. Точно так же, на практике, сферические гармоники - плохой выбор для сферических данных с высокочастотным контентом, который вы хотите сохранить. Это не хороший выбор в таких ситуациях.
Алан Вульф
Это верно, если вы хотите иметь возможность восстанавливать отдельные выборки, но не все применения Фурье требуют этого - аналогично не для всех применений SH. Если вы собираетесь сделать свертку, это гораздо дешевле сделать в частотной области, прежде чем преобразовывать обратно в выборки. Не могли бы вы предложить мне внести изменения, чтобы сделать этот ответ более понятным после того, как я закончу свой собственный ответ?
Дэн Халм