狼人杀2D墙体阴影
先看效果
这个阴影是动态的,随着人物的移动(点光源的移动),阴影也随之变化。
整体的表现效果非常好。
思路
人物可抽象为点光源,而墙体则抽象为线段。线段可以阻挡光线。
那么在shader片段程序中,如何来判断当前像素的着色,是有光还是黑暗呢?
上图可以看到 当前uv与点光源组成的线段,与 墙体线段 如果相交则 当前uv着色偏暗,反之则有光照。
由于我没有这么多素材来做到 道路和墙体的效果,这里仅是核心shader的编码。
先看看效果:
比较简陋,但已经把核心的功能说明清楚了。
红点代表点光源(lpos),line1 line2 分别代表了两个线段。
上代码:
CCEffect %{
techniques:
- p