【特效教程】Krakatoa的两种算图模式:Particle与Voxel

16 八月, 2014
281
0

krakatoa_08 电影 X-Men 2利用Krakatoa算出来的效果

翻译: Hammer Chen

Krakatoa是一套volumetric粒子渲染器, 也是第一个实现让粒子以像素的大小来进行高速细节算图的外挂. 但其实在Krakatoa推出以前, 有另外一种作法可以渲染粒子, 用在电影超人再起( Superman Returns)里面. 在场景里面粒子在水晶中必须要进行光迹追踪计算, 光迹追踪计算极小的点, 是一项极为困难的工作, 必须要利用特殊的作法—称为voxel grid计算法. 新版的Krakatoa 1.5.0 把当时电影里的作法重新呈现, 用voxel grid来计算粒子, 这个方法有其优缺点, 请看以下:
superfly04_SupermanReturnsS 优点
1、Voxel Rendering会产生实体的渲染效果, 不会像一般的点云渲染出来容易出现的错误(例如摩尔纹). 只需要用较少的数量就能产生密度很高的点云, 只要在每个voxel至少有一颗粒子, 而算出来的结果voxel之间不会有缝隙.
2、渲染的细节与平滑度可以用voxel size与filter半径来控制, 可以得到和预设的point rendering相当品质的渲染效果. 然而, 当voxel size设定太高, filter半径太大时, 容易计算出模糊的结果.
3、跟Point Rendering 比较起来, voxel rendering的方法比较适合多核心运算, 让你更能享受到多核心CPU的优势.
缺点
1、至少在目前的版本通常voxel rendering要比particle rendering算图时间要更久.
2、尽管算图品质与细节很接近point rendering 还是没办法达到跟particle rendering那样一颗一颗粒子的感觉, 因此voxel rendering还是比较适合用来渲染云, 烟与其他细节较少的自然现象; 而particle rendering就适合表现细砂, 尘土与泥沙.
Particle 与 Voxel Rendering的比较
krakatoa_01 如上图, 你看到同样的几合体利用Krakatoa PRT Volume object充满了粒子而Voxel Length为0.5, 1, 2 与3 第一排影像显示Particle Rendering的效果, 当粒子密度减少时, 粒子的间距就变宽松了
krakatoa_02 上图中显示利用Voxel Rendering的效果, 而Voxel Size分别为0.5, 1, 2与3 Filter Radius设定为1 (1代表没有filter)

这个范例里当算图的细节减小时Voxel Rendering方法算出​​来的密度还是可以维持住, 只是说整体而言变得比较模糊的粒子云. 以Particle方法算图时间分别为10.938 | 1.484 | 0.547 | 0.454秒
以Voxel的算图时间分别为6.109 | 3.734 | 1.829 | 1.422秒

Voxel Rendering的参数设置
以下范例渲染两万颗粒子, 用两盏灯照明, 白色光源在右, 蓝色光源在左下.
krakatoa_03 左图与右图的密度分别为5.0/-1, 5.0/0.
算图时间都是0.2秒
改变Voxel Size
krakatoa_04 上面三张图显示用5.0/-1密度Voxel Filter Radius为1 而Voxel Size分别为0.5, 1.0 与5.0来渲染

当voxel size等于0.5时, 算出来的结果十分接近particle rendering的效果. 因为在这个范例里面,voxels十分接近particle的算图颗粒大小, 但是就算图时间上缺要花费很久.

当把voxel size增大时, 结果变得很平滑而算图时间也变短了
算图是用Dual-Quadcore Xeon 2.5GHz的CPU 算图时间分别为6.641 | 4.953 | 2.843秒

改变出图大小
Voxel Rendering跟Particle Rendering的效能不同, 出图大小对算图时间有很大影响

当解析度比超过一个像素时Voxel Renderer就必须要多计算像素

以下是用Voxel Sizes分别为0.5, 1, 2 与5计算的结果, 但是用不同的解析度出图Krakatoa会用接近线性的方式缩放. 实际上, 因为多核心计算的关系, 尽管解析度增大让图面积增加了四倍, 算图时间还是少于原本的四倍, 通常是三倍多.

640×480 : 13.922 | 11.141| 3.484 | 2.578 秒.
1280×960 : 31.874 (2.289x) | 27.391 (2.458x) | 9.718 (2.789x) | 7.532 (2.921x)
2560×1920 : 103.078 (3.233x) | 90.890 (3.318x) | 33.906 (3.488x) | 27.015 (3.586x)

改变Voxel Filter Radius
krakatoa_05 上面三张图显示用密度为5.0/0 Voxel尺寸为5 但是Voxel Filter Radius分别为,2 和 5

当Voxel Filter增加时voxels变得越来越平滑, 导致计算结果越模糊, 而算图时间也会拉长.算图时间分别为2.843 | 3.656 | 7.294秒

Voxel Rendering 与 Particle Rendering
以下的BOX包含了一百万个粒子其中在Diffuse Map里面用了Cellular Map 以Particle Mode算图
第二排显示一样的粒子, 但是把Cellular Map放在Opacity Map里面

第三排则是同时开启Diffuse 与Opacity Map
第四排则是一百万个粒子分割成10个partition然后分别用Particle mode 与Voxel Mode两种模式来算图
krakatoa_06 如果是用Particle mode方法的算图时间是2.687 | 2.703 | 2.797 | 26.421秒
用Voxel mode的算图时间分别为8.829 | 8.782 | 8.86秒

经由这些比较, 你会发现一般来说Particle Rendering算图比较快, 需要相当多数量的粒子才能维持跟Voxel Rendering一样的密度. 某些情况下Voxel Rendering即便是用了较少的粒子, 还是能达到跟Particle Rendering一样的算图效果。