Shader----Fixed Function Shader

21 阅读2分钟

针对硬件能够执行的命令而编写的shader,功能有限,速度快。

Properties:属性

Material:材质

Lighting:启用顶点光照

Settexture:设置纹理

Pass:通道

First Shader----基础shader

Shader"Custom/ff1"  //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)
    }   

    SubShader
    {
       pass{   //编辑渲染通道
          //固定值  color(1,0,0,1) 描述颜色信息,红色
            //参数值,属性中设置的颜色用于通道中的颜色,中括号中为属性值
           // color[_Color]
             //体现三维立体,需要光照
            material  //命令块
            {
               //描述材质漫反射颜色,物体本身固有颜色
                diffuse[_Color]
                //环境对背光面的影响参数
                ambient[_Ambient]
                //光滑的物体,会看到独立的高光部分
                specular[_Specular]
                //描述specular的强度,高光反射的区域
                shininess[_Shininess]
               //自发光
                emission[_Emission]
            }
            //启动光照,显示物体的固有颜色,有两个参数on/off,有向光面和背光面,针对属性diffuse
            lighting on
            //使用高光必须添加独立的镜面高光,大面积高光,不符合实际,高光反射得不够集中,需要shininess控制。
            separatespecular on
        }
    } 
}

Second Shader----贴图shader

Shader"Custom/shaderbase1"
{
    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)=""
    }
    SubShader
    {
        pass
        {
            material
            {
                diffuse[_Color]
                ambient[_Ambient]
                specular[_Specular]
                shininess[_Shininess]
                emission[_Emission]
            }
            lighting on
            SeparateSpecular on
            settexture[_MainTex]
            {
                combine texture*primary quad
            }
        }
    }
}

ThirdShader----纹理混合

Shader"Custom/shaderbase2"
{
    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)=""
    }
    SubShader
    {
        //改变渲染顺序
        Tags{"Queue"="Transparent"}
        pass
        {
            material
            {
                diffuse[_Color]
                ambient[_Ambient]
                specular[_Specular]
                shininess[_Shininess]
                emission[_Emission]
            }
                lighting on
                SeparateSpecular on
            settexture[_MainTex]
            {
                //当前纹理*顶点光照颜色
                combine texture*primary quad
            }
            settexture[_SecondTex]
            {
                //previous:当前纹理*之前所有计算和采样后的结果
                combine texture*previous double,texture
            }
        }
    }

ForthShader----半透明

Shader"Custom/transparent"
{
    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)=""
    }
    SubShader
    {
        Tags{"Queue"="Transparent"}
        pass
        {
            Blend SrcAlpha OneMinusSrcAlpha  //源alpha与(1-源alpha)的比例去混合之前已经渲染的场景颜色
            material
            {
                diffuse[_Color]
                ambient[_Ambient]
                specular[_Specular]
                shininess[_Shininess]
                emission[_Emission]
             }
                lighting on

                SeparateSpecular on
                settexture[_MainTex]
                   {
                                //当前纹理*顶点光照颜色
                        combine texture*
                        primary quad
                   }
                 settexture[_SecondTex]
                   {
                                //previous:当前纹理*之前所有计算和采样后的结果
                        combine texture*previous double,texture
                   }
        }
    }
}

贴图很重要

Settexture:设置贴图

Combine:

Constantcolor

Blend:@混合

Tags:控制渲染顺序