【特效教程】Krakatoa的密度、阴影与衰减

16 八月, 2014
225
0

krakatoa_mini_logo 翻译:Hammer Chen

Krakatoa是套volumetric renderer, 通常不会拿它用在渲染一般模型. 因此, 在使用这个外挂时也会有不同工作流程。
krakatoa_01 (1) 要知道, 当你想要渲染由粒子所形成的模型时. 因为粒子在表面的位置多少会共平面, 而且粒子本身没有厚度, 这会导致进行光照与自身阴影计算的时候产生诡异的图案—摩尔纹(moire effects). 这种情形发生是因为, 模型刚好就位于光源与阴影之间, 而软体本身(3ds max)的精度只能判断到在光照面与阴影面选边站. 理论上,由粒子构成的面, 它既不属于光照面, 也不属于阴影面. 但实际上渲染器在算图时会选边站, 而这种选择是根据某种数字规则(numeric pattern), 这导致摩尔纹的产生!
moire effects moire2 摩尔纹常见于条纹图案(例如衬衫)透过电脑像素显示时的花纹

而当粒子构成的点云具有厚度时, 光线透过粒子得强度会根据粒子密度而减弱, 这样当光线穿透粒子层时, 光线会减弱, 越往深入越减弱, 最后光线会完全消失. 这样就会产生很漂亮的SSS光线散射效果, 这也就是我们想要得到的效果. 因为真实物理世界的状况就是这样的, 当光线透过小分子构成的东西, 如烟尘或是云就会发生这种现象. 遗憾的是, 目前版本的Krakatoa, 光线透过粒子时并不会有散射现象, 光线在粒子云中只会直线前进.

而粒子的密度会受到很多因子影响通常预设的粒子密度=1.0 而密度会受到影响:
1、Node的Visibility Track(可视度) 0.0-1.0
2、材质的不透明度, (除非你没勾选Krakatoa Material with Multiply Density这个选项)
3、在Krakatoa GUI里设定的Global Particle Density factor. 这个参数可以跟Lighting and the Final pass相同或是不同.
要知道Krakatoa会随着particle count 粒子数量来改变Global Particle Density, 而在某种程度内, 你可以修改per-particle density, 以达到在不同的粒子数量, 可是却有相同的效果. 因此, 使用者可以先用少的粒子数量来做测试算图, 来找到适合你的Global Particle Density, 接着增加粒子数量, 以追求更细致但是又有效率的结果.

还有一点技巧也要知道, 你算图的解析度也会影响到密度. Krakatoa会把每颗粒子算成单一个像素, 因此算大图就会导致粒子好像比较松散, 如果你镜头拉远的话, 粒子看起来密度又变高了. 当然这跟真实世界的状况还蛮符合的, 如果你在​​沙尘暴里面, 你会看到很多颗粒, 飞来飞去, 中间的间距很大. 但是当你从远方看沙尘暴的时候, 看起来就会很扎实.

用粒子构成的模型表面所造成的摩尔纹要怎样修正?
这里范例是用10节的Geospher, 然后用一百万个粒子充满表面, 而且没有做偏移的动作(offset) 一盏direct light用来做照明.

这张的密度是5.0 * 10^-1 (在Krakatoa GUI 里数值是5.0与-1 , 代表0.5):
如同预期的, 这样产生很严重的摩尔纹,这是因为粒子介于光照面与阴暗面产生的自身阴影, 而面光面的粒子云照的很阴暗, 因为粒子密度太高了, 而且粒子的自身阴影害他们自己变得很黑暗, 没有照到光。
krakatoa_02 把数值减少到0.05 来减少密度, 减低了摩尔纹的问题, 可是没有完全解决, 因为当粒子密度减少时阴影密度也变少. 因此, 光线并没有完全地削减掉, 而当粒子被他们自己的阴影投射到得时候, 还是受到这些阴影影响。
krakatoa_04 把密度减少到0.005时, 就完全消除摩尔纹了, 可是缺点是, 粒子就没有阴影的效果. 而背光面的粒子几乎跟受光面的粒子一样量, 因为阴影​​的密度太弱了.
解决之道
krakatoa_03 与其把所有的粒子都摆放在同一个表面上, 不如做一点偏移, 你可以到Particle Flow > Position Object operator 把Offset偏移量设定为-1/1 这样再用0.005的密度再算一次。
krakatoa_07 这样的话, 光线还是会完全穿透粒子云,可是会看到很明显的薄壳.。这时候我们把密度提升到0.05 就得到令人满意的结果!
krakatoa_06 若是把密度再提升到0.5 没办法提升品质 .
所以如果算图解析度为320×240, 计算一百万个粒子, 密度为0.05, 可以得到可接受的结果。

分别控制Lighting Pass与密度
Krakatoa GUI让你可以分别控制粒子密度, 与final pass rendering。
krakatoa_05 这里的设定是密度为0.05, 而Final pass是用0.5 让阴影比较不密, 而粒子本身还是很不透光, 这样同时让粒子云有厚重感, 当密度设为0.5 而照明强度设为0.05 就可以达成。
krakatoa_08 即使Lighting pass用较少的密度, 有会造成光线穿透表面, 会把球的背面照明, 尽管粒子云很密.
类似的效果也可以global density设为0.5, 这样会减低Shadow Density, 这样你可以对不同的光源微调光线与阴影.

光线透过厚重的粒子云的衰减设定
接着我们来看当光线在一百万个粒子中的衰减效果, 与其用Geosphere的体积整个填满这样算图会太久, 可以改用Position Icon operator, 改用Sphere shape当做粒子发射来源,采用跟Geosphere同样的半径。
krakatoa_09 左图显示密度为0.5的效果, 如果用Clipping Plane的方式把前半部切掉. 我们可以观察到光线怎样穿透的, 这里显示光线进入粒子云以后, 很快地衰减了。
krakatoa_10 把密度減少到0.05 得到以上結果
把密度减少到0.005时让光线穿透过整个粒子云衰减的效果很微弱

krakatoa_11