Unity+Shader入门精要(笔记二)基础Shader结构

材质和Unity Shader

常见流程:

(1)创建一个材质

(2)创建一个Unity Shader,并把它赋给上一步创建的材质

(3)把材质赋给要渲染的对象

(4)在材质面板中调整Unity Shader的属性

 

ShaderLab:Unity提供的编写Unity Shader的一种说明性语言

基础结构

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

Shader  "___/___": 控制材质面板所在位置

Properties:属性

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

SubShader语义块中包含的定义通常如下:

SubShader{
    //可选的
    [Tags]

    //可选的
    [RenderSetup]

    Pass{
    }
    //Other Passes
}

 

ShaderLab提供了一系列渲染状态的设置指令,这些指令可以设置显卡的各种状态。

当在SubShader块中设置了上述渲染状态时,将会应用到所有的pass。如果不想这样,可以在pass语义块中单独进行上面的设置。

 

SubShader:是一个键值对,它的键和值都是字符串类型,是SubShader和渲染引擎之间的沟通桥梁。

标签的结构:

Tags {"TagName1" = "Value1" "TagName2" = "Value2"}

 

Pass语义块

Pass{
    [Name]
    [Tags]
    [RenderSetup]
    //Other code
}

可以在Pass中定义该Pass的名称

Name "MyPassName"

通过这个名称,可以使用ShaderLab的UsePass命令来直接使用其他Unity Shader中的Pass,例如

UsePass “MyShader/MYPASSNAME"

由于Unity内部会把所有Pass的名称转换成大写字母的表示,因此,在使用UsePass命令时必须使用大写形式的名字。

 

Fallback

可以设置最低级的Unity Shader,Fallback还会影响阴影的投射。在渲染阴影纹理时,Unity会在每个Unity Shader中寻找一个阴影投射的Pass。通常情况下,不需要专门实现一个Pass,这是因为Fallback使用的内置Shader中包含了这样一个通用的Pass。

 

真正意义上的Shader代码都需要包含在ShaderLab语义中

Shader "MyShader"{
    Properties{
        //所需的各种属性
    }
    SubShader{
        //表面着色器(Surface Shader)或者
        //顶点/片元着色器(Vertex/Fragment Shader)或者
        //固定函数着色器(Fixed Function Shader)
    }
    SubShader{
        //和上一个SubShader类似    
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值