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

THOMAS DELIOT / UNITY TECHNOLOGIESContributor
Feb 14, 2019|3 Мин
Процедурное стохастическое текстурирование в Unity
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.

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

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

Изображение плиточных текстур для покрытия больших поверхностей

Скачать плагин можно здесь.

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

Использование шейдера StandardStochastic

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

Изображение показывает добавление двух новых элементов управления в верхней части
Изображение показывает улучшения ввода

Меню "Стохастические входы" позволяет указать, на какой из входных текстур вы хотите задействовать нашу технику (можно установить значение "Все" или конкретные текстуры, например, альбедо и/или карту нормалей).

Кнопка Apply (Применить ) предварительно рассчитывает данные для выбранных стохастических входов и обновляет материал, завершая процесс. Для каждой входной текстуры на этом этапе создаются две промежуточные текстуры, расположенные в одной папке.

Несколько дополнительных замечаний:

  • Поскольку существующие промежуточные текстуры загружаются, когда обнаруживается, что они пропускают время генерации, любое изменение исходной текстуры требует удаления обеих текстур, прежде чем нажать кнопку "Применить", чтобы заставить их регенерироваться.
  • При переключении между шейдерами Standard и StandardStochastic параметры передаются туда и обратно.
  • Для материалов, использующих рабочий процесс Specular, также предусмотрен шейдер StandardStochastic (настройка Specular).

Следующие примеры демонстрируют работу прототипа с различными материалами, используя небольшие (256²) входные текстуры.

Пример шейдера
Пример шейдера
Пример шейдера
Ограничения

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

Примеры текстур
Обратная связь

Это исследовательский прототип; он не находится в стадии активной разработки. В связи с этим мы не гарантируем сопровождение или поддержку, но не стесняйтесь задавать любые вопросы и предлагать отзывы в этой теме форума Unity. В настоящее время мы работаем над реализацией ShaderGraph для пользовательских шейдеров и совместимости с новыми конвейерами рендеринга. Следите за обновлениями в теме на форуме!

Дальнейшее чтение

Любопытно узнать, как работает плагин? Ознакомьтесь с двумя недавно опубликованными исследовательскими работами на эту тему, на которые опирается наш плагин:

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