美文网首页
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