图形学入门---实现漫反射

1、diffuse漫反射包含两个部分:一部分是环境光照,一部分是漫反射

2、


3、将小球着为蓝色

Shader "Custom/s_diffuse" {
	

	SubShader{
		pass {
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"

		struct v2f {
			float4 pos:POSITION;
			fixed4 color : COLOR;
		};

		v2f vert(appdata_base v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			o.color = fixed4(0,0,1,1);
			
			return o;
		}


		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
			ENDCG
	}
	}

}





4、两个向量的点积的结果决定光的强度,这两个向量都必须是规范化的,光向量必须是从顶点指向光源的方向

Shader "Custom/s_diffuse" {


	SubShader{
		pass {
		CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
#include "lighting.cginc"

			struct v2f {
			float4 pos:POSITION;
			fixed4 color : COLOR;
		};

		v2f vert(appdata_base v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			//o.color = fixed4(0,0,1,1);

			float3 N = normalize(v.normal);
			//世界空间中光源的位置
			float3 L = normalize(_WorldSpaceLightPos0);
			//saturate将点积的值限定在0到1之间
			float ndotl = saturate(dot(L,N));
			//_LightCColor0:光源颜色
			o.color = _LightColor0*ndotl;

			return o;
		}


		fixed4 frag(v2f IN) :COLOR{
			return IN.color;
		}
			ENDCG
	}
	}

}



5、添加上环境光照


6、window-->lighting-->Source:Color-->Ambient Color:设置环境光的颜色,可以看到环境光对颜色的影响


7、支持顶点光照


Shader "Custom/s_diffuse" {


	SubShader{
		pass {

		//支持顶点光照
		tags{"LightMode" = "ForwardBase"}

		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"
		#include "lighting.cginc"

			struct v2f {
			float4 pos:POSITION;
			fixed4 color : COLOR;
		};

		v2f vert(appdata_base v) {
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			//o.color = fixed4(0,0,1,1);

			float3 N = normalize(v.normal);
			//世界空间中光源的位置
			float3 L = normalize(_WorldSpaceLightPos0);
			//saturate将点积的值限定在0到1之间
			float ndotl = saturate(dot(N, L));
			//_LightCColor0:光源颜色
			o.color = _LightColor0*ndotl;

			return o;
		}


		fixed4 frag(v2f IN) :COLOR{
			//环境光照
			return IN.color+UNITY_LIGHTMODEL_AMBIENT;
		}
			ENDCG
	}
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值