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

Ссылка на блок свойств в ShaderLab

Эта страница содержит информацию об использовании блока Properties в коде ShaderLab для определения свойств материала для объекта Shader.

Совместимость конвейера отображения

Название особенности Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Изготовленный на заказ SRP Built-in Render Pipeline
ShaderLab: блок свойств Да
В коде HLSL для совместимости с SRP Batcher необходимо помещать переменные по материалам в ту же CBUFFER.
Да
В коде HLSL для совместимости с SRP Batcher необходимо помещать переменные по материалам в ту же CBUFFER.
Да
В коде HLSL для совместимости с SRP Batcher необходимо помещать переменные по материалам в ту же CBUFFER.
Да

Более подробную информацию об использовании блока CBUFFER см. в Написать не освещенный шейдер с цветовым входом в URP.

Синтаксис

Подпись Функция
Properties
{
<Material property declaration>
<Material property declaration>
}
Сохраняет заданные свойства как часть материального ассета и использует значения, хранящиеся в материальном ассете во время рендеринга.
Блок Properties может содержать любое количество деклараций материальных свойств.

Декларации материального свойства

Все декларации о материальных свойствах составляются в следующем базовом формате:

[optional: attribute] name("display text in Inspector", type name) = default value

Точный синтаксис зависит от типа.

В этом разделе содержится информация о:

Синтаксис декларации материальных свойств по типам

Имя типа и синтаксис для значения по умолчанию зависят от типа свойства.

В коде шейдера обычно все имена свойств начинаются с символа подчеркивания. Примеры на этой странице следуют этому правилу.

Тип Синтаксис примера Комментарий
Цифры _ExampleName ("Integer display name", Integer) = 1 Этот тип поддерживается действительным целым числом (в отличие от устаревшего типа Int, описанного ниже, который поддерживается плавающим числом). Используйте это вместо Int, когда нужно использовать целое число.
Международный (устаревший) _ExampleName ("Int display name", Int) = 1 Примечание: Этот устаревший тип поддерживается плавающим, а не целым числом. Он поддерживается только по причинам обратной совместимости. Используйте вместо этого тип Integer.
Поплавок _ExampleName ("Float display name", Float) = 0.5

_ExampleName ("Float with range", Range(0.0, 1.0)) = 0.5
Максимальное и минимальное значения для ползунка диапазона включены.
Texture2D _ExampleName ("Texture2D display name", 2D) = "" {}

_ExampleName ("Texture2D display name", 2D) = "red" {}
Поместите следующие значения в строку значения по умолчанию, чтобы использовать одну из встроенных текстур Unity: “white” (RGBA: 1,1,1,1), “black” (RGBA: 0,0,0,1), “gray” (RGBA: 0.5,0.5,0.5,1), “bump” (RGBA: 0.5,0.5,1,1) или “red” (RGBA: 1,0,0,1).

Если вы оставите строку пустой или введете неверное значение, по умолчанию используется “gray”.

Примечание: эти текстуры по умолчанию не видны в Inspector.
Texture2DArray _ExampleName ("Texture2DArray display name", 2DArray) = "" {} Дополнительные сведения см. в Массивы текстур.
Texture3D _ExampleName ("Texture3D", 3D) = "" {} Значение по умолчанию – текстура “серая” (RGBA: 0.5,0.5,0.5,1).
Кубическая карта _ExampleName ("Cubemap", Cube) = "" {} Значение по умолчанию – текстура “серая” (RGBA: 0.5,0.5,0.5,1).
CubemapArray _ExampleName ("CubemapArray", CubeArray) = "" {} См. массивы кубических карт.
Цвет _ExampleName("Example color", Color) = (.25, .5, .5, 1) Это отображается на float4 в коде шейдера.

Материал Inspector отображает выборщик цвета. Если вы предпочитаете редактировать значения как четыре отдельных плавающих значения, используйте тип Вектор.
Вектор _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) Это отображает float4 в коде шейдера.

Материал Inspector отображает четыре отдельных поля с плавающей запятой. Чтобы отобразить различное количество полей, добавьте 2, 3или 4 в качестве дополнительного свойства после Vector. Например, _ExampleName ("Example vector", Vector, 2) = (.25, .5, .5, 1) отображает только компоненты x и y. Вы все равно должны определить все четыре компонента.

Если вы предпочитаете редактировать значения с помощью выбора цвета, используйте тип цвета.>

Зарезервированные имена свойств материалов

Unity имеет зарезервированные имена для свойств материала. Когда вы создаете свойство материала с одним из этих имен, Unity выполняет предопределенные операции. Не используйте эти имена, если вы не собираетесь использовать эту функциональность.

Имя Синтаксис примера Функция
_Color _Color ("Main Color", Color) = (1,1,1,1) Unity рассматривает цвет с этим именем в качестве основного цвета для материала. Используйте атрибут MainColor для указания другого свойства в качестве основного цвета.
_BaseMap _BaseMap ("Base Map", 2D) = "white" {} В Universal Render Pipeline, Unity рассматривает текстуру с этим именем в качестве основной текстуры для материала. Используйте атрибуты MainTexture для указания другого свойства в качестве основной текстуры.
_MainTex _MainTex ("Main Texture", 2D) = "white" {} Во Встроенном Render Pipeline, Unity рассматривает текстуру с этим именем в качестве основной текстуры для материала. Используйте атрибут MainTexture для указания другого свойства в качестве основной текстуры.
_TransparencyLM _TransparencyLM ("Transmissive Texture", 2D) = "white" {} Во Встроенном Render Pipeline, включает настраиваемую RGB прозрачность во время lightmapping.

Дополнительные сведения см. в Lightmapping и shaders.

Атрибуты материального свойства

Декларации свойств материалов могут иметь дополнительный атрибут, который указывает Unity, как с ними работать.

В дополнение к перечисленным здесь атрибутам, вы можете использовать тот же синтаксис для добавления MaterialPropertyDrawer к свойству материала. Эти атрибуты позволяют управлять тем, как свойства материала отображаются в окне Inspector.

Атрибут Функция
[Gamma] Показывает, что свойство с плавающей запятой или вектор использует значения sRGB, что означает, что оно должно быть преобразовано вместе с другими значениями sRGB, если это требуется цветовым пространством в вашем проекте. Дополнительные сведения см. в разделе Свойства в программах для шейдеров.
[HDR] Указывает, что свойство текстуры или цвета использует высокий динамический диапазон (HDR) ценностей.

Для свойств текстуры, Unity Editor отображает предупреждение, если LDR текстуры. Для свойств цвета, Unity Editor использует HDR для редактирования этого значения.
[HideInInspector] Сообщает Unity Editor скрыть это свойство в Inspector.
[MainTexture] Задает основную текстуру для Материала, к которой вы можете получить доступ с помощью Material.mainTexture.

По умолчанию Unity рассматривает текстуру с именем свойства _BaseMap или _MainTex как основную текстуру. Используйте этот атрибут, если ваша текстура имеет другое имя свойства, но вы хотите, чтобы Unity рассматривал ее как основную текстуру.

Если вы используете этот атрибут более одного раза, Unity использует первое свойство и игнорирует последующие.

Примечание: При установке основной текстуры с помощью этого атрибута текстура не видна в представлении Game, когда вы используете режим отладки потока текстуры mipmap или пользовательский инструмент отладки.
[MainColor] Задает основной цвет для Материала, к которому можно получить доступ с помощью Material.color.

По умолчанию Unity рассматривает цвет с именем свойства _Color в качестве основного цвета. Используйте этот атрибут, если ваш цвет имеет другое имя свойства, но вы хотите, чтобы Unity рассматривал его в качестве основного цвета. Если вы используете этот атрибут более одного раза, Unity использует первое свойство и игнорирует последующие.
[NoScaleOffset] Указывает Unity Editor скрыть поля плитки и смещения для этого свойства текстуры.
[Normal] Указывает, что свойство текстуры ожидает нормального отображения.

Unity Editor отображает предупреждение, если вы назначаете несовместимую текстуру.
[PerRendererData] Показывает, что свойство текстуры будет поступать из данных для каждого рендерера в форме MaterialPropertyBlock.

Инспектор материалов показывает эти свойства только для чтения.

Дополнительные ресурсы