漫反射和Lambert

作者:追风剑情 发布于:2014-7-19 23:43 分类:Shader

一、创建一个Cube和一个Directional light,并把光源颜色调成蓝色。

二、创建漫反射Shader

Shader "Custom/Shader_Lambert" {
	Properties {
		_MainTex("MainTex",2D)="white"{}
	}
	SubShader {
		pass{
		Tags{"LightMode"="ForwardBase"}
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "UnityCG.cginc"

		sampler2D _MainTex;
		float4 _MainTex_ST;  //必须声明,后缀必须为_ST,前面对应sampler2D _MainTex命名。
		float4 _LightColor0; //必须声明,Unity用来存放光源颜色
		struct v2f {
			float4 pos:SV_POSITION;
			float2 uv:TEXCOORD0;
			float3 lightDir:TEXCOORD1;
			float3 normal:TEXCOORD2;
		};

		v2f vert (appdata_full v) {
			v2f o;
			o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
			o.uv=TRANSFORM_TEX(v.texcoord,_MainTex);
			
			o.lightDir=ObjSpaceLightDir(v.vertex);
			o.normal=v.normal;
			return o;
		}
		float4 frag(v2f i):COLOR
		{
			i.lightDir=normalize(i.lightDir);
			i.normal=normalize(i.normal);

			float4 c=tex2D(_MainTex,i.uv);
			//对漫反射的计算
			float diff=max(0,dot(i.normal,i.lightDir));
			c=c*_LightColor0*(diff);
			
			return c*2;
		}
		ENDCG
		}
	} 
	FallBack "Diffuse"
}

编辑区预览效果

漫反射编辑区效果.png

标签: Lambert

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号