KK两种渲染模式对比:Particle&Voxel
-
晚街听风
1楼 2015-10-30 14:57:49
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的比较
上面三张图显示用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一样的算图效果.