граница биомов 5×5 что это

Быстрое и плавное смешение биомов игровой карты

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Определяемся с нужным результатом

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Плавный переход между двумя биомами

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Переход со скачком и границей

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Переход в месте, где сумма весов не равна единице

Существует множество способов форматирования данных, передающих одинаковую информацию. Я опишу выбранный мной формат ниже.

Способы и проблемы

Дополнение: некоторые читатели заметили, что фильтр Гаусса разложим. Это значит, что операцию размытия можно выполнить при помощи двух быстрых действий вдоль каждой из осей вместо одного медленного действия для всего диапазона.

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Веса смешения биомов относительно центральной точки

Если генерация биомов выполняется быстро, то размытие в полном разрешении хорошо работает при малых размерах окружностей смешения. Но при увеличении радиуса обход в циклах каждой координаты начинает занимать много времени. И если само генерирование биомов выполняется не быстро, то вычисления для каждой координаты могут вызывать собственные проблемы с производительностью. Я уже реализовывал подобную систему, но меня не всегда удовлетворяла её скорость.

Некоторые генераторы обходят эту проблему, генерируя всё на сетке меньшего разрешения, а затем выполняя интерполяцию между пробелами. Это решает проблему скорости, но не позволяет создавать на границах никакого углового разнообразия ниже масштаба сетки. Границы становятся привязанными к краям сетки, потому что у нас есть данные только для её углов. Кроме того, если используется только простая линейная интерполяция (lerp), это создаёт регулярно повторяющиеся границы. Такие проблемы становятся особенно заметны, когда границы пытаются передать детали, для которых сетка имеет слишком низкое разрешение. Minecraft является примером использования такой стратегии. Я планирую написать серию статей, в которой предложу и реализую усовершенствования многих техник, которые используются в Minecraft. А пока я буду рассматривать тему смешения биомов отдельно, вне связи с какой-либо конкретной игрой.

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Пример линейной интерполяции в увеличенном масштабе

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Граница в Mineraft, из-за интерполяции демонстрирующая повороты в форме сетки

Решаем обе проблемы

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

В своём решении я заменил сетку случайно распределёнными точками данных. Затем я выполнил смешение между точками при помощи нормализованной разреженной свёртки.

Распределяем точки

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Сетка без флуктуаций

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Направления векторов флуктуации

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Подвергнутые флуктуации точки

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Базовый радиус без дополнения в наихудшем случае

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Радиус с дополнением той же области

Находим точки

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Шестиугольные слои поиска

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

layerSearchBound = ( r * f + m + j )/ d

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Окружность, содержащая фрагмент. Формула получает вид (( r + rc )* f + m + j )/ d

Нормализованная разреженная свёртка

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Результаты

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

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

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

Сравнение

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

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Смешение на сетке с Lerp; r=24, interval=8; исходное изображение

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Свёрточное смешение на сетке; r=24, interval=8; исходное изображение

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

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Смешение на сетке с Lerp; r=24, interval=4; исходное изображение

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Свёрточное смешение на сетке; r=24, interval=4; исходное изображение

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

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

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

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

Пример карты высот

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Карта биомов со смешением в качестве примера карт высот (rp=32, f=0.04)

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Карта высот, сгенерированная смешением карт высот биомов

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Карта высот, отрендеренная в 3D-режиме WorldPainter

Производительность

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

Полное разрешениеРазреженноеСетка со свёрткойСетка с Lerp
gi=8, r=246818,692305,745148,50823,895
gi=4, r=24’’1114,819463,85789,579
gi=8, r=4825049,832763,721442,12140,518
gi=4, r=48’’2904,6401624,995220,749

Исходный бенчмарк. Размер фрагментов 16×16. Указано время исполнения в наносекундах на координату.

Это уже демонстрирует чёткие различия между временем исполнения каждого из случаев. Однако есть очень простая оптимизация, которая позволяет улучшить ситуацию.

Оптимизация

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Фрагменты, которые не подвергаются смешению, затемнены.

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

Полное разрешениеРазреженноеСетка со свёрткойСетка с Lerp
gi=8, r=244851,143195,66297,64621,511
gi=4, r=24’’805,298329,61477,301
gi=8, r=4823136,046664,923397,04640,174
gi=4, r=48’’2662,2481499,852209,106

Оптимизированные системы. Размер фрагментов 16×16. Указано время исполнения в наносекундах на координату.

Применение этой оптимизации обеспечивает рост производительности в случае разреженной системы до 36%. Системы полного разрешения и сетки со свёрткой имеют чуть меньший рост (максимум

34%), а сетка с lerp демонстрирует наименьший рост (максимум

При таких значениях параметров разреженное смешение не так быстро, как сетка со свёрткой или сетка с lerp. Однако оно гораздо быстрее смешения в полном разрешении («простого» смешения). Эта разница становится особенно заметной при использовании низких частот сэмплирования точек — эта опция недоступна для простого случая смешения.

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

Система с линейной интерполяцией всегда самая быстрая. Однако её артефакты сетки настолько заметны, что скорость не оправдывает её использования. Можно попробовать интервал сетки 2, что выглядит намного лучше, чем 4, но это увеличивает показанное выше время исполнения до 594,905 (r=24) и 2025,882 (r=48). Такие результаты легко превзойти при разреженном смешении.

Размер фрагментов

Представленные выше метрики сгенерированы с фрагментами размером 16×16. Если увеличить их до 32×32, то производительность меняется следующим образом:

Полное разрешениеРазреженноеСетка со свёрткойСетка с Lerp
gi=8, r=245502,449235,809113,43421,378
gi=4, r=24’’989,238392,22573,194
gi=8, r=4824351,690768,681432,91534,134
gi=4, r=48’’2900,5211594,159173,820

Оптимизированные системы. Размер фрагментов 32×32. Указано время исполнения в наносекундах на координату.

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

Последние примечания о производительности

20-100 нс каждое (на моей машине), и уже быстрее того, чего можно ожидать от оптимизированных 3D-карт шума (полного расширения).

Шумные границы (плохо это или хорошо)

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

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

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Вывод функции обратного вызова

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

граница биомов 5x5 что это. Смотреть фото граница биомов 5x5 что это. Смотреть картинку граница биомов 5x5 что это. Картинка про граница биомов 5x5 что это. Фото граница биомов 5x5 что это

Заново пересчитанная карта биомов

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

Обобщённость методики

Техника запросов точек используется здесь для конкретной цели — сэмплирования биомов из карты биомов. Здесь она работает отлично, но полезна она и в других случаях. Можно использовать запрашиваемые распределения точек во множестве других техник:

Дальнейшая разработка

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

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

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

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

ChunkPointGatherer не занимается всем процессом сбора точек. Эту задачу я разделил на два класса: UnfilteredPointGatherer и ChunkPointGatherer. UnfilteredPointGatherer выполняет сам поиск на основании частоты и радиуса. Его конструктор удаляет точки, которые нельзя подвергнуть флуктуациям в нужном интервале, но его метод запроса не выполняет никакой дополнительной фильтрации. ChunkPointGatherer является обёрткой вокруг UnfilteredPointGatherer, он добавляет требуемое дополнение радиуса и отсекает вне интервала. Таким образом, вместо ChunkPointGatherer можно написать различные классы-обёртки, не требующие затрат в виде многократных последовательных операций отсечения.

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

Источник

Граница мира

Граница мира выглядит как огромная прозрачная стена с диагональными голубыми линиями. Если граница расширяется, то появляются зеленые линии, а если уменьшается, то красные линии. Текстура границы мира была разработана Райаном Хольцем. [1] При приближении к границе с включёнными эффектами с 4 блоков до границы экран станет краснеть по краям.

Содержание

Эффекты [ ]

Команды [ ]

Существует пять команд, которые изменяют границу мира:

/worldborder center [x] [z] устанавливает центр местности внутри границы мира. «x» и «z» — координаты. (

) (тильда) может быть использована в качестве относительных координат.

/worldborder set [diameter] [time] устанавливает границу для квадратной области с заданным диаметром и центром в предыдущую команду. Если указано время, то граница увеличивается или уменьшается за указанное количество секунд. Если время не указано, то граница мира будет изменяться постоянно. Чтобы удалить границу мира, установите диаметр 30 000 000.

/worldborder damage amount [#] игроки получают урон каждую секунду, равный сумме количества блоков, когда игрок находится за границей мира.

/worldborder warning distance [#] изменяет расстояние, при котором появляется предупреждение о приближении к границе мира.

/worldborder warning time [#] похожа на предыдущую команду, но используется при сокращении границы и задается в секундах.

/worldborder get [#] Показывает текущую границу мира.

История [ ]

Проблемы [ ]

Отчёты об ошибках, связанных с «Граница мира», поддерживаются в системе отслеживания ошибок Mojira. Сообщайте о найденных ошибках там (на английском языке).

Факты [ ]

за границей мира, то на ней можно проплыть до координат 30 001 024 блоков. Дальше не хватит прорисовки в 64 чанка, так как игра считает, что игрок находится на координатах 30 000 000. [необходимо протестировать]

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *