Sintaxis de ShaderLab para el aprendizaje de Shader: Propiedades

Este artículo comienza presentando la sintaxis de ShaderLab y los materiales de referencia provienen principalmente del manual oficial.

Como se mencionó anteriormente, todos los Shaders en Unity están escritos en un lenguaje declarativo (Programación declarativa) llamado "ShaderLab". El "código de sombreado" real está escrito en los fragmentos CGPROGRAM del mismo archivo de sombreado. Los fragmentos de CGPROGRAM están escritos en el lenguaje general HLSL/Cg.

Propiedades

Propiedades { Propiedad [Propiedad...] }

  • Format_Name
    ("Nombre para mostrar", tipo) = valor predeterminado {opciones}
    Nombre del atributo ("Nombre para mostrar", tipo) = valor predeterminado {parámetros opcionales}

  • Los números y los controles deslizantes
    Flotante , Int , Rango (mínimo, máximo)
    definen propiedades numéricas con valores predeterminados. El formato Rango muestra un control deslizante de mínimo a máximo.

    nombre ("nombre para mostrar", rango (mínimo, máximo)) = número
    nombre ("nombre para mostrar", flotante) = número

  • Los colores y los vectores
    definen un color RGBA o un atributo de vector 4D.

    nombre ("nombre para mostrar", Color) = (número,número,número,número)
    nombre ("nombre para mostrar", Vector) = (número,número,número,número)

  • Las texturas
    definen una textura 2Dun mapa de cubos  o  un atributo 3D (volumen)  .

    nombre ("nombre para mostrar", 2D) = "textura predeterminada" {}
    nombre ("nombre para mostrar", Cubo) = "textura predeterminada" {}
    nombre ("nombre para mostrar", 3D) = "textura predeterminada" {}

    • 2D: Una textura de tamaño de orden 2. Este mapa se convertirá en un color correspondiente a cada píxel según el modelo UV después del muestreo y finalmente se mostrará.
    • Cubo: textura de mapa de cubo. En pocas palabras, es una combinación de seis texturas 2D relacionadas. Se utiliza principalmente para efectos de reflexión (como cuadros de cielo y reflejos dinámicos) y también se convertirá en muestras de los puntos correspondientes.
    • 3D: Unity admite texturas 3D, utilizadas y creadas a partir de sombreadores y scripts. Actualmente, las texturas 3D sólo se pueden crear mediante scripts.
  • 细节
    每个属性都是根据name引用的(在Unity中一般以下划线_开始),而在编辑器界面显示的是display name,等号后面指定了默认值:

    • 对于Range和Float其只是一个浮点数,color范围0~1
    • Color和Vector是括号内的四个数
    • 贴图(2D、Cube)默认值是一个空字符串,或者是内建的默认贴图:“white”, “black”, “gray” or “bump”.

    之后在shader的fixed function部分,属性值可以通过方括号加属性名获取:[name]。
    Properties块中的属性会被序列化成material数据,这对于在脚本控制值非常有用 (使用 Material.SetFloat 或类似函数).

  • Property attributes and drawers
    对之前的属性,都可以使用方括号指定可选的修饰(attributes),下面是一些Unity可以认出的修饰,或是可以自己指定(MaterialPropertyDrawer classes) 以控制它们在material inspector中如何被渲染。

    • [HideInInspector] 不在inspector显示
  • [NoScaleOffset] 对于texture属性,不会显示贴图的 tiling/offset字段。
  • [Normal] 指示一个贴图是normal-map。
  • [HDR] 指示一个贴图是高动态范围(high-dynamic range (HDR))贴图。
  • [PerRendererData] 指示一个贴图是来自MaterialPropertyBlock格式的 per-renderer data 。

参考:

Unity Manual - ShaderLab: Properties

Supongo que te gusta

Origin blog.csdn.net/qq_25189313/article/details/78032213
Recomendado
Clasificación