[ГАЙД] Шум перлина/симплекса

kiryxa_vip

Эксперт
Регистрация
3 Май 2023
Сообщения
137
В данном гайде раскажу как сделать шум симплекса/Перлина, чтобы делать такие красивые генерации:
Шум перлина в использыванииШум симплекса
Я раскажу как сделать шум на второй картинке, после этого вы уже сможете делать свои красивые генерации, меняя стандартные значения. Так же написанный код можно просмотреть на /ad шум.
Вы также можете использывать шумы для создания 3д генерации.

Информация о шумах
Шум Перлина — это градиентный шум, состоящий из набора псевдослучайных единичных векторов (направлений градиента), расположенных в определенных точках пространства и интерполированных функцией сглаживания между этими точками.
Симплексный шум — метод построения n-мерной функции шума, сравнимой с шумом Перлина («классический» шум), но с меньшим количеством направленных артефактов и, в более высоких измерениях, меньшими вычислительными затратами.

Код
Запуск шума
Код:
Событие игрока событие чата:
    Если игрок сообщение равно ("@noise"):
        # Код для запуска шума
        Присв. переменную = (x, 0)
        Присв. переменную = (z, 0)
        Присв. переменную рандом (seed, 0, 1000000) # Сид нашего шума
        Вызвать функцию шум

Генерация шума
Код:
Функция шум:
    Если переменная сравнить числа легко (z <= 30): # Вместо 30 укажите размер по Z кординате
        Присв. переменную установить значение в местоположении (block_pos, Местоположение шума, x += x, z += z)
        Присв. переменную шум симплекса (noise, block_pos, seed, 1, 4, 0.044, 0.5) {Нормализовать значение = Отключено}
Что значат эти параметры в шуме?
1. Сид (Seed) — это начальное значение для генератора случайных чисел. Если сид одинаковый, то и результат шума будет одинаковым.

2. Частота (Frequency) — определяет, насколько "растянут" или "сжат" шум.
  • Низкая частота → большие, плавные градиенты.
  • Высокая частота → больше мелких деталей и резких переходов.
3. Количество октав (Octaves) — сколько слоев (деталей) добавляется к шуму. Каждая новая октава делает шум более сложным, добавляя к нему все более мелкие детали.

4. Частота октав (Lacunarity) — во сколько раз увеличивается частота на каждой следующей октаве.
  • Значение 2.0 означает, что каждая октава в 2 раза более детализированная.
5. Амплитуда октав (Persistence) — во сколько раз уменьшается влияние (амплитуда) каждой следующей октавы.
  • Если 0.5, то каждая следующая октава будет в 2 раза слабее предыдущей.
  • Если ближе к 1, то шум будет выглядеть более хаотично, так как все октавы почти одинаково влияют.
Код:
        # Получившийся шум выдает значение от -1 до 1, взависимости от параметров
        # По этим значениям мы выбираем блоки
        # У меня это бетон, от черного до белого
      
        Если переменная сравнить числа легко (noise < -0.5):
            Присв. переменную установить предмет (block, Чёрный бетон)
        Если переменная сравнить (-0.5 <= noise <= 0):
            Присв. переменную установить предмет (block, Темно серый бетон)
        Если переменная сравнить числа легко (0 < noise <= 0.5):
            Присв. переменную установить предмет (block, Светло серый бетон)
        Если переменная сравнить числа легко (noise > 0.5):
            Присв. переменную установить предмет (block, Белый бетон)
      
        Игровое действие поставить блоки (block=block, location=block_pos)
        Присв. переменную += (x, 0)
        Если переменная сравнить число легко (x > 77):
            Присв. переменную = (x, 0)
            Присв. переменную += (z, 0)
        Игровое действие ждать (1)
        Вызвать функцию шум

Заключение
Шум Перлина и симплексный шум
— это мощные инструменты для создания естественных и красивых генераций. Экспериментируйте с параметрами, комбинируйте шум с другими алгоритмами и создавайте уникальные проекты.​

 

vovaponger228

Участник
Регистрация
9 Янв 2024
Сообщения
1
В данном гайде раскажу как сделать шум симплекса/Перлина, чтобы делать такие красивые генерации:
Посмотреть вложение 10997Посмотреть вложение 10998
Я раскажу как сделать шум на второй картинке, после этого вы уже сможете делать свои красивые генерации, меняя стандартные значения. Так же написанный код можно просмотреть на /ad шум.
Вы также можете использывать шумы для создания 3д генерации.

Информация о шумах
Шум Перлина — это градиентный шум, состоящий из набора псевдослучайных единичных векторов (направлений градиента), расположенных в определенных точках пространства и интерполированных функцией сглаживания между этими точками.
Симплексный шум — метод построения n-мерной функции шума, сравнимой с шумом Перлина («классический» шум), но с меньшим количеством направленных артефактов и, в более высоких измерениях, меньшими вычислительными затратами.

Код
Запуск шума
Код:
Событие игрока событие чата:
    Если игрок сообщение равно ("@noise"):
        # Код для запуска шума
        Присв. переменную = (x, 0)
        Присв. переменную = (z, 0)
        Присв. переменную рандом (seed, 0, 1000000) # Сид нашего шума
        Вызвать функцию шум

Генерация шума
Код:
Функция шум:
    Если переменная сравнить числа легко (z <= 30): # Вместо 30 укажите размер по Z кординате
        Присв. переменную установить значение в местоположении (block_pos, Местоположение шума, x += x, z += z)
        Присв. переменную шум симплекса (noise, block_pos, seed, 1, 4, 0.044, 0.5) {Нормализовать значение = Отключено}
Что значат эти параметры в шуме?
1. Сид (Seed) — это начальное значение для генератора случайных чисел. Если сид одинаковый, то и результат шума будет одинаковым.

2. Частота (Frequency) — определяет, насколько "растянут" или "сжат" шум.
  • Низкая частота → большие, плавные градиенты.
  • Высокая частота → больше мелких деталей и резких переходов.
3. Количество октав (Octaves) — сколько слоев (деталей) добавляется к шуму. Каждая новая октава делает шум более сложным, добавляя к нему все более мелкие детали.

4. Частота октав (Lacunarity) — во сколько раз увеличивается частота на каждой следующей октаве.
  • Значение 2.0 означает, что каждая октава в 2 раза более детализированная.
5. Амплитуда октав (Persistence) — во сколько раз уменьшается влияние (амплитуда) каждой следующей октавы.
  • Если 0.5, то каждая следующая октава будет в 2 раза слабее предыдущей.
  • Если ближе к 1, то шум будет выглядеть более хаотично, так как все октавы почти одинаково влияют.
Код:
        # Получившийся шум выдает значение от -1 до 1, взависимости от параметров
        # По этим значениям мы выбираем блоки
        # У меня это бетон, от черного до белого
     
        Если переменная сравнить числа легко (noise < -0.5):
            Присв. переменную установить предмет (block, Чёрный бетон)
        Если переменная сравнить (-0.5 <= noise <= 0):
            Присв. переменную установить предмет (block, Темно серый бетон)
        Если переменная сравнить числа легко (0 < noise <= 0.5):
            Присв. переменную установить предмет (block, Светло серый бетон)
        Если переменная сравнить числа легко (noise > 0.5):
            Присв. переменную установить предмет (block, Белый бетон)
     
        Игровое действие поставить блоки (block=block, location=block_pos)
        Присв. переменную += (x, 0)
        Если переменная сравнить число легко (x > 77):
            Присв. переменную = (x, 0)
            Присв. переменную += (z, 0)
        Игровое действие ждать (1)
        Вызвать функцию шум

Заключение
Шум Перлина и симплексный шум
— это мощные инструменты для создания естественных и красивых генераций. Экспериментируйте с параметрами, комбинируйте шум с другими алгоритмами и создавайте уникальные проекты.​

ичо пупс
 

Kodeus

Активный участник
Регистрация
18 Май 2024
Сообщения
15
Спасибо братик, только скажи что за местоположение шума? Типо откуда он начинается или что?
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
370
Спасибо братик, только скажи что за местоположение шума? Типо откуда он начинается или что?
типа ты положи местоположение, которое сдвигаешь, и всё
прикол шума в том, что ты для каждой координаты своё значение ищешь
и для этого мы и сдвигаем координату функией
 

Kodeus

Активный участник
Регистрация
18 Май 2024
Сообщения
15
типа ты положи местоположение, которое сдвигаешь, и всё
прикол шума в том, что ты для каждой координаты своё значение ищешь
и для этого мы и сдвигаем координату функией
Сап
 
Сверху