Unity GLSL shader

GLSL shader


我们先基于Unity创建一个最基础的Shader文件,它的代码看起来是这样的:

Shader "LearnShader/GLSL/Learn GLSL Shader"{
    Properties{
        _Color("Color",Color) = (1,1,1,1)
    }
    SubShader{
        Tags{"RenderType" = "Opaque" "Queue" = "Geometry"}
        Pass{

        }
    }
}

默认基色为白色,现在我们通过GLSL来修改它的颜色信息。我们先创建一个learn_shader.glslinc文件,这个文件里面我们只做颜色的计算。代码是这样的:

vec4 test_alpha(vec4 color){
    color.rgb = vec3(0,0,0);
    return color;
}

很简单,就是把颜色修改成黑色!最后引入到CG/HLSL Shader 中,通过#Include "" 方式来引入。代码看起来是这样的:

Shader "LearnShader/GLSL/Learn GLSL Shader"{
    Properties{
        _Color("Color",Color) = (1,1,1,1)
    }
    SubShader{
        Tags{"RenderType" = "Opaque" "Queue" = "Geometry"}
        Pass{
            GLSLPROGRAM
            uniform vec4 _Color;
            #include "learn_shader.glslinc";

        }
    }
}

紧接着创建两个文件 *.vertex 以及 *.fragment,这里我们使用采用文件引入的方式来写CG/HLSL代码。最终完整的代码:

Shader "LearnShader/GLSL/Learn GLSL Shader"{
    Properties{
        _Color("Color",Color) = (1,1,1,1)
    }
    SubShader{
        Tags{"RenderType" = "Opaque" "Queue" = "Geometry"}
        Pass{
            GLSLPROGRAM
            uniform vec4 _Color;
            #include "learn_shader.glslinc";

            #ifdef VERTEX
            #include "learn_shader_vertex.vertex"
            #endif
            #ifdef FRAGMENT
            #include "learn_shader_fragment.fragment";
            #endif
            ENDGLSL
        }
    }
}

接下来我们看看顶点着色器和片段着色器的代码:
learn_shader_vertex.vertex

void main(){
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

learn_shader_fragment.fragment

void main(){
    gl_FragColor = test_alpha(_Color);
}

看的出来都是非常简单的代码,我们回到Unity,创建一个材质球(Material)并附加对应的着色器(Shader)

注意:Unity 必须以OpengGL的模式运行。在快捷方式的目标路径上附加这么一段-force-opengl开头要有空格。

最后我们看到的效果是不管我们怎么设置颜色它始终输出的颜色是黑色。

效果图

你可能感兴趣的:(Unity GLSL shader)