KK两种渲染模式对比:Particle&Voxel

修改
鏉ユ簮: 水银管理员 浏览 1514 日期 2015-11-18 0
文章一部分是转载在Hammer Chen的Blog(本文获得Hammer的转载许可),一部分是自己的使用心得 感谢Hammer无私的让我们转载他的文章,感谢!!! Hammer的原始文章链接 http://hammerbchen.blogspot.com/2011/07/krakatoaparticlevoxel.html

krakatoa是一套volumetric粒子渲染器, 也是第一个实现让粒子以像素的大小来进行高速细节算图的外挂. 但其实在krakatoa推出以前, 有另外一种作法可以渲染粒子, 用在电影超人再起(superman returns)里面. 在场景里面粒子在水晶中必须要进行光迹追踪计算, 光迹追踪计算极小的点, 是一项极為困难的工作, 必须要利用特殊的作法---称為voxel grid计算法. 新版的krakatoa 1.5.0 把当时电影里的作法重新呈现, 用voxel grid来计算粒子, 这个方法有其优缺点, 请看以下:

优点

voxel rendering会產生实体的渲染效果, 不会像一般的点云渲染出来容易出现的错误(例如摩尔纹). 只需要用较少的数量就能產生密度狠高的点云, 只要在每个voxel至少有一颗粒子, 而算出来的结果voxel之间不会有缝隙. 渲染的细节与平滑度可以用voxel size与filter半径来控制, 可以得到和预设的point rendering相当品质的渲染效果. 然而, 当voxel size设定太高, filter半径太大时, 容易计算出模糊的结果. 跟point rendering 比较起来, voxel rendering的方法比较适合多核心运算, 让你更能享受到多核心cpu的优势.

缺点

至少在目前的版本 通常voxel rendering要比particle rendering算图时间要更久. 儘管算图品质与细节狠接近 point rendering 还是没办法达到跟particle rendering那样一颗一颗粒子的感觉, 因此voxel rendering还是比较适合用来渲染云, 烟与其他细节较少的自然现象2 而particle rendering就适合表现细砂, 尘土与泥沙.

particle 与 voxel rendering的比较

如上图, 你看到同样的几何体利用krakatoa prt volume object充满了粒子 而voxel length為0.5, 1, 2 与 3 第一排影像显示particle rendering的效果, 当粒子密度减少时, 粒子的间距就变宽松了

上图中显示利用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的参数设置 以下范例渲染两万颗粒子, 用两盏灯照明, 白色光源在右, 蓝色光源在左下.

左图与右图的密度分别為5.0/-1, 5.0/0. 算图时间都是0.2秒

改变voxel size

上面三张图显示用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会用接近线性的方式缩放. 实际上, 因為多核心计算的关系, 儘管解析度增大让图面积增加了四倍, 算图时间还是少於原本的四倍, 通常是三倍多.

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

改变voxel filter radius

上面三张图显示用密度為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两种模式来算图

如果是用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一样的算图效果.

评论

{{ username ? username.charAt(0).toUpperCase() : '?' }}
Ctrl+Enter 发布
{{ (c.username || c.author_name || '?').charAt(0).toUpperCase() }}
{{ c.username || c.author_name }} {{ Utils.formatDate(c.created_at) }}