standard surface shader: 标准光照模型的表面着色器;
unlit shader:不含光照(但含雾效)的基本顶点/片元着色器;
image effect shader:实现屏幕后处理效果的一个模板;
compute shader:利用GPU的并行性进行一些与常规渲染流水线无关的计算。
shaderLab 渲染状态设置指令:
Cull: Cull Back|Front|Off 设置剔除模式,剔除背面/正面/关闭剔除
ZTest: ZTest Less Greater|LEqual|GEqual|NotEqual|Always 深度测试时使用的函数
ZWrite: ZWrite On|Off 开启|关闭深度写入
Blend: Blend SrcFactor|DstFactor 开启并设置混合模式
--------:设置相应的状态后,会应用到所有的pass
shaderLab的标签:tags {"key"="value" "key"="value"} 仅仅在SubShader中进行设置,不能在pass中进行设置
pass中的标签类型:
Shader "Custom/shader_1"
{
//面板显示 定义的属性
Properties
{
/*
* 各种所需的属性
*/
_Color ("color", Color) = (0,0,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
_Vertor("Vector",Vector)=(1,2,3,4)
_2D("2D",2D)=""{}
_3D("3D",3D)="black"{}
}
SubShader
{
//标签 key:value 形式
//Queue 控制渲染顺序
//RenderType 对着色器进行分类
//DisableBatching 是否对该SubShader进行批处理
//ForceNoShadowCasting 控制该物体是否会投射阴影
//IgnoreProjector 是否收projector的影响 通常用于半透明物体
//CanUseSpriteAtlas 用于2d时将该标签设为false
//PreviewType 如何预览材质 value为形状 skyBox plane
Tags { "RenderType"="opaque" "Queue"="Transparent" "DisableBatching"="True" "ForceNoShadowCasting"="True"
"IgnoreProjector"="true" "CanUseSpriteAtlas"="False" "PreviewType"="Plane"}
/*
*cg代码可以写在 SubShader中(表面着色器的做法)或写在pass中(顶点/片元着色器的做法)
*/
pass{
//UsePass 其他shader可通过UsePass "shader名称/pass名称(自动转为大写)" 进行复用
//GrabPass 该pass负责抓取屏幕并将结果存储在一张纹理中,以用于后续的pass
//[Name] 定义name后 其他shader可通过UsePass "shader名称/pass名称(自动转为大写)" 进行复用
//LightMode :设置该pass在unity的渲染流水线中的角色
//RequireOptions:满足某些条件时渲染该pass
//[Tags] Tags {"LightMode"="ForwardBase" "RequireOptions"="SoftVegetation"}
//[RenderSetup]
}
}
//FallBack 如果在显卡上不能运行该SubShader 就用指定的shader
//FallBack "name"
//FallBack Off 或者直接关掉,不使用
FallBack "Diffuse"
}
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Custom/Surface_Shader"
{
Properties{
_Color("Main Color",Color)=(0,0,0,0)
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
/*
*CG代码块 surface 表面着色器写在subShader里面
*/
//surface 表面着色器
#pragma surface surf Standard
struct Input
{
float4 color:COLOR;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo=1;
}
ENDCG
}
SubShader{
Pass{
// 标签或状态的设置
CGPROGRAM
/*
*CG代码块 vertex fragment 顶点或片元着色器写在pass里面
*/
//顶点着色器
#pragma vertex vert
//片元着色器
#pragram fragment frag
float4 vert(float4 v: POSITION):SV_POSTION{
return UnityObjectToClipPos(v);
}
fixed4 frag():SV_Target{
return fixed4(1.0,0.0,0.0,1.0);
}
ENDCG
}
}
SubShader{
Pass{
//固定函数着色器
//当对于一些旧的设备 不支持可编程管线着色器 可以使用固定函数着色器(基本不会使用到,可以说不存在了)
Material{
Diffuse [_Color]
}
Lighting On
}
}
FallBack "Diffuse"
}