Уравнения PRT (Direct3D 9)
Чтобы полностью понять шейдер, реализующий PRT, полезно наследовать формулу, которую шейдер использует для вычисления сияния выхода.
Чтобы начать, следующее уравнение является общим уравнением для вычисления выходного сияния, полученного от прямого освещения на диффузном объекте с произвольным удаленным освещением.
где:
Параметр | Описание |
---|---|
Rp | Выход сияния на вершине p. Вычисляется на каждой вершине сетки. |
pd | Альбэдо поверхности. |
пи | Константой, используемой в качестве фактора нормализации экономии энергии. |
L(s) | Среда освещения (исходная сияние). |
Vp₍s₎ | Функция двоичной видимости для точки p. Это 1, если точка может увидеть свет, 0, если нет. |
Hnp₍s₎ | Косинус термин от закона Ламберта. Равно max(Np· s), 0), где Np является нормальной поверхностью в точке p. |
s | Переменная, которая интегрируется с сферой. |
Используя сферические базовые функции, такие как сферические гармоники, следующее уравнение приблизит среду освещения.
где:
Параметр | Описание |
---|---|
L(s) | Среда освещения (исходная сияние). |
я | Целое число, которое суммирует количество базовых функций. |
O | Порядок сферических гармоник. |
li | Коэффициент. |
Yi(s) | Некоторые базовые функции над сферой. |
Коллекция этих коэффициентов, L', обеспечивает оптимальное приближение для функций L(s) с базовыми функциями Y. Подстановка и распределение дает следующее уравнение.
Целочисленность Yi(s)Vp₍s₎Hnp₍s₎ является коэффициентом передачи tpi, что симулятор предварительно компютирует для каждой вершины сетки. Заменяя это дает следующее уравнение.
Изменение этого векторного нотации дает следующее несжатые уравнения для вычисления выходного сияния для каждого канала.
где:
Параметр | Описание |
---|---|
Rp | Выход сияния на вершине p. |
pd | Альбэдо поверхности. |
L' | Вектор liи является проекцией исходного сияния в сферические гармонические функции. Это вектор порядка 2000-х шаровых гармоничных коэффициентов. |
Tp | Вектор передачи order 2 для вершины p. Симулятор делит коэффициенты передачи на p. |
Оба этих вектора представляют собой вектор порядка 2000-точечных коэффициентов, поэтому обратите внимание, что это просто точка продукта. В зависимости от порядка точка может быть дорогой, чтобы можно было использовать сжатие. Алгоритм, называемый кластеризованным анализом основных компонентов (CPCA), эффективно сжимает данные. Это позволяет использовать сферическое приближение с более высоким порядком, что приводит к более острым тени.
CPCA предоставляет следующее уравнение для приближения вектора передачи.
где:
Параметр | Описание |
---|---|
Tp | Вектор передачи для вершины p. |
Mk | Среднее значение для кластера k. |
j | Целое число, которое суммирует число векторов PCA. |
N | Количество векторов PCA. |
wpj | Вес Jth PCA для точки p. |
Bkj | Базовый вектор Jth PCA для кластера k. |
Кластер — это просто некоторое количество вершин, которые используют один и тот же средний вектор. Как получить среднее значение кластера, весы PCA, векторы базы PCA и идентификаторы кластера вершин рассматриваются ниже.
Подстановка этих двух уравнений дает следующее:
Затем распределение точечных продуктов дает следующее уравнение.
Потому что оба (Mk· L') и (Bkj· L') является константой на вершину, пример вычисляет эти значения с ЦП и передает их в виде констант в вершинный шейдер; поскольку wpj изменения для каждой вершины, образец сохраняет эти данные на вершины в буфере вершин.
Связанные разделы