Unity ShaderLab特效教程 着色器实例 代码+注释 【根据法线方向着色】

如果代码中有什么不清楚请查看以下基础知识

Shader基础知识
unity3d 中 七种坐标知识详解
根据法线着色的着色器

某些创意小手游,使用该着色器

Shader "Custom/SurfaceShader"
{
	SubShader
	{
		Tags { "RenderType" = "Opaque" "ForceNoShadowCasting" = "True" "IgnoreProjector" = "True"}
		LOD 130

		Pass
		{
			//CG代码块
			CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				//引入unityCG处理库
				#include "UnityCG.cginc"

				//定义一个数据结构,该结构包含一个4维向量,一个三维向量
				struct v2f
				{
					//获取位置
					float4 pos : SV_POSITION;
					//获取颜色
					float2 color : COLOR0;
				};
	
				//顶点程序代码,用于计算位置和颜色。   v2f是刚才新建的数据结构,vert是在cgprogram注册的用于顶点计算的程序名
				//该方法输入值appdata_base v是与模型关联后自动输入的       
				//该方法输入值appdata_base v是与模型关联后自动输入的,他的输出值会自动传入到片段代码块。所以相关联的顶点和片段方法的输出和输入类型一定要一致       
				v2f vert(appdata_base v)
				{
					//创建v2f数据 o
					v2f o;
					//计算位置
					o.pos = UnityObjectToClipPos(v.vertex);
					//计算颜色
					o.color = v.normal* 0.5 + 0.5;
					//返回该v2f数据
					return o;
				}
				//片段程序代码
				//该代码块会自动接受顶点着色器的输出值,而他的输出值会交给像素着色器最终显示在屏幕上
				half4 frag(v2f i) : COLOR
				{
					//返回输入的颜色,并设置透明度为1
					return half4(i.color,0.5,0.1);
				}
			ENDCG
		}
	}
	Fallback "VertexLit"
}

发布了134 篇原创文章 · 获赞 37 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/lengyoumo/article/details/103955857
今日推荐