shader中的属性

本文介绍了在Shader中定义和使用属性的方法,特别是在Unity中如何通过Properties块创建可编辑的属性,以实现对Material的定制。同时,文章讨论了如何通过图形界面和代码操作Shader属性,并强调了矩阵的特殊处理,即不能直接在Properties中定义,需要在Shader内部声明并在脚本中读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例化Shader为Material时,可以通过为属性赋值达到创建具体对象的目的,可以在Properties块中定义自己所需要的属性

Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}//图片形式的属性
        _MyColor("Color of Object",Color) = (1,1,1,1)//颜色属性
        _MyCube("Enironment map",Cube) = "white"{}//3D贴图,需要6张图片
        _MyVector("Vector",vector) = (1,1,1,1)//4个元素的向量
        _MyFloat("Float value",float)=1.0//浮点小数
        _MyRange("Another type of float",range(-13,14))=1.0//限定范围的浮点数
    }

通过图形界面可以操作这些属性
这里写图片描述
也可以通过代码来设置和读取Shader中的属性,下面是设置的代码


    public Material mat;
    public Texture myPic;
    public Color purple;
    public Cubemap cube;
    public Vector4 vec;
    public float val_1;
    public float val_2;

    // Update is called once per frame
    void Update () {
        mat.SetTexture("_MyTexture", myPic);
        mat.SetColor("_MyColor", purple);
        mat.SetTexture("_MyCube", cube);
        mat.SetVector("_MyVector", vec);
        mat.SetFloat("_MyFloat", val_1);
        mat.SetFloat("_MyRange", val_2);

    }

另外,矩阵不能再Properties中定义,我们必须首先在Shader中声明,然后通过脚本来进行读取和写入。

uniformfloat4x4 myMatrix;
mat.SetMatrix("myMatrix",matrix);
matrix =mat.GetMatrix("myMatrix");

Cg代码中使用属性,除了Unity的固定管线因为有特定语法之外,在Properties块中定义的属性必须在代码中再声明一次才能使用。

    sampler2D _MainTex;
        float4 _MyColor;
        samplerCUBE _MyCube;
        float4 _MyVector;
        float _MyFloat;
        float _MyRange;
### 定义和使用 Unity Shader 属性面板 在 Unity 中,Shader属性通过 `Properties` 块定义,在材质 (Material) 面板中显示并允许用户调整。这使得开发者能够轻松配置各种视觉效果参数。 #### 创建自定义属性 为了创建新的属性,需编辑 Shader 文件中的 `Properties` 节: ```cglsl Properties { _Color ("Main Color", Color) = (1,0.5,0.5,1) _MainTex ("Base (RGB)", 2D) = "white" {} } ``` 上述代码片段展示了如何声明颜色 (`_Color`) 和纹理 (`_MainTex`) 类型的属性[^1]。 对于布尔类型的设置,虽然直接支持有限,但可以通过浮点数配合 `[Toggle]` 关键字实现相似功能: ```cglsl [Toggle(_TRUE)] _IsTrue("Enable Feature?", Float) = 0 ``` 此段落说明了利用浮点变量 `_IsTrue` 来模拟布尔开关的效果,并附带了一个可选标签用于 UI 显示[^2]。 #### 修改现有属性 要更改已有的属性或其默认值,只需更新相应的字段即可。例如改变基础颜色为蓝色并将透明度设为半透明白色图片作为默认贴图: ```cglsl _Color ("Main Color", Color) = (0,0,1,1) _MainTex ("Base (RGB)", 2D) = "gray" { } ``` 一旦保存修改后的 Shader 文件,重新加载项目后就能看到变化反映到了关联材料上。 #### 应用到材质 完成以上操作之后,在 Unity 编辑器内打开想要应用新特性的材质球,从顶部下拉列表选择对应的 Shader 。此时应该能看到所有刚才设定好的选项出现在界面里供进一步调节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值