您现在的位置:首页 >> 前端 >> 内容

shader学习之一固定管线着色器与属性

时间:2017/1/17 10:00:00 点击:

  核心提示:在Unity引擎中,为了方便用户与引擎沟通,Unity引擎创造了一种简单的命令集词法结构。unity总共包含了三种着色器:1.固定 管线着色器2.顶点和片段着色器3.表面着色器咱们从固定管线着色器开始...

在Unity引擎中,为了方便用户与引擎沟通,Unity引擎创造了一种简单的命令集词法结构。

unity总共包含了三种着色器:

1.固定 管线着色器

2.顶点和片段着色器

3.表面着色器

咱们从固定管线着色器开始学!

//咱们shader的名字,在材质球上可以直接选
Shader "Custom/1-1color" {
    //【属性】 
    Properties {
        _Color("材质颜色", Color) = (1, 1, 1, 1) _Diffuse("漫反射", Color) = (1, 1, 1, 1) _Specular("高光颜色", Color) = (1, 1, 1, 1) _MainTex("纹理材质", 2D) = "white" {}
        _Shininess("高光光斑", Range(0.1, 1)) = 0.7 _Ambient("环境光", Color) = (1, 1, 1, 1) _Emission("自发光", Color) = (1, 1, 1, 1)
    }

    //【子着色器】
    SubShader {
        Pass {
            Material {
                //漫反射
                Diffuse[_Diffuse]
                //高光
                Specular[_Specular]
                //高光光斑
                Shininess[_Shininess]
                //环境光
                Ambient[_Ambient]
                //自发光
                Emission[_Emission]
            }
            //开启灯光
            Lighting On
            //设置纹理
            SetTexture[_MainTex] {
                //常量颜色影响纹理
                ConstantColor[_Color]
                //纹理颜色和两倍顶点颜色混合    
                Combine texture * primary DOUBLE
            }
        }
    }
}

shader的属性上面没有列完全,总共有Color颜色,Vector四维向量,Float单精度浮点数,range(最大值,最小值)=中间某个值,2D表示2D的纹理贴图,Rect矩形纹理贴图,Cube立方体纹理贴图。

如果你发现设置纹理之后没有灯光效果,请把顶点颜色混合进去,应该就可以了,我一开始也比较困惑!

颜色混合命令:

(1)直接使用纹理中的颜色:SetTexture[_MainTex]{ combine texture }

(2)让纹理颜色和常量纯色进行混合:SetTexture[_MainTex]{ constantColor[_Color] combine constant * texture }

(3)我们希望顶点颜色和纹理颜色进行混合:SetTexture[_MainTex]{ combine primary * texture }

(4)我们希望顶点颜色和常量同时影响纹理:SetTexture[_MainTex]{ constantColor[_Color] combine constant * texture *primary }

想让顶点颜色双倍的影响纹理的话,直接乘以DOUBLE就行。

Combine 中的texture 指的是 [_MainTex], primary 指的是上面的光照计算结果,DOUBLE亮度提高两倍。

previous :上一次SetTexure的结果。Constant :被ConstantColor指定的颜色。

Quad 亮度提高四倍

Tags:SH HA AD DE 
作者:网络 来源:xiongwen_l