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

Помогите найти алгоритмы полноэкранного сглаживания (постэффект, glsl) (4 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#45
22:51, 23 июля 2018

vindast
> Что за зверь такой?
Представь, что у тебя кадр статичный, как будет работать ТАА? каждый кадр матрица проекции смещается на +/- пол-пикселя, это если тупо, а если умно, там сложная математика)


#46
23:25, 23 июля 2018

Dimich, благодаря Суслику я определенно смогу подсчитать относительные скорости. Меня очень волнует ситуация с возможным перекрытием буферов рендером прозрачности, который перекроет часть буфера скорости / мировой позиции.

#47
23:32, 23 июля 2018

vindast
> очень похоже на блюр, там там тоже несколько текстур семплятся с учетом
> скорости.
Скорость там нужна только для того, чтобы находить этот же пиксель на предыдущем кадре, а не для того, чтобы мылить в каком-то направлении. Хотя часто сочитают motion blur c taa но к taa он не имеет никакого отношения.

> Вопрос с прозрачностью остается.
Либо смиряешься с незначительным артефактами, либо рисуешь отдельно с другими алгоритмами сглаживания, например с MSAA

> Во-первых, + jitter на пол-пикселя
Джитер не на пол пикселя, а внутри пикселя, и джитер этот может давать 16 семплов в пикселе.

> во-вторых, на одной матрице далеко не уедешь, надо всё-таки буфер скоростей
Матрицы нужны, чтобы рисовать в этот самый буфер скоростей.

> в третьих никто сейчас не хранит один кадр, обычно 2-3, Remedy вон вообще 7 хранили.
Чет жирно как-то, 100 метров только под один колор буфер. А где они это делали? Вообще taa можно сделать и на одном предыдущем кадре, с аккум буфером (но конечно если хранить 7 кадров, то качество будет получше)

#48
23:39, 23 июля 2018

MrShoor
> А где они это делали?
В quantum break, там это было для taa + upsample до фул-хд.

> Джитер не на пол пикселя, а внутри пикселя, и джитер этот может давать 16
> семплов в пикселе.
Ну я и говорю, грубо)

#49
4:21, 24 июля 2018

Mr F
> Только сегодня пост видел:
> https://twitter.com/erkaman2/status/1017496058308497408?s=21
Сделал то что тут предлагают, разобрался.
Но нашел крайне существенный недостаток у taa... Внезапно, если камера и сцена статичны то оно ничего не сгладит.

#50
4:29, 24 июля 2018

vindast
> Но нашел крайне существенный недостаток у taa... Внезапно, если камера и сцена
> статичны то оно ничего не сгладит.
Внезапно на статичных данных taa лучше всего и работает. Чем статичнее - тем лучше.

#51
4:40, 24 июля 2018

MrShoor, если скорости их ноль то смещение ноль и тогда картинка за несколько кадров к тому что было отрендеренно на последнем кадре.
Вы наверное имеете в виду что он работает хорошо когда смещение объекта от кадра к кадру не большое.

#52
4:50, 24 июля 2018

На видео хорошо видно, что сглаживание хорошо работает пока камера медленно двигается.
А спустя буквально пару кадров после остановки все покрывается лесенками.
Буду прикручивать семплинг большего числа кадров.

#53
5:49, 24 июля 2018

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

#54
6:23, 24 июля 2018

MrShoor
> матрицы проекции разные.
Если камера статична то матрица одна и та же.

#55
6:34, 24 июля 2018

vindast
> Если камера статична то матрица одна и та же.
Нет, для этого делаю jitering на матрице проекции (можно и отдельной матрицей).
Читай тут с 13 слайда: https://de45xmedrsdbp.cloudfront.net/Resources/files/TemporalAA_s… -59732822.pdf
Заодно можешь посмотреть на качество сглаживания на статичной сцене.

#56
7:57, 24 июля 2018

MrShoor, спасибо, буду разбираться.

#57
9:57, 24 июля 2018

MrShoor, там ничего не понятно.
На пример с матрицей проекции, когда ее применять? При проходе сцены или в taa. sampleX/Y похожи на фрагментные координаты.
Дальше не понятно совершенно ничего.
Можете разъяснить что к чему?
Проблема в том что там не полноценная статья, а только презентация.

#58
10:20, 24 июля 2018

vindast
> Можете разъяснить что к чему?
Смотри. Треугольник закрашивает пиксель, если центр пикселя попадает в этот треугольник. MSAA отличается от обычного рендера тем, что проверяет несколько семплов, а не только центр:

+ Показать

Теперь собственно вопрос, как можно эмулировать множество семплов? Для этого после умножения на матрицу проекции мы можем чуть-чуть сдвинуть координаты вершин:
+ Показать

Здесь стрелочка - это маленькое смещение, которое собственно и называется jittering. Каждая стрелочка - это новый фрейм. Теперь если мы нарисуем 8 статичных буферов, каждый с уникальным вот таким смещением, потом сложим их вместе, и разделим на 8, то мы получим идеальный суперсемплинг.

Ну а дальше в презентации идет объяснение, что можно сделать, чтобы не заводить 8 буферов, а накапливать данные бесконечно.

#59
10:30, 24 июля 2018

После того как разберешься со статикой - начинается второй шаг, это Dynamic Scene. Суть в том, что тебе надо уметь находить пиксели, которые надо блендить. Если раньше, при статичной камере они у тебя находились в одном и том же месте, то теперь с динамической камерой тебе надо уметь находить эти же пиксели в предыдущем кадре.
Для этого тебе нужна будет матрица проекции с предыдущего кадра (причем без джитеринга). Это будет скорость добавленная камерой. Потом тебе нужны будут стейты анимации с предыдущего кадра, чтобы посчитать скорость от анимаций, стейты динамических объектов (их трансформы), чтобы опять же посчитать скорость. Все эти скорости сложить, и получится velocity буфер. По этому буферу ты можешь найти этот же пиксель с предыдущего кадра. Буфер скоростей должен быть очень точным, иначе полезут артефакты.
Потом будет борьба с ghosting-ом от динамических объектов потому что information lost. Самый простой вариант - функция веса от скорости + z tolerance. Ну и еще 100500 тонкостей, о которых даже я сейчас не смогу рассказать, потому что свой taa я еще не до конца реализовал, и нахожусь в процессе ресерча.

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

Тема в архиве.

Тема закрыта.