美文网首页
Unity Shader初识--基本结构

Unity Shader初识--基本结构

作者: CodeVin | 来源:发表于2019-03-05 09:24 被阅读0次

学习Shader第0步 :)

Unity Shader不是真正的Shader,Unity Shader是使用ShaderLab来编写的。ShaderLab是Unity提供的一种说明性语言。对于表面着色器和顶点片元着色器,我们可以在ShaderLab内部,CGPROGRAM和ENDCG之间,嵌套CG/HLSL语言来编写这些着色器代码。
Unity Shader代码的基本结构如下:

//Shader "Shader名称"
Shader "Custom/ExampleShader"
{
    //Properties的作用仅仅是为了让这些属性出现在Inspector面板中
    //即使我们不在Properties中声明这些变量,也可以直接在CG代码中定义
    Properties
    {
        //格式: 变量名("面板显示变量名", 类型) = 默认值
        // 下面列出了Properties支持的所有属性类型

        //numbers and sliders
        _Int("Int", Int) = 2
        _Float("Float", Float) = 1.2
        _Range("Range", Range(0.0, 1.0)) = 0.5

        //colors and vectors
        _Color("Color", Color) = (1, 0, 1, 1)
        _Vector("Vector", Vector) = (1, 2, 3, 4)

        //textures
        _2D("2D", 2D) = "" {}
        _Cube("Cube", Cube) = "white" {}
        _3D("3D", 3D) = "black" {}
    }

    //至少需要一个SubShader
    SubShader
    {
        //状态设置。可选的。
        //例如可以设置剔除模式,深度测试使用的函数,开启混合模式等
        Cull Off ZWrite Off ZTest Always

        //标签。可选的
        //是一个键值对,键和值都是字符串类型。告诉Unity的渲染引擎怎样以及何时渲染这个对象
        //例如可以控制渲染顺序,对着色器进行分类,禁用批处理等
        Tags { "RenderType" = "Opaque" }

        //状态和标签也可以声明在Pass中。在SubShader中设置,将会用于所有Pass

        //定义一次完整的渲染流程。Pass过多会造成渲染性能下降
        //如果是表面着色器则需要将Pass内代码块提出来,不需要定义Pass
        Pass
        {
            //使用CG/HLSL语言编写
            CGPROGRAM

            //着色器代码。。。

            ENDCG
        }
    }

    //如果显卡不能运行上面所有的SubShader,就使用 Diffuse 吧
    //或者: Fallback Off   关闭Fallback功能
    Fallback "Diffuse"
}

参考:《Unity Shader入门精要》 冯乐乐(著)

相关文章

网友评论

      本文标题:Unity Shader初识--基本结构

      本文链接:https://www.haomeiwen.com/subject/nzemuqtx.html