Unity Shader基础【三】- Unity ShaderLab语法基础

本文详细介绍了Unity ShaderLab的基础语法,包括Properties关键字用于定义材质面板参数,SubShader用于创建渲染流程,Pass语句涉及的裁剪、深度测试、混合模式设置,以及Tags的使用。此外,还讲解了GrabPass、UsePass命令和备用着色器Fallback的用法,帮助开发者更好地理解和创建Unity着色器。
摘要由CSDN通过智能技术生成

此外引用官方文档中对ShaderLab的解释:

Unity中所有Shader文件都通过一种陈述性语言进行描述,称为“ShaderLab”, Shader文件中用一种嵌套式语法来描述着色器行为,如材质面板中显示的属性、使用的混合模式等等,实际的着色器代码(如HLSL/Cg)定义在CGPROGRAM与ENDCG之间。

着色器文件的根命令为Shader,每个文件都必须调用该命令进行定义,语法如下:

Shader "name" 
{ 
    [Properties] 
    Subshaders 
    [Fallback] 
    [CustomEditor] 
}

下面对ShaderLab语言进行简单介绍。

1 属性关键字Properties

Unity着色器可通过该关键字定义一个参数列表,该参数列表可在Unity材质面板中进行配置,定义方法如下。

Properties { Property [Property ...] }

数字与滑动条

name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number

通过Range进行定义会在面板中显示为滑动条,基本类型则为可填数字。

着色与向量

name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)

定义颜色值为RGBA,向量为四维向量。

纹理

name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}

定义2D或3D纹理,及cubemap

示例

// properties for a water shader
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) = "" {}
}

Shader中调用

Unity着色器代码中调用属性值,需要定义一个与属性名称与类型都匹配的变量,如:

Shader "Unlit/TestShader"
{
    //属性声明
    Properties{
        _Color("Tint", Color) = (1,1,1,1)
    }
    //着色器
    SubShader{
        Pass{
            CGPROGRAM
            ...
            //在CG代码中,需
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值