Procedural World: Массы воды

MMO-индустрия: Procedura World: Массы воды

Ура, ура, ура! Мигель Сеперо приступил к реализации воды в своём движке Voxel Farm, который, кстати, теперь имеет логотип. Почему я радуюсь? Потому что это напрямую связано с EverQuest Next, который построен на этом движке и который я с нетерпением жду. Tug тоже :)

В своём недавнем сообщении Мигель рассказывает о принципах, которыми руководствуется в создании столь ответственной части моделирования реального мира.



Существует веская причина, почему я откладывал с реализацией воды, и совсем не потому, что эта задача мне кажется трудной. Жидкости подчиняются более простым правилам, чем другие мной рассмотренные механизмы. Дело в другом.

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

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

Я больше думаю о создании больших объёмов воды, вроде рек и озёр, а не о том как она стекает вниз с холмов. Это две совершенно разные системы. Даже если вода будет выглядеть одинаково, она будет управляться разными частями кода. В идеале вы не должны заметить различий между озером и ведром воды. В реальности это так, но, к сожалению, нашему железу до этого как до Луны. Как обычно, нам потребуются искусные уловки.

Я сейчас испытываю такую систему:

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

MMO-индустрия: Procedural World: Массы воды
Ничего фантастического, это заурядная карта высот. Но важно то, как вы поделите её. Для кусочков карт я выбрал размер примерно 50 км шириной. Это означает, что все реки и озёра будут заключены в этот кусочек, и при таком подходе мы не получим стокилометровую реку. Если же нам это потребуется, то нужно увеличить размер куска. Пятьдесят километров в моём случае — хорошее начало.

Следующим шагом будет добавить источники воды. Не нужно расставлять их повсюду, лишь там, где высота земли достаточна. Для пятидесяти километровой карты я создал около 200 точек.

Следующим шагом мы ищем ближайший путь из каждой точки к низшей плоскости, которая будет считаться уровнем моря. Можно использовать любой алгоритм поиска пути, например A-star. Так получаются реки, показанные на картинке ниже голубым цветом. Морская вода окрашена в синий:

MMO-индустрия: Procedural World: Массы воды
Красными точками отмечены источники воды. Как вы можете видеть, реки следуют по пути наименьшего сопротивления в поисках океана.

А ещё мне хотелось получить озёра, но я не знал простого способа как их сделать, до тех пор, пока однажды я не занялся отладкой поиска пути. Для того, чтобы найти баг (я уже забыл, что он из себя представлял), я заставил подсвечиваться те места, которые алгоритм «прощупывал» перед тем, как проложить свой курс. Я обнаружил, что «поиск пути» начинает «растекаться» всякий раз, когда натыкается на плоские поверхности. Это очень похоже на то, как в действительности ведёт себя вода.

Как только я добавил области, где алгоритм искал путь, я получил озёра!

MMO-индустрия: Procedural World: Массы воды
Мне понравилось, что озёра появляются на разных высотах. Также, если вы рассмотрите значения высот на берегах озёр, вы заметите что они не сильно различаются. Это означает, что поверхность озера почти плоская. В реальности часто это не так потому, что озеро на самом деле тоже течёт.

Я закончу эту тему в следующем сообщении, где мы узнаем как получить действительную водную поверхность. А ещё мы выясним где должны пролегать водопады. У нас они обязаны быть.
Читайте также

25 комментариев

avatar
Tug тоже :)
Он тоже на Voxel Farm?
avatar
  • hitzu
  • 0
  • v
avatar
Атрон, думаешь этой статье место на главной?
  • hitzu
  • 0
  • v
avatar
Уверен. :) Спасибо. Отличная работа и отличная новость.
  • Atron
  • +1
  • v
avatar
Ну хорошо, спасибо, польстил ^_^
  • hitzu
  • 0
  • v
avatar
Да, хорошая статья, я её с большим интересом у него прочитал, спасибо за перевод! Человек — практик!

Хотя меня удивило, что в EQ взяли движок, в котором не было воды на тот момент. Возможно, поставили ему железное условие, чтобы добавил в ближайшее время…
  • Anton
  • 0
  • v
avatar
Меня поначалу даже сомнения брали, мол а не выйдут ли они в ОБТ вообще без воды?
  • hitzu
  • 0
  • v
avatar
Оу, текущая вода — моя любимая часть физических симуляторов) Всякие унылые воксели с физикой — полная фигня без воды)

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

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

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

К примеру, дварф-фортресс я удалил, когда игра подвисла при перемещении реки в канал и формировании искусственного озера вокруг крепости. Довольно-таки простые желания для игроков, которые будут играть в подобную игру, не правда ли?
avatar
Спасибо не мне, а автору :)
Конечно, многие вещи неплохо бы уточнить. Например, вышеупомянутые дамбы.
Я принял это за опечатку, ибо в статье было слово damn :D

Обычно Мигель не даёт подробные описания своей работы, ограничиваясь объяснениями и терминами, которые может понять широкая публика.

Насколько я понял, он разделит воду в естественных водоёмах и ту, что будут использовать игроки. Если мы зачерпнём воду в ведёрко и выльем ее на холм, то за её поведение будет отвечать один алгоритм, а для рек и озёр вода будет обрабатываться en masse совсем другим алгоритмом. Но лучше всего будет подождать второй части статьи, где он напишет про водопады.
Я подозреваю, что именно там будут комбинироваться с помощью белых и черных дыр эти два способа.
  • hitzu
  • +2
  • v
avatar
Спасибо обоим)

Я принял это за опечатку, ибо в статье было слово damn :D
Да, наверное проклятия, насылающие наводнения, учитывать ещё сложнее, чем дамбу)

Обычно Мигель не даёт подробные описания своей работы, ограничиваясь объяснениями и терминами, которые может понять широкая публика.
Что, в принципе, логично)

Насколько я понял, он разделит воду в естественных водоёмах и ту, что будут использовать игроки
Да, проблемы начинаются именно там, где игроки решают использовать водоёмы целиком)

Видимо будем ждать множество ведерок, что льются по картам нового предрассчитанного водоёма)

Что ж, подождём конечно статью про водопады. Потому что сами водопады кажутся решением тривиальным и статья будет явно не только про них)
avatar
На сколько я понял — он все бы хотел видеть на алгоритме «как в ведерке». Но компьютеры просто не потянут такие объемы вычислений — вот он и выкручивается, делая 2 разных алгоритма…
Очень интересно, спасибо за статью. За процедурной генерацией будущее, имхо.
avatar
Да, примерно так, только алгоритмов целых три: те что описаны и плюсом ещё море.
  • hitzu
  • 0
  • v
avatar
А ещё мы выясним где должны пролегать водопады. У нас они обязаны быть.
И пещеры за ними!!! =))))
  • Kaizer
  • 0
  • v
avatar
Непременно! ^_^
  • hitzu
  • 0
  • v
avatar
И пещеры за ними!!! =))))
А в пещерах — замки! Или дворцы. :)
avatar
Ну и чтоб сходить за молоком, владельцу замка надо вымокнуть дважды :D
  • hitzu
  • +1
  • v
avatar
либо применить конструкторское решение и развести воду от водопада в две стороны… как занавески)
avatar
Да что вы, право слово. А как же МАГИЯ? :)
avatar
Магия для гиков и слабаков, только топор, только хардкор!!!
avatar
Что-то вроде этого? :)
  • hitzu
  • +2
  • v
avatar
Вот, вот она — истинная магия! И не говорите мне ничего про угол смачивания. :)
avatar
Мне вот такое конструкторское решение вспомнилось:
avatar
Просто пролететь сквозь воду?
  • hitzu
  • 0
  • v
avatar
Ключевое здесь: КАК пролететь сквозь воду и на чем :D
avatar
Если не будет вагонеток как в МС, то я очень расстроюсь :(
Комментарий отредактирован 2013-10-26 02:02:28 пользователем hitzu
  • hitzu
  • 0
  • v

Оставить комментарий