SSAO шейдинг для 3дИ2.0 и Перевозчика

Обсуждение вопросов близких сообществу, но не касающихся проекта "City Car Driving" напрямую.

Модераторы:Kivlov, manuj, Nik

Ответить
Аватара пользователя
oldfashion
Мега Эксперт
Сообщения:1027
Зарегистрирован:Вт июл 31, 2007 1:53 pm
Откуда:msk
SSAO шейдинг для 3дИ2.0 и Перевозчика

Сообщение oldfashion » Пн ноя 17, 2008 6:32 pm

Чтобы не плодить оффтоп, завожу отдельную тему.

На приведенной ниже картинке первое изображение - скрин из RenderMonkey с работой шейдера SSAO, аналогичной алгоритму в Crysis. Он работает только с картой глубины сцены. Подрезан отсюда, дополнен текстурой псевдослучайных векторов из того же Crysis и сценой с примитивами из макса. Архив с шейдером и текстурой приложен к посту.

Второй скрин - рендер из макса сканлайном с примерно подобранным ракурсом.

Третий - наложение в фотошопе SSAO на вторую картинку в режиме Color Burn (вот формула: f(a,b) = 1 - (1 - a) / b) с 50% прозрачностью.

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

Изображение

Далее я увлекся и наскоро затекстурировал сцену в шопе. Вместо 50% прозрачности (затемнения становились серые) использована коррекция уровней с доведением черной точки с 0 до 128 (белая - 255), т.е. по формуле, надо полагать:
f(с) = 128 + (с / 2)

и в конечном виде:
f(a,b) = 128 + (1 - (1 - a) / b) / 2

Изображение

А здесь гиф с текстурированием.

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

------------------

Для создания тумана ведь наверняка уже используется depth map? На скринах, если и есть воздушная перспектива (должна же быть), то минимальная, а, может и вообще это лишь засвет от блума неба, но на видео был, вроде, туман. Тогда лишних вычислений вообще минимум!
Последний раз редактировалось oldfashion Ср ноя 26, 2008 3:28 pm, всего редактировалось 1 раз.

Аватара пользователя
oldfashion
Мега Эксперт
Сообщения:1027
Зарегистрирован:Вт июл 31, 2007 1:53 pm
Откуда:msk

Сообщение oldfashion » Пн ноя 17, 2008 8:34 pm

Еще один пример

Изображение

Аватара пользователя
pbmaster
Разработчик
Сообщения:489
Зарегистрирован:Ср окт 25, 2006 9:22 am
Откуда:нск

Сообщение pbmaster » Вт ноя 18, 2008 1:50 pm

жжоте напалмом, товарищ олдфэшэн! пожалуй ваш пост про ссао стоит отметить как самый лучший из всех встреченных мной на этот форуме ) СПАСИБо

касательно алгоритма. очень эффектный разбор эффектов из крайзиса от товарища из жж ) алгоритм простой и при долгой настройке параметров возможен хороший эффект. однако есть и недостатки:

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

пс: скоро выложу скриншоты с этим и еще парочкой алгоритмов или напишу заметку в дневник!

Аватара пользователя
oldfashion
Мега Эксперт
Сообщения:1027
Зарегистрирован:Вт июл 31, 2007 1:53 pm
Откуда:msk

Сообщение oldfashion » Ср ноя 19, 2008 12:19 am

pbmaster писал(а):пс: скоро выложу скриншоты с этим и еще парочкой алгоритмов или напишу заметку в дневник!
Будет очень интересно увидеть :)

Далее делюсь всей найденной мной информацией по SSAO. Если повторяюсь, прошу извинить. Кое-какие линки повторяются на страницах по уже приведенным адресам.

http://steps3d.narod.ru/tutorials/ssao-tutorial.html
http://www.shalinor.com/research.html
http://www.gamedev.ru/code/forum/?id=80745&page=6 (алгоритм _arwya, далее по треду он иллюстрируется)
http://www.gamedev.net/community/forums ... _id=463075
http://www.malmer.nu/index.php/2008-04- ... urce-code/ (алгоритм для макса - как метод)
+ http://www.malmer.nu/index.php/2008-04- ... ur-friend/
http://lastworld.net.ru/doc.php?DOC_ID=15 (с использованием карты нормалей, DX10)
http://rgba.scenesp.org/iq/computer/art ... o/ssao.htm (!)
http://www.gamedev.net/community/forums ... _id=263350 (просто так)
http://meshula.net/wordpress/?p=145


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

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

Приведенный алгоритм дает, на мой взгляд, один из самых адекватных результатов. Много других попыток, например, реализация в движке XNA и ей подобные. Странно, что люди это делают, несмотря на нереалистичность. Полигоны - да, в приведенном алгоритме - выделяются, но с этим можно, полагаю, побороться. Вопрос анализа "геометрии", если карте глубины можно так говорить.

Малмеровский алгоритм выглядит хорошо, но его надо переводить. Проще всего, наверное, будет твикать до потребного состояния тот, что привел я (выкраден у "товарища с жж"). Остальные мне либо не нравились, либо, напротив, были замечательны (особенно, у Куилеза), но от авторов не было готовых решений, только хинты.

В целом все потом сводится с грамотному смешиванию изображений.

Ответить