insomniac's water rendering system

本文深入探讨了Insomniac Games为PS3平台开发的高效水效果技术,重点介绍了其创新的卷积基础交互算法及频域优化方法。文章还讨论了网格分布、环境波模拟、交互波动等关键要素,并针对不同平台的适配提出了建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.insomniacgames.com/tech/articles/0409/files/water.pdf

 

链接下面还有source code,实现的挺优雅,艺术品欣赏下不错(直接导致有段时间变成变量命名变成c风格了)。

但是算法上看文章了解比较好,代码最核心部分是spu汇编,看得累。


 

题外话:

insomnic这篇论文非常具有理论和实战价值。

但是真正让我感叹的是这本身是很不错的技术,本应成为insomniac的宝贵财产,而insomniac却share了出来。

比较之下,也只有carmack open source quake代码能更胜一筹了。

再次表达敬意

 


 

现在fps游戏中的水大抵这几个方面需要考虑:

  • grid的分布----由于可见范围过大,需要project grid这类技术来让grid分布尽可能合理,近密远疏。
  • ambient wave----这部分基本是达成共识fft,至于bioshock,hydrobophia这种迎面扑来的是another story
  • interaction----交互时候的波动
  • 光学效果----reflection, refraction, fresnel都是last gen考虑过的问题了,虽然重要,但是insomniac唯一提到的是他们hack了reflection,使用正面render target直接反一下。

grid和ambient wave这里前人已经给了不错的答案了,这部分也不是这个paper的核心所在。

不过lod那里在算ambient wave时候有个优化,很古怪的,没太看懂。。。留着以后慢慢品吧。

 


 

convolution based interaction

这里基本原理是convolution based algorithm for animated water waves的原理。

但是insomniac走的更远,首先是以overlap save的方法来优化convolution。

时域中的convolution在频域中是个乘法操作。

这个道理在巨早的时候就被大家知道了,但是知道fft算法发明出来才具有实际应用价值。

在fft的情况下,把interaction tile的heightmap转到频域,然后和convolution的kernel(频域)相乘,然后ifft变回来就是结果了。

 

insomniac得以把fft的汇编代码在convolution阶段又用了一遍。

 

另外一点觉得是一个理解很好的点是,把convolution和interaction都看作是在随时间更新相位的spectrum component。


这里本来我想扩展一下,做更大范围的卷积的快速算法(overlap save)但是失败,因为overlap save的前提是函数是周期函数。

所以如果在一个area下边加一个impulse,然后全area fft_convolution,会发现波会从area的顶部散下来,orz。

 

所以insomniac的interaction都是每一个interaction生成一个tile,在tile中心开始impulse,然后去convolution,由于是tile中心,所以不用担心波会越过下界,进而就不会下进上出了。

 


最后觉得insomniac带来的理论和推导非常的棒,但是由于是在ps3上,spu的计算能力逆天,所以其他平台上不适合直接复制。

还是根据平台特性,来从原始理论推导出合适算法比较好。

 

 

SUIMONO Water System是Unity互动式水系统,专门为我们提供了先进且深度可定制的海洋和水分效应,需要Unity 5.0.0或更高版本。 现实的水渲染 – Suimono 2.0为我们的Unity项目带来先进而现实的水和海洋渲染 高级FX – 具有镶嵌(dx11),泡沫渲染,动态反射,折射和屏幕转换 场景交互 – 设置任何游戏对象,用于交互式效果,如飞溅,折射波纹,声音和高级浮力效果 水下FX – 自动水下渲染,包括深度雾化,高级焦散,模糊和屏幕折射 定制 – 可以控制水景观和行为的各个方面 SUIMONO Water System v2.1.6更新日志: 2.1.6 (当前)已发布 2018年8月16日 WHAT’S NEW: – Added ‘Clear Mode’ option to camera tools. Allows override of clear flag inheritance on reflection camera. CHANGES: – Raised default Buoyancy activation range to 5000. – Added Mesh Collider to farplane surface prefab. Helps prevent Buoyancy detection fail. – Underwater camera component is no longer added if underwater rendering is turned off on module. BUG FIXES: – Fixed shader errors under PS4 that were preventing build completion (Lerp/Dot ambiguity). – Fixed Depthmask2 shader over-bright error. – Fixed object editor issue when expanding tabs. – Fixed bug where editor was showing wrong skin color (dark/pro skin vs light skin). – Reflection Color setting now affects underwater reflection as well. – Adjusted Caustic lighting code so it doesn’t reduce to 0 intensity. – Removed buoyancy frustum occlusion code causing strange buoyancy errors. – Fixed screen uv edge smearing underwater and with water droplet effects. – Fixed Underwater surface flickering error. – Fixed underwater transparency over-bright error. – Fixed Reflection over-bright error. – Darkened underwater fog color matching.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值