untiy 3d ShaderLab_第9章_2_球体阴影(二) 阴影的淡入/淡出

9.2 阴影的淡入/淡出
        在上一节的例子中,我们仅仅判断了是否能看到光源,其实不仅仅能判断是否可以看到光源,当我们看不到光源时,还可以计算出此时点距离光亮地带的远近程度,等价于到阴影中心的远近程度,这样就可计算一个带浓淡变化的阴影里,而这是在一般的阴影实现算法中比较难以做到的。
如图所示。

    具体实现此效果的Shader是SphereShadow_ 2.shader,其关键代码如下:

float4 frag(v2f i):COLOR
		{
			float3 litDir=normalize(i.litDir);
			float3 spDir=i.spDir;
			float spDistance=length(spDir);
			spDir=normalize(spDir);

			float cosV=dot(spDir,litDir);
			float sinV=sin(acos(max(0,cosV)));
			float D=sinV*spDistance;
			float shadow=step(_spR,D);//spR>D 0,else 1
			float atten=pow((D/_spR),4);//计算一个到球体中心位置的衰减
			float c=lerp(1-_Intensity,1,min(1,shadow+atten));//0 is dark  //*step(0,dot(i.N,litDir))应用此衰减到输出
			return i.vc*c;
		}


         该Shader和上一节的不同之处就在于它不仅仅计算了物体是否处于球体投影中,而且也计算了照射到此点的光线到球体中心的距离相关衰减,然后应用到最终的阴影输出,从而得到如图:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值