Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » Программирование графики и GPU » Формула волн воды.


Формула волн воды.

Сообщений 1 страница 9 из 9

1

Здравствуйте, интересует сабж. Как можно получить реальные волны в глубоком океане?
В Irlicht для волн используется такая функция:

Код:
void addWave(core::vector3df& dest, const core::vector3df source, f32 time)
{
	dest.Y = source.Y +
	(sinf(((source.X/WaveLength) + time)) * WaveHeight) +
	(cosf(((source.Z/WaveLength) + time)) * WaveHeight);
}

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

0

2

Есть несколько вариантов
Один из самых простых и действенных - взать готовый набор heightmap'ов и интерполироваться между ними. Дешево и качественно
Сумма гармоник вполне идет, но здесь их слишком мало.
В качестве варианта может выступать турбулентность, где входные кооринаты сдвигаются по времени. Тоже дает хорошиеи результаты
Ну а самый правильный вариант - это модель, сонованная на FFT и статичтическом анализе реальных данных, описана в "Jerry Tessendorf. Simulating Ocean Water." и "Lasse Jensen. Deep-Water Animation and Rendering".
Соновные формулы можно найти у меня - http://steps3d.narod.ru/tutorials/water-tutorial.html
Есть в CUDA SDK реализация этого алгоритма - весь расчет идет на CUDA, потом рисуется OpenGL
Вот это самый правильный вариант для волн в океане (по этой модели рендлерили океан в Титанике), но и очень вычислительно дорогой.
В GPU Gems II есть глава, посвященная этой теме, номер не помню, но это сейчас есть в открытом доступе

0

3

Steps3D написал(а):

Есть в CUDA SDK реализация этого алгоритма - весь расчет идет на CUDA, потом рисуется OpenGL
Вот это самый правильный вариант для волн в океане (по этой модели рендлерили океан в Титанике), но и очень вычислительно дорогой.

Очень интересно почем вы так решили? Я смотрел этот пример (благо GeForce 8800 позволяет) и нинашёл никаких отличий от шейдерного представления. Сравните картинки: http://s49.radikal.ru/i123/0908/6d/ef3ff5c33fd5.jpg первые верхние посторены через GLSL шейдеры, последняя это как раз обсуждаемая CUDA демка. Как видно она не так уж и прекрасна  :tomato:

Код не смотрел, C++ только изучаю, поэтому надеюсь, что вы передадите мне и другим пользователям заложенные идеи.

0

4

Под правильным я имел в виду, что используется одна из лучших моделей - описанная в статьях Тессендрфа и Йенсена (если я не путаю)
Эта самая достоверная модель, построенная на статистике реальных наблюдений. И она основана на преоброазовании Фурье.
Другое дело, что пример из CUDA SDK по сути из этой модели берет только формулу анимации, а шейдерные эффекты слабые :((

0

5

Steps3D написал(а):

Другое дело, что пример из CUDA SDK по сути из этой модели берет только формулу анимации, а шейдерные эффекты слабые

ААААА  o.O  Теперь ясно. А для прорисовкки используется HLSL или GLSL?

Но такой вопрос, немного неофициальный. Вы случаем не видели книги Jerry Tessendorf. Simulating Ocean Water или Lasse Jensen. Deep-Water Animation and Rendering в интернете в переводе (русском, разумеется)? Может зря спрашиваю, но я знаю одного программиста, который любит давать столько толковых ссылок по темам, что навязывается вопрос:"Откуда он столько их берёт!?".

И ещё одно, эти две книги объясняют модель для физиков или программистов?

0

6

Это не книги, а статьи, на русском их не видел.
Описывают они скорее для математиков или программистов, физики там мало (в плане анимации кажется вообще нет)

0

7

Steps3D написал(а):

Это не книги, а статьи, на русском их не видел.
Описывают они скорее для математиков или программистов, физики там мало (в плане анимации кажется вообще нет)

Спасибо.

А как насчёт в вашу статью: http://steps3d.narod.ru/tutorials/water-tutorial.html вставить ссылки на эти статьи?

Jerry Tessendorf. Simulating Ocean Water  - http://graphics.ucsd.edu/courses/render … endorf.pdf
Lasse Jensen. Deep-Water Animation and Rendering - http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm

правка:  вижу опечатку в статье:"(через Nобозначено общее количество карт высоты)". Должно быть  "(через N обозначено общее количество карт высоты)".

вот ещё опечатка: "Рис 4. Изображения воды, получаемые при Использовании функции turbulence как для анимации вершин, так и для задание карты нормалей.". Должно быть "Рис 4. Изображения воды, получаемые при использовании функции turbulence как для анимации вершин, так и для задание карты нормалей.".

Кстати, призываю вас быть аккуратнее с формулами. Напимер возьмём эту: http://steps3d.narod.ru/tutorials/water-eq-1.gif . В статье не описана функция mix! Поэтому как она действует вовсе непонятно!!!

И можно у вас ещё кое-что спросить. Поскольку не осилил статью полностью, в последнем фрагментном шейдере...
uniform sampler2D h1Map;                       
uniform sampler2D h2Map;
uniform sampler2D h3Map;
uniform sampler2D h1Map2;                       
uniform sampler2D h2Map2;
uniform sampler2D h3Map2;
.. что, используется столько карт высот!?

Отредактировано DungeonLords (2009-08-03 21:41:28)

0

8

Steps3D,
так что скажите насчёт ссылок на две эти статьи про FFT? И опечатку исправлять будете?

Ваша нерасторопность напоминает мне статистического чиновника. В депутаты не собираетесь?

Отредактировано DungeonLords (2009-08-10 18:24:50)

0

9

Давайте не будем хамать,а ?
Я не должен исправлять опечатки, как и вообще писать статьи
Функция mix - это стандартная функция в GLSL - пора бы осилить
Сколько используется карт высот - в этом примере меньше, но никто не мешает добавить поддержку h3Map и h3Map2.
Опечатки и ссылки я сейчас поправлю

0


Вы здесь » Компьютерная графика » Программирование графики и GPU » Формула волн воды.


создать свой форум бесплатно