着色器类型

Unity种有3种主要的着色器类型

固定函数着色器 Fixed Function Shader 表面着色器 SurfaceShader 顶点/片元着色器 Vertex/Fragment Shader

固定函数着色器:Fixed Function Shader

简介:一种被弃用的着色器,主要针对的是固定管线,在老设备上可能用得上, (如果是在可编程管线上运行,会被编译成顶点-片元着色器

缺点:固定管线着色器,功能比较单一,实现的效果少, 主要是通过打开或关闭某些功能的方式进行控制的

支持环境:Direct 7.0 、OpenGL1.5、OpenGL ES 1.1

  1. Shader "Hibari/FixedShader"
  2. {
  3. Properties
  4. {
  5. _Color("Main Color", Color) = (1, 0.5, 0.5, 1)
  6. }
  7. SubShader
  8. {
  9. pass
  10. {
  11. Material{Diffuse [_Color]}
  12. }
  13. Lighting On
  14. }
  15. }

表面着色器:Surface Shader

简介:这是一个已经封装好各种功能的着色器,能够简单的使用就能达到效果 本质上依旧是一个 顶点/片元着色器 缺点:需要与不需要的功能都写在里面了,GPU开销交大 优点:使用简单 https://docs.unity3d.com/cn/2020.3/Manual/SL-SurfaceShaders.html https://docs.unity3d.com/2020.3/Documentation/Manual/SL-SurfaceShaders.html

  1. Shader "Hibari/SurfaceShader"
  2. {
  3. SubShader
  4. {
  5. Tags { "RenderType"="Opaque" }
  6. CGPROGRAM
  7. #pragma surface surf Lambert //使用Lambert光照模型
  8. struct Input
  9. {
  10. float4 color : COLOR;
  11. };
  12. void surf (Input IN, inout SurfaceOutput o)
  13. {
  14. o.Albedo = 1;
  15. }
  16. ENDCG
  17. }
  18. Fallback "Diffuse"
  19. }

顶点/片元着色器:Vertex/FragmentShader

简介:可以自定义复杂的效果,所有Shader的基础 https://docs.unity3d.com/cn/2020.3/Manual/shader-writing.html https://docs.unity3d.com/2020.3/Documentation/Manual/shader-writing.html

  1. Shader "Hibari/CustomVertFragShader"
  2. {
  3. SubShader
  4. {
  5. CGPROGRAM
  6. #pragma vertex vert //声明顶点着色器函数
  7. #pragma fragment frag //声明片元着色器函数
  8. float4 vert(float4 v : POSITION): SV_POSITION //定义顶点着色器函数
  9. {
  10. return mul(UNITY_MATRIX_MVP, v);
  11. }
  12. float4 frag():SV_Target //定义片元着色器函数
  13. {
  14. return fixed4(1.0, 0.0, 0.0, 1.0);
  15. }
  16. ENDCG
  17. }
  18. }