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