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