转载请注明出处 何文西
1. 环境
1) 场景使用光照图
可以烘培出白天和夜晚俩种光照图,在玩家切换场景时根据时间系统选择加载哪种光照图。如果要做实时变化的效果,可以同时加载俩种光照图,然后在shader里根据时间做融合。
2) 场景使用实时光照
这种方式最简单,调整环境光或光源的亮度和颜色。
3) 后处理方法
在后处理shader里直接在颜色上乘以一个Tint Color。
2. 风
风可以引起植被的摆动。
1) 通过骨骼动画
这种通过动画的方式可以让摇摆更加生动,但是考虑到树木的数量,这种方式效率最低,基本上不采纳此方案。
2) 通过UV来做权重控制顶点动画
这种方案只适合面片草。草的根部和顶部的摆动权重就是一个0到1的线性变化,可以用一个正玄波实现。
//根据UV实现简单的顶点动画 float4 newPos = v.vertex; newPos.xyz += _Wind_Simple.xyz * v.texcoord.y * _BendingFactor;
3) 用顶点和模型原点的距离来做权重控制顶点动画
CE3的Main Bending就是这种方案。顶点到模型原点的距离,其实就是模型的顶点值,再用这个值除以包围盒的参数,就能得到每个顶点0到1的摆动权重。这种方案对UV就没要求,适合所有植被。但是这种方案不能用于合批,比如Unity自带的静态合批,因为合批以后模型其实已经变了。
4) 用顶点颜色来做权重控制顶点动画
CE3的Detail Bending就是此方案。让美术刷顶点颜色,来作为摆动权重。顶点颜色有几个通道,每个通道实现一种频率的摆动,这样就可以实现比较复杂的摆动,比如Blue通道用来处理主干的摆动,Red通道处理树枝的摆动,Green通道用来处理树叶的细节抖动。这种方案好处是,不受UV和合批的影响,适合任何植被,而且还可以实现比较复杂的细节抖动,让抖动更真实。麻烦的就是要教会美术刷顶点色,而且效率开销最大。
3. 雨
1) 粒子特效方法
粒子最大的缺点就是密度稀疏,消耗也很大,但效果最好。方法是制作一个跟随相机移动的产生雨滴的粒子特效,一个跟随角色脚底的不断随机产生涟漪的粒子特效。雨滴不要使用碰撞到地面或物体后产生涟漪的效果,考虑到手机环境物理碰撞会带来很大的消耗。
2) 后处理方法
效果一般,也会有效率问题。
3) uv动画的面片
挂一个uv流动的面片在镜头前,闪电的效果就是把这个面片调整为白色再调整回来。这种方法主要缺点是很难做出深度感,就是雨滴在空间中分布的感觉。
4) 锥形体面片
方法3的进化版,虽然解决了深度感问题,但是极大的增加了overdraw
4. 雷电
方法和雨类似,二者可以结合一起实现。
5. 雪
雪效果和雨滴类似。由于雪花生命周期比较长,飘落速度比较慢,粒子数最多在300左右就可以达到不错的效果。还可以加一些序列帧动画之类的小技巧来优化雪片的效果。
为了提高效率也可以用一张图来表现几片雪花的效果,缺点就是仔细观察的话会发现一些重复感,overdraw也会稍微有些提高。
总结
在效果方面,由于要兼顾移动平台的性能限制,相比端游的动态天气效果做了很多妥协和简化。比如下雨还可以添加地面湿滑的材质效果,还可以制作暴风雨这样更动感刺激的天气效果,在沙漠中实现沙尘暴的感觉等等。
插件
最后推荐一款专业的天气插件:NuajWeatherSystem
引用[1]:https://blog.csdn.net/qq18052887/article/details/50995928
引用[2]:https://blog.csdn.net/qq18052887/article/details/51007111
引用[3]:https://www.jianshu.com/p/2f8f88d7d86e