Blender — Заметка о запекании нормалей. Baking normals.
Данная заметка актуальна для Blender 2.79 и младше.
Опорные уроки:
Примечание: Нейтральное значение нормали по цвету: красный канал — 128; зелёный канал — 128; синий канал — 255.
-
-
- Убедиться, что выбран Cycles Render.
- Создать базовую текстуру в UV/Image Editor:
-
В появившемся окне настроить параметры:
Name — любое.
Width, Height — кратное степени двойки (512х512, 1024х1024 и т.д.). Размер лучше выставлять в два раза больший, чем целевое разрешение. Это связано с тем, что уменьшение текстуры под целевое разрешение в растровом 2D редакторе даёт существенно меньше искажений, чем запекание напрямую.
Color — любой. Позже он будет заменён на содержимое запечённой текстуры нормали.
Alpha — отключить, не требуется в большинстве случаев.
Generated Type — Blank, если нужна просто текстура нормали.
32 bit float — включить глубину цвета 32-бит, что позволит сохранить в формат .exr (32-бит). Этот формат будет промежуточным, потом можно пересохранить в .tif (16-бит). Высокая глубина цвета == повышенная точность, которая даст запас для сглаживания и снижения разрешения без существенных искажений.
- Для низкополигональной модели создать материал с обязательным наличием нода Image Texture. Без него процесс запекания не запустится. Подключить в него ранее созданную в UV/Image Editor «пустую» текстуру. В настройках нода вместо Color выбрать Non-Color Data, что необходимо для текстур нормалей.
-
Настроить параметры запекания в Properties / Render / Bake.
Bake Type — выбрать Normal.
Space — выбрать Tangent.
Swizzle — если под OpenGL, то оставить как есть, если под DX, то выбрать —Y-.
Margin — «обводка» по границе UV-острова на запечённой текстуре. Служит для избежания «вылезания» фона текстуры при переключении mip-уровней. Для разрешения 4096х4096 достаточно 16-24 пикселей, для 2048х2048 — 8-12 пикселей. Само собой, между UV-островами и границами UV-пространства должно быть достаточное расстояние, чтобы не было наслоения.
Clear — включить.
Selected to Active — запечь информацию с выделенного объекта на активный. В данном примере сначала будет выделена высокополигональная модель, а потом к выделению добавится низкополигональная.
Cage — использовать дополнительную модель, охватывающую активный объект (модель, на которую производится запекание), из которой будут испускаться лучи. В данном случае применять не будем.
Ray Distance — подобрать значение, при котором не будет артефактов запечки, при условии, что всё в порядке с моделями и развёрткой. Пробовать значения от 0,05 — 0,1. - У низкополигональной модели должна быть сделана развёртка.
-
Нормали вершин должны быть настроены (применено сглаживание, обозначены жёсткие рёбра).
-
Сначала выделить высокополигональную модель, а потом добавить в выделение низкополигональную. Главное не перепутать.
- В Properties / Render / Bake нажать Bake. Первый рендер может быть относительно долгим.
-
Результат будет отображён в UV/Image Editor. На вид с нормалью что-то не так, но не стоит спешить с решением этой «проблемы».
Ещё бывает, что с нормалью всё совсем не так:
В данном случае жёлтый цвет указывает, что лучи не пропекли геометрию. Необходимо проверить длину лучей (Ray Distance) или корректность Cage, если применяется.
- Перед какими-либо манипуляциями с результатом необходимо его сохранить в файл, иначе он будет потерян и придётся запекать повторно. Сохранить результат можно с помощью F3 или Image / Save As Image. Сначала нужно сохранить в .exr (32-бит), иначе будут проблемы с переключением в цветовое пространство sRGB.
-
После сохранения стоит обратить внимание, что в N-панели UV/Image Editor в выпадающем списке Source вместо Generated стало Single Image и появился путь до сохранённой текстуры:
-
Теперь можно исправить «проблему». Заключается она в цветовом пространстве (Color Space). После сохранения в .exr оно переключается на Linear. В N-панели UV/Image Editor, в выпадающем списке Color Space переключить с Linear на sRGB. Теперь текстура нормали отображается привычным образом.
-
Теперь нужно вновь пересохранить в «исправленном» виде сначала в .exr, а потом можно .tif (16-бит). В формате .exr текстура нормали не будет работать корректно в Cycles, поэтому нужно пересохранить в формат «попроще». 16-бит точности в формате .tif будет достаточно.
Итоговый результат в Krita:
- Убедиться, что выбран Cycles Render.
-