着色器类型
Unity种有3种主要的着色器类型
固定函数着色器 Fixed Function Shader 表面着色器 SurfaceShader 顶点/片元着色器 Vertex/Fragment Shader
固定函数着色器:Fixed Function Shader
简介:一种被弃用的着色器,主要针对的是固定管线,在老设备上可能用得上, (如果是在可编程管线上运行,会被编译成顶点-片元着色器)
缺点:固定管线着色器,功能比较单一,实现的效果少, 主要是通过打开或关闭某些功能的方式进行控制的
支持环境:Direct 7.0 、OpenGL1.5、OpenGL ES 1.1
Shader "Hibari/FixedShader"
{
Properties
{
_Color("Main Color", Color) = (1, 0.5, 0.5, 1)
}
SubShader
{
pass
{
Material{Diffuse [_Color]}
}
Lighting On
}
}
表面着色器: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
Shader "Hibari/SurfaceShader"
{
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Lambert //使用Lambert光照模型
struct Input
{
float4 color : COLOR;
};
void surf (Input IN, inout SurfaceOutput o)
{
o.Albedo = 1;
}
ENDCG
}
Fallback "Diffuse"
}
顶点/片元着色器: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
Shader "Hibari/CustomVertFragShader"
{
SubShader
{
CGPROGRAM
#pragma vertex vert //声明顶点着色器函数
#pragma fragment frag //声明片元着色器函数
float4 vert(float4 v : POSITION): SV_POSITION //定义顶点着色器函数
{
return mul(UNITY_MATRIX_MVP, v);
}
float4 frag():SV_Target //定义片元着色器函数
{
return fixed4(1.0, 0.0, 0.0, 1.0);
}
ENDCG
}
}