如何减少Krakatoa粒子渲染的颗粒感

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何减少Krakatoa粒子渲染的颗粒感
本文库经验由瑞云科技渲染农场提供
§ 1.1 概述
§ 1.2 基础场景
§ 1.3 100w粒子,不同的密度渲染测试及结论
§ 1.4 1000w粒子渲染测试及结论
§ 1.5 输出分辨率对粒子渲染效果的影响
§ 1.6 1000w粒子的体素渲染测试及结论
§ 1.7 1亿粒子渲染测试及结论
§ 1.8 消除阴影的摩尔纹瑕疵
§ 1.9 丝状烟的效果
§ 1.10 结论
1.1 概述
§ 一般对Krakatoa渲染器有个通常的误解:因为它是一个粒子渲染器,而点渲染(point rendering)本来就应该是带有颗粒感的。

§ Krakatoa渲染的一般准则总是如此:使场景中具有尽可能多的粒子,并让每一个粒子的密度相对都较低,这些低密度的海量粒子累积在一起就能够得到过渡非常光滑的渲染结果,实际上单独渲染其中任意一个粒子都是几乎不可见的。

§ 至少在渲染火焰、等离子体(plazma)和丝状烟的情况下,这是正确的方法。

在这几种情况下需要大量的partitions(分区)以及非常低的每粒子密度值才能避免粒子渲染的颗粒感。

§ 下文将会测试不同粒子数量和不同密度情况下的渲染结果,用于演示在Kraktoa 中如何得到一张“干净的、光滑的、无颗粒感的”渲染图像。

1.2 基础场景
§ 为了探究粒子数量及每粒子density对最终渲染效果的影响,我们用一套非常简单的Particle Flow粒子流在100帧的时间里产生100w粒子。

§ 这套Particle Flow粒子流中使用了一个Force Operator用以给粒子施加一个带Turbulence的Wind力场,同时也用了一个默认参数的Drag力场。

§ 这套粒子流之后用Krakatoa做了partition。

每一个partition的第100帧都包含100w个位置稍有不同的粒子,这种位置上的不同是由position operator上的random seed的变化产生的。

§ 这些partition之后都用一个PRT Loader加载进场景,视口中只显示一个partition的粒子量,但渲染却会使用各种数量的partition以及不同density的组合来测试最终渲染图像的变化。

1.3 100w粒子,不同的密度渲染测试及结论
§ 首先,让我们看看单个partition用”density:5.0,exponent:-1或-2或-3或-4”几个不同值的渲染效果:
density:5.0,exponent:-1
density:5.0,exponent:-2
density:5.0,exponent:-3
density:5.0,exponent:-4
§ 从图中容易看出,第一张图(density:5.0,exponent:-1)颗粒感最重,此时粒子密度值为0.5.
§ 从YouTube网站的视频中,很容易发现那些想要每一颗粒子都可以完全被看到,为那几百万粒子产生的效果而感到印象深刻的艺术家们(稍带讽刺意味)。

§ 可以看到在0.005的密度下大多数的颗粒感都不见了,而在0.0005(5.0/-4)的情况下渲染的结果可以用来做丝状的香烟烟雾。

1.4 1000w粒子渲染测试及结论
§ 现在让我们读入10个partitions(共1000w粒子),并把密度设为0.0005渲染的结果,与读入1个partition(100w粒子),并把粒子密度设置为0.005(也就是密度为之前的10倍)的渲染结果做比较:
前者:1000w粒子,密度0.0005
后者:100w粒子,密度0.005
§ 可以看到,最终的空间密度(1000w*0.0005 = 100w*0.005)是相等的,但是密度只有后者十分之一的1000w粒子产生的图像几乎比前者光滑10倍。

§ And here is the rendering o f 10 partitions with Density of 0.005 (left)compared to 1 partition with Density of 0.05:
§ 下面的渲染测试则是:A图10个partitions,1000w粒子,密度0.005,B图1个partition,100w粒子,密度0.05:
A:10个partitions,1000w粒子,密度0.005
B:1个partition,100粒子,密度0.05
§ 同上一次的测试结果一样,使用10倍多的粒子数量配合10倍少的密度会产生类似的体积渲染效果,但是噪点会少很多。

§ 为了读者能看到更多的信息,下面是10个partitions共1000w粒子的渲染日志,包含了读取粒子数据、灯光计算和渲染计算总共花费了大约17.5秒:
PRG: Rendering frame 100
STS: Section "Retrieving Particles":
STS: Total 00h00m 05.000s Called 1 times Avg 00h 00m 05.000s
PRG: Rendering 10000000 particles.
PRG: Producing volumetric lighting with 1 lights
STS: Section "Lighting:Matte Objects":
STS: Total 00h00m 00.000s Called 1 times Avg 00h 00m 00.000s
STS: Section "Lighting:Sorting Particles":
STS: Total 00h00m 01.312s Called 1 times Avg 00h 00m 01.312s
STS: Section "Lighting:Generating Attenuation":
STS: Total 00h00m 06.110s Called 1 times Avg 00h 00m 06.110s
STS: Section "Render:Matte Objects":
STS: Total 00h00m 00.016s Called 1 times Avg 00h 00m 00.016s
STS: Section "Render:Sorting Particles":
STS: Total 00h00m 01.203s Called 1 times Avg 00h 00m 01.203s
STS: Section "Render:Drawing Particles":
STS: Total 00h00m 03.969s Called 1 times Avg 00h 00m 03.969s
PRG: Finished rendering frame: 100
1.5 输出分辨率对粒子渲染效果的影响
§ 当使用粒子渲染模式(与体素渲染模式相对)来进行渲染时,请记住:输出分辨率会影响到最终渲染结果,影响程度几乎可以比肩粒子数量对最终渲染结果的影响。

§ 当输出分辨率改变时,同时也改变了真实世界中每像素所占的空间大小。

§ 这就意味着在一个较低的分辨率图像中,一个像素代表了一个更大的体积空间,因此也意味着在单位体积内包含了更多的粒子,这样就会降低渲染的颗粒感,并使渲染出来的粒子看起来更紧密充实。

§ 提高分辨率会使粒子分布变稀疏,因此需要更多的粒子才能覆盖画面中(原有画面比例的)像素区域去得到流畅光滑的渲染结果。

§ 下图中,Iterative模式的下的缩放特性被用于减少输出的分辨率到原来的50%,但粒子的密度并没有发生改变。

§ 左边的图是0.005的密度,1000w粒子,右边的图是0.05密度,100w粒子。

§ 能观察到,右边的图在100%分辨率的情况下看起来非常粗糙有颗粒感(见本文之前的100%测试大图),但缩小50%之后看起来像是1000w粒子在100%分辨率时候的效果,而左边的图像看起来就光滑的很完美了。

1.6 1000w粒子的体素渲染测试及结论
§ 使用比一个像素稍微大一点儿的体素来进行渲染会得到较少颗粒感的结果,这是因为所有的体素都一个一个地邻接在一起,因此没有空的体素在他们之间,这会导致更光滑的过渡。

§ 此外,体素渲染模式下的Filter Radius参数能够使相邻体素的衔接更为光滑,因为它在着色的时候会把自身体积外的粒子也考虑进来(进行过渡着色),但是Filter Radius的代价就是渲染时间,值越大渲染时间越长。

§ 下面的图片是10个partitions,密度0.05,使用不同的Voxel Sizes和Fiter Radius参数组合的结果:
A:Voxel Size 0.5 ,Filter Radius 1,这个效果与之前同数量的粒子渲染模式的效果类似
B:Voxel Size 0.5 ,Filter Radius 2,抹去了一些噪点
C:Voxel Size 1 ,Filter Radius 1,和B图很相似
D:Voxel Size 1 ,Filter Radius 2,产生了过度模糊的图像1.7 1亿粒子渲染测试及结论
§ 下图是1亿粒子与1000w粒子的效果对比:
A:100个partitions,1亿粒子,密度0.0005
B:10个partitions,1000w粒子,密度0.005
§ 看起来粒子好像用的太多了?记住在比如“超人归来”的某些镜头里使用了大约每帧7-10亿的粒子,才能去得到在2K分辨率的画面上看起来光滑流畅的效果。

§ 需要注意的是,1亿粒子能够支持到原画面200%的分辨率(见下图)。

§ 以下是1亿粒子的渲染日志,和预测的一样,10倍的粒子数量花费了10倍的时间去完成各项渲染内容!
PRG: Rendering frame 100
STS: Section "Retrieving Particles":
STS: Total 00h 00m 49.000s Called 1 times Avg 00h 00m 49.000s
PRG: Rendering 100000000 particles.
PRG: Producing volumetric lighting with 1 lights
STS: Section "Lighting:Matte Objects":
STS: Total 00h 00m 00.000s Called 1 times Avg 00h 00m 00.000s
STS: Section "Lighting:Sorting Particles":
STS: Total 00h 00m 13.890s Called 1 times Avg 00h 00m 13.890s
STS: Section "Lighting:Generating Attenuation":
STS: Total 00h 01m 00.610s Called 1 times Avg 00h 01m 00.610s
STS: Section "Render:Matte Objects":
STS: Total 00h 00m 00.016s Called 1 times Avg 00h 00m 00.016s
STS: Section "Render:Sorting Particles":
STS: Total 00h 00m 17.625s Called 1 times Avg 00h 00m 17.625s
STS: Section "Render:Drawing Particles":
STS: Total 00h 00m 40.593s Called 1 times Avg 00h 00m 40.593s
PRG: Finished rendering frame: 100
1.8 消除阴影的摩尔纹瑕疵
§ 能清晰的看到上一张双倍分辨率渲染的图的底部,能够看到一些摩尔纹效应。

§ 同样的问题几乎存在于所有本文以上部分的其他渲染图像中——因为默认的Spotlight的用来照亮粒子的阴影贴图大小均为512*512。

§ 在本文的场景中(或者类似的场合下,不代表所有情况),通过提升阴影贴图的大小通常能够改善阴影的质量。

§ 以下是几种不同的阴影贴图尺寸的渲染样图对比:
§ A图使用默认的512x512的阴影贴图。

§ B图使用1024x1024的阴影贴图。

§ C图使用2048x2048的阴影贴图,几乎去除了摩尔纹效应。

§ D图同样使用2048x2048,但渲染粒子时候勾选了Bicubic interpolation(双三次插值),平滑了一些图像最下方边缘的锯齿效应。

§ 以下渲染图是200%分辨率、2048的阴影贴图及Bicubic过滤方式所产生的结果:
1.9丝状烟的效果
§ 在本文最初,我们看到100w粒子在密度为5.0/-3或5.0/-4的情况下,能够得到过渡相当光滑、质量比较不错的效果。

§ 现在我们有100倍多的粒子,我们便能渲染出同等体积效果的图样,当然密度设置要相应小100倍,比如5.0/-5 和 5.0/-6(渲染结果见下图)。

§ 同时,我们也能满足提升分辨率的需求,而不必担心任何噪点的产生。

1.10 结论
§ 从以上的测试案例可以看出,渲染更多的粒子并使用更低的每粒子密度值通常能够得到比渲染更少的粒子并使用更高的每粒子密度值更好的渲染效果。

§ 在高分辨率渲染的情况下尤其需要注意:因为你需要通过增加n倍的粒子才能拥有足够的粒子数量来覆盖所有(因提升分辨率而增加)的像素。

§ 实际上,在制作时间和磁盘空间允许的情况下,你应该尝试去生成尽可能多的粒子。

记住,1000w粒子也许看起来很多,但在Krakatoa的世界里,这种数量级大概只够搞定一个特效的预览效果!
本文库方法由瑞云科技渲染农场提供。

相关文档
最新文档