Arnold for C4D 26 【终章 Ⅲ】Arnold V
本篇主题:如何在C4DtoA中渲染体积对象(Volume)
之前在讲着色器的时候,讲过跟Volume(体积)相关的参数,本篇跟之前会有交叉的地方,但是需要注意的是,这里用到的Volume跟Atmoshphere Volume有所不同,Atmoshphere Volume是一个全局效果,而现在讲的是局部的单个或多个体积对象;
还记得体积是啥吧?说白了就是一片片、一股股的烟雾啊、云层啊、海浪啊这样的东西~
接下来将结合实例说明如何利用体积对象做出各种炫酷效果;
Arnold Volume
- Arnold Volume相当于一个的“容器”;
- 比较常用的体积文件是OpenVDB,梦工厂出品,可以去官网按需下载 https://www.openvdb.org/,这个网站间接性无法连接、加载很慢,请耐心...如果感兴趣也可以自己使用Houdini等软件创建OpenVDB;
- 主菜单中的各项参数之前都讲过,此处略;
OpenVDB
-
属性面板中Start frame/End frame/Step frame/Offset/Loop这几个参数上一篇文章中已经讲过;
-
Available grids显示的是加载的该VBD文件所携带的信息通道,比如现在所用的文件中包含了density(密度)和temperature(温度)两个可用通道;VDB可以携带多种信息通道,密度、温度、速度等,都会在此处显示;
-
Grids直译过来是网格的意思,其实就是通道;Grids定义要读取的通道,多个的话用空格隔开即可,上图中只读取了密度;
-
Velocity grids速度网格(通道),用于定义运动模糊,使用一个矢量(例如v或vel)或三个表示速度的浮点网格(例如vel.x, vel.y, vel.z)表示;如果网格无效或未定义,则不会出现运动模糊
-
Velocity scale按比例缩放速度,0值将无运动模糊;
-
Velocity threshold 速度阈值,控制运动噪点速度,从而更快的渲染物理模拟中的运动模糊;默认0.001几乎没有视觉影响;0值将完全禁用速度;
-
Step Scale缩放体积步长,主要用于当Volume Step设置为自动时调节自动值;对于低频体积,如烟雾,设置为4最合适;
科普Volume Step
体积对象在采样时,直接光线会通过对体积对象发射多次光线进行多次采样,每一次发射的光线都是有“步长”的,即Volume step size,间接光线行为类似(可以想象,光线穿过云层时,光线会在云层内部进行各种折射散射行为,就像人穿过一片杂草,需要随时调整脚步,有时可能会因为前面有水坑还得绕路,即使同样距离也要比走一条马路慢得多);
因此,体积采样通常需要比一般表面采样更为耗时;光线在体积内传播的每一步都会评估着色器并累积体积密度,当体积中密度变化时,附近的光线会计算出不同密度值,因为光线采样值是统一的,因此有些地方就会产生噪点;
在这种情况下,如果要消除噪点,光线步长就需要随机应变,即减少或增加Volume step size;当然即使采样值较低,渲染干净的体积图像也需要较长时间,所以调整数值要谨慎;渲染体积时,需要考虑至少三件事:光线步进(Ray marching)、直接光线(Direct light)、间接光线(Indirect light),即使面对同一个体积对象,以上三者采样设置都不尽相同;
在光线行进的过程中,太低的采样会丧失体积中很多细节、产生噪点,或者会使体积看起来比原本更轻薄,总之会导致计算错误;一个糟糕的步长具有滚雪球效应,会使其他采样部分变得嘈杂;
为避免步长导致采样变得糟糕,可以通过查看Alpha通道,或者关闭对体积产生影响的光线来源并添加自发光,可以很轻松测试出错误来源;如果自发光/Alpha通道在所需AA设置下仍有噪点,则Step size可能太大了;Step size实际上是在object-space而不是在world-space中,如此一来,在体积缩放时,能够保持采样质量不变;但是,仍要避免使用不合理的大步长,否则体积将变薄或消失;
下图中,体积已放大100个单位以夸大此效果(1/25/50是相对于放大后的体积的效果):
前面文章中说过,低步长将增加渲染时间。 例如,当步长为0.1且世界空间中的体积为10个单位时,大约有100个基本采样,因此体积着色器将调用100次,在此同样适用,务必注意!
接下来用演示一下如何使用:
1、首先准备好一个有灯光的场景,以及一个OpenVDB文件(这里准备了一个烟雾效果);
2、在场景中创建一个Arnold Volume,Type选择OpenVDB;
3、打开OpenVDB面板,在File path中载入事先准备好的OpenVDB文件:
仔细看图中###部分,这是序列标记,有时候阿诺德会将一个文件识别为序列,将###部分删除即可注意:在选在要加载的OpenVDB文件时,IPR要确保没有运行,否则在C4D视窗中不能准确显示边界框大小。
4、刚开始看不到任何画面,IPR中也没有渲染出任何东西,因为还需要给Arnold Volume添加一个volume_collector材质,之后就可以看到效果:
新建Arnold Shader Network>添加Volume_collector并赋予Arnold volume>调整参数(如上图红框内)>运行IPR,调整好后IPR就可以看到体积对象了5、爆炸的时候都是火星四射的,我们来简单模拟一下这种效果:添加自发光;
一般模拟火焰效果都会使用渐变,所以此处使用ramp_rgb节点来控制自发光效果,使用预设flame可以很好的模拟:
此时还是没有效果滴,因为数据类型不对头啊,需要调整一下:拽出volume_sample_float节点,因为之前最开始的时候散射通道Scattering channel选择的是density,这是个float啊,所以要转换ramp_rgb为float:
材质编辑器示例最后效果大概这样:
噪点很多,效果也不咋地,这里就不再做调整了,渲染体积太耗时,仅作演示用,大家根据步骤多试试
C4DtoA中会逐渐放弃volume_collector这个着色器,在使用的时候也会得到提示,替换后的着色器其实也叫volume_collector,是新版:
下面我们来看一下新旧对比:
standard_volume(左) & volume_collector(右)可以看出简洁了很多,这些参数大家一定也不陌生,前面教程中基本都涉及过,这里再快速串一下;
-
Density 控制体积密度,密度越大越“重”,很好理解,不多解释了;
-
Scattering 散射,旧版中需要选择散射源,新版中智能识别,方便快捷;
控制在光照下体积的亮度。这是散射而不是吸收的光的比值,能量守恒值在0~1范围内;
-
Anisotropy各向异性,之前教程重点讲过;
-
Transparency透明度,属于额外控制密度的一个值,主要控制着色后颜色透过体积的强度:
-
Emission自发光;
-
Blackbody相当于使用温度控制体积自发光;
-
旧版中Attenuation控制衰减,衰减强度越大,光线越快被吸收,体积“越黑”;
-
Advanced高级设置
Displacement可在此处连接贴图控制体积跟多细节,创造更多惊艳效果;
Interpolation当对使体积数据命名的通道进行采样时,使用的立体像素插值;各模式效果如下:
Tips:
- 当Volume Ray Depth大于0时,体积只能接受来自其他自发光体积的间接照明;
- 在使用XXX channel的时候,请确保该通道的贡献来自VDB文件,也就是说你实现准备好了VDB文件;
- 请尽量保持体积着色网络的精简;
该系列教程最后一篇,就酱了💗
感谢大家的陪伴,我这么不靠谱的随心情更新都没有一个脱粉,感动!
希望大家都有好运~
各位路过的大朋友小朋友,如果有什么问题可以留言一起讨论,教程中有什么错误的地方也热烈欢迎大家指出💗
C4DtoA的参数基本都涉及到了,讲这些的意义是并不是让大家挨个记住,是希望能够知道有这么个功能,万一哪天要实现什么效果,会有一种——哎,用那个什么什么节点就行啊/调整一下那个参数就好了啊~ 的赶脚
重要的还是实践
也不知道该说点啥了。。。总之,感谢观看!多用多练!
Reference:
1.Solidangle Support & Documentation
禁止私自转载,转载需征得老夫同意。
否则,必追究。
接下来的教程应该就是实战教程了?或者讲一下X-Particle??Houdini??
或许,想学Python嘛?图形学了解一下?
开个玩笑
因
为
我
还
没
想
好
啊哈哈哈哈哈
欢迎大家踊跃发言