返回介绍

ShaderLab语法:Properties

发布于 2021-06-20 00:15:04 字数 2887 浏览 931 评论 0 收藏 0

着色器可以定义一系列的参数,这些参数将由 Unity 材质检视器中的设计师设定。在着色器文件中的属性 (Properties) 块定义参数。

语法

属性 (Properties) { Property [Property ...] }
定义属性块。括号内,多个属性定义如下。
name ("display name", Range (min, max)) = number
定义浮点属性,代表检视器中从最小值 (min)最大值 (max)的滑块。
name ("display name", Color) = (number,number,number,number)
定义颜色属性。
name ("display name", 2D) = "name" { options }
定义二维纹理属性。
name ("display name", Rect) = "name" { options }
定义矩形(非 2 的幂)纹理属性。
name ("display name", Cube) = "name" { options }
定义立方体贴图纹理属性。
name ("display name", Float) = number
定义浮点属性。
name ("display name", Vector) = (number,number,number,number)
定义四分量向量属性。

详细信息

着色器内部的每个属性都被名称 (name) 引用(Unity 中,着色器属性名称以下划线开头是很常见的)。在材质检视器中属性会显示为显示名称 (display name)。对每个属性来说,默认值放在等号之后:

  • 对于范围 (Range)浮点 (Float) 属性,默认值只是一个数字。
  • 对于颜色 (Color)向量 (Vector) 属性来说,默认值为圆括号中的四个数字。
  • 对纹理(二维 (2D)矩形 (Rect)立方体 (Cube))来说,默认值可以是一个空字符串或者是以下内置默认纹理中的一种:"白色”、“黑色”、“灰色”或“凹凸贴图”。

随后在着色器中,通过使用方括号内的属性名称访问属性值:[name].

示例

Properties {
    // 水着色器的属性
    _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // 滑块
    _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) // 颜色
    _ReflectionTex ("Environment Reflection", 2D) = "" {} // 纹理
    _RefractionTex ("Environment Refraction", 2D) = "" {}
    _Fresnel ("Fresnel (A) ", 2D) = "" {}
    _BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
} 

纹理属性选项

在纹理属性的花括号内的选项 (options) 为可选项。可用选项有:

  • TexGen texgenmode: 该纹理的自动纹理协调生成模式。可以是 ObjectLinearEyeLinearSphereMapCubeReflectCubeNormal 中的一种;这些直接对应 OpenGL texgen 模式。请注意:如果使用自定义顶点程序,则 TexGen 模式将被忽略。
  • LightmapMode 如果启用此模式,该纹理会受到每个渲染器光照贴图参数的影响。也就是说,将使用的纹理可以不在材质中,而是来自渲染器设置,请参见渲染器脚本文档。

示例

// EyeLinear texgen 模式示例
Shader "Texgen/Eye Linear" {
    Properties {
        _MainTex ("Base", 2D) = "white" { TexGen EyeLinear }
    }
    SubShader {
        Pass {
            SetTexture [_MainTex] { combine texture }
        }
    }
} 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文