Toon Shader 开源项目教程
1. 项目的目录结构及介绍
Toon Shader 项目的目录结构如下:
Toon-Shader/
├── Assets/
│ ├── Shaders/
│ │ ├── ToonShader.shader
│ │ └── ToonShaderHelper.cginc
│ ├── Materials/
│ │ └── ToonShaderMaterial.mat
│ ├── Textures/
│ │ └── ToonShaderTexture.png
│ └── Prefabs/
│ └── ToonShaderPrefab.prefab
├── ProjectSettings/
│ └── GraphicsSettings.asset
├── README.md
└── LICENSE
目录结构介绍
- Assets/: 包含项目的主要资源文件。
- Shaders/: 存放着色器文件,如
ToonShader.shader
和辅助文件ToonShaderHelper.cginc
。 - Materials/: 存放材质文件,如
ToonShaderMaterial.mat
。 - Textures/: 存放纹理文件,如
ToonShaderTexture.png
。 - Prefabs/: 存放预制体文件,如
ToonShaderPrefab.prefab
。
- Shaders/: 存放着色器文件,如
- ProjectSettings/: 包含项目的设置文件,如
GraphicsSettings.asset
。 - README.md: 项目的说明文档。
- LICENSE: 项目的许可证文件。
2. 项目的启动文件介绍
Toon Shader 项目的启动文件是 ToonShader.shader
,位于 Assets/Shaders/
目录下。这个文件定义了卡通着色器的核心逻辑和渲染效果。
ToonShader.shader 文件介绍
Shader "Custom/ToonShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_Ramp ("Ramp", 2D) = "gray" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "ToonShaderHelper.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 pos : SV_POSITION;
float3 worldNormal : TEXCOORD1;
};
sampler2D _MainTex;
sampler2D _Ramp;
float4 _Color;
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.worldNormal = UnityObjectToWorldNormal(v.normal);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed3 worldNormal = normalize(i.worldNormal);
fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
fixed diff = max(0, dot(worldNormal, lightDir));
fixed3 ramp = tex2D(_Ramp, float2(diff, diff)).rgb;
fixed4 col = tex2D(_MainTex, i.uv);
col.rgb *= _Color.rgb * ramp;
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}
关键部分解释
- Properties: 定义了着色器的属性,如纹理、颜色和渐变贴图。
- SubShader: 定义了着色器的渲染类型和细节级别。
- Pass: 定义了着色器的渲染通道,包括顶点着色器和片段着色器。
- vert 函数: 顶点着色器,处理顶点位置和UV坐标。
- frag 函数: 片段着色器,计算光照效果并应用渐变贴图。