23 Июл 2019 - 22:13:04
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
   Начало   Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Визуализация водной поверхности. Быстрое преобразование Фурье на GPU
Robot

Сообщений: 653


Робот УралДев
Просмотр профиля
« : 11 Апр 2010 - 23:44:10 »

Визуализация водной поверхности. Быстрое преобразование Фурье на GPU
Дмитрий Трифонов "DikobrAz"

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


http://www.uraldev.ru/articles/id/35
Записан
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #1 : 12 Апр 2010 - 14:59:50 »

Машина:
Core2 Quad Q6600, 4Gb Dual DDR2 800, GF9600GT 512Mb
На WinXP SP3 запустилось, показало всё, кроме воды, во всех четырёх режимах 700+ fps.
На Win7 воду видно, 220, 145, 50 и 18 fps соответственно.
Очень понравилась геометрия волн, хороший спекуляр.
Отражения замка оставляют желать лучшего.
Отражения облаков совершенно не сочетаются с неестественно ровной и длинной солнечной дорожкой.
Преломления оценить невозможно из-за высокой мутности воды и невысокой детализации подводной части рельефа. Каустиков, видимо, нет.
« Последнее редактирование: 12 Апр 2010 - 15:59:28 от Mikle » Записан
Sergio

Сообщений: 52


159814203 Сергей TundraMobile
Просмотр профиля WWW
« Ответ #2 : 12 Апр 2010 - 15:37:03 »

Геометрия воды прикольная - выглядит красиво. Но в статье как-то мало рассказано именно о FFT, я ожидал более подробного объяснения
Записан
DikobrAz
Юзеры

Сообщений: 44


222950825 < Дмитрий
Просмотр профиля WWW
« Ответ #3 : 12 Апр 2010 - 16:48:49 »

Спасибо за отзывы  

Сейчас мне вообще кажется, что не стоило флудить про отражения и преломления, на эту тему много работ, а самопальная сценка все равно смотреться будет непрофессионально. Каустиков нет.

Про FFT могу накидать материалов. Как правило, они связаны с обработкой изображений, некоторые фильтры эффективно делаются с помощью FFT и сверток. Для 3D визуализации, толком, даже не присоветую ничего более.

Выложил ролик, если у кого будут проблемы с запуском: http://www.youtube.com/watch?v=Uk4EYHdn0Ac
« Последнее редактирование: 12 Апр 2010 - 16:52:49 от DikobrAz » Записан
keYMax
Юзеры

Сообщений: 682



Просмотр профиля WWW
« Ответ #4 : 13 Апр 2010 - 22:51:16 »

Красиво  При больших значениях высоты волн все превращается прям в торнадо. Даешь девятый вал!   От формул реально голова опухла  

на dual core 2.6 ghz и gf9600gt от 400 до 43 фпс в зависимости от режима
« Последнее редактирование: 13 Апр 2010 - 22:53:08 от keYmax » Записан
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #5 : 13 Апр 2010 - 23:13:39 »

[!--quoteo--][div class=\'quotetop\']Ц
« Последнее редактирование: 13 Апр 2010 - 23:19:46 от Mikle » Записан
DikobrAz
Юзеры

Сообщений: 44


222950825 < Дмитрий
Просмотр профиля WWW
« Ответ #6 : 14 Апр 2010 - 00:59:21 »

Цитата: Mikle
Отражения и преломления основаны на отрендеренной в текстуру карте и нормалях воды, они показывают, насколько реалистичны эти нормали. Я увидел очень хорошую геометрию и плохие отражения от неё, что меня удивило. Далее я понял, что ты, видимо, сделал отражения и преломления "по быстрому", как не относящиеся к теме статьи. Лучше было, видимо, вообще их не делать, раз цель статьи - демонстрация генерации геометрии, которая, повторю, очень хороша.

Карта нормалей вычисляется по карте высот. В демке она вычисляется не отдельным FFT, а по карте высот, это менее точно, но вряд ли из-за этого проблемы.

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

Чисто отражения:
 С техникой создания отражений, используя стенсил, думаю ясно. Как использовать кубическую текстуру для задания отражений на обширных водоемах неясно, хотя бы непонятно из какой точки рендерить сцену в кубемапу и как сделать так, чтобы отражения соответствовали объектам на их границе с водой. Если знаешь как сделать хорошие отражения с кубемапой для океана, это была бы ценная информация.

[img]http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Cube_mapped_reflection_example.jpg/220px-Cube_mapped_reflection_example.jpg\" border=\"0\" alt=\"\" /]
« Последнее редактирование: 14 Апр 2010 - 01:05:10 от DikobrAz » Записан
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #7 : 14 Апр 2010 - 11:32:26 »

[!--quoteo--][div class=\'quotetop\']/div][div class=\'quotemain\'][!--quotec--]как сделать так, чтобы отражения соответствовали объектам на их границе с водо
Записан
DikobrAz
Юзеры

Сообщений: 44


222950825 < Дмитрий
Просмотр профиля WWW
« Ответ #8 : 14 Апр 2010 - 12:54:42 »

Цитата: Mikle
Не ясно зачем это нужно. Обычная проективная текстура в данном случае предпочтительнее.
С обычной текстурой, в принципе, нельзя получить реальные отражения. С кубемапой тоже, но это приближение лучше. Для воды, по всей вероятности, технику никак не использовать.

Цитата: Mikle
Нет. Дело в том, что спекуляр света - это, в сущности тоже отражения (солнца). Анимация спекуляра и отражений должна совпадать по крайней мера для удалённых объектов, ведь она отклоняется одними и теми же нормалями, а она совершенно не похожа, как будто в отражениях где-то допущена ошибка.
Да я уж говорил, cull face забыл поменять, поэтому отражались задние грани. Бывает  

Цитата: Mikle
Это будет с моей статье, я как раз уделил внимание всему, кроме геометрии и света.
Это замечание касалось только кубемапы. Хотя не спорю и с проецированием текстуры тоже есть проблемы.
Записан
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #9 : 14 Апр 2010 - 15:02:11 »

Кубемапа применяется для отражений от предметов, размеры которых значительно меньше расстояния до отражаемых объектов, чем больше разница (точнее отношение), тем ближе к реалистичности. Для воды это никак не применишь, разве что для отражений скайбокса, который условно можно считать бесконечно удалённым.
[!--quoteo--][div class=\'quotetop\']Цита
Записан
DikobrAz
Юзеры

Сообщений: 44


222950825 < Дмитрий
Просмотр профиля WWW
« Ответ #10 : 14 Апр 2010 - 15:35:03 »

Цитата: Mikle
Да не о там я. "cull face забыл поменять" - это значит, что мы увидем вывернутое наизнанку отражение замка. Пусть бы мы увижели хоть Ктулху (  ), отражение должно колебаться синхронно с спекуляр бликами.
Я, к сожалению, не силён в OpenGL, чтобы быстро найти где ошибка.
С использованием текстуры отражений это просто невозможно сделать правильно. Для отражений используется фэйк, по нормали и текстуре отражений просто нельзя понять в какую точку попадет луч, тем более, что он может попасть за пределы текстуры. Максимум, используя ещё карту глубины для отражений, можно оттрассировать луч, но это дороговато и все равно фейк.

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

В третьих, отражение и освещение очень разные вещи в реальности. Если на следующих картинках на фоне лунной дорожки что-нибудь отражалось, это очень слабо коррелировало бы с ней.
Записан
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #11 : 14 Апр 2010 - 17:53:23 »

[!--quoteo--][div class=\'quotetop\']Цит
Записан
DikobrAz
Юзеры

Сообщений: 44


222950825 < Дмитрий
Просмотр профиля WWW
« Ответ #12 : 14 Апр 2010 - 22:04:33 »

Цитата: Mikle
Это одно и то же. Кореллирует:

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

Сообщений: 52


159814203 Сергей TundraMobile
Просмотр профиля WWW
« Ответ #13 : 15 Апр 2010 - 13:21:44 »

Ну вообще по идее, если сделать кубическую карту в HDR тогда должно хватать и отражений. А рисовать её надо из точки пересечения вектора взгляда с плоскостью воды. Хотя, действительно, для близких объектов (замок) будет заметно, что отражения меняются с поворотом камеры и будет не тру. А для скайбокса самое оно. Самое главное здесь - HDR. Потому что на приведенных картинках яркость источника света во много раз превышает яркость окружения и из-за этого становится видна дорожка.
Записан
DikobrAz
Юзеры

Сообщений: 44


222950825 < Дмитрий
Просмотр профиля WWW
« Ответ #14 : 15 Апр 2010 - 13:41:39 »

Цитата: Sergio
Ну вообще по идее, если сделать кубическую карту в HDR тогда должно хватать и отражений. А рисовать её надо из точки пересечения вектора взгляда с плоскостью воды. Хотя, действительно, для близких объектов (замок) будет заметно, что отражения меняются с поворотом камеры и будет не тру. А для скайбокса самое оно. Самое главное здесь - HDR. Потому что на приведенных картинках яркость источника света во много раз превышает яркость окружения и из-за этого становится видна дорожка.

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

А бывает и так:
. Это конечно ни о чем не говорит, потому что скайбокс был не ХДРный.
« Последнее редактирование: 15 Апр 2010 - 14:19:31 от DikobrAz » Записан
Страниц: [1] 2
  Печать  
 
Перейти в: