Semitransparent Shadow - Alpha Test + SoftShadow
这种方式我最早是在 cat like coding 博主的文章看到的,这种方式我自己亲自测试过
缺点:会有阴影抖动严重的现象
(其中的 dithering tex 可以参考我之前写的:Unity - 手动创建 dithering tex 3d)
如下GIF
就算我故意将 精度拉低(将距离边缘,那么 shadow map 的应用精度就会低一些)
50 shadow distance
然后抖动的闪烁一样要不得
Projector - Fake Semitransparent Shadow
这种方式
- 缺点:投影穿透,可以参考我之前写的:Unity - Projector - 实时[假]阴影
- 优点:可以精准控制像素颜色,alpha,还可以只绘制和 projector box 有碰撞的 mesh(shadow map 的方式会绘制整个灯管角度的 PV 部分的所有 mesh)
自己PS整一个云的剪影图,放到 projector 材质贴图即可
还可以修改颜色
穿透的缺点如下GIF
(就算我使用 表面法线 和 Projector 投影反向 来 dot 判断过滤,一样治标不治本,比如,两个 Cube,一上一下,projector 投影后,就算 dot(N, -ProjectDir后,两个 Cube 的顶部都同样出现投影,所以需要看你的项目实际情况是否适合)
总结如果视角比较偏某个角度,利用灯光角度于 projector 同步,选用 projector
alpha test + software 的闪烁我是怎么也接受不了
(期待后续了解有其他的方式来制作)
Project
- U3D_2020.3.37f1_BRP_TestingSemitransparentShadow_AlphaTest
- U3D_2020.3.37f1_ShadowProjector_实现高空云层投影
References
- Unity中的半透明阴影
- Rendering 12 Semitransparent Shadows