Траектория «Геймдев» · линия B · конспект 6 из 8

Материалы, 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; вот как выглядит сама нода и параметры, которые понадобятся чаще всего:

Нода Principled BSDF: выход BSDF справа, входы Base Color, Metallic, Roughness, IOR, Alpha, Normal и свёрнутые секции Subsurface, Specular, Transmission, Coat, Sheen, Emission
Нода Principled BSDF: базовые входы сверху, редкие — в свёрнутых секциях. Источник: Blender Manual
ПараметрЗа что отвечает
Base ColorЦвет поверхности — сюда же подключаются текстуры.
MetallicМеталличность: 0 — диэлектрик, 1 — металл.
RoughnessШероховатость: 0 — зеркальный глянец, 1 — полностью матовая поверхность.
SpecularСила отражения-блика у неметаллов.
Emission / StrengthЦвет и сила собственного свечения — неон из B03 живёт здесь.
Transmission + IORПрозрачность «сквозь толщу» и показатель преломления — стекло, вода.
AlphaПрозрачность поверхности: 1 — непрозрачна.
SubsurfaceПодповерхностное рассеивание — свет, проникающий в материал: кожа, воск, мрамор.

Практическое правило: большинство «обычных» материалов — это только Base Color + Metallic + Roughness; остальные параметры включаются под конкретный эффект. Как два главных ползунка меняют поверхность, видно на тестовом шаре:

Пять шаров с ростом Metallic от 0 до 1: от матово-жёлтого пластика до зеркального золота
Metallic от 0 до 1: пластик превращается в металл. Источник: Blender Manual
Пять шаров с ростом Roughness: от зеркального глянца до полностью матовой поверхности
Roughness от 0 до 1: глянец становится матовым. Источник: Blender Manual

2. UV-развёртка: как картинка ложится на модель

Чтобы наложить на модель растровую картинку, нужно объяснить движку, какая точка картинки соответствует какой точке поверхности. Для этого рядом с привычным пространством XYZ вводится текстурное пространство UVW: U — ширина, V — высота (W — глубина, нужна редко, поэтому обычно говорят просто «UV»). UV-развёртка — плоская «выкройка» модели: каждая вершина меша получает вторые координаты, уже на картинке.

Слева UV-редактор с развёрткой кубика и текстурой точек игральной кости, справа 3D-вид с этой текстурой на кубике
Развёртка кубика и результат наложения текстуры. Источник: курс Blender Beginner

Развёртка почти всегда живёт в квадрате 0–1: за его пределами текстура повторяется. Связные куски выкройки называют островами (островками, shells) — выкройка кубика, например, крест из шести граней или несколько отдельных лоскутов. Работают с развёрткой в рабочем пространстве UV Editing: слева UV-редактор, справа 3D-вьюпорт.

Квадрат UV-пространства с несколькими островами развёртки, два острова выделены
Острова развёртки в квадрате 0–1. Источник: курс Blender Beginner

2.1. Как развернуть конкретный объект: пошагово

Возьмём контейнер из B05 и сделаем ему развёртку:

  1. Открываем рабочее пространство UV Editing (верхняя панель): слева — UV-редактор, справа — вьюпорт.
  2. Выбираем объект → Tab (режим редактирования) → A (выделить всю геометрию): разворачивается только выделенное.
  3. Размечаем швы — рёбра, по которым «выкройку» разрежут: выделяем цепочку рёбер (Alt + ЛКМ для петли) → Ctrl + E → Mark Seam; шов подсветится красным, как на модели ниже. Куда класть швы, подсказывает картонная коробка: там, где она склеена.
  4. U → Unwrap — Blender режет по швам и раскладывает острова в квадрат 0–1; они появятся слева в UV-редакторе.
Голова обезьянки Сюзанны с размеченными красными швами по контуру головы, вокруг глаз и ушей
Размеченные швы (красные рёбра) на модели перед Unwrap. Источник: Blender Manual
  1. Правим раскладку прямо в 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. Откуда берутся сами текстуры

Три источника, по нарастанию самостоятельности:

Типичная ошибка Рассчитывать, что процедурный материал переедет в Unity вместе с моделью. Не переедет: ноды Blender — внутренняя кухня Blender, формат .fbx переносит только простые параметры и растровые текстуры. Процедурный узор для игры запекают в картинку (Render Properties → движок Cycles → секция Bake, цель — созданная через Image → New текстура), и в Unity едет уже она. Подробно этот маршрут пройдём в B08.
Цепочка нод: Texture Coordinate, затем Mapping, затем Image Texture
Стандартная цепочка наложения текстуры. Источник: курс Blender Beginner
Типичная ошибка Неправильное цветовое пространство у Image Texture. Правило двух строк: картинка с цветом (Base Color) — оставить sRGB; картинка с данными (маска, карта нормалей, смещение) — переключить на Non-Color. Перепутанное значение даёт «выцветшие» текстуры и вздутые не туда нормали, а виновата не модель — настройка.
Типичная ошибка Острова развёртки, наложенные друг на друга. Пока текстура симметричная, перекрытие даже экономит место, но при рисовании по модели и запекании света перекрытые области получают одинаковые пиксели — грязь и артефакты. Для уникального текстурирования каждый остров должен занимать своё место в квадрате 0–1.

3. Процедурные текстуры и смешение

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

Сфера с процедурным шумом на поверхности
Noise Texture в деле. Источник: курс Blender Beginner
Схема нод: Brick Texture подключена к Base Color шейдера Principled BSDF
Brick Texture → Base Color

Сложные материалы собираются смешением: нода Mix берёт два входа — два цвета или два целых шейдера — и смешивает их по коэффициенту Fac. Самое интересное начинается, когда вместо ручного коэффициента в Fac подаётся текстура: шум решает, где на поверхности «камень», а где «мох». Именно так со слайдов собирается «светлый камень»: два диффузных шейдера + Mix, а маской смешения работает связка «шум → градиентная карта».

Стенд · смешение двух материалов текстурой

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

Цвет A + Цвет B → Mix(Fac = текстура) → Base Color
нода · цвета
Цвет A
Цвет B
нода · текстура (маска Fac)
Масштаб (Scale)6
нода · Mix
Влияние маски1.0

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 одной командой, а поменяв одно число — перенастроите всё разом.

Контрольные вопросы

Источники

  1. Lesson 6 — Materials and UVW // Blender Beginner : [учебный курс]. — 2020. — URL: https://blenderbeginner.readthedocs.io/en/latest/lessons/lesson6.html (дата обращения: 08.07.2026).
  2. Shader Nodes // Blender Manual : [сайт]. — URL: https://docs.blender.org/manual/ru/latest/render/shader_nodes/index.html (дата обращения: 08.07.2026).
  3. UV Editing // Blender Manual : [сайт]. — URL: https://docs.blender.org/manual/ru/latest/editors/uv/index.html (дата обращения: 08.07.2026).
  4. Blender Python API : Documentation : [сайт]. — URL: https://docs.blender.org/api/current/ (дата обращения: 08.07.2026).
  5. ambientCG : бесплатные PBR-текстуры (лицензия CC0) : [сайт]. — URL: https://ambientcg.com (дата обращения: 08.07.2026).