Untiy 3d ShaderLab平面阴影(二) 点光源对平面的投影

发表于2017-05-05
评论1 785浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群

711501594
接着上篇Untiy 3d ShaderLab平面阴影(一)继续往下介绍,这一篇要介绍的是点光源对平面的投影,不了解可以看一看。

1.点光源对平面的投影

光源的方向矢量

上一篇是平行光的情形,点光源也是类似的,对于通过使用WorldSpaceLightDir()方法来计算光源方向来说,就完全一样了。
 pass {   
		Tags { "LightMode" = "ForwardAdd" } 
		Blend DstColor SrcColor
		Offset -2,-1
		CGPROGRAM
		#pragma vertex vert 
		#pragma fragment frag
		#include "UnityCG.cginc"
		float4x4 _World2Ground;
		float4x4 _Ground2World;
		float4 vert(float4 vertex: POSITION) : SV_POSITION
		{
		float3 litDir;
			litDir=normalize(WorldSpaceLightDir(vertex)); 
			litDir=mul(_World2Ground,float4(litDir,0)).xyz;
		float4 vt;
			vt= mul(_Object2World, vertex);
			vt=mul(_World2Ground,vt);
		vt.xz=vt.xz-(vt.y/litDir.y)*litDir.xz;
		vt.y=0;
		vt=mul(_Ground2World,vt);//将计算结果返回到世界坐标
		vt=mul(_World2Object,vt);
		return mul(UNITY_MATRIX_MVP, vt);
		}
 		float4 frag(void) : COLOR 
		{
			return float4(0,0.6,0,1);//绿色的阴影
		}
 		ENDCG 
	 }

如图,红色的是平行光的投影,绿色的是场景中点光源的投影。

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台