Unity 6.3
0 онлайн 54 гостей 3 в системе
Вход

Введение в свойства материалов

В вашем 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).