《战神4》中的风力以及植被(其实还有其他很多mesh)交互系统,对于渲染栩栩如生的世界,烘托战斗气氛起到很好的作用。
战神4在GDC19上的分享,一方面展现了3A且完备的品质,一方面也分享了非常系统化的方案,学习起来非常享受,:)
先看下风力的交互品质:
https://www.bilibili.com/video/av60091567
这个flowmap的云也很酷
https://www.bilibili.com/video/av60092549
技术overall mindmap
风力表达
有一个wind volume的概念,存在3d贴图中,力会扩散和消散,使用多张3d texture来扩散即可。
图中顶端部分就是风力的视觉表达。
noise
好的noise对于风力表达至关重要,首先是大家比较常用的fractal noise function:
但是不同的风力和状态,如何去混合不同的noise,gow的方法是:
logarithmic binning
按照log的方式分级noise,然后每一级的采样是混合覆盖的多张noise sample,
比如1.3到1.5变化的时候,变化的混合factor,也就是固定sample,变化factor,这样能获得一个稳定变化的noise。
另外就是noise loop
在loop的时候,使用blend的方式让过渡smooth,并且因为是smooth的过渡,所以可以让sample更加的random,这样也避免了loop的情况。
mesh的交互参数和种类
这一块具体做的时候,细节上难度还好,就是能恰到好处的归纳出需要的参数会是一个迭代较长时间的过程,这里列下:
然后可交互的也包括fur,hair,胡子;
布料尝试了最后没上(种种原因)。
mesh交互算法
使用pivot based的做法:
在vertex color上存好要绕着那个pivot来做力的react
额外的可以定义mesh的物理属性甚至一些collision信息等等。
类似其实NaughtyDog的头发说的更加详细一些。
植被的cluster cards
这里其实已经超出本文讲的风力交互了,不过作者也提了,确实不错。
这里我们可以看到中间的纯3d模型和右边的基于cards的做法品质上差不多,但是面数几乎差两个数量级。
这里就是一套自己开发的工具,来生成这个cluster cards。
使用若干个plane,然后树相当于压扁投射到这个plane,然后给这个plane打分,如果它能capture到尽可能多的树的部分,且树的三角形扭曲变化的最小,那么这就是一个好的plane,会被保留。
然后把树往这个card上渲染就可以获得texture。
黑边处理
可以使用blur或者mip来扩展边缘,放置sample贴图时候因为使用linear filter而sample到黑边。
gow的建议是使用mipmap信息来扩展,速度上好很多。
[这里补充评论区Avatar Ye提供八卦,ubisoft farcry制作中,植被的mipmap也是美术手改,来达到牛逼效果,(个人评价,的确游戏开发里蛮力也是一种巧)]
reference
Interactive Wind and Vegetation in‘God of War’
Wind Simulation in‘God of War’
作者:安柏霖
专栏地址:https://zhuanlan.zhihu.com/p/74570626