EN
Andrey Sokolov
Andrey Sokolov
730 subscribers
goals
21 of 500 paid subscribers
Когда я наберу 500 платных подписчиков, смогу больше времени уделять записи видео и разработке аддонов для Blender.
358.51 of $ 1 128 money raised
Донаты || Donates
37.35 of $ 564 money raised
Cделать аддон True Time Remapping бесплатным для всех желающих навсегда. Make True Time Remapping add-on free for everyone forever.
112.78 of $ 113 money raised
На дисковый накопитель 4Tb для хранения бэкапов курса «Blender Избушка».

Математика в 3Д ► 08. Musgrave Texture

Как и Noise Texture, рассмотренная в предыдущем уроке, Musgrave Texture принимает на вход значения текстурных координат для каждой точки трёхмерного пространства, на их основе вычисляет фрактальный шум Перлина и возвращает результат в виде чёрно-белого градиента. Кому интересна математика, используемая для вычисления самого шума Перлина (Perlin Noise), вот статья на английском с иллюстрациями и формулами. Я в эти детали вдаваться не буду, потому что для использования Musgrave Texture в художественных целях они не требуются.
Но всё же, как минимум, что такое фрактал, проговорить стоит, это не так сложно. Согласно всё той же Википедии, фрактал - это множество, обладающее свойством самоподобия. Иными словами, один и тот же паттерн шума используется повторно несколько раз с разным размером, результаты накладываются друг на друга, и в результате мы получаем более детализированный шум. Нарисуйте крестик. На конце каждой линии нарисуйте крестик поменьше. На конце каждой линии каждого маленького крестика нарисуйте крестики ещё поменьше - это и будет идея фрактала. Только вместо крестиков используется паттерн шума Перлин, и итераций может быть больше.
В Noise Texture используется тот же принцип и даже тот же шум Перлина, но в отличие от неё, Musgrave Texture даёт больше возможностей управления настройками вторичных итераций, которые в документации по не вполне понятной причине называются октавами.
🛈 Вообще, с моей точки зрения, и названия самих параметров, и их компоновка в Musgrave Texture выполнены очень неинтуитивно. Они не отражают ни суть того, за что отвечают параметры, ни логику, по которой эти параметры друг с другом взаимодействуют. И если не понимать, какой из них что именно делает, то работа с Musgrave Texture - это хтоническое шаманство в чистом виде.
Ещё одно важное отличие Musgrave Texture от Noise Texture - значения её паттерна в дефолтном виде находятся в диапазоне не от 0.25 до 0.75, а от -1 до 1, и при настройке могут уходить существенно дальше, как в отрицательный, так и в положительный диапазон. Это важно, как для понимания, каких результатов от действий с ней стоит ожидать, так и для того, как происходит её настройка.  
Буду очень благодарен всем, кто решит стать платными подписчиками или разово задонатить на означенные цели. Это сильно мотивирует на продолжение.
Как и в предыдущих уроках, используются текстурные координаты типа Object (в Geometry Nodes - Position). Слева направо показаны:
• Сдвиг вертексов относительно нормалей с помощью геометрических нодов
• Срез на плоскости
• 5 срезов, на небольшом расстоянии, наложенных друг на друга
• трёхмерный волюметрик материал
 Подробнее про то, как настроен проект, здесь.
Musgrave Texture с дефолтными настройками. Обратите внимание, что часть сферы выдавливается наружу, а часть вдавливается внутрь. Это свидетельствует о том, что в тех фрагментах, где паттерн текстуры отображается чёрным цветом значения равны не 0, а уходя в минусовой диапазон. Убедиться в этом можно, самостоятельно поставив после Musgrave Texture нод Math в режиме Absolute, который возвращает числа без учёта знака перед ними (или иными словами переводит отрицательные значения в положительный диапазон).
↑ В отличие от Noise Texture, у которой при нулевом уровне Detail генерируется базовый шум, в Musgrave Texture при нулевом уровне Detail не генерируется ничего.  
↑ Как бы мы ни меняли Scale (размер), пока не добавлен Detail, ничего происходить не будет.
Detail же работает следующим образом. Возьмём для примера исходный паттерн шума - чёрно белые пятна, являющиеся визуальной репрезентацией числовых значений. Пока Detail находится в диапазоне от 0 до 1, он действует, как число-множитель, на которое умножаются значения паттерна шума. Как только мы начинаем добавлять Detail, начинают проявляться белые пятна. И пока Detail не превышает 1, они просто увеличивают яркость.
↑ Как только значение Detail переваливает за 1, паттерн фиксируется и больше не затрагивается, но к нему начинает приплюсовываться его следующая копия (итерация), умножаемая на дробный остаток значения Detail. То есть получается, что чем ближе значение Detail к следующему целому числу, тем больший объём копии паттерна  следующего уровня складывается с суммой предыдущих паттернов.
Однако, пока параметр Lacunarity равен 0, мы этого не увидим, поскольку параметр Lacunarity - это множитель для параметра Scale для каждой последующей итерации, кроме первой.
Ещё раз, мы подходим к пониманию того, как работают настройки Musgrave Texture:
Scale определяет базовый размер паттерна шума - размер его первой итерации, которую мы начинаем видеть, пока добавляем Detail в диапазоне от 0 до 1
Detail после превышения каждого последующего целого числа добавляет одну новую копию исходного паттерна шума к сумме предыдущих копий, а между целыми числами своего значения увеличивает числовые значения (или "яркость" этой копии), умножая их на число от 0 до 1, в соответствии с дробным остатком своего текущего значения.
• Lacunarity определяет, во сколько раз будет отличаться параметр Scale для каждой последующей копии (итерации) паттерна шума. Например, если Scale равен 5, а Lacunarity 2, то Scale первой итерации будет равен 5, Scale второй итерации - 10, третьей - 20 и т.д.
↑ Если параметр Lacunarity равен 1, с каждым уровнем Detail паттерн будет просто увеличивать свою яркость, потому что к нему будут добавляться всё новые и новые его же копии одинакового размера. 
↑ Пока параметр Lacunarity меньше 1, Scale каждой последующей копии будет уменьшаться. А как мы знаем, когда у шума уменьшается Scale, визуально шум увеличивается, поэтому каждая последующая копия паттерна будет визуально больше предыдущей.  
↑ После того, как Lacunarity превысит 1, Scale для каждой копии начнёт увеличиваться, что приведёт к сжатию размера самих копий и увеличению детализации
↑ Увеличение Lacunarity меньше, чем в 2,5 раза при 5 копиях паттерна с исходным Scale 1 уже обеспечивает очень весьма ощутимую детализацию. 
По умолчанию каждая следующая копия паттерна добавляется с тем же диапазоном значений, что и предыдущие - в дефолтном режиме - примерно от -1 до 1. Но нам может понадобиться, чтобы у последующих копий меньшего размера и диапазон значений был меньше. Это можно сделать с помощью параметра Dimension
↑ При увеличении Dimension значения каждой последующей копии шума перед добавлением к сумме предыдущих будут поделены на 1 + Dimension предыдущей копии раз. То есть если Dimension равно 1, то значения каждой последующей копии будут поделены на 1+1, то есть на 2. Таким образом, диапазон значений первой копии шума, добавляемой на уровне Detail между 1 и 2, будет (1 / 2 = 0.5) от -0.5 до 0.5. Диапазон значений второй копии будет (0. / 2 = 0.25) от -0.25 до 0.25 и т.д. Визуально это приводит к сглаживанию более мелкой детализации.
Немного поменяем параметры и пройдёмся ещё раз для закрепления по всем процессу настройки Musgrave Texture:
↑ Выставим Scale (размер базового паттерна шума) на 1, Detail на 1, чтобы видеть только базовый паттерн (количество деталей для начала на
1 и Lacunarity на 2.4, чтобы каждая последующая копия паттерна была в 2.4 раза меньше
предыдущей.
↑ Начнём поднимать уровень Detail, с каждым целым числом добавляя новые копии, а между
целыми числами увеличивая диапазон текущей копии до максимального
↑ Уровень Detail 3
↑ Уровень Detail 4.
Предположим, мы решили, что такой размер детализации нам подходит. Теперь надо сбалансировать значения копий, чтобы сгладить результат
↑ Увеличение уровня Dimension до 1 уменьшит диапазон значений каждой копии в 1+1 = в 2 раза.
↑ Если нам необходимо сохранить больше влияния базового паттерна и
сильнее сгладить его последующие уменьшенные копии, добавляем ещё Dimension. При значении 2,
диапазон значений последней здесь 3-й копии (добавляемой между уровнем Detail от 3 до 4) будет от -0,125 до 0,125, то есть уже совсем незначительным.
🛈 Стоит помнить, что Dimension оказывает самое существенное воздействие именно на последние, обычно самые мелкие копии
паттерна, поэтому при необходимости сохранить все уровни детализации, его нужно
добавлять очень осторожно, чтобы не получилось, что большая часть детализации
практически нивелировалась.
↑ Перед тем, как идти дальше, на всякий случай напомню, что Scale изменяет размер базового паттерна, а, соответственно, и всех последующих его копий.
Теперь, зная главные принципы настройки Musgrave Texture, пройдёмся по остальным режимам, которые он предоставляет. Изменение верхнего параметра, по умолчанию выставленного на 3D, определяет количество измерений текстуры так же, как и в случае с Noise Texture. 1D – всё заливается одним цветом, который меняется при изменении параметра W, в диапазоне значений Musgrave Texture. 2D – двумерная проекция паттерна на плоскость, не учитывает ось Z.
3D – стандартный трёхмерный паттерн
4D – параметр W протягивает трёхмерный паттерн текстуры сквозь 4-е измерение, плавно изменяя его и позволяя получить новые результаты с теми же настройками.
Следующий параметр - тип, определяет используемый алгоритм.
↑ По умолчанию используется алгоритм fBM (fractal Brownian Motion) – фрактальное броуновское
движение. Что такое фракталы мы уже в общих чертах разобрались. Броуновское движение – это хаотичное непредсказуемое перемещение, если кто-то забыл из школьной программы. В документации этот тип описан как воспроизводящий ненатуральный гомогенный
и изотропный результат. У кого-нибудь есть идеи, что это может значить? У меня
нет. Для нас важно, что при добавлении копий, он складывает их значения друг с
другом.
↑Режим Multifractal отличается, во-первых, диапазоном значений: от 0 до 2 для базового паттерна, во-вторых - тем, что при добавлении копий паттерна он не складывает их значения с предыдущими, а перемножает, что, по мнению авторов, делает результат менее явным, зависящим от положения и должно больше походить на настоящий ландшафт. Обратите внимание, что если выставить Detail, Lacunarity и Dimension в 0, то в отличие от fBM алгоритма, Multifractal будет заливать всё не чёрным, а белым цветом - то есть не 0, а 1. Что и понятно, поскольку при умножении на 1 числа остаются самими собой, а при умножении на 0 становятся равными 0.
↑ Если вам потребуется удерживать диапазон значений в режиме Multifractal в пределах от 0 до 1, то чтобы его скорректировать нужно использовать Math в режимах Multiply (умножение) или Divide (деление), выставляя значение с учётом исходного диапазона значений в этом режиме (от 0 до 2), количества перемножаемых копий, определяемого параметром Detail, и понижающего коэффициента Dimension. Или на глазок.
↑ Режим Hybrid Multifractal при добавлении новых копий комбинирует копии паттернов, объединённые с помощью сложения и с помощью умножения. Каким именно образом он их комбинирует, в документации не указано. При нулевых значениях Detail, Lacunarity и Dimension он генерирует не чёрный и не белый цвет, а базовый шум в диапазоне примерно от -1 до 1. В документации описывается, как производящий пики и долины с разным уровнем шероховатости, как если бы настоящие горы росли из плоских плэйнов.
↑ В режиме Hybrid Multifractal у Musgrave Texture появляются два дополнительных параметра - Offset и Gain. Параметр Offset добавляет своё значение к каждой копии паттерна и к самому паттерну, позволяя сдвигать диапазон значений в плюс или в минус.
Gain служит в качестве дополнительного множителя для диапазона значений копий базового паттерна, но не затрагивает сам базовый паттерн. При Gain равном 0 каждый раз при прохождении целочисленного значения результат будет обнуляться, сколько бы уровней Details ни было выставлено.
↑ Режим Ridged Multifractal генерирует абсолютные значения шума - то есть все положительные значения в диапазоне оставляет на месте, а все отрицательные перекидывает в положительный диапазон. Иными словами, в минусовой диапазон он не проваливается.
↑ При этом параметры Offset на каждой итерации срабатывает до абсолютизации значений, а Gain после. То есть если мы просто будем использовать ноды Math в режимах Absolute, Add и Multiply, с этим или другими режимами Musgrave Texture, такого же эффекта добиться не удастся ↓
↑ Последний режим Hetero Terrain, про который в документации написано, что он схож с Hybrid Multifractal, но с некоторой похожестью на реки, генерирует на уровне базового паттерна значения в диапазоне от -1 до 1, у него нет параметра Gain (дополнительного множителя для значений копий), но есть параметр Offset (сдвиг диапазона значений).
↑ Последнее частично решается при помощи добавления Math в режиме Multiply
↑ Вообще использование корректирующей математики - особенно комбинации возведения значений в степень, которое меняет огибающую шума, и корректирующего умножения, часто может помочь привести результаты в какой-то смотрибельный вид.
Math в режиме Smooth Minimum может позволить оставить шум в целом нетронутым, но мягко сгладит слишком острые выделяющиеся пики
 В основном идея корректирующей математики бывает в том, чтобы с помощью Math в режиме Multiply при необходимости привести диапазон к 0 и 1, чтобы адекватно работало Power (возведение в степень) ↓
И помните: прошёл урок сам - поделись им с другими. Ценна любая активная реакция, не обязательно платная подписка: лайк, коммент, что угодно, любое проявление вашего существования. А вот отсутствие реакции никакой ценности для мироздания не несёт. Вы же не хотите расстроить мироздание? Ему сейчас и так не просто.
avatar
Как мне нравится этот контент)
avatar
Илья Самусенко, спасибо! )
avatar
Андрей, вы лучший.
avatar
Дмитрий Казынкин, спасибо!
avatar
Вероятно, в документации слово "октава" используют по аналогии с музыкой. В музыке каждая нота следующей октавы имеет в два раза большую частоту, чем аналогичная нота предыдущей. Так и в Musgrave Texture каждый следующий слой шума отличается от предыдущего в какое-то фиксированное количество раз.
Спасибо за урок, кстати. Это пока самое понятное объяснение принципа работы этой текстуры, что я видел.
avatar
Random Dude, терминологическое сравнение с музыкой как бы напрашивается, конечно, но октава - это всё же интервал, у нот которого частота отличается именно в два раза. Это делает её не септимой, не квинтой, не, простите за выражение, секстой, а именно октавой - восьмой ступенью лада, эквивалентной в гармоническом плане первой ступени. Поэтому мне и кажется не вполне уместным, что октавами называют нечто, не являющееся ни вдвое отличающимся по каким-либо параметрам, ни эквивалентным по субгармоникам, ни располагающееся выше/ниже относительно друг друга, ни имеющее что-либо общее с цифрой 8. По крайней мере, меня, как музыканта, это вводит в заблуждение относительно того, как они работают. Я даже подсознательно скорее готов принять, что это какой-то параллельный термин из какой-нибудь физики, с которым я не знаком. ))
avatar
По-моему, этот больше подходит для генерации ландшафтов, чем нойс.
avatar
Денис Соколинский, в документации авторы так и пишут, но я считаю, зачем использовать что-то одно, когда можно использовать всё )
avatar
Эх, сейчас Масгрейв совсем не тот уже (вер. Blender 4.1) но было интересно. HeartПридется разбираться)
avatar
Максим, в новых версиях его совместили с Noise Texture, там есть все те же режимы
avatar
Andrey Sokolov, ого, спасибо что ответили! Уже изучил изменения.

Subscription levels

1-й уровень

$ 2,26 per month
1-й уровень

2-й уровень

$ 5,7 per month
2-й уровень

3-й уровень

$ 11,3 per month
3-й уровень

4-й уровень

$ 22,6 per month
4-й уровень

5-й уровень

$ 57 per month
5-й уровень

Максимальная поддержка

$ 113 per month
Максимальная поддержка
Go up