• Unity Shader基础(1):基础


    一.Shaderlab语法

    1.给Shader起名字

    Shader "Custom/MyShader"
    

    这个名称会出现在材质选择使用的下拉列表里

    2. Properties (属性)

    Properties
    {
    Name ("display name",ProperType)=DefaultValue
    //更多属性
    }
    

    Name:用于Shader中访问的名字

    display name:出现在材质面板的名字

    ProperType:它的类型

    3.SubShader

    每一个Unity Shader文件可以包含多个SubShader语义块,但至少要有一个

    SubShader {
    //可选的
    [Tags]
    //可选的
    [RenderSetup]
    Pass{
    }
    //Other Pass
    }
    

    Pass尽量不要太多,太多往往会造成渲染性能的下降

    (1)状态设置

    下面是常见的状态设置选项

    (2).Tags:是一个键值对(Key/Value Pair)

    用来告诉Unity的渲染引擎:SubShader我希望怎么以及何时渲染这个对象

    结构如下:

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

    支持的标签类型如下:


    (3)Pass语义块

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

    1.Name:在Pass中定义该Pass的名称,我可以使用ShaderLab中的UsePass命令来直接使用其他Unity Shader中的Pass(使用大写形式的名字)

    2.Pass中的标签(Tags):不同于SubShader中的标签

    Pass中使用的标签类型如下:

    3.Usepass:可以复用其他Unity Shader中的Pass

    GrabPass:负责抓取屏幕并结果存储在一张纹理中,以用于后续的Pass处理(截屏)

    4.Fallback(留一条后路)

    如果上面所有的SubShader在这块显卡上不能运行,那么就使用这个最低级的Shader

    Fallback "name"
    

    当然你也可以不指定它(关闭这个功能),然后所有不能跑的话就不执行任何操作

    5.CGPROGRAM和ENDCG

    CGPROGRAM和ENDCG之间的代码是使用了CG/HLSL编写的,也就是说我们需要把CG/HLSL语言嵌套在ShaderLab语言中.

    CG代码片段通常是位于Pass语义内部的

    GlSL的代码嵌套在GLSLPROGRAM和ENDGLSL之间

    6.#prama 编译指令

    #pragma 编译指令:  #pargma 关键词 函数名 光照模型 [其它选项] 
    

    每个CG片段必须至少包含一个顶点程序和一个片段程序。因此需要#pragma vertex#pragma fragment指令。

    编译指令留着再写一篇博客:暂时还没写

    二丶Unity Shader的形式

    Shader "MyShader"
    {
    Properties
    {
    //所需的各种属性
    }
    SubShader
    {
    //真正意义上的Shader代码会出现在这里
    //表面着色器(Surface Shader)或者
    //顶点/片元着色器(Vertex/Fragment Shader)或者
    //固定函数着色器(Fixed Function Shader)
    }
    SubShader
    {
    //和上一个SubShader类似
    }
    }
    

    作者:Ligo丶

    出处:https://www.cnblogs.com/Ligo-Z/

    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

  • 相关阅读:
    luogu P2661 信息传递 强连通分量求最小环
    luogu P1346 电车 最短路
    luogu P1113 杂务
    luogu P1111 修复公路 最小生成树prim
    python提交要注意的几个地方
    【图论】拓扑排序
    算法竞赛入门经典 第六章
    实用函数
    Markdown数学公式语法
    Codeforces Round #627 (Div. 3) 补题
  • 原文地址:https://www.cnblogs.com/Ligo-Z/p/11330524.html
Copyright © 2020-2023  润新知