Введение в свойства материалов
В вашем ShaderLab код, вы можете определить свойства материалаМатериальная свойство — это свойство, которая Unity хранит в качестве части материального ассета. Это позволяет художникам создавать, редактировать и обмениваться материалами с различными конфигурациями.
Если вы используете свойства материала:
- Вы можете получить или установить значение переменной в объекте Shader, вызвав функции на материале (такие как Material.SetFloat).
- Вы можете просмотреть и изменить значения, используя материал Inspector.
- Unity сохраняет изменения, которые вы делаете как часть материального ассета, так что они сохраняются между сессиями.
Если вы не используете свойства материала:
- Вы все еще можете получить или установить значение переменной в объекте Shader, вызвав функцию на материале.
- Для этих значений нет визуального редактора.
- Изменения не сохраняются между сессиями.
Единственные случаи, когда вы обычно , а не создаете свойство материала, это если вы хотите установить значения свойств шейдера полностью с помощью скриптов (например, если вы создаете процедурное содержимое), если свойства не могут быть превращены в свойства материала, или если вы не хотите, чтобы их редактировали в Inspector.
Как значения свойств предоставляются шейдерам
Значения свойств шейдера находят и предоставляют шейдерам из следующих мест:
- Значения для каждого рендера, установленные в MaterialPropertyBlock. Это, как правило, данные «на экземпляр» (e.g. настраиваемый цвет оттенка для множества объектов, которые все имеют один и тот же материал).
- Значения, установленные в Материал, который используется на отображаемом объекте.
- Глобальные свойства шейдера, устанавливаемые либо самим кодом Unity (см. встроенные переменные шейдера), либо из ваших собственных скриптов (e.g. Shader.SetGlobalTexture).
Порядок приоритета такой же, как выше: данные на уровне экземпляра перекрывают всё; затем используются данные материала; и наконец, если свойства шейдера нет ни там, ни там, берётся значение глобального свойства. Если же значение свойства шейдера нигде не задано, будет использовано значение «по умолчанию» (ноль для чисел с плавающей запятой, чёрный для цветов, пустая белая текстура для текстур).
Свойства сериализованных и Runtime материалов
Материалы могут содержать как серийные, так и заданные во время выполнения значения свойств.
Сериализированные данные представляют собой все свойства, определенные в блоке Свойства шейдера. Как правило, это значения, которые должны храниться в материале, и могут быть изменены пользователем в Material Inspector.
Материал может также иметь некоторые свойства, которые используются шейдером, но не объявлены в блоке Свойства шейдера. Обычно это свойства, которые устанавливаются из скриптового кода во время выполнения, e.g. через Material.SetColor. Обратите внимание, что матрицы и массивы могут существовать только как несериализованные свойства во время выполнения (поскольку нет возможности определить их в блоке Properties).