unity球体添加光源_ShaderLab学习小结(六)接收点光源阴影

运行环境:

Win10 x64

Unity 5.5.4

在“ShaderLab学习小结(五)接收平行光阴影”中,通过修改代码,让原来的shader可以接收主平行光的阴影。但是没有点光源的阴影。

在原有的pass通道下面再添加一个pass通道,用于接收点光源阴影。

直接将原来的pass复制粘贴成新的pass通道,再进行一些修改即可。

pass {

tags{ "lightmode" = "forwardadd" } //1.

blend one one //2.

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

#include "lighting.cginc"

#include "autolight.cginc"

#pragma multi_compile_fwdadd_fullshadows //3.

fixed4 _Spec;

float _Shin;

struct v2f {

float4 pos:POSITION;

float3 normal:NORMAL;

float4 vertex:TEXCOORD2;

SHADOW_COORDS(0)

};

v2f vert(appdata_base v)

{

v2f o;

o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

o.normal = normalize(v.normal);

o.vertex = v.vertex;

TRANSFER_SHADOW(o)

return o;

}

fixed4 frag(v2f IN) :COLOR

{

float3 wpos = mul(unity_ObjectToWorld, IN.vertex).xyz;

UNITY_LIGHT_ATTENUATION(atten, IN, wpos)

//diffuse

float3 N = UnityObjectToWorldNormal(IN.normal);

float3 L = normalize(_WorldSpaceLightPos0).xyz;

float ndotl = saturate(dot(N, L));

fixed4 col = _LightColor0*ndotl;

//shadow

col.rgb *= atten;

return col;

}

ENDCG

}

效果如下图:

图1.

a9358211e32d3ab5c427797825ca3857.png

原有平板已成功接收了点光源照射球体产生的阴影。

代码中三处标记有改动

1.

tags{ "lightmode" = "forwardadd" } //1.

原来的pass中是forwardbase,改为forwardadd

2.

在CGPROGRAM前添加一行

blend one one //2.

将前面pass计算的颜色和此pass one one相加,如果不加这一行的话效果如下:

图2.

752f3b915664f603eeaa246682cb7065.png

3.

#pragma multi_compile_fwdadd_fullshadows //3.

原pass中为 fwdbase,现改为fwdadd_fullshadows。同样见Making multiple shader program variants

4.

在新pass中删除高光及点光反射的计算,且最后不再加环境光UNITY_LIGHTMODEL_AMBIENT。

这样就得出了如上 图1的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值