Gamedev
XYZ
1825

Оптимизация графика в Substance Designer

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

В закладки
Слушать

Но если мы работаем в команде, делаем материалы для стока или используем связку Designer-Painter, то оптимизация приобретает огромное значение. Никому не понравится, если относительно простой материал будет прогружаться очень тяжело и медленно, до предела нагружая компьютер. В этой статье Василина Сиротина, ментор курса «Процедурный трип», расскажет, как сделать материал более быстрым и лёгким.

Работа из портфолио Василины

Условно есть два вида оптимизации: техническая, связанная с ускорением работы и рендера материала, и визуальная, которая скорее относится к организации графика, что тоже важно. Рассмотрим оба вида.

Техническая оптимизация

Техническая оптимизация графика сводится к ускорению вычислений. В верхней части графа есть полка с функциями настройки вида графика. Если нажать на иконку «i» (infomation), то появится всплывающее окно, в котором можно выбрать, какую информацию отображать в графе, — в том числе и тайминг, который позволяет отслеживать, сколько времени требуется на просчёт каждой ноды.

С помощью тайминга легко определить, на что требуется больше вычислений. Чем меньше миллисекунд занимает вычисление какой-либо ноды, тем легче и быстрее материал. Но это не значит, что нельзя использовать «тяжёлые» ноды. Наоборот: можно и нужно, если это требуется. Просто не стоит забывать о «чистке» графика от лишних действий, которые его нагружают.

Далее опишем способы, при помощи которых можно сделать материал более лёгким.

1. Размеры нод Uniform Color и Gradient Linear

Когда используется однотонный цвет, нет смысла оставлять ему большое разрешение, поскольку на конечный результат это не влияет. Зато высокие значения разрешения влияют на производительность.

Поэтому имеет смысл в ноде Uniform Color переключить output size с Relative to Parent на Absolute и выставить значения 16 на 16 пикселей, — но не ниже. Значения ниже 16х16 только замедлят рендеринг, — о чём предупреждают разработчики.

Градиенты типа Gradient Linear можно сжать до 16 пикселей по оси, по которой их значения не меняются.

2. Ноды — драйверы

Ноды типа Perlin Noise, Gaussian Noise и Clouds2 имеют мягкие градиенты и мало шума. Они часто становятся драйверами для нод, которые деформируют изображение: Slope Blur Grayscale, Warp, Directional Warp, Mosaic Grayscale и других.

Здесь можно «порезать» разрешение ноды-драйвера в целях оптимизации. Конечный результат практически не изменится, зато тайминг уменьшится в разы. Но с остальными шумами стоит быть осторожнее в плане урезания разрешения, — чем фактурнее шум, тем сильнее его разрешение влияет на конечный результат.

Важно: при смешивании урезанной ноды с нодой обычного размера через Blend нужно внимательно следить, чтобы бленд и весь дальнейший график вместе с ним не поменял разрешение на урезанное.

Если бленд меняет разрешение, внутри него нужно поменять Output Size с Relative to Input на Relative to Parent. В таком случае разрешение урезанной ноды не поменяет разрешение последующей цепочки нод.

3. Tile Generators

В Substance Designer достаточно инструментов для создания тайлов. Tile Sampler — самый популярный, потому что в нём больше всего настроек и гибкости. Это очень полезная нода, но и очень дорогая.

Иногда без неё не обойтись, но, чаще всего, ее легко можно заменить более дешевыми аналогами: Splatter, Tile Generator и Tile Random. Они отлично справляются с несложными тайлами, будь то кирпичи, плитка, деревянные доски или черепица.

4. Shape and Tile Generator

Если ты генерируешь тайл из шейпа, и внутри тайла он будет небольшого размера, то разрешение шейпа можно также понизить. Это не повлияет на результат, но сделает график легче.

5. Оптимизация Flood Fill

В ноде Flood Fill есть параметр, в котором можно выбрать режим просчёта градиентов. По умолчанию всегда стоит режим Complex or big shapes, и он почти всегда работает корректно, но часто его меняют на No failure mode, чтобы избежать ошибок. Этот режим — более «дорогостоящий». Если в ноду Flood Fill подключена жёсткая чёрно-белая маска, то ошибок возникнуть не должно: следовательно, режима No failure mode в таком случае нужно избегать ради оптимизации.

С помощью цепочки нод из Flood Fill часто получают разные варианты тайла в градациях серого (нода Flood Fill to Random Grayscale), чтобы получить разнообразные маски.

В этом случае дублирование одной и той же ноды с разными настройками можно заменить на Flood Fill to Random Color + RGBA Split. Таким образом, из RGBA Split мы получим четыре вариации градаций серого, что очень упрощает работу.

6. RGBA Merge + RGBA Split

В работе с материалом бывают такие моменты, когда нужно разные тайлы и формы прогнать через одну и ту же цепочку действий. А каждая повторяющаяся цепочка с одинаковыми данными уводит нас от оптимизации. Есть прекрасный способ избежать дублирования и облегчить себе работу: это нода RGBA Merge.

Суть метода в следующем: в ноду RGBA Merge подключаются нужные тайлы или формы, в три канала по цветам. После чего результат этой ноды можно подключить в цепь действий, где все три формы будут изменяться. После чего цветную ноду можно снова разделить по каналам с помощью RGBA Split и получить исходные чёрно-белые карты, но уже в измененном виде. Так несколько одинаковых цепочек действий можно заменить всего лишь одной, сократив при этом количество нод.

Важно: для ноды RGBA Merge как цветной нужно использовать соответствующие ноды с припиской «Color»: Slope Blur Color, Blur HQ Color и тд.

7. Сэмплы

В нодах типа AO, Slope Blur, Mosaic Grayscale, Blur HQ и некоторых других, есть возможность настраивать сэмплы. Чем выше сэмплы, тем качественнее результат и, соответственно, больше тайминг. Поэтому можно смело урезать сэмплы с 32 до 16 или меньше, в зависимости от результата. В большинстве случаев это практически не повлияет на результат, но заметно уменьшит тайминг.

Качество внутри карты АО напрямую связано со скоростью рендеринга этой ноды. Поэтому, если разница в сэмплах не критична, а материал по разрешению не выше 2к, то можно ставить сэмплы на 8 и ниже, — это уменьшит тайминг чуть ли не вдвое.

8. Замена дорогостоящих нод на более дешевый и быстрый аналог

Некоторые шумы сильно увеличивают затраты на вычисления в зависимости от масштаба рисунка. Чем выше scale, тем медленнее нода. Это относится к таким нодам, как BnW Spots, Directional Noise, Cells, Dirt, а также к другим, в которых можно увеличить scale. Поэтому, когда требуется добавить в текстуру мелкий шум, лучше заменить его более дешевым и быстрыми аналогами: White Noise, Fractal Sum Base, Blue Fast Noise и Anisotropic Noise.

Нода Blur HQ размывает более качественно, чем простой Blur, но и весит она, соответственно, больше. Поэтому в случаях, когда можно ограничиться обычным Blur, лучше его и использовать. Таким же образом можно заменить Anisotropic Blur на Directional Blur.

9. Switch, Blending mode Switch

Часто бывает нужно сделать процедурный материал, в котором можно менять основной паттерн. Например, округлые камни заменить квадратными, поменять одну форму черепицы на другую — и тому подобное. Для таких случаев приходится создавать разные формы и вариации паттернов, которые также будут занимать дополнительное место в графе и памяти.

Для оптимизации этого процесса придумали Blending mode Switch в ноде Blend, который заменяет один паттерн на другой. А на основе Blending mode Switch сделали ноду Switch, более удобный в использовании аналог этого режима. Переключение между паттернами происходит только в целых значениях: 0 или 1 в ноде Blend и False/True в ноде Switch.

Прелесть в том, что в двух этих нодах рендерится только тот паттерн, который вы укажете. Другой просчитываться не будет, — следовательно, не даст дополнительной нагрузки на график.

10. Blend vs Normal Blend

В сложных составных материалах приходится дорабатывать Normal Map, чтобы сделать его более сбалансированным. Для этого обычно используют ноду Normal Blend, в которой смешивают различные элементы, — часто с разной настройкой интенсивности. Нода Normal Blend безукоризненно справляется с этой задачей, но, используя обычный бленд с блендинг модом Copy можно добиться абсолютно идентичного и более дешёвого результата.

Конечно, Normal Blend математически даст более корректный результат: но и тут будет проще после обычного бленда добавить ноду Normal Normalize, которая также не требует больших вычислительных затрат и при этом корректирует карту нормалей, — если вдруг в ней есть незаметные артефакты.

11. Повторное использование нойзов для модификации рисунка

Перед тем, как создавать новый нойз в графике, стоит пробежаться по уже существующим и посмотреть, смогут ли они справится с ещё одной задачей. И если да, — а чаще всего так и есть, — то эти нойзы можно смело использовать по второму разу. Это не только оптимизирует весь график, но и упростит работу. Теперь не придётся постоянно пересоздавать и перенастраивать одинаковые шумы.

Используемый нойз можно видоизменить с помощью таких нод, как Transform или Safe Transform — если нужно просто подвигать или повернуть рисунок, либо исказить его с помощью различных блюров, а также смешать с другим нойзом через ноду Blend, получив тем самым свой уникальный рисунок.

Но, если наш компьютер не «вскипает», и перед нами не стоит задачи найти решение для оптимизации нойзов, то об этом можно смело забыть. Этот выбор всегда остается за художником.

12. Используй 8bit, когда 16bit не нужно

Все ноды, в которых идет работа над цветом материала или рафнессом, можно смело урезать с 16bit до 8bit. Это никак не отразится на результате, зато снизит нагрузку на память на несколько процентов.

Важно: изменение формата других карт материала — таких, как Height, AO, и Normal, — на 8bit приведёт к заметным артефактам.

13. Alpha blending в ноде «Blend»

В ноде Blend можно выбрать режим Alpha blending. Он определяет то, как работает смешивание цветных нод, в которых есть альфа-каналы. Это полезно в случаях, когда нужно подмешать какой-либо цвет с альфа-каналом к другому цвету и учесть при этом прозрачные области.

Режимы с учётом альфы более затратны. Поэтому Alpha blending можно отключить, когда он не нужен: это немного уменьшит тайминг.

Визуальная оптимизация

Визуальная оптимизация — это организация графика для более удобного использования и ориентирования. Создание больших и сложных графиков быстро приводит к путанице, — особенно если возвращаться к своим старым материалам. Поэтому ниже мы поговорим о некоторых инструментах и методах организации рабочего пространства.

1. Рамки

Очень полезно выделять рамкой основные этапы создания материала. Например, цепочки создания цвета, рафнесса, хайта, нормала и т.д. — каждую такую цепь действий можно выделить рамкой и подписать. Это очень упрощает чтение графика.

Дополнительный плюс в том, что мы можем настроить цвет и прозрачность каждой рамки. А ещё подписи рамок всегда отображаются в одном и том же масштабе, — даже если мы очень сильно удалились от графа.

При желании каждый важный бленд можно выделять рамкой и определённым цветом. Главное, чтобы впоследствии было легко разобраться в собственном графике.

2. Комментарии и пины

Комментарии и пины — очень полезное дополнение к рамкам графика.

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

Пины бывают очень полезны, когда нужно быстро переключаться между областями графика, которые находятся далеко друг от друга.

Для этого на любой комментарий, ноду или рамку можно добавить и подписать пин. После этого между этими пинами можно будет циклично переключаться при помощи клавиши F2 (Shift+F2 — переключение в обратном порядке).

3. Организация связей

Большие графы с кучей соединений между нодами создают ужасного «макаронного монстра». В такой схеме крайне сложно разобраться, где и как проходит связь.

Чтобы немного реорганизовать связи, можно нажать клавишу Alt, навести на связь и кликнуть. На месте клика появится точка, с помощью которой соединению можно придать форму и сделать связи менее запутанными. На одно соединение можно добавить несколько точек.

Если есть несколько связей из одного выхода, то можно зажать alt, создать точку, а затем, также с зажатым alt, перетащить эту точку к другим связям. Они соединятся автоматически.

4. HotKey D

Промежуточные ноды, у которых один вход и один выход (такие как Levels, Transform, Uniform Color, Invert и другие), которые не несут большой смысловой нагрузки, а лишь выступают в роли вспомогательного этапа, можно свернуть, и затем развернуть, нажав клавишу «D». Таким образом можно немного упростить вид графика.

5. Sub-graph

Sub-graph — это график или цепочка действий, которые были «упакованы» и превращены в многократно используемый автономный ресурс, то есть — в ноду. Такая нода называется Instance.

Sub-graph можно создать непосредственно внутри файла материала как отдельный граф, а можно вывести в sbsar файл, который в дальнейшем будет использоваться при создании новых материалов.

Таким образом, инстансы спасают график материала от нагромождения нод и постоянно повторяющихся действий.

Предположим, однажды у нас получилось создать красивые трещины. Чтобы не повторять алгоритм действий каждый раз, когда нужно добавить в материал трещины, можно просто взять этот граф, настроить управление параметрами (expose) и вывести в sbsar файл. Тем самым мы создадим инстанс, который можно использовать в любом материале.

Также инстанс можно использовать как промежуточную ноду, которая определённым образом меняет рисунок. В sub-graph этой ноды может быть упакована цепочка из нескольких нод Slope Blur — или другие необходимые преобразования. Главное — не забыть, что помимо ноды вывода (output), должна быть и нода ввода (input). Она нужна, чтобы в дальнейшем в инстанс можно было подключить ноду, которую нужно преобразовать.

6. Material Color blend

Очень часто маски, по которым добавляются цветовые детали в Base Color , также используются в создании карты Roughness. Чтобы сэкономить количество операций и нод при доработке цвета и roughness в графе, можно использовать ноду Material Color blend.

Благодаря этой ноде цвет и roughness можно дорабатывать одновременно, добавляя детали в обе эти карты.

Удобство ещё и в том, что внутри Material Color blend можно выбрать цвет, который будет добавляться по маске, а также выбрать Blending Mode. Благодаря этому отпадает необходимость добавлять дополнительные ноды Uniform Color и лишние бленды.

Оптимизировать график можно до бесконечности, и на это уходит немало времени. Некоторыми пунктами, описанными в статье, можно пренебречь ради экономии времени и сил.

Но при пересмотре собственного графика и его оптимизации иногда можно прийти к неожиданным решениям, которые сделают работу проще, а заодно и прокачают скилл. Так что это в любом случае очень полезная практика.

На курсе «Процедурный трип» мы научим тебя создавать процедурные текстуры с нуля.

Записаться на курс и узнать все подробности можно по ссылке.

Материал подготовлен командой XYZ Media.

Наши каналы в Telegram и на YouTube.

Привет, мы онлайн-школа XYZ. Учим всем аспектам создания игр — от концепт-арта и 3D-графики до геймдизайна и программирования. Наши инструкторы — действующие профессионалы индустрии: они работают в таких компаниях, как Blizzard, People Can Fly и CD Projekt Red.
{ "author_name": "XYZ", "author_type": "editor", "tags": ["xyz","tutorial","textures","modeling","guide","3d"], "comments": 4, "likes": 67, "favorites": 197, "is_advertisement": false, "subsite_label": "gamedev", "id": 171349, "is_wide": false, "is_ugc": false, "date": "Wed, 15 Jul 2020 13:02:30 +0300", "is_special": false }
0
4 комментария
Популярные
По порядку
3

Блин. Вот почему Subgraph до сих пор работает так по колхозному. Приходится с помощью имён в древе указывать какой граф основной, а какой просто группа. Неужели нельзя как в большинстве других нодовых редакторов сделать группировку. Вообще несмотря на потрясающий функционал софт Allegorythmic по прежнему страдает рядом интерфейсных болезней которых изначально небыло во многих других программах. 
Вот что реально бы помогло оптимизировать графики - это сделать возможность выводить числовые параметры из нодов на график. Например можно было бы сделать два набора значений для тяжёлых нодов: одно для быстрой генерации карт, а другой для финального просчёта и быстро между ними переключаться. Ну конечно до определённо степени это можно и сейчас реализовать. Если тяжёлые ноды стоят где-то вначале, то можно их продублировать и вкорячить нод переключателя... но когда это происходит в середине графика, вы ж не будете упаковывать всё начало графика в субграфик и делать две его копии ради оптимизации?

Ответить
1

Спасибо! Один из самых полезных подсайтов. Дизайнер труднее всего даётся пока из всего софта, который учу в трёхмерке(

Ответить
1

Хорошая статья 

Ответить
1

Отличный материал, полезные советы, наглядная подача. Побольше бы таких статей

Ответить

Комментарий удален

Комментарий удален

Комментарии

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }
{"hash":"243bd6f9","params":{"id":"dtfru","service":1,"title":"\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440","isLegacy":false}}