GLSL shader
我们先基于Unity创建一个最基础的Shader文件,它的代码看起来是这样的:
1 2 3 4 5 6 7 8 9 10 11 | Shader "LearnShader/GLSL/Learn GLSL Shader"{ Properties{ _Color("Color",Color) = (1,1,1,1) } SubShader{ Tags{"RenderType" = "Opaque" "Queue" = "Geometry"} Pass{ } } } |
默认基色为白色,现在我们通过GLSL来修改它的颜色信息。我们先创建一个
1 2 3 4 | vec4 test_alpha(vec4 color){ color.rgb = vec3(0,0,0); return color; } |
很简单,就是把颜色修改成黑色!最后引入到CG/HLSL Shader 中,通过#Include "" 方式来引入。代码看起来是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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"; } } } |
紧接着创建两个文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 } } } |
接下来我们看看顶点着色器和片段着色器的代码:
1 2 3 | void main(){ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } |
1 2 3 | void main(){ gl_FragColor = test_alpha(_Color); } |
看的出来都是非常简单的代码,我们回到Unity,创建一个
注意:Unity 必须以OpengGL的模式运行。在快捷方式的目标路径上附加这么一段
-force-opengl 开头要有空格。
最后我们看到的效果是不管我们怎么设置颜色它始终输出的颜色是黑色。
效果图