摘自冯乐乐的《unity shader 入门精要》
由于之前看《Unity shader 入门精要》看到太过粗略了,只关注书中的shader代码,导致好多代码都是不是很懂,所以就往回看,
找找对于shader的一些基础知识
一个简单的 surfaceShader (表面着色器)的结构如下:
Shader "Custom/SurfaceShader" {
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"
}
Shader "Custom/VertexFragmentShader" {
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float4 vert(float4 v : POSITION) : SV_POSITION
{
return mul(UNITY_MATRIX_MVP,v);
}
fixed4 frag() : SV_Target
{
return fixed4(1.0,0.0,0.0,1.0);
}
ENDCG
}
}
}
一个简单的 Basic(固定函数着色器)
Shader "Custom/Basic" {
Properties
{
_Color ("Main Color", Color) = (1, 0.5, 0.5, 1)
}
//对于固定着色器来说,我们完全使用ShaderLab的语法
SubShader
[
Pass
{
Material
{
Diffuse [_Color]
}
Lighting On
}
]
}
然后,再是摘录一段Unity shader 与 CG/HLSL的关系:
Unity Shader 是用ShaderLab 言语来编写的,但是我们可以在
ShaderLab内部嵌套CG/HLSL的代码这些代码是嵌套在CGPROGRAM和
ENDCG之间的,因此在Unity里CG和HLSL的等价的,我们可以说,CG/HLSL
代码是区别与ShaderLab的另外一个世界
虽然这篇博客也是代码居多,但是在看了一些基础后再结合之前所敲的关于各种unity shader的代码,对unity shader的知识体系有了一个更加清晰的认识了.......