Материалы, UV-развёртка и процедурные текстуры
- О чём эта тема
- Как модель получает поверхность: узловые материалы и Principled BSDF, наложение картинок через UV-развёртку, процедурные текстуры — и создание материалов кодом на Python.
- Аннотация
- Конспект начинается с узловой системы материалов: сокеты, завершающая нода вывода и главный шейдер — Principled BSDF с его основными параметрами. Затем — два способа одеть модель: растровая текстура через UV-развёртку (пространство UVW, квадрат 0–1, острова развёртки) и процедурные текстуры, которым развёртка не нужна: шум, волны, плитка; смешивание материалов разбирается на стенде-микшере. Отдельный раздел — скриптинг: материалы можно собирать кодом на Python через модуль bpy, что превращает настройку сотни тайлов из ручной работы в цикл. Завершают конспект правила цветовых пространств и типичные ошибки развёртки.
- Пререквизиты
- B03 — первый материал и Base Color; B05 — модификаторы (развёртке предшествует готовая геометрия). Python-код читается без подготовки, если пройден C# из A07: синтаксис проще.
- Мотивация
- Контейнеры из B05 залиты ровным цветом — в игре такие смотрятся пластиковыми муляжами. Поверхности нужны царапины, грязь, швы. Рисовать текстуру для каждого тайла вручную — недели; процедурные текстуры собирают «камень» или «кирпич» из математических узоров за минуты, а скрипт на Python раздаёт их сотне объектов за секунды. Для набора тайлов из A13 это единственный реалистичный путь.
1. Ноды: материал как схема
Материал в Blender — не набор галочек, а схема из узлов (нод): базовые данные проходят через цепочку операций, и каждая нода меняет свойства материала. У ноды есть сокеты — кружки на корпусе: слева входы, справа выходы; соединяя выход одной ноды со входом другой, вы строите материал как конвейер.
Где всё это находится. Верхняя панель окна → вкладка рабочего пространства Shading: сверху откроется вьюпорт в режиме предпросмотра материалов, снизу — редактор шейдеров (Shader Editor). Выберите объект — и увидите схему его материала; если материала ещё нет, кнопка New создаст его сразу с парой нод Principled BSDF → Material Output. Дальше как в вьюпорте: новая нода — Shift + A (категории: Input, Texture, Color, Converter, Shader…; быстрее всего — через строку поиска в этом же меню), соединение — потянуть мышью от сокета к сокету, разрыв связи — потянуть конец связи в пустоту. Навигация привычная: колесо — зум, средняя кнопка — панорама.
Особая нода — Material Output («Вывод материала»): у неё нет выходов, только входы Surface, Volume и Displacement. Она ничего не вычисляет — просто принимает готовую цепочку и применяет её к объекту. Любая схема материала заканчивается на ней.
1.1. Principled BSDF
Главная рабочая нода — Principled BSDF, композитный шейдер: настройки десятка отдельных шейдеров собраны в одном узле. Знакомство с ним началось в B03 с одного поля Base Color; вот как выглядит сама нода и параметры, которые понадобятся чаще всего:
| Параметр | За что отвечает |
|---|---|
| Base Color | Цвет поверхности — сюда же подключаются текстуры. |
| Metallic | Металличность: 0 — диэлектрик, 1 — металл. |
| Roughness | Шероховатость: 0 — зеркальный глянец, 1 — полностью матовая поверхность. |
| Specular | Сила отражения-блика у неметаллов. |
| Emission / Strength | Цвет и сила собственного свечения — неон из B03 живёт здесь. |
| Transmission + IOR | Прозрачность «сквозь толщу» и показатель преломления — стекло, вода. |
| Alpha | Прозрачность поверхности: 1 — непрозрачна. |
| Subsurface | Подповерхностное рассеивание — свет, проникающий в материал: кожа, воск, мрамор. |
Практическое правило: большинство «обычных» материалов — это только Base Color + Metallic + Roughness; остальные параметры включаются под конкретный эффект. Как два главных ползунка меняют поверхность, видно на тестовом шаре:
2. UV-развёртка: как картинка ложится на модель
Чтобы наложить на модель растровую картинку, нужно объяснить движку, какая точка картинки соответствует какой точке поверхности. Для этого рядом с привычным пространством XYZ вводится текстурное пространство UVW: U — ширина, V — высота (W — глубина, нужна редко, поэтому обычно говорят просто «UV»). UV-развёртка — плоская «выкройка» модели: каждая вершина меша получает вторые координаты, уже на картинке.
Развёртка почти всегда живёт в квадрате 0–1: за его пределами текстура повторяется. Связные куски выкройки называют островами (островками, shells) — выкройка кубика, например, крест из шести граней или несколько отдельных лоскутов. Работают с развёрткой в рабочем пространстве UV Editing: слева UV-редактор, справа 3D-вьюпорт.
2.1. Как развернуть конкретный объект: пошагово
Возьмём контейнер из B05 и сделаем ему развёртку:
- Открываем рабочее пространство UV Editing (верхняя панель): слева — UV-редактор, справа — вьюпорт.
- Выбираем объект → Tab (режим редактирования) → A (выделить всю геометрию): разворачивается только выделенное.
- Размечаем швы — рёбра, по которым «выкройку» разрежут: выделяем цепочку рёбер (Alt + ЛКМ для петли) → Ctrl + E → Mark Seam; шов подсветится красным, как на модели ниже. Куда класть швы, подсказывает картонная коробка: там, где она склеена.
- U → Unwrap — Blender режет по швам и раскладывает острова в квадрат 0–1; они появятся слева в UV-редакторе.
- Правим раскладку прямо в UV-редакторе — знакомые G / R / S работают и здесь: острова можно двигать, поворачивать и масштабировать (крупнее остров — больше пикселей текстуры достанется этой части модели).
Для технических объектов вместо ручных швов часто хватает автомата: U → Smart UV Project режет модель по острым углам сам. Проверить качество развёртки помогает тестовая «шахматка»: в UV-редакторе Image → New → Generated Type: UV Grid, подключить её в Base Color — если клетки на модели квадратные и одинаковые, растяжений нет; поплывшие клетки показывают, какой остров надо поправить.
Типовая связка нод для растровой текстуры: Texture Coordinate (откуда брать координаты — из UV, из положения объекта…) → Mapping (сдвиг, поворот и масштаб текстуры — им удобно «тайлить» узор по поверхности) → Image Texture (сама картинка) → Base Color.
2.2. Откуда берутся сами текстуры
Три источника, по нарастанию самостоятельности:
- Готовая картинка — файл с диска: в ноде Image Texture кнопка Open. Бесплатные библиотеки PBR-текстур перечислены в «Источниках».
- Нарисованная по модели: рабочее пространство Texture Paint позволяет рисовать кистью прямо по развёрнутой модели (сначала создаётся пустая картинка: UV-редактор → Image → New, затем она подключается в материал). Без развёртки этот путь не работает — потому она и шла первой.
- Процедурная — собранная из нод, раздел 3 ниже.
3. Процедурные текстуры и смешение
Второй путь — обойтись без картинок вовсе: процедурные текстуры считаются формулой прямо в трёх измерениях, поэтому им обычно не нужна развёртка, и они бесшовно продолжаются по любой поверхности. Основной набор:
- Noise Texture — «перлиновский» шум: пятна, разводы, органика;
- Wave Texture — полосы и волны: дерево, ткань, линии развёртки экранов;
- Brick Texture — кирпичная кладка: параметры смещения и «выталкивания» рядов управляют рисунком швов;
- Gradient Texture («градиентная карта») — плавный переход, удобный как маска.
Сложные материалы собираются смешением: нода Mix берёт два входа — два цвета или два целых шейдера — и смешивает их по коэффициенту Fac. Самое интересное начинается, когда вместо ручного коэффициента в Fac подаётся текстура: шум решает, где на поверхности «камень», а где «мох». Именно так со слайдов собирается «светлый камень»: два диффузных шейдера + Mix, а маской смешения работает связка «шум → градиентная карта».
Мини-версия редактора нод: два цвета и текстура-маска в ноде Mix. Выберите узор, покрутите масштаб и коэффициент — сфера-превью пересчитывается сразу. Это та же схема, что на скриншотах выше, только без Blender под рукой.
4. Материалы кодом: модуль bpy
Всё, что делается мышью, в Blender доступно и из кода: встроенный Python-модуль bpy управляет объектами, материалами и нодами. Это единственное место траектории, где код не на C#: скриптовый язык Blender — Python, и переписать его нельзя. Синтаксис после C# читается легко: нет типов у переменных, блоки выделяются отступами вместо фигурных скобок.
Минимальный рабочий скрипт — создать материал с шумовой текстурой и повесить его на активный объект (вкладка Scripting → New):
import bpy # активный объект — тот, что выбран последним obj = bpy.context.active_object # новый материал с включёнными нодами mat = bpy.data.materials.new(name="Stone_Material") mat.use_nodes = True obj.data.materials.append(mat) nodes = mat.node_tree.nodes links = mat.node_tree.links # готовые ноды: Principled BSDF и Material Output создаются вместе с материалом bsdf = nodes["Principled BSDF"] # добавляем текстуру шума и настраиваем масштаб noise = nodes.new(type="ShaderNodeTexNoise") noise.location = (-300, 300) # позиция ноды на схеме — только для красоты noise.inputs["Scale"].default_value = 5.0 # соединяем: выход Color шума → вход Base Color шейдера links.new(noise.outputs["Color"], bsdf.inputs["Base Color"])
Схема всегда одна: создать ноду через nodes.new, настроить её входы через inputs[...].default_value, соединить сокеты через links.new(выход, вход). Смысл затеи — повторяемость: обернув этот код в цикл по объектам, вы раздадите материалы всем 50–100 тайлам будущего генератора уровней из A13 одной командой, а поменяв одно число — перенастроите всё разом.
Контрольные вопросы
-
Сокеты — кружки входов (слева) и выходов (справа), через которые ноды соединяются в цепочку. Material Output — завершающая нода: выходов нет, входы Surface, Volume и Displacement; она ничего не вычисляет, а применяет собранную схему к объекту.
-
Base Color (цвет), Metallic (металл или диэлектрик) и Roughness (глянец или матовость). Остальные параметры — Emission, Transmission, Subsurface и другие — включаются под конкретные эффекты.
-
Плоская «выкройка» модели: каждой вершине меша назначаются координаты U и V на картинке. Развёртка размещается в квадрате от 0 до 1 по обеим осям; за его пределами текстура повторяется. Связные куски выкройки — острова.
-
UV Editing → Tab и выделить всё (A) → разметить швы по рёбрам «разреза» (Ctrl + E → Mark Seam) → U → Unwrap → поправить острова в UV-редакторе (G/R/S). Для техники быстрее Smart UV Project; растяжения проверяются тестовой шахматкой UV Grid.
-
sRGB — для картинок с цветом (Base Color). Non-Color — для картинок с данными: масок, карт нормалей, смещения. Ошибка в этой настройке даёт выцветшие текстуры и неправильный рельеф.
-
Они вычисляются формулой прямо в трёх измерениях (по координатам точки), поэтому бесшовно покрывают любую поверхность без выкройки. Шум, волны, плитка — типичные примеры.
-
Нодой Mix: два шейдера на входах, а в коэффициент Fac вместо числа подаётся текстура-маска (например, шум через градиентную карту) — она решает, где на поверхности проявится первый материал, а где второй.
-
Создать ноду (nodes.new с типом), настроить её входы (inputs[...].default_value) и соединить сокеты (links.new(выход, вход)). Плюс подготовка: новый материал с use_nodes = True, добавленный в obj.data.materials.
Источники
- Lesson 6 — Materials and UVW // Blender Beginner : [учебный курс]. — 2020. — URL: https://blenderbeginner.readthedocs.io/en/latest/lessons/lesson6.html (дата обращения: 08.07.2026).
- Shader Nodes // Blender Manual : [сайт]. — URL: https://docs.blender.org/manual/ru/latest/render/shader_nodes/index.html (дата обращения: 08.07.2026).
- UV Editing // Blender Manual : [сайт]. — URL: https://docs.blender.org/manual/ru/latest/editors/uv/index.html (дата обращения: 08.07.2026).
- Blender Python API : Documentation : [сайт]. — URL: https://docs.blender.org/api/current/ (дата обращения: 08.07.2026).
- ambientCG : бесплатные PBR-текстуры (лицензия CC0) : [сайт]. — URL: https://ambientcg.com (дата обращения: 08.07.2026).