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

Temporal AA with reverse reprojection, как реализовать?

Страницы: 1 2 Следующая »
#0
18:08, 6 мар 2012

Привет всем.

Помогите разобраться с Temporal AA, как его грамотно реализовать, чтобы итоговая картинка была приемлимого качества.
Как я понял, если реализовывать в лоб, то просто тупо берем текущий кадр и предыдущий и блендим им. Опционально добавляем субпиксельное смещение к камере каждый фрейм. Результат получается вырвиглазной, но тем не менее, этот подход применяется в играх.. может там какая-нибудь оптимизация?

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

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

Или может есть какой-нить не менее быстрый метод AA?

#1
18:16, 6 мар 2012

Попробуй заюзать карту скоростей для моушн блюра, если такая есть...

#2
18:27, 6 мар 2012

Che@ter, спасибо за совет, но и тут опять у меня вопросы )
Карта скоростей для моушн блюра вычисляется тоже с помощью репроекции фрагментов в предыдущий фрейм? Нужно ли вычислять скорость для фрагментов, видимых в текущем кадре, но невидимых в предыдущем?
А как эту карту скоростей использовать для AA?

#3
18:51, 6 мар 2012

Ravlique
> Но тут главная проблема - алиазинг на краях мешей никуда не девается, так как
> репроекция выполняется для каждого фрагмента меша, но не окрестностных
> фрагментов.. то есть в чем тогда вобще суть данного метода?
Суть в том, чтобы за дешево получить суперсемплинг.
Предположим, что у тебя размер кадра 1024*1024. При супер-сэмплинге 2х2 тебе нужен бекбуффер 2048*2048, но это в 4 раза дороже.
Поэтому мы делаем слежующее:
1. Создаем 4 RT и меняем их по ркугу каждый кадр.
2. Вот здесь мы делаем финт ушами ) На каждом каждре мы немного корректируем матрицу проекции таким образом, что при статичной сцене из 4х последовательных кадров можно восстановить супер-сэмплинг буффер 2048*2048.
Картинка (здесь супре-сэмплинг 4х4, но идея та же)
temporalAA | Temporal AA with reverse reprojection, как реализовать?

Как видно, серия последовательных кадров дает нам возможность точно восстановить супе-сэпнлинг буффер. Поэтому когда ты делаешь AA, то просто усредняешь значения пикселя.

Для 2x super-sampling'a то же самое.

#4
18:53, 6 мар 2012

Репроекция - это только для движений камеры. Тебе нужна нормальная карта скоростей каждого пикселя. Тебе нужно вершину умножить на матрицамиравидапроекции текущего и предыдущего кадра и найти вектор разницы в скрин спейс пространстве, т.е. в пиксельном шейдере.
VirT
Не понятен метод устранения Ghosting'a через репроекцию, а не сам ТАА.

#5
19:01, 6 мар 2012

Ravlique
> Или может есть какой-нить не менее быстрый метод AA?
FXAA

#6
19:25, 6 мар 2012

VirT, спасибо за инфу. Хм, в принципе понятно, типа мы получаем суперсемплинг, только растянутый по времени, если можно так выразиться. Этот подход отлично работает для статичной сцены, но когда сцена динамична - когда имеем движение камеры и объектов на сцене - тогда появляется ghosting, как заметил Che@ter, и тут появляется вопрос, как его убрать..

Che@ter, хм, а что потом с вектором скорости делать? Как его использовать в этом случае?

#7
19:30, 6 мар 2012

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

#8
19:35, 6 мар 2012

Ravlique
ну я FXAA не разбирал - просто так глазами пробежался )) Сам пока читал что заюзать наткнулся на этот АА
http://gamestart3d.com/blog/ssaa-antialiasing
Понравилась простота и 1 проход. Попробуй - может понравится. С ФХАА я буду разбираться многа позже, т.к. сейчас работаю над юзверским интерфейсом, а графикой занят другой чел.

#9
19:38, 6 мар 2012

fzr125
> FXAA
Тогда уж SMAA
Ravlique
> Che@ter, хм, а что потом с вектором скорости делать? Как его использовать в
> этом случае?
Если скорость текущего пикселя больше 1(смещение в 1 пиксель), то берем только одну из текстур для АА. Впринципе там еще много мелочей, но для начала так попробуй.

#10
19:44, 6 мар 2012

Che@ter
> Если скорость текущего пикселя больше 1(смещение в 1 пиксель), то берем только
> одну из текстур для АА.
то есть движущиеся объекты на сцене не будут сглаживаться? ( То есть и в Кризисе движущиеся объекты не сглаживаются, если маленький фпс и быстрое движение?
Вобщем спасибо за помощь, попробую так реализовать.

#11
19:57, 6 мар 2012

Ravlique
Ну вприцнипе да, так и есть. В кризисе ТАА используют только вдали.
ТАА не умеет хендлить изменения цветов, скажем движущаяся тень всегда будет иметь Ghosting.
Вблизи юзаем какой-либо другой пост АА.

#12
0:24, 8 мар 2012

SRAA почитай тож норм штука. Я скрестил SRAA 2x и TAA 2x, хороший результат.

#13
0:37, 8 мар 2012

это оч. интересная задача... которая является производной от общей: получение AA для произвольной картинки...

без дополнительной информации - в общем случае решается хорошо токо для 2-х цветных изображений...

а вот с доп. инфой типа: карты глубины или карты ID граней... - должна хорошо решаться для любых... но не факт, что достаточно качественный алгоритм будет свободен от множества переходов, что "вроде" ни процессору, ни шейдерам - не понравиться...

т.е. да - как это сделать в реальном времени с достаточным качеством? - и есть типа проблема-вопрос, но не то - как соблюсти каждый критерий по отдельности...

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

по хорошему: доведение до реал-тайма - это уже вторая задача...

имхо...

#14
10:47, 8 мар 2012

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

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

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