美文网首页
Unity Shader 标准表面着色器解析

Unity Shader 标准表面着色器解析

作者: _灯下影子 | 来源:发表于2021-01-06 16:04 被阅读0次
    // Shader Lab 语言
    /*
    一个Unity Shader 的基本结构格式
    Shader "Custom/Name"  //Shader 根命令(每一个着色器都需要定义一个唯一的Shader根命令)
    {
        //着色器属性列表,里面是用来定义着色器属性的语句,比如,颜色,纹理,透明度,反射率等等都用作参数。
        Properties{
            //  着色器属性
            _Name("Display Name", type) = default Value[{options}]
            //_Name : 变量名, Shader脚本文件内部使用的名称。
            //Display Name: 显示名,就是在材质面板上出现的名称。
            //type: 属性值的类型。 
            Color  :表示颜色的属性
            2D: 表示2的幂尺寸的贴图属性。
            Rect: 表示非2的幂尺寸的贴图属性。
            Cube: 表示CubeMap 立方体贴图的属性
            Range(min, max): 表示在min, max之间的一个数值。
            Float : 表示浮点数属性
            Vector: 表示四维向量属性
            //default Value : 定义此属性的默认值。
            //options:一些纹理的参数选项,只对2D、Rect或者Cube贴图有关,包括两种选项:Tex Gen纹理生成模式和Lightmap Mode光照贴图模式。
            _MainColor("Main Color", color) = (1,0,0,0.5)
            //表示定义一个默认值为半透明红色的颜色Main Color
            _MainTex ("Main Texture", 2D) = "Black" {}
            //表示定义一个默认值为黑色的纹理Main Texture
            _Range Value ("Float Value", Float) = 1.5
            //表示一个浮点数的属性, 默认值为1.5
        
        }
        //渲染时候从上到下遍历子着色器列表,每个Pass都会渲染一次对象
        Subshader { [Tags标签] [Common State通用状态] Pass[] }
        SubShader{
            //子着色器1
            //Tags标签,Common State通用状态, Pass通道列表组成。
            Tags:标签名称,控制渲染引擎“何时”“如何”将子着色器进行呈现出来。设定Tags索引值可以有任意多个,是“键-值”对的形式,语法格式如下:
            Tags{“标签1”=“值1”“标签2”=“值2”}
            例如:
            Tags{“Render Type”=“Transparent”}
            表示设置渲染方式为透明。
            Tags{“Render Type”=“Opaque”}
            表示设置渲染方式为不透明。
            Tags{“Force No Shadow Casting”=“True”}
            表示设置渲染方式为不产生阴影。
            Tags{“Queue”=“XXX”}
            表示物体按照索引值从小到大依次渲染到屏幕上,预定义的标签索引值Queue
            
            LOD:细节层次,全名是Level of Detail,Unity内置Shader定义的一组LOD数值,决定了我们能用什么样的着色器。数值越大,细节越高,消耗越大。
            Vertex Lit及其系列= 100
            Decal,Reflective Vertex Lit = 150
            Diffuse = 200
            Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
            Bumped, Specular = 300
            Bumped Specular = 400
            Parallax = 500
            Parallax Specular = 600
            
            Pass:通道,可以设置图形显示卡的各种状态,一般命名都是大写开头
            Pass { [Name and Tags] [RenderSetup] [SetTexture]}
            
        }
        SubShader{
            //子着色器2
        }
        FallBack "Diffuse" //备用着色器名称
        Fallback 备用着色器,就是说如果当前硬件不支持任何子着色器运行,那么就用Fallback备用着色器来渲染,一般位于所有子着色器之后。Fallback语句的用法有两种:
        Fallback“备用着色器名称”:使用给定名称的着色器。
        Fallback Off:显式声明不使用备用着色器,当没有子着色器能够运行的时候也不会有任何警告。
        
        Category分类,用来提供让子着色器继承的命令,例如关闭雾效、设置混合模式。
        例如:
        Category
        {
            Fog {Mode off} //关闭雾效
            Blend One One //设置混合模式
            SubShader { ...}
            SubShader { ...}
        }
    }
    
    
    */
    

    相关文章

      网友评论

          本文标题:Unity Shader 标准表面着色器解析

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