[sig15]HorizonZeroDawn的云渲染技术

siggraph15上,advances in real-time rendering in games courses的一篇(http://advances.realtimerendering.com/s2015/index.html).

由killzone的开发商guerrila带来,guerrila一直作为ps平台上的,甚至业界图形技术的开拓者,这次出品的horizon dawn zero,概念和效果非常吸引人:

[sig15]HorizonZeroDawn的云渲染技术_第1张图片

这个presentation里面,他们讲的是云的渲染。

在做云的时候,guerrila开始使用真实的照片作为参照来努力(这也是这一代console上面的标准做法了):


那么在入手研究实现的时候,就会偏向于physicallly based,研究其中的真实物理特点是必经的一步。

modeling

目前的通常做法是使用FBM(fractal brownian motion),也就是多层的,每层不同频率,perlin noise,然后结合ray marching来生成云,这种云也不错:


但是如果想做这样的,就需要额外一些工作:


可以看到图中的云在形状上更加的真实和明显,表面充满了细节,最后guerrila使用的办法是voxel+ray marching和前面提到的FBM并没有本质的不同,但是在modeling的细节上确有一手,使用了2个3d texture,1个2d texture,

第一个3d texture里面放的是perlin noise和worley noise的结合体

perlin noise大家都熟悉了,worley noise是steven worley在1996年提出的,一般用于做caustics(焦散)效果的,worley noise以及和perlin noise结合之后是这样的:

[sig15]HorizonZeroDawn的云渲染技术_第2张图片[sig15]HorizonZeroDawn的云渲染技术_第3张图片

分辨率是128x128,4个channel存放的perlin-worley不同频率的noise。

它用于定义云的大体形状。

第二个3d texture,32x32,3 channel,放不同频率的worley noise。

用于定义云的表面细节。


一个2d texture,128x128,放不同频率的curl noise(可以用于procedural fluid flow的一种noise),用于扭曲云的形状,以及加上一些turbulence的感觉。

[sig15]HorizonZeroDawn的云渲染技术_第4张图片


局部的云定义好了之后,天气系统还有回一个大的coverage map来定义那里有云那里没有:



Lighting

光照部分,对云的建模,需要考虑到这些因素:

[sig15]HorizonZeroDawn的云渲染技术_第5张图片

  • 作为透明介质--使用beer law
  • 云的散射不是均匀地,有更大的几率来向前散射,所以要加一个heney-greenstein function来矫正

  • 云的内层比表面更容易受到散射影响,作者称这个为powder effect
都结合到一起:



你可能感兴趣的:(Engine&Render,游戏开发)