美文网首页
通过物体透明认识Fixed function Shader

通过物体透明认识Fixed function Shader

作者: JervieQin | 来源:发表于2017-10-14 20:44 被阅读0次

通过之前的shader初识,Fixed Function Shader是固定功能的着色器,它的功能有限,但是编写比较简单,因为它总是通过一系列的命令达到我们对图形着色的目的。现在我们来看一段脚本

Shader "Custom/FixedShader2" {      //"Custom/FixedShader2" 定义了shader菜单的级联选项
    Properties{                     // Properties是一系列的输入参数
        _Color("Main Color",Color) = (1,1,1,1)          //设置物体本身的颜色
        _Ambient("Ambient",Color) = (0.3,0.3,0.3,0.3)   //设置环境色
        _Specular("Specular",Color) = (1,1,1,1)         //设置反光色
        _Shininess("Shininess",Range(0,8)) = 4          //设置光滑度,正比
        _Emission("Emission",Color) = (1,1,1,1)         //设置自发光色,不对场景物体产生光照影响
        _MainTex("MainTex",2D) = ""{}                   //设置第一张纹理,{}不可漏
        _SecondTex("SecondTex",2D) = ""{}               //设置第二张纹理,{}不可漏
        _Constant("Constant",Color) = (1,1,1,0.3)       //用来调节alpha值
    }
        SubShader     //具体的shader算法写在这里,一个shader至少有一个Subshader
    {
        Tags          //GPU渲染是有顺序的,tags标签指定了你的shader在何时被调用
    {
            //指明了我们的shader在Transparent阶段被调用。
            //Queue表明了GPU渲染的顺序: Background,Geometry, AlphaTest,Transparent,Overlay
        "Queue" = "Transparent"          
    }
        pass {      //pass程序块在Geometry阶段执行一次,用于对渲染对象的几何计算,在surface shader中不需要写pass
                    //Blend用于设置Alpha混合,Alpha操作和alpha覆盖模式。,这里设置了alpha混合
          Blend SrcAlpha OneMinusSrcAlpha  
                    //material是一个命令块,它的作用是使用Properties中的输入参数,使shader能够产生影响
          material    
        {
            diffuse[_Color]                   //指定颜色的命令
            ambient[_Ambient]                 //指定环境色的命令
            specular[_Specular]               //指定反光色的命令
            shininess[_Shininess]             //指定光滑度的命令,往往和上一个命令成对使用
            emission[_Emission]               //指定自发光色的命令
             
        }
            lighting on                       //打开光照开关,默认为关闭,不接受光照影响
            separatespecular on               //镜面高光开关,如果之前使用了specular[]命令,这个开关必须打开

            settexture[_MainTex]              //设置纹理,一个settexture只能带一个参数
        {
          //combine命令用于将之前material中的物理计算结果与纹理结合
          combine texture * primary double   //primary代表之前所有计算好的顶点值 , double表示提高两倍亮度
        }
            settexture[_SecondTex]   
        {
            //combine texture * primary double  //会覆盖前一个纹理
            //combine texture * previous double   //用当前采样纹理乘上之前采样结果,实现两个纹理融合
            // combine texture * previous double,texture //利用纹理的alpha通道来设置shader透明度
            
            constantColor[_Constant]
            combine texture * previous double,texture * constant //这样就可以在图片透明度之上再通过调节颜色的alpha值来控制最终alpha效果
        }
    }
    }
        FallBack "Diffuse"
}

实现的效果

更多语法,详看ShaderLab syntax

相关文章

网友评论

      本文标题: 通过物体透明认识Fixed function Shader

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