Войти
ПрограммированиеФорумГрафика

Корректный HBAO (6 стр)

Страницы: 15 6 7 810 Следующая »
#75
(Правка: 19:19) 19:19, 29 мар. 2019

агрессор
> Тогда что в твоем понимании АО и GI?
AO - когда любое препятствие не излучает свет.
GI - когда учитывается вклад переотражения и переизлучения от этого самого препятствия.


#76
(Правка: 20:12) 19:49, 29 мар. 2019

Не отлипнуть никак, прям obsessing challenge.
С тангентом теперь все ок, но выяснилось, что углы я считал по-прежнему относительно экранной плоскости (при этом все было ок, если исключить зависимость от направления взгляда).
После чего сделал так:
Изображение
Зеленая плоскость - геометрия, оранжевая - плоскость сэмплирования.
Dir - направление сэмплирования (z=0), углы считаются относительно Dir(basis), как и должно быть, по идее.
Вроде все правильно, но на самом деле нет. initial angle вроде бы правильный для всех случаев (не уверен на 100%), а вот с углом горизонта лажа.

Проще объяснить на примере:
Ровный пол с нормалью (0,1,0), V направлен в левый нижний угол (0.6, 0.6, 0.6). Пускаем один луч вправо. В этом случае Т совпадает с Dir(basis), они равны (0.7, 0, 0.7) -> initial angle нулевой. А угол горизонта считается между Dir(basis) и вектором H=P-S, который смотрит вправо, т.к. P и S имеют одинаковые Z и Y. Получается, что угол горизонта не нулевой, а такого быть не должно, т.к. пол плоский.

Вид сверху для примера с полом (нормаль направлена из экрана):
Изображение

Suslik
> ты правильным путём идёшь
Увы, неправильным, см. выше )

vindast
> как ты вклад освещения считаешь?
Тяп-ляп считаю, лишь бы смотрелось как-то - каждый сэмпл рассматриваю как типа point light с цветом, равным цвету сцены в точке сэмпла. В точке Р у нас есть нормаль, можно тупо посчитать dot(N, L), где L = H. Еще можно рассчитать attenuation по length(H). Посчитанные значения усредняю так же, как АО и добавляю просто сложением к сцене.
С расчетом GI я поспешил, т.к. АО еще не работает как надо.

#77
(Правка: 4:06) 4:03, 30 мар. 2019

San
> Получается, что угол горизонта не нулевой, а такого быть не должно, т.к. пол
> плоский.
в случае с полом это нормально, что у тебя на одном из направлений получается ненулевой горизонт. если у тебя горизонт получился, например, [cht]\alpha[/cht], то на противоположном направлении должен получиться [cht]\pi+\alpha[/cht] и в сумме они дадут полное освещение и угол в [cht]\pi[/cht]. поэтому при отладке рекомендую смотреть на как минимум два направления — [cht]\vec d[/cht] и [cht]-\vec d[/cht]

San
> Тяп-ляп считаю, лишь бы смотрелось как-то - каждый сэмпл рассматриваю как типа
> point light с цветом, равным цвету сцены в точке сэмпла
это, конечно, неправильно. вклад в освещение от семпла можно считать по той же полуаналитической формуле, по которой ты считаешь от него затенение.

#78
7:11, 30 мар. 2019

San, скинь пару скринов что получается.

#79
(Правка: 9:13) 9:02, 31 мар. 2019

vindast
Пока что не на что смотреть - глубокий дебаг. Вывел вектора - сразу стало проще.
Изображение

Suslik
> это нормально, что у тебя на одном из направлений получается ненулевой горизонт
Только если луч находится в вертикальной плоскости (точнее - не в горизонтальной). Тогда получаются разные горизонты на противоположных направлениях, которые друг друга компенсируют.

#80
9:19, 31 мар. 2019

San
> Тогда получаются разные горизонты на противоположных направлениях, которые
> друг друга компенсируют.
ну да. я тож, кстати, очень долго отлаживал с одним лучом и не мог понять, почему получается ерунда. лучей должно быть, конечно, как минимум два.

#81
9:25, 31 мар. 2019

Suslik
Не, можно и с одним, если смотреть не на картинку, а на расчеты. Картинка - не критерий правильности. А один луч с одним шагом проще визуализировать и отлаживать.

Например сразу виден косяк, проекция вектора D базиса не лежит в плоскости луча (V светит прямо в глаз):
Изображение

#82
10:52, 31 мар. 2019

San
> Тогда получаются разные горизонты на противоположных направлениях, которые друг друга компенсируют.
Нет, не так.
Горизонты получаются ненулевыми, но на плоской поверхности тангент совпадает с вектором сэмплирования и разница между начальным  углом и углом горизонта получается нулевая.
Т.е. дело не в компенсации противоположных горизонтов.

Еще немного, еще чуть-чуть )
Изображение

#83
21:25, 31 мар. 2019

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

#84
(Правка: 22:47) 22:16, 31 мар. 2019

vindast
Ну вот.
64 луча по 16 шагов, радиус 1.5, без рандомизации, отсечения по радиусу, без всяких биасов и прочего.
Вектор D починил, но все равно оно кривое почему-то. Потыкаюсь еще сколько-то и выложу шейдер, может кто продолжит.


Ютуб шакалит адово. Если что, выложу оригинал куда-нибудь.
И да, если тебе нужен только near field HBAO, просто как eye candy, то я бы наверное рекомендовал тот фейк с dot(N, H), т.к. он проще и быстрее. Но если нужно GI и в целом правильность, то придется помучиться.
#85
23:24, 31 мар. 2019

вы это, когда всё почините - займитесь оптимизацией

#86
(Правка: 2:53) 2:47, 1 апр. 2019

San
у тебя явно какие-то баги в местах с максимальными перспективными искажениями. то есть в местах, где плоскость трассировки не является параллельной znear/zfar.

#87
10:48, 1 апр. 2019

С теми же настройками что у тебя. Какой масштаб спонзы?

+ Показать
+ Показать
#88
10:49, 1 апр. 2019

vindast
> Сейчас суслик скажет, что все не правильно опять )
таки все не правильно

#89
10:51, 1 апр. 2019

Misanthrope
> таки все не правильно
Переходи к конкретике, пожалуйста.

Страницы: 15 6 7 810 Следующая »
ПрограммированиеФорумГрафика