Все параметры Материала, которые вы видите в инспектореокне Unity, в котором отображается информация о выбранном в данный момент GameObject, настройки актива или проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
See in Словарь при просмотре материала доступны через сценарий, что дает вам возможность чтобы изменить или оживить работу материала во время выполнения.
Это позволяет изменять числовые значения Материала, менять цвета и динамически менять местами текстуры во время игры. Некоторые из наиболее часто используемых функций для этого:
Функции Name | Use |
---|---|
SetColor | Изменить цвет материала (например, цвет оттенка альбедо) |
SetFloat | Установите значение с плавающей запятой (например, множитель карты нормалей) |
SetInt | Установить целочисленное значение в материале |
SetTexture | Назначьте новую текстуру материалу |
Полный набор функций, доступных для управления материалами с помощью скрипта, можно найти в справочнике по скриптам класса материалов.
Важно отметить, что эти функции устанавливают только те свойства, которые доступны для текущего шейдерапрограммы, которая выполняется на ГПУ. Подробнее
См. в Словарь по материалу. Это означает, что если у вас есть шейдер, который не использует никаких текстур, или если у вас вообще нет привязки к шейдеру, вызов SetTexture не будет иметь никакого значения. эффект. Это верно, даже если вы позже установите шейдер, которому нужна текстура. По этой причине рекомендуется установить нужный шейдер перед настройкой каких-либо свойств, однако, как только вы это сделаете, вы сможете переключиться с одного шейдера на другой, который использует те же текстуры или свойства, и значения будут сохранены.
Эти функции работают, как и следовало ожидать, для всех простых шейдеров, таких как устаревшие шейдеры и встроенные шейдеры, отличные от стандартного шейдера (например, частиц, спрайтов, пользовательского интерфейса и неосвещенных шейдеров). Однако для материала, использующего Стандартный шейдер, существуют некоторые дополнительные требования, о которых вы должны знать, прежде чем сможете полностью изменить Материал.
Особые требования для сценариев со стандартным шейдером
Стандартный шейдер имеет некоторые дополнительные требования, если вы хотите изменять материалы во время выполнения, потому что за сценамисцена содержит среды и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. Словарь — на самом деле это множество разных шейдеров, объединенных в один. р>
Эти различные типы шейдеров называются Варианты шейдераВерсия программа шейдера, которую Unity генерирует в соответствии с определенной комбинацией ключевых слов шейдера и их статусом. Объект Shader может содержать несколько вариантов шейдера. Подробнее
См. в Словарь и можно рассматривать как все различные возможные комбинации функции шейдера, когда они активированы или не активированы.
Например, если вы решите назначить карту нормалейтип Текстура Bump Map, которая позволяет добавлять детали поверхности, такие как неровности, канавки и царапины, к модели, которые отражают свет, как если бы они были представлены реальной геометрией. Подробнее
Посмотрите в Словарь к вашему материалу, вы активируете этот вариант шейдера, поддерживающего отображение нормалей. Если впоследствии вы также назначите карту высот, вы активируете вариант шейдера, который поддерживает сопоставление нормалей и карт высот.
Это хорошая система, потому что это означает, что если вы используете стандартный шейдер, но не используете карту нормалей в определенном материале, вы не несете затрат производительности на выполнение кода шейдера карты нормалей, потому что вы запуск варианта шейдера с опущенным кодом. Это также означает, что если вы никогда не используете определенную комбинацию функций (например, HeightMap и Emissive вместе), этот вариант полностью исключается из вашей сборки — и на практике вы, как правило, будете использовать только очень небольшое количество возможных вариантов стандартного шейдера. .
Unity избегает простого включения всех возможных вариантов шейдера в вашу сборку, потому что это будет очень большое количество, несколько десятков тысяч! Это большое число является результатом не только каждой возможной комбинации функций, доступных в инспекторе материалов, но также наличия вариантов каждой комбинации функций для разных классов рендерингаПроцесс отрисовки графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Просмотрите в Словарь сценарии, такие как HDRширокий динамический диапазон
См. Словарь используется, < b>карты освещенияПредварительно визуализированная текстура, содержащая эффекты источников света на статических объектах сцены. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
См. в Словарь, GI, туман и т. д. Включение всего этого может вызвать медленная загрузка, высокое потребление памяти и увеличение размера сборки и времени сборки.
Вместо этого Unity отслеживает, какие варианты вы использовали, изучая материальные активы, используемые в вашем проекте. Какие бы варианты стандартного шейдера вы не включили в свой проект, именно эти варианты включены в сборку.
Это создает две отдельные проблемы при доступе к материалам через скрипт, использующий стандартный шейдер.
1. Вы должны включить правильные ключевые слова для требуемого стандартного варианта шейдера
Если вы используете сценарий для изменения Материала, который заставит его использовать другой вариант стандартного шейдера, вы должны включить этот вариант с помощью Функция EnableKeyword. Другой вариант потребуется, если вы начнете использовать функцию шейдера, которая изначально не использовалась материалом. Например, назначение карты нормалей материалу, у которого ее нет, или установка значения уровня эмиссии больше нуля, когда ранее он был равен нулю.
Конкретные ключевые слова, необходимые для включения функций стандартного шейдера, следующие:
Ключевые слова | Функции |
---|---|
_NORMALMAP | Normal Mapping |
_ALPHATEST_ON |
Прозрачность "Вырезать" Режим рендерингаСтандартный шейдер Параметр материала, который позволяет вам выбрать, использует ли объект прозрачность, и если да, то какой тип режима наложения использовать. More info See in Словарь |
_ALPHABLEND_ON | “Fade” Transparency Rendering Mode |
_ALPHAPREMULTIPLY_ON | “Transparent” Transparency Rendering Mode |
_EMISSION | Emission Colour or Emission Mapping |
_PARALLAXMAP | Height Mapping |
_DETAIL_MULX2 | Secondary “Detail” Maps (Albedo & Normal Map) |
_METALLICGLOSSMAP | Metallic/Smoothness Mapping in Metallic Workflow |
_SPECGLOSSMAP | Specular/Smoothness Mapping in Specular Workflow |
Использования приведенных выше ключевых слов достаточно, чтобы ваши скриптовые модификации Материала работали во время работы в редакторе.
Однако, поскольку Unity проверяет только Материалы, используемые в вашем проекте, чтобы определить, какие варианты включить в вашу сборку, она не будет включать варианты, которые только встречаются с помощью скрипта во время выполнения.
Это означает, что если вы включите ключевое слово _PARALLAXMAP для материала в своем скрипте, но у вас нет материала, используемого в вашем проекте, соответствующего той же комбинации функций, сопоставление параллакса не будет работать в вашей окончательной сборке, даже если оно появится. работать в редакторе. Это связано с тем, что этот вариант будет исключен из сборки, потому что он не требуется.
2. Вы должны убедиться, что Unity включает в сборку необходимые варианты шейдеров
Для этого вам нужно убедиться, что Unity знает, что вы хотите использовать этот вариант шейдера, включив хотя бы один материал этого типа в свои активы. Материал должен использоваться в сцене или, в качестве альтернативы, помещен в вашу папку ресурсов — в противном случае Unity все равно исключит его из вашей сборки, поскольку он оказался неиспользованным. .
Выполнив оба вышеуказанных шага, вы получите полную возможность изменять свои материалы с помощью стандартного шейдера во время выполнения.
Если вам интересно узнать больше о вариантах шейдеров и о том, как написать свой собственный, прочитайте создание нескольких вариантов шейдеров здесь.