《三弦》技术分享—波纹效果及其实现

发布者:admin 发布时间:2019-10-28 04:51 浏览次数:

  这篇文章主要和大家聊一聊带波浪的地面的实现,以及场景特效的实现方法。如下图所示,地板随时间以波浪状变化,角色在地板上走的时候会随着它的波浪高低起伏。

  关于波浪效果的实现,作者最开始的时候走了些弯路。一开始,我想的是试试用直接修改地板Mesh的方式,达到视觉和物理上的同步实现。事实上这被证明是非常不科学的,因为修改Mesh会严重影响性能。在涉及物理的情况下,我测试的结果是游戏帧率调到了个位数。所以最终选择了利用Shader实现视觉效果+利用脚本伪造行走物理效果的办法。

  波浪函数的实现,这里是函数实现,用的是两个方向的波进行叠加,波纹随时间变化。即构造一个全局函数,因为c#代码和Shader代码里都要使用,所以这是一个以World-Space的坐标x,z,以及游戏时间Time.time为变量的,以波浪高度y为结果的函数。使用的波纹函数为三角函数:

  当然这是在C#里的实现,其实和在Shader里的实现类似。不过注意,需要把函数的参数传给Material。同时,需要每帧对时间参数进行同步(C#代码):

  接下来的思路还是利用物理系统,用一个Cube模拟玩家脚下的地面,每帧更新它的位置和角度信息。理论上来说,这种实现方法是可以模拟玩家和地表的物理碰撞。但只是理论,实际上这种实现方法会出现比较严重的抖动情况。(角色的控制使用的是自带的Character Controller)

  最后的实现方法是,在角色控制的脚本里,直接对角色的位置进行修改。由于波纹函数是平滑的,所以实现的效果也可以做到比较平滑。同时,根据场地形的斜度对速度进行一定的调整,达到上坡下坡的效果。

  后期的特效实现的是一种反向Bloom的效果,下图是该效果夸张处理后的实现:

  Downsample(提取颜色高亮的部分)-Blur(进行横竖方向的模糊)-Bloom(把高光颜色和原画面进行叠加)

  根据这个流程,如果我们需要把Bloom效果反向,在Bloom部分把颜色进行剔除,同时需要在DownSample部分进行修改,进行曲线上的调整。

  文末,再次感谢邓佳迪的分享,如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨()。也欢迎大家来积极参与U Sparkle开发者计划,简称US,代表你和我,代表UWA和开发者在一起!

  由侑虎科技开发的游戏/VR应用性能优化平台,目前提供 1)性能诊断与优化 2)资源检测与分析 3)UWA GOT 三大工具,帮助开发者在短时间内大幅度提升性能表现;同时其搭建的知识分享的博客和答疑解惑的互动平台使广大开发者收益。

  开测游戏查看更多商务合作查看更多编辑推荐查看更多微信公众号微博头条号新闻、投稿邮箱:产品、开测信息邮箱:


上一篇:canvas实现水波纹效果    下一篇:CSS实战 - 波纹扩散效果