[基础] Unity Shader的文件结构

在Unity中,所有的Unity Shader都是使用ShaderLab来编写的,它可以帮助我们轻松地控制渲染。

1. ShaderLab基本结构

一个Unity Shader的基本结构如下:

Shader "位置和名称"
{
    Properties // 属性 (可选)

    SubShader // 子着色器
    SubShader // 子着色器
    ...

    Fallback "低级Shader" // (可选)
    
}

2. Shader的位置和名称

每个Unity Shader文件的第一行都要指定Unity Shader的位置和名称:

Shader "Test/MyShader"{   }

如果要为材质添加我们所编写的Shader,以上述代码为例,单击材质面板中的Shader下拉菜单,然后依次选择Test >> MyShader即可。

3. Properties:材质与Shader的桥梁

 Properties语义块中可定义一系列属性,这些属性会出现在材质面板中,我们可以直接在代码里设置这些属性的默认值,也可以在Unity中对这些属性重新进行设置。可以将这些属性理解为C#中的变量,它们会在SubShader语义块中被使用。它的语法结构如下:

Properties {
    变量名 ("面板展示名称", 属性类型) = 默认值
    变量名 ("面板展示名称", 属性类型) = 默认值
    ...
}

Properties语义块里支持的属性类型如下表所示:

4. SubShader:定义渲染的部分

Shader文件可包含多个SubShader语义块,但最少要有一个。在运行Shader文件时Unity会扫描该文件下所有SubShader语义块,然后选择第一个能够在目标平台上运行的SubShader,如果都不支持,则会使用Fallback语义指定的Unity Shader。

SubShader语义块的基本结构如下:

SubShader {

    // 标签 (可选)
    Tags {
        "[标签名]" = "[值]"
        ...
    }

    // 状态 (可选)
    [状态名称] [指令]

    // 渲染管线
    Pass {
    }

}

如下是一个最简单的Properties与SubShader结合使用的实例代码:

Shader "Test/MyShader"
{
    Properties
    {
        _MyColor("My Color", Color) = (1, 1, 1, 1)
    }

    SubShader
    {
        Pass
        {
            Color[_MyColor]
        }
    }
}

5. FallBack:为Shader留一条后路

紧跟在SubShader语义块后面的可以是一个FallBack指令,它用于告诉Unity在所有SubShader都无法在目标平台上运行时,就使用这个最低级的Shader。它的语义如下:

Fallback "[最低级的Shader]"
// 或者
Fallback off

通常情况下使用初始的Fallback指令即可。 

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值