[gdc19]《战神4》的风力&植被交互系统

[gdc19]《战神4》的风力&植被交互系统_第1张图片
《战神4》中的风力以及植被(其实还有其他很多mesh)交互系统,对于渲染栩栩如生的世界,烘托战斗气氛起到很好的作用。
战神4在GDC19上的分享,一方面展现了3A且完备的品质,一方面也分享了非常系统化的方案,学习起来非常享受,:)
先看下风力的交互品质:
https://www.bilibili.com/video/av60091567
这个flowmap的云也很酷
https://www.bilibili.com/video/av60092549

技术overall mindmap

[gdc19]《战神4》的风力&植被交互系统_第2张图片

风力表达

[gdc19]《战神4》的风力&植被交互系统_第3张图片
有一个wind volume的概念,存在3d贴图中,力会扩散和消散,使用多张3d texture来扩散即可。
图中顶端部分就是风力的视觉表达。

noise

好的noise对于风力表达至关重要,首先是大家比较常用的fractal noise function:
[gdc19]《战神4》的风力&植被交互系统_第4张图片
但是不同的风力和状态,如何去混合不同的noise,gow的方法是:
logarithmic binning
[gdc19]《战神4》的风力&植被交互系统_第5张图片
按照log的方式分级noise,然后每一级的采样是混合覆盖的多张noise sample,
比如1.3到1.5变化的时候,变化的混合factor,也就是固定sample,变化factor,这样能获得一个稳定变化的noise。

另外就是noise loop
[gdc19]《战神4》的风力&植被交互系统_第6张图片
在loop的时候,使用blend的方式让过渡smooth,并且因为是smooth的过渡,所以可以让sample更加的random,这样也避免了loop的情况。

mesh的交互参数和种类

这一块具体做的时候,细节上难度还好,就是能恰到好处的归纳出需要的参数会是一个迭代较长时间的过程,这里列下:

[gdc19]《战神4》的风力&植被交互系统_第7张图片
然后可交互的也包括fur,hair,胡子;
布料尝试了最后没上(种种原因)。

mesh交互算法

使用pivot based的做法:

  • 在vertex color上存好要绕着那个pivot来做力的react
    额外的可以定义mesh的物理属性甚至一些collision信息等等。
    类似其实NaughtyDog的头发说的更加详细一些。

植被的cluster cards

这里其实已经超出本文讲的风力交互了,不过作者也提了,确实不错。
[gdc19]《战神4》的风力&植被交互系统_第8张图片
[gdc19]《战神4》的风力&植被交互系统_第9张图片
这里我们可以看到中间的纯3d模型和右边的基于cards的做法品质上差不多,但是面试几乎差两个数量级。
这里就是一套自己开发的工具,来生成这个cluster cards。
[gdc19]《战神4》的风力&植被交互系统_第10张图片
使用若干个plane,然后树相当于压扁投射到这个plane,然后给这个plane打分,如果它能capture到尽可能多的树的部分,且树的三角形扭曲变化的最小,那么这就是一个好的plane,会被保留。
然后把树往这个card上渲染就可以获得texture。
[gdc19]《战神4》的风力&植被交互系统_第11张图片
黑边处理
可以使用blur 或者mip来扩展边缘,放置sample贴图时候因为使用linear filter而sample到黑边。
gow的建议是使用mipmap信息来扩展,速度上好很多。
[gdc19]《战神4》的风力&植被交互系统_第12张图片

reference

  • Interactive Wind and Vegetation in ‘God of War’
  • Wind Simulation in ‘God of War’

你可能感兴趣的:([gdc19]《战神4》的风力&植被交互系统)