Генерация карт шумовых плиток "на лету" - PullRequest
4 голосов
/ 07 июля 2011

Я заинтересован в создании трехмерных карт высоты для 2D-игры, над которой я работаю. Я использую это для создания масс земли, как в Minecraft или Dwarf Fortress, и делал это раньше, но только в фиксированных размерах:

http://www.freewebs.com/shadowphantom/Results.html

Теперь я вижу, что мне следует изучить шумы Perlin или Simplex, но теперь я не совсем понимаю, как применять шумы Perlin или Simplex к двумерному массиву высот.

Любая помощь с этим будет принята с благодарностью, так как я понятия не имею, что делать дальше. Термин «октавы», которого нет в нотах, пугает меня.

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Точно, вы должны искать шумы Perlin / Simplex. Думайте об этом как о функции f (x, y, ...) (сколько угодно переменных), которая будет выдавать случайный шум. Разница с чистым шумом заключается в том, что он действует на градиенты, поэтому он будет выглядеть более естественно, поскольку он «рисует» градиенты вместо простого шума с высокой локальной изменчивостью. Симплексный шум почти такой же, как у Perlin, но он делит пространство на simplexes вместо того, чтобы работать в n-мерных сетках, как это делает Perlin. Это снижает вычислительные затраты и дает некоторые дополнительные преимущества .

Это может показаться страшным, но на самом деле все просто. Вы боитесь октав, но они в значительной степени совпадают с октавами в музыке: только более высокий (или более низкий) частотный шум смешивается с оригинальным выходом. Говоря о нотах, это все равно что играть одновременно на С4 и С5. Это все еще C, но к нему добавлен вкус (небольшие всплески в форме волны). Не бойтесь и продолжайте исследования, это не так сложно.

Относительно черепицы:

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

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

1 голос
/ 08 июля 2011

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

http://en.wikipedia.org/wiki/Heightmap

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

Minecraft использует функцию шума Перлина для создания 3D-куба.шума.Так что, где карта высот - это шум Перлина в 2D, Minecraft - это шум Перлина в 3D.Вы также можете генерировать 1D шум Перлина.

Что приятно в функции шума Перлина, так это то, что вы можете управлять «разрешением» и «смещением» текстуры с помощью математики и, следовательно, создавать цельную среду.Я считаю, что Minecraft использует шум Перлина в качестве основы, а затем переходит к некоторым клеточным автоматам для последних штрихов.

Я не знаком с симплексным шумом.

РЕДАКТИРОВАТЬ: здесь есть ссылкапроверить некоторые математические функции (в обработке) http://processing.org/learning/basics/noise2d.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...