US2S2L7-3——固定函数着色器
固定函数着色器
表面着色器 和 顶点/片元着色器 这两种Unity Shader形式都使用了可编程管线
而对于一些老设备(DX7.0、OpenGL1.5或OpenGL ES 1.1),它们不支持可编程管线着色器
这时就需要使用固定函数着色器来进行渲染,这些着色器只能实现一些非常简单的效果
它的特点是:
- 需要在
Pass
渲染通道中编写着色器逻辑
- 需要使用ShaderLab语法中的渲染设置命令来编写,而非CG和HLSL着色器语言
但是由于这些旧设备目前市面上几乎已经没有了,
所以固定函数着色器我们几乎不会再使用,只做了解即可
即使我们现在在Unity中使用固定函数着色器来编写Shader,在内部也会被编译为顶点/片元着色器
因此真正意义的固定函数着色器已经不存在了
例如下面这种Shader:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Shader "Test/Lesson12" { Properties { _Color("Main Color", Color) = (1, 1, 1, 1) }
SubShader { Pass { Material { Diffuse[_Color] } Lighting On } } }
|
固定函数常用命令及示例代码
常用命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Pass { Lighting on Lighting off
Color(1,1,1,1) Color[颜色变量]
Material { Diffuse[颜色变量] }
SetTexture[材质变量] { Combine texture Combine texture * primary DOUBLE } }
|
示例代码一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Shader "Lesson/LessonFS_1" { Properties { _Color("颜色", Color)=(1,1,1,1) } SubShader { Pass { Lighting off Color[_Color] } } FallBack "Diffuse" }
|
示例代码二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Shader "Lesson/LessonFS_2" { Properties { _Color("漫反射颜色", Color)=(1,1,1,1) } SubShader { Pass { Lighting on Material { Diffuse[_Color] } } } FallBack "Diffuse" }
|
示例代码三:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Shader "Lesson/LessonFS_3" { Properties { _MainTex("纹理", 2D) = "white"{} } SubShader { Pass { SetTexture[_MainTex] { Combine texture } } } FallBack "Diffuse" }
|
示例代码四:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Shader "Lesson/LessonFS_4" { Properties { _DiffuseColor("漫反射颜色", Color)=(1,1,1,1) _MainTex("纹理", 2D) = "white"{} } SubShader { Pass { Lighting on Material { Diffuse[_DiffuseColor] } SetTexture[_MainTex] { Combine texture * primary DOUBLE } } } FallBack "Diffuse" }
|