Unity Shader的结构

 Unity Shader是Unity为开发者提供的高层级的渲染抽象层。

ShaderLab是Unity提供的编写UnityShader的一种说明性语言。

 UnityShader基础结构

Shader "ShaderName"
{
    Properties{
    属性
    }
    subShader{
    //显卡A使用的子着色器
    }
    subShader{
    //显卡B使用的子着色器
    }
    Fallback "VertexLit"
}

UnityShader的结构

设置名字及材质面板位置:

Shader "Custom/MyShader"{ }

Properties:

设置材质和UnityShader的桥梁:包含一系列属性,在材质面板出现

SubShader:

定义一系列Pass以及可选的状态和标签设置。

Pass:

每个Pass定义了一次完整的渲染流程,但Pass过多,会造成渲染性能的下降。

[RenderSetup]:

状态设置,若在SubShader块中设置,会应用到所有Pass;亦可单独在Pass块中设置,并只作用于该语块。

Cull Back|Front|Off        设置剔除模式:剔除背面/正面/关闭剔除

ZTest Less Greater|LEqual|GEqual|Equal|NotEqual|Always       //设置深度测试时使用的函数

ZWrite On|Off        //开启/关闭深度写入

Blend SrcFactor DstFactor        //开启并设置混合模式

 [Tags]:

SubShader和渲染引擎之间的沟通桥梁,是一个键值对,键、值都是字符串类型;用来告诉Unity渲染引擎我希望以及何时渲染这个对象。

结构:Tags {"TagName1" = "Value1"   "TagName2" = "Value2"}

Tags{"Queue"="Transparent"}        //控制渲染顺序,指定该物体属于哪一个渲染队列。

Tags{"RenderType"="Opaque"}        //对着色器进行分类。

Tags{"DisableBatching"="True"}        //指明是否对该SubShader使用批处理。

Tags{"ForceNoShadowCasting"="True"}        //控制使用该SubShader的物体是否投射阴影。

Tags{"IgnoreProjector"="True"}        //设置是否受Projector的影响,通常用于半透明物体。

Tags{"CanUseSpriteAtlas"="False"}       //当该SubShader是用于Sprite时,该标签设为False

Tags{"PreviewType"="Plane"}        //指明材质面板将如何预览该材质,默认为一个球型。

Pass语义块:

Pass{

        [Name]        //Name "MyPassName"

        [Tags]        //怎样渲染该物体

        [RenderSetup]

        //Other code

}

特殊Pass:

  • UsePass:复用其他Unity Shader中的Pass
  • GrabPass:抓取屏幕并将结果储存在一张纹理中,用于后续Pass处理。

Fallback:

留条后路,如果上述都不能运行,就使用这个最低级的吧。

此外,Fallback还会影响阴影投射:在渲染阴影纹理时,Unity会在每个Unity Shader中寻找一个阴影投射的Pass

Fallback "name"

//或者

Fallback off

一个涵盖所有的例子:

Shader "Custom/ShaderLabProperties"{
Properties{
        //设置属性的名字(通常以下划线开始)、属性显示的名称,类型及默认值
        Name("display name",PropertyType)=DefaultValue
        Name("display name",PropertyType)=DefaultValue
        //更多属性
        //Numbers and Sliders
        _Int("Int",Int)=2
        _Float("Float",Float)=1.5
        _Range("Range",Range(0.0,5.0))=3.0
        //Colors and Vector
        _Color("Color",Color)=(1,1,1,1)
        _Vector("Vector",Vector)=(2,3,6,1)
        //Textures
        _2D("2D",2D)=""{}
        _Cube("Cube",Cube)="white"{}
        _3D("3D",3D)="black"{}
    }
SubShader{
        //可选的
        [Tags]
        //可选的
        [RenderSetup]
        pass{
        }
        //Other Passes
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值