Процедурное стохастическое текстурирование в Unity

Вы когда-нибудь пробовали использовать плиточные текстуры для покрытия больших поверхностей или добавления мелких деталей к сеткам? Если да, то вы, вероятно, знакомы с видимой картиной повторения, которая быстро возникает при увеличении значения плитки. В Unity Labs мы разработали новую технику текстурирования, которая позволяет избежать этой проблемы, - процедурное стохастическое текстурирование.
Плиточные текстуры - полезный инструмент для добавления деталей в 3D-сцены. Однако, когда вы хотите затекстурировать большие площади или добиться высокой детализации поверхностей с помощью текстур и карт детализации с возможностью черепичной обработки, черепичные узоры становятся заметными. Этот эффект показан на левой стороне следующего рисунка. Обычно для уменьшения количества повторов требуется увеличить текстуры или скрыть видимые повторы с помощью дополнительных объектов. В этой статье мы предлагаем плагин, который решает эту проблему для текстур со стохастическим внешним видом, таких как ржавчина, мох, кора и т. д. Его влияние показано в правой части следующего рисунка.

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


Меню "Стохастические входы" позволяет указать, на какой из входных текстур вы хотите задействовать нашу технику (можно установить значение "Все" или конкретные текстуры, например, альбедо и/или карту нормалей).
Кнопка Apply (Применить ) предварительно рассчитывает данные для выбранных стохастических входов и обновляет материал, завершая процесс. Для каждой входной текстуры на этом этапе создаются две промежуточные текстуры, расположенные в одной папке.
Несколько дополнительных замечаний:
- Поскольку существующие промежуточные текстуры загружаются, когда обнаруживается, что они пропускают время генерации, любое изменение исходной текстуры требует удаления обеих текстур, прежде чем нажать кнопку "Применить", чтобы заставить их регенерироваться.
- При переключении между шейдерами Standard и StandardStochastic параметры передаются туда и обратно.
- Для материалов, использующих рабочий процесс Specular, также предусмотрен шейдер StandardStochastic (настройка Specular).
Следующие примеры демонстрируют работу прототипа с различными материалами, используя небольшие (256²) входные текстуры.



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

Это исследовательский прототип; он не находится в стадии активной разработки. В связи с этим мы не гарантируем сопровождение или поддержку, но не стесняйтесь задавать любые вопросы и предлагать отзывы в этой теме форума Unity. В настоящее время мы работаем над реализацией ShaderGraph для пользовательских шейдеров и совместимости с новыми конвейерами рендеринга. Следите за обновлениями в теме на форуме!
Любопытно узнать, как работает плагин? Ознакомьтесь с двумя недавно опубликованными исследовательскими работами на эту тему, на которые опирается наш плагин:
- Бумага: Высокопроизводительные шумы по образцам с помощью оператора смешивания с сохранением гистограммы - Эрик Хейц и Фабрис Нейрет, HPG 2018
- Техническая глава: Процедурные стохастические текстуры с помощью тайлинга и блендинга - Томас Делиот и Эрик Хейц, GPU Zen 2
- Ознакомьтесь с другими нашими исследовательскими работами в Unity: Публикации Unity Labs
В коде, поставляемом вместе с плагином, есть комментарии, ссылающиеся на конкретные разделы технической главы.
