Los Shaders pueden definir una lista de parámetros que deben configurar los artistas en el material inspector de Unity. El bloque de propiedades en el archivo shader los define.
Properties { Property [Property ...] }
Define el bloque de propiedades. Dentro de llaves múltiples propiedades se definen como sigue.
name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number
Todo esto define una propiedad número (escalar) con un valor predeterminado. El formulario Range
hace que se muestre
como un slider (deslizador) entre los rangos min y max.
name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)
Define una propiedad de color con el valor predeterminado de determinados componentes RGBA o una propiedad de vector 4D con un valor predeterminado. Las propiedades de color tienen un selector de color que se muestra para ellos y se ajustan según sea necesario dependiendo del espacio de color (mire Propiedades en los programas Shader). Las propiedades vectoriales se muestran como cuatro campos numéricos.
name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}
Define una propiedad 2D texture, cubemap o 3D (volumen) respectivamente.
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:
Más adelante en las partes de funciones fijas shader, se puede acceder a los valores de propiedad usando el nombre de la propiedad en
corchetes cuadrados: [name]. Por ejemplo, usted puede hacer que el modo de blending (mezcla) sea manejado por una propiedad material al declarar dos propiedades
integer (digamos “SrcBlend“ y ”DstBlend”), y luego hacer que el comando Blend los use: Blend [_SrcBlend] [_DstBlend]
.
Los parámetros Shader que se encuentran en el bloque `Propiedades ’se serializan como datos del Material. Los programas Shader puede tener más parámetros (como matrices, vectores y flotadores) que se configuran en el material del código en tiempo de ejecución, pero si no forman parte del bloque de propiedades, sus valores no se guardarán. Esto es útil principalmente para los valores que están completamente guiados por el código (utilizando Material.SetFloat y funciones similares).
Frente a cualquier propiedad, se pueden especificar atributos opcionales entre corchetes. Estos son ya sea atributos reconocidos por Unity, o pueden indicar sus propias clases MaterialPropertyDrawer para controlar cómo deberían ser renderizados en el inspector de material. Los Atributos reconocidos por Unity:
[HideInInspector]
- no muestra el valor de propiedad en el Inspector de Material..[NoScaleOffset]
- El inspector de materiales no mostrará los campos de tiling/offset de textura para las propiedades de textura con este atributo.[Normal]
- Indica que una propiedad de textura espera un mapa normal.[HDR]
- Indica que una propiedad de textura espera una textura de alto rango dinámico (HDR).[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]
- Indica que una propiedad de textura procederá de datos por pre-renderizados
en la forma de un MaterialPropertyBlock.El inspector de Material cambia la ranura
de texto UI para estas propiedades.// 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) = "" {}
}
Antes de Unity 5, las propiedades de textura podrían haber tenido opciones dentro del bloque de corchetes, e.g. TexGen CubeReflect
.
Estos estaban controlando la generación de coordenadas de textura fija. Esta funcionalidad se quito en 5.0;
si usted necesita texgen usted debería escribir un vertex shader más bien.
Mire la página de Implementando una Función Fija Fixed TexGen para ejemplos.