一、Shader示例代码
1.Surface Shader示例代码
Shader "Example/Diffuse Simple" {
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float4 color : COLOR;
};
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = 1;
}
ENDCG
}
Fallback "Diffuse"
}
2.Vertex/Fragment Shader示例代码
Shader "Unlit/SimpleShader"
{
SubShader{
Pass{
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
}
}
}
3.Fixed Function Shader示例代码
Shader "fixed shader/color"{
Properties
{
_MainColor("Main Color", Color) = (1,1,1,1)
}
SubShader
{
Pass
{
Color[_MainColor]
}
}
Fallback "Diffuse"
}
二、选择哪种着色器
除非你有非常明确的需求必须要使用固定函数着色器,例如需要在非常旧的设备上运行你的游戏(这些设备非常少见),否则请使用可编程管线的着色器,即表面着色器或顶点/片元着色器。
如果你想和各种光源打交道,你可能更喜欢使用表面着色器,但需要小心它在移动平台的性能表现。
如果你需要使用的光照数目非常少,例如只有一个平行光,那么使用顶点片元着色器是一个更好的选择。
最重要的是,如果你有很多自定义的渲染效果,那么请选择顶点/片元着色器。
三、后续...
主要以顶点/片元着色器为首要学习shader。
下一章将开始学习顶点/片元着色器的结构与组成部分。