Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / hbao / hbao+ (10 стр)

hbao / hbao+ (10 стр)

Страницы: 19 10 11 1216 Следующая »
SuslikМодераторwww10 авг. 201815:18#135
vindast
почитай, например, этот тред: https://gamedev.ru/code/forum/?id=226749

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

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

Правка: 10 авг. 2018 15:20

vindastПостоялецwww10 авг. 201818:29#136
Suslik, я в него заглядывал, но там сложно пока что)

vindastПостоялецwww10 авг. 201819:42#137
Suslik
> PS ну и неужели после нормального AO ты ещё можешь смотреть на какой-нибудь
> фейк вроде того, что у тебя было раньше?
Да нуу...
Тот алгоритм дешевый. Да на самом деле для меня вполне норм )

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

vindastПостоялецwww10 авг. 201819:46#138

Дока.
Я по ней делаю. Я думаю, я не правильно ищу тангенс с 11-го слайда.

vindastПостоялецwww10 авг. 201819:58#139
Еще вопрос. Там упоминаются функции ddX и ddY, зачем они там? Что они дают?
SuslikМодераторwww10 авг. 201820:14#140
vindast
> Я запутался как отсечь false-окклюзии.
даже не думай об этом пока.

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

vindast
> Еще вопрос. Там упоминаются функции ddX и ddY, зачем они там? Что они дают?
в glsl аналог https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/dFdx.xhtml
они их используют, чтобы строить нормаль к буферу глубины. если у тебя есть gbuffer с нормалями, то тебе это не надо.

vindastПостоялецwww10 авг. 201820:17#141
Suslik
> я говорю, что начальные значения горизонтов имеет смысл инициализировать,
> исходя из предположения, что в локальной окрестности точки горизонты образуют
> плоскость с известной нормалью.
Такс. Разве не он не ноль всегда?

Suslik
> они их используют, чтобы строить нормаль к буферу глубины. если у тебя есть
> gbuffer с нормалями, то тебе это не надо.
Понял.

Я сейчас скрины залью с тем что есть сейчас.

Правка: 10 авг. 2018 20:22

SuslikМодераторwww10 авг. 201820:19#142
vindast
> Такс. Разве не он не ноль всегда?
зависит от того, относительно какой оси ты считаешь углы. можно считать углы относительно нормали, тогда да, они будут нулевые, можно считать углы относительно вектора взгляда, тогда их надо инициализировать горизонтами пересечения с плоскостью нормали.

Правка: 10 авг. 2018 20:20

vindastПостоялецwww10 авг. 201820:21#143
Если я правильно понимаю, то сейчас проблема только с false-окклюзиями.

Изображение
Изображение
Изображение

vindastПостоялецwww10 авг. 201820:23#144
Suslik, перенесу весь алг. в касательную плоскость нормали, думаю там будет проще.
SuslikМодераторwww10 авг. 201820:27#145
vindast
> Если я правильно понимаю, то сейчас проблема только с false-окклюзиями.
лол, нет. у тебя какая-то навязчивая идея — убеждать себя, что всё уже хорошо, когда как бы очевидно, что до результата ещё даже не близко. во-первых, плоские поверхности не белые -> это неверно. во-вторых, в таком виде алгоритм ни для чего применять нельзя, потому что 3 направления — это не серьёзно, его нужно ускорять в десятки и сотни раз прежде, чем он будет для чего-то полезен.

рекомендую для первой версии задать адекватное количество направлений(хотя бы 32 или что-то такое) и все дальнейшие улучшения алгоритма не должны влиять на результирующую картинку, должны только увеличивать производительность. начать можно с рандомизации направлений, более умной схемы семплинга точек, экспериментов с разными рандомизациями, depth aware blur'а, interleaved rendering и так далее и тому подобное.

Правка: 10 авг. 2018 20:29

vindastПостоялецwww10 авг. 201820:29#146
Suslik
> interleaved rendering
Это что?
SuslikМодераторwww10 авг. 201820:30#147
vindast
следующий шаг после 5 предыдущих. когда до туда дойдёшь, спроси то же самое у гугла. пока что объяснять смысла нет, потому что у тебя вообще никакой схемы рандомизации нет, поэтому никакого толка от interleaved rendering'а всё равно не будет и проблемы, которую он решает, у тебя ещё даже нет.

Правка: 10 авг. 2018 20:31

vindastПостоялецwww10 авг. 201820:32#148
Suslik
> это не серьёзно, его нужно ускорять в десятки и сотни раз прежде, чем он будет
> для чего-то полезен.
Я заглянул в Вашу тему но тем не менее, я не вижу способа ускорить происходящее значительно, речь даже не о десятках, ну максимум раза в 3.
SuslikМодераторwww10 авг. 201820:39#149
vindast
> Я заглянул в Вашу тему но тем не менее, я не вижу способа ускорить происходящее
> значительно, речь даже не о десятках, ну максимум раза в 3.
ну вот выше обозначенный lsao, например. если ты для одного направления делаешь для каждого пикселя, например, 50 выборок, то каждый пиксель ты прочитаешь для каждого из 50 пикселей, лежащих с ним на одной прямой. а можешь пройтись по этой прямой один раз и прочитать каждый пиксель на ней по 1 разу -> экономия в 50 раз. но этого мало, нужно гораздо больше.

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

far field occlusion всегда имеет гораздо более низкую частоту, поэтому нет смысла семплить далёкие пиксели с такой же точностью, с какой ты семплишь ближние. поэтому для обеспечения того же радиуса в 200 пикселей вместо 200 выборок ты можешь легко уложиться в 20, но с правильным распределением плотности. но и этого мало.

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

не существует одной каноничной реализации, которую бы все использовали. каждый использует свою версию AO, что говорит о том, что исследование по-прежнему идёт и нужно искать лучшие пути самому.

Правка: 10 авг. 2018 20:48

Страницы: 19 10 11 1216 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр