美文网首页
通过物体透明认识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