neep
Демку бы...
Как же так не получается. Вот я тупо так скобочки сейчас раскрою, меня в школе учили
1/2 sqrt( 1/pi ) * SPH0 +
1/2 sqrt( 3/pi ) * vec.y * SPH1 +
1/2 sqrt( 3/pi ) * vec.z * SPH2 +
1/2 sqrt( 3/pi ) * vec.x * SPH3 +
1/2 sqrt( 15/pi ) * vec.y *vec.x * SPH4
1/2 sqrt( 15/pi ) * vec.y *vec.z * SPH5
1/2 sqrt( 20/pi ) * ( 2 * vec.z * vec.z - vec.x * vec.x - vec.y * vec.y ) * SPH6
1/2 sqrt( 15/pi ) * vec.z * vec.x * SPH7
1/2 sqrt( 15/pi ) * ( vec.x * vec.x - vec.y * vec.y ) * SPH8 =
( 1/2 sqrt( 1/pi ) * SPH0 ) +
( 1/2 sqrt( 3/pi ) * SPH1 ) * vec.y +
( 1/2 sqrt( 3/pi ) * SPH2 ) * vec.z +
( 1/2 sqrt( 3/pi ) * SPH3 ) * vec.x +
( 1/2 sqrt( 15/pi ) * SPH4 ) * vec.y * vec.x +
( 1/2 sqrt( 15/pi ) * SPH5 ) * vec.y *vec.z +
( 1/2 sqrt( 15/pi ) * SPH7 ) * vec.z * vec.x +
( -1/2 sqrt( 15/pi ) * SPH8 + 1/2 sqrt( 15/pi ) ) * vec.x * vec.x +
( -1/2 sqrt( 15/pi ) * SPH8 - 1/2 sqrt( 15/pi ) ) * vec.y * vec.y +
( sqrt( 15/pi ) * SPH8 ) * vec.z * vec.z =
( 1/2 sqrt( 3/pi ) * SPH1 ) * vec.y +
( 1/2 sqrt( 3/pi ) * SPH2 ) * vec.z +
( 1/2 sqrt( 3/pi ) * SPH3 ) * vec.x +
( 1/2 sqrt( 15/pi ) * SPH4 ) * vec.y * vec.x +
( 1/2 sqrt( 15/pi ) * SPH5 ) * vec.y *vec.z +
( 1/2 sqrt( 15/pi ) * SPH7 ) * vec.z * vec.x +
( 1/2 sqrt( 1/pi ) * SPH0 -1/2 sqrt( 15/pi ) * SPH8 + 1/2 sqrt( 15/pi ) ) * vec.x * vec.x +
( 1/2 sqrt( 1/pi ) * SPH0 -1/2 sqrt( 15/pi ) * SPH8 - 1/2 sqrt( 15/pi ) ) * vec.y * vec.y +
( 1/2 sqrt( 1/pi ) * SPH0 + sqrt( 15/pi ) * SPH8 ) * vec.z * vec.z.
В каждой скобочке - статическое выражение. Справа стоят как есть скалярные компоненты от vec.xyz * vec.xyz, vec.xyz * vec.yzx.
IronPeter
я предполагаю, что SPHx у автора - это значения функций, которые зависят от углов фи и тета. Их можно посчитать в кубмапу и брать оттуда, если жалко считать в рантайме.
x,y,z, xx, yy, zz, xy, yz, zx
в случае BRDF и функции интенсивности освещения (L) берут ортонормированный базис, чтобы интеграл считать как скалярное произведение - перед этим раскладывают BRDF и L
сейчас статью почитаю..
Извиняюсь, идею оптимизации понял немного не так с первого раза. На самом деле, я о компиляторе стал куда лучшего мнения в последнее время, хотя если уж наверняка и финальную версию в печать, то можно и перегруппировать на всякие пожарные. Но, думаю, для удобства манипуляции и для статьи в угоду читаемости лучше оставлять как есть.
во
IronPeter
SPHx - это вроде коэффициенты в каждой вершине. Он умножает так, чтобы восстановить исходное значение функции по направлению vec.xyz
2neep: так?
neep
По статье есть непонятные вещи. Возможно, только мне. Буду признателен за пояснения.
1. что подразумевается под "интеграция"
2. "билинейно интерполировать коэффициенты между вершинами треугольника" - ошибки мерили? коэффициенты высоких порядков не очень-то хорошо билинейно интерполировать - пробовали с этим что-нибудь сделать?
3. В 4.1 можно было бы привести вид сферических функций (выражение), раз уж используете 36 штук или отослать туда. где они есть. Легко нагуглить 9. Раз уж находили или выводили, то почему бы не записать? В коде как-то не наглядно :)
4. А почему 36 коэффициентов? Почему не 49 или 16, или 9? Не много ли? Да получше картинка выглядит, но оправдывается ли то улучшение падением производительности? Ни слова об эффекте Гиббса.
5. Матрица поворота. В Gritty Details видел 9x9. 36х36 никогда не встречал. Выводить уж очень муторно и скучно. Раз уж вы ее используете, то почему бы тоже не привести ее вид.
6. Раздел 5.2 по большей части не вкурил. По 1. Зачем поворачиваем? Чего добиться пытаемся? У меня есть предположения, но их несколько. Я не понял :( И по 3. Можно подробнее написать как получается V и Ls
7. Примеры использования. [49] - в Литературе 2 пункта [48] Лекцию на КРИ - не совсем детальное описание. Я бы сказал, что это скорее практическое использование. Детальности там тоже не хватает.
8. Рисунок 8. Из какой статьи он? Ну то есть у меня есть сомнение (скорее всего неверное), что n - это n^2, а не номер гармоник старшего порядка. Сказано про фильтрацию. но не поясняется что за фильтрация. и что за рисунок g)
9. Функция расчета ошибки в треугольнике. Прокомментируйте, пожалуйста (для чего используете и где).
10. Раз уж столько кода в статье, то без демки тут никак :)
neep,требую хотябы простенькую демку! :)
З.Ы. Вот нашол по теме: http://ucspace.canberra.edu.au/display/SHLIGHT/Home
1. Взятие интеграла (интегрирование), термин мог поломаться при рецензии статьи, исправил.
2. Базис аддитивный, проблем быть не должно.
4. 36 - максимальное количество коэффициентов в DX, функциями которого, думаю, многие хотят пользоваться.
5. Вид приведён, он блочно-диагональный, и вычисление ненулевых коэффициентов тоже.
6. 5.2 - это вычисление среднего самозатенения с помощью интегрирования с коническим "следом" BRDF
8. Из PRT от P.-P. Sloan'а. Если речь идёт о пописе к рис. 8 "Для представление в неполном базисе до веса n включительно", то вес тут - это то, что в англоязычной литературе все привыкли называть словом band, а не номер старшей гармоники. Рис g подправил. Подписи к рисункам плохо перенеслись.
9. Используем для адаптивной тесселляции (см. Лекцию на КРИ об этом).
neep
2. Это к вопросу правильно ли интерполировать BRDF по треугольнику (а точнее V)
4. А где ж тогда SDK о вас? :)
5. Вы прямо по формуле, приведенной считаете? В таком виде? - интегрируете
6. Тут про то, что более детальный вывод бы не помешал, чтобы понятнее было.
neep
> 9. Используем для адаптивной тесселляции (см. Лекцию на КРИ об этом).
Это какая такая тесселяция в 2005 г ? Не могу скачать пайпер.
innuendo
предварительная, когда они считают коэфф
Демку постараюсь подготовить через пару недель. Сейчас, к сожалению, нет времени.
Мой моСк такого не вЫдержит :) Пора текать отсюда...
Это что - Spher Harm lighting по сути? Ну конечно труд заслуживает уважения - но это уже не актуально - для динамики ваще никак.. Амб оклюж рульнее будет IMO
The Andreyp
> для динамики ваще никак..
есть dynamic ambient occlusion + indirect lighting (gems2 )
ага -спсп
Тема в архиве.