Version: 2020.2
Sintaxis ShaderLab
ShaderLab: SubShader

ShaderLab: Propiedades

Los shaders pueden definir una lista de parámetros que deben establecer los artistas en el inspector de materiales de Unity. El bloque de propiedades en el archivo del shader los define.

Sintaxis

Propiedades

Properties { Property [Property ...] }

Define el bloque de propiedades. Dentro de llaves múltiples propiedades se definen como sigue.

Numbers (números) y Sliders (deslizadores)

name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number

Todo esto define una propiedad de número (escalar) con un valor predeterminado. La forma Range hace que se muestre como un control deslizante entre los rangos min y max.

Colores y Vectores

name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)

Define una propiedad de color con un valor predeterminado de componentes RGBA dados, o una propiedad de vector 4D con un valor predeterminado. Las propiedades de color tienen un selector de color que se muestra para ellas y se ajustan según sea necesario según el espacio de color (consulte Propiedades en Programas shaders). Las propiedades del vector se muestran como cuatro campos numéricos.

Texturas

name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}

Defines a 2D Texture, cubemap or 3D (volume) property respectively.

Detalles

Cada propiedad dentro del shader es referenciado por name (en Unity, es comúnmente comenzar los nombres de propiedades shader con rayita abajo “_”). La propiedad va a mostrarse en el inspector del material como display name. Para cada propiedad un valor predeterminado es dado después del signo igual:

  • Para las propiedades Range y Float es simplemente un número, por ejemplo “13.37”.
  • Para las propiedades de Color y Vector son cuatro números en parentesis, por ejemplo “(1,0.5,0.2,1)”.
  • Para texturas 2D, el valor predeterminado es una cadena vacía o una de las texturas predeterminadas incorporadas: “blanco” (RGBA: 1,1,1,1), “negro” (RGBA: 0,0,0) , 0), “gris” (RGBA: 0.5,0.5,0.5,0.5), “bulto” (RGBA: 0,5,0.5,1,0.5) o “rojo” (RGBA: 1,0,0,0).
  • Para texturas no 2D (Cubo, 3D, 2DArray) el valor predeterminado es un string. Cuando un Material no tiene asignado un Cubemap/3D/Array Texture, se usa uno gris (RGBA: 0.5,0.5,0.5,0.5)

Más adelante, en las partes de funciones fijas del shader, se puede acceder a los valores de propiedad utilizando el nombre de la propiedad entre corchetes: [name]. Por ejemplo, podría hacer que el modo de fusión sea controlado por una propiedad material declarando dos propiedades enteras (por ejemplo, “SrcBlend“ y ”DstBlend”), y más adelante haga que Blend Command las use: Blend [_SrcBlend ] [_DstBlend].

Los parámetros del shader que se encuentran en el bloque Propiedades se serializan como datos Material. Programas Shader puede tener más parámetros (como matrices, vectores y floats) que se configuran en el material desde el código en tiempo de ejecución, pero si no forman parte del bloque de Propiedades, sus valores no se guardarán . Esto es principalmente útil para los valores que son completamente guiados por código de comandos (usando Material.SetFloat y funciones similares).

Atributos de propiedades y drawers

Delante de cualquier propiedad, se pueden especificar atributos opcionales entre corchetes. Estos son atributos reconocidos por Unity, o pueden indicar sus propias clases de MaterialPropertyDrawer para controlar cómo deben renderizarse en el material inspector. Atributos reconocidos por Unity:

  • [HideInInspector] - does not show the property value in the Material inspector.
  • [NoScaleOffset] - material inspector will not show Texture tiling/offset fields for Texture properties with this attribute.
  • [Normal] - indicates that a Texture property expects a normal-map.
  • [HDR] - indicates that a Texture property expects a high-dynamic range (HDR) Texture.
  • [Gamma] - Indica que una propiedad float/vector se especifica como valor sRGB en la interfaz de usuario (al igual que los colores) y, posiblemente, necesita la conversión de acuerdo con el espacio de color utilizado. Consulte Propiedades en los programas Shader.
  • [PerRendererData] - indicates that a property will be coming from per-renderer data in the form of a MaterialPropertyBlock. Material inspector shows these properties as read-only.
  • [MainTexture] - indicates that a property is the main texture for a Material. By default, Unity considers a texture with the property name name _MainTex as the main texture. Use this attribute if your texture has a different property name, but you want Unity to consider it the main texture. If you use this attribute more than once, Unity uses the first property and ignores subsequent ones.
  • [MainColor] - indicates that a property is the main color for a Material. By default, Unity considers a color with the property name name _Color as the main color. Use this attribute if your color has a different property name, but you want Unity to consider it the main color. If you use this attribute more than once, Unity uses the first property and ignores subsequent ones.

Ejemplo

// propiedades para un shader de agua
Properties
{
    _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders
    _ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5
    _RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4
    _RefrColor ("Refraction color", Color) = (.34, .85, .92, 1) // color
    _ReflectionTex ("Environment Reflection", 2D) = "" {} // textures
    _RefractionTex ("Environment Refraction", 2D) = "" {}
    _Fresnel ("Fresnel (A) ", 2D) = "" {}
    _BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
}

Véase también

  • [MainTexture and MainColour attributes] added in 2019.3 NewIn20193
Sintaxis ShaderLab
ShaderLab: SubShader