Shader(顶点片段着色器)

//第一种
Shader "VRShader/DiffuseShader"
{
	Properties
	{
		_Color("MainColor", Color) = (1, 1, 1, 1)

	}

	SubShader
		{
			Pass
			{
				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag

				#include "UnityCG.cginc"

				//顶点着色器输入结构
				struct appdata
				{
					float4 vertex : POSITION;//顶点位置
					float3 normal : NORMAL;//法线向量坐标
				};

				//顶点着色器输出结构
				struct v2f
				{
					float4 position : SV_POSITION;//像素位置
					float3 normal : NORMAL;//法线向量坐标
				};

				//变量声明
				float4 _LightColor0;
				float4 _Color;

				v2f vert(appdata input)
				{
					v2f output;

					//输出的顶点位置为模型视图投影矩阵乘以顶点位置,也就是将三维空间中的坐标投影到了二维窗口
					output.position = mul(UNITY_MATRIX_MVP, input.vertex);
					//获取顶点在世界空间中的法线向量坐标
					output.normal = mul(float4(input.normal, 0.0), unity_WorldToObject).xyz;

					return output;
				}


				fixed4 frag(v2f input) : COLOR
				{
					//获取法线的方向
					float3 normalDirection = normalize(input.normal);
					//获取入射光线的值与方向
					float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);

					//计算出漫反射颜色值  Diffuse=LightColor * MainColor * max(0,dot(N,L))
					float3 diffuse = _LightColor0.rgb * _Color.rgb * max(0.0, -dot(normalDirection, lightDirection));

					//合并漫反射颜色值与环境光颜色值
					float4 DiffuseAmbient = float4(diffuse, 1.0) + UNITY_LIGHTMODEL_AMBIENT;

					//将漫反射-环境光颜色值乘上纹理颜色,并返回
					return DiffuseAmbient;
				}

				ENDCG

			}
		}
}


//第二种
Shader "VRShader/Rainbow_AdjustRGBValue"
{
	properties
	{
		_ColorRValue("R",Range(0,1))=0.2
		_ColorGValue("G",Range(0,1))=0.2
		_ColorBValue("B",Range(0,1))=0.2
	}
	SubShader
	{
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			//变量声明
			float _ColorRValue;
			float _ColorGValue;
			float _ColorBValue;

			//顶点输出结构体
			struct vertexOutput
			{
				float4 position:SV_POSITION;
				float4 color:TEXCOORD0;
			};
			//顶点函数
			vertexOutput vert(float4 vertexPos:POSITION)
			{
				vertexOutput v;
				v.position=mul(UNITY_MATRIX_MVP,vertexPos);
				v.color=vertexPos+float4(_ColorRValue,_ColorGValue,_ColorBValue,0);
				return v;
			}
			//片段函数
			float4 frag(vertexOutput output):COLOR
			{
				return output.color;
			}
			ENDCG

		}
	}
}



//第三种
Shader "VRShader/Rainbow_AdjustValue"
{
	properties
	{
		_ColorValue("ColorValue",Range(0,1))=0.2
	}
	SubShader
	{
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			//变量声明
			float _ColorValue;
			//顶点输出结构体
			struct vertexOutput
			{
				float4 position:SV_POSITION;
				float4 color:TEXCOORD0;
			};
			//顶点函数
			vertexOutput vert(float4 vertexPos:POSITION)
			{
				vertexOutput v;
				v.position=mul(UNITY_MATRIX_MVP,vertexPos);
				v.color=vertexPos+float4(_ColorValue,_ColorValue,_ColorValue,0);
				return v;
			}
			//片段函数
			float4 frag(vertexOutput output):COLOR
			{
				return output.color;
			}
			ENDCG

		}
	}
}



//第四种
Shader "VRShader/Vertex&Fragment&Rainbow"
{
   Properties
   {
   	
   }
   SubShader
   {
   		Pass
   		{
   			CGPROGRAM
			#pragma vertex vert//顶点函数声明
			#pragma fragment frag//片段函数声明
			//顶点函数输出结构体
			struct vertexOutput
			{
				float4 position:SV_POSITION;//像素坐标位置
				float4 color:TEXCOORD0;//0级纹理坐标
			};
			//顶点函数
			vertexOutput vert(float4 vertexPos:POSITION)
			{
				//声明结构体
				vertexOutput v;
				//顶点坐标变换
				v.position=mul(UNITY_MATRIX_MVP,vertexPos);
				//设置顶点颜色
				v.color=vertexPos+float4(0.2,0.2,0.2,1);
				//返回结果
				return v;
			}
			//片段函数
			float4 frag(vertexOutput output):COLOR
			{
				//返回颜色值
				return output.color;
			}
			ENDCG
   		}
   }
}	



//第五种
Shader "VRShader/Vertex&Fragment&SingleColor"
{
	Properties
	{
		_Color("Color",color)=(1,1,1,1)

	}
	SubShader
	{
		//Pass通道
		Pass
		{
			CGPROGRAM
			#pragma vertex vert//顶点函数声明
			#pragma fragment frag//片段函数声明

			float4 _Color;

			//顶点函数
			//vertexPos顶点坐标位置(语义绑定POSITION)
			//返回值float4像素坐标位置(语义绑定SV_POSITION)
			float4 vert(float4 vertexPos:POSITION):SV_POSITION
			{
				return mul(UNITY_MATRIX_MVP,vertexPos);
			}
			//返回值(语义绑定COLOR颜色)
			float4 frag():COLOR
			{
				//Hard Coding 硬编码
				//return float4(1,0,0,1);

				return _Color;
			}

			ENDCG
		}
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值