首先,本篇很长很长,近五千字并且知识量巨大,细究起来,看一天都没问题,所以给予忠告:先马再看。
反正我也不收费,马了慢慢看呗。
本篇讲解的Utility不同于之前的Utility Shader,从Node列表中也可以看的出来,这俩是不一样的。之前讲的Utility Shader隶属于Surface shaders。
具体有什么不同,各位看官接着往下看便知。
Utility Nodes一共包含15个小节点,接下来一个个讨论。
blackbody
blackbody可以理解为使用色温控制颜色;
blackbody shader是复制的Houdini Pyro着色器,因此适用于模拟火焰、爆炸效果;
对于volumes(比如一堆火,一团烟雾),必须确保volume sample shader与blackbody shader正确连接;
- 【Temperature】控制色温;默认6500k(日光色温);颜色范围从红色到白色到蓝色;高于6500的值将产生冷色调,低于6500暖色调。
- 【Normalize】 启用Normalize,将会抛弃Intensity,被Normalized color代替(Normalized color,归一化颜色,一种抛弃光照和阴影影响的简单有效的计算方法);可以通过启用Normalize将Intensity从颜色中分离出来单独控制。
- 【Intensity】控制blackbody强度;如果要物理正确,值应保持为1,但是这会导致极亮的光;如果需要,可以通过降低该值的办法降低强度。
cache
- cache节点用于储存着色器的运算结果,避免重复运算;在着色网络中,cache对相同着色只进行一次运算,能够节约资源加快运算速度,尤其是对于volumes;
- 使用cache的计算结果,必须保证以下内容共享:
shading point
shading normal
ray origin
UVs
geometry
camera_projection
camera_projection节点可以将图像进行摄像机投射(可以类比走马灯、幻灯片,相当于在摄像机镜头前放置了一张图片,摄像机光线透过图片投射到对象上);
- 【Projecttion color】输入投射对象,通常是图片(需要使用image节点配合);
- 【Offscreen color】从摄像机外面返回到视体的颜色;
- 【Mask】使用此参数可以屏蔽不接受投射的区域(控制投射区域);
-
【Camera】投影相机,留出空白以使用默认摄像机;
- 【Aspect ratio】投影摄像机长宽比;
- 【Front facing】将投影应用到投影摄像机前面的多边形上;
- 【Back facing】将投影应用到投影摄像机后面的多边形上;
- 【Use shading normal】使用shading normal(着色法线)代替geometric normal(几何法线)进行可见性测试。如果渲染相机用于投影,勾选此功能后会产生更平滑的边界,但是边界会变得模糊不准确,可能会产生缝隙,因此使用shading normal进行可见性测试而不是geometric normal;
插播一条科普
- 在计算机图形学中,视体(viewing frustum)又称视景体、视锥,是三维世界中在屏幕上可见的区域,即虚拟摄像机的视野。
- 该区域的实际形状依所模拟的摄像机镜头而定,但顾名思义,其常见的形状是方平截头体。将四棱锥截为平截头体的两个平面称作 近平面 和 远平面 。如果某个物体到摄像机的距离比近平面近或比远平面远,那么这个物体不会被显示。
- 视体剔除(Viewing frustum culling)指将完全处于视体外的物体移出渲染流程的过程。为了加速剔除过程,通常使用物体的包围体而不是物体本身来进行位置比较。
通常,可以通过视野角度、纵横比,以及近平面和远平面到摄像机的距离来描述一个视体。
clamp
用于限制输出结果,默认0到1之间,可以重新设定最大值/最小值;
可以将最大值最小值反转设置,输出结果也会发生反转;
由于技术限制,尽量不要使用0,可以无限接近0,使用0.9999等,避免出错;
- 【Input】输入一个值用于限制,可以是纯色、图片等;
- 【Mode】有Scalar,RGB两种模式,当选择RGB模式的时候,颜色将限制在 Min color和Max color之间;
- 【Min】最小值;
- 【Max】最大值;
- 【Min color】设置一个最小颜色值用于输出;
- 【Max color】设置一个最大颜色值用于输出;
complex_ior
正如其名,complex_ior用于计算具有复杂折射率的材质;
Standard shader可以根据电介质材质(电绝缘材料)的折射率计算菲涅尔效应,像塑料、玻璃等,但是金属因为受消光系数(又称,摩尔吸光系数)影响,具有更复杂的菲涅尔曲线,这时候就需要使用complex_ior来模拟的更真实;
使用Standard surface shader时,就不需要再使用complex_ior,Standard surface shader已经内置了材质的复杂菲涅尔计算,不要多此一举;
综上,当遇到一些稀奇古怪的材质或者想要某种特殊效果时,就可以用complex_ior模拟,常见金属材质直接使用Standard surface shader就可以了;
- 【Material】提供了一些预设材质,预设材质种类同之前讲过的一样,就不赘述了;选择已经有的预设材质,Reflectivity、Edgtint等参数会自动被覆盖;点击Editor按钮,自动进入custom(自定义模式),在自定义模式下,允许修改Reflectivity、Edgtint等参数;
- 【Custom preset】选择自定义预设;
- 【Mode】两种模式可供选择,artistic/physical;Artistic模式下可调节Reflectivity和Edgetint颜色;Physical模式可调节n和k;
- 【Reflectivity】入射光线反射值;
- 【Edgetint】当视角与曲面平行时,控制颜色偏差;(可以理解为surface的边缘色彩);
- 【n】red/green/blue波长的折射率值(例如0.65,0.55和0.45微米);
- 【k】red/green/blue波长的消光系数值(例如0.65,0.55和0.45微米);
-
【Save/Save as】将目前设置好的参数保存为预设供下次使用;
点击Save可将目前参数保存为预设,会自动跳出命名对话框;
单击Seve as可将目前预设重命名并另存为新预设;
自定义的预设将保存到本地文件夹,默认保存路径:苹果系统→Home/Preferences/MAXON/CINEMA 4D R[版本号]/'C4DtoA/presets/complex_ior;
Windows系统→ Home\AppData\Roaming\MAXON\CINEMA 4D R[version]\C4DtoA\presets\complex_ior;
附:常见材质 n/k 值查询网站: http://refractiveindex.info/
facing_ratio
根据采样点朝向摄像机角度输出一个0~1之间的数值,1表示夹角为0度,0表示夹角为90度;
类似于菲涅尔,但能够比菲涅尔表现更复杂细腻的效果;
根据光线入射角的不同,输出不同的值;
它在其他渲染器中也被命名为Incidence;
与ndoteye模式中使用的Utility shader不同,Facing Ratio适用于任何类型的光线,而不仅仅是相机光线;
返回的值始终在0~1范围内;
说白了这个节点就是用来控制入射光线,调整入射光线夹角,材质便会产生不同光影变化:
-
【Bias】对结果进行偏差设置,默认0.5无偏差;
-
【Gain】控制0~1之间过渡平滑情况,默认0.5,低于0.5过渡更生硬,高于0.5过渡更平滑;
- 【Linear】启用后输出结果为线性标准化角度,而非N·Eye;
-
【Invert】反转结果
layer_float
有关Float,请自行复习。
layer_float与之前讲过layer_rgb类似,用来混合图层,参数也都跟layer_rgba类似,这里就不展开讲解了,需要的童鞋可以看看layer_rgba部分。
passthrough
passthrough主要与AOV节点配合使用,用于读取和输出AOV。
后面讲AOV的时候再来展开详谈。
space_transform
space_transform节点用于空间坐标转换,从一个空间转换到另一个空间;
这里所说的Space,指: word /object /camera /screen /tangent:
Word: 有一个坐标原点,其他对象坐标根据与坐标原点的比较来确定;
Object:模型文件在建立时得到的坐标值,与其他物体没有任何参照关系;
Camera: 以摄像机为原点,定义为:+x为右;+y为上;-z为下;
Screen:转换到Screen可以说是一个投影、剪裁、映射的过程,对应屏幕像素坐标,屏幕左下角为原点, 定义为:+x为右;+y为上;+z为下(注意:与Camera不同),z表示画面像素深度;
Tangent: 由输入的切线坐标定义,基于tangent vector和shading normal;如果tangent的值为0,着色器会尝试以下操作来构建坐标系统:
a. 查找名为“tangent”和“bitangent”的vector user data(用户数据向量);
b. 使用UV 衍生坐标;
c. 建立自己的坐标系统;属性菜单中【Input】、【Type】、【From】、【To】息息相关,在转换时,【Input】根据【Type】的不同而不同;
Point:输入的是空间中的位置点;
Vecor:输入的是一个方向,转换时 平移 部分会被省略;
Normal:输入的是法线;转换时通过轴对称保持与曲面的角度;逆转【Input】(即逆转x/y/z);如果Normal或Vector使用8位位图标记,转换时将使用坐标进行替换,被重新映射到[-1,1]范围;可使用【Scale】对输出的Vector进行缩放,并可以将其设置为Shading Normal(设置【Normal】)
switch_rgba & switch_shader
- switch_rgba和switch_shader这个两个节点有很多类似之处,旧版本中对应Switch节点。都是用来输出被【Index】选中的【Input X】的结果,选择范围Input0~19,未被选中的Input不会输出:
switch_shade和switch_rgba类似,只不过能够控制的节点类型不一样,这个很好判断,当你连接节点的时候,连不上,那就说明该类型节点不配套;像上图中,switch_shader就无法与flat节点连接,要使用switch_rgba才行;
switch_rgba输出的结果是RGB,switch_shader输出的结果是Closure(闭包,包含并能够读取多个数据);
trace_set
!官方敬告 !:在未来版本中,trace_set将会被移除,慎用。
trace_set节点用来标记光线,允许将光线标记为一个或多个跟踪集的一部分,以便避开或击中场景中的标记对象。类似于合成标签,有两种模式:
Exclusive(排除):光线将追踪除标记以外的所有对象;
Inclusive(包含):光线将追踪被标记对象,以及没有任何标记的对象;【Pssthrough】用于调用选定的着色器,使用节点连接的方式调用;
【Trace set】用于定义需要跟踪或避免的对象,使用Arnold parameters tag标记;
【Inclusive】勾选时为包含模式,不勾选为排除模式;
triplanar
利用此节点可以通过映射快速贴图,而不用使用UV map,例如下图中通过映射给正方体的六个面快速贴图:
- 【Input】设置一个颜色或一张图片作为贴图;
- 【Scale】用于缩放贴图大小
- 【Rotate】旋转贴图;
- 【Offset】偏移UVW方向;
- 【Coord space】 指定要使用的空间坐标,包括Word/Object/Pref,word和object在space_transform节点中讲过了,Pref 是“ vertex in reference pose ” 的缩写,这里的 pose,在计算机图形学中翻译为“位姿”,包含position(位置)和oriention(方向),AE中有个跟随功能就是利用位姿估计(pose orientation)来实现的,具体解释起来有些麻烦,涉及到图形学很多问题,放张图就很好理解了:
注意,Pref不是一个真正的“Space”,是对于绑定位姿的参考;
Pref一般用于动画,对比word和object可以明显看出差别:
【Pref name】用来命名Pref;只有在启用Pref space时才会用到Pref name;默认名称为Pref;
-
【Blend】平滑融合纹理贴图:
【Cell】随机镶嵌图案,通过Voronoi cells实现:
-
【Cell rotate】 控制随机化旋转:
-
【Cell blend】控制混合宽度:
uv_transform
此着色器用来修改UV,控制2D贴图放置到曲面上的方式以及位置,可以对曲面上的贴图进行缩放、平移、旋转、复制、镜像等;
注意属性中的Frame,带有frame字样的属性会控制整个贴图;不带有frame的属性控制的是在贴图的frame被确认后,也就是贴图有了一个基础的框架后,在框架内的各种缩放、旋转等。
- 【Passthrough】评估解读输入的贴图(可以是颜色/图片等),按照原样传送到输出;
- 【Unit】设置旋转单位 ,有三种模式:degrees(弧度)/radians(角度)/normalized(标准化);
- 【UV set】UV set的字符串名称,用于对图像进行采样;默认情况下参数为空白,此时将使用多边形的初始UV set;例如,如果在polymesh node中创建了一个名为UV set2的UV set,则可以在UV set的参数中填入“UV set2”来调用它;
- 【Coverage】控制整个贴图框架在表面的覆盖范围;三个参数分别代表UVW;
- 【Scale frame】控制贴图在表面的覆盖范围,三个参数分别代表UVW;默认值(1,1,0)将覆盖整个表面,减少这些值将会缩小覆盖范围,例如(0.5,1,0)贴图将仅覆盖U方向的一半面积;
- 【Translate frame】控制贴图框架相对于贴图轴心的位置(默认为0,0,0)。例如当U设置为0.5时,贴图将会沿表面在U方向上移动一半;
- 【Rotate frame】控制贴图框架相对于表面的旋转程度;
- 【Pivot frame】控制贴图框架相对于表面的原点;
- 【Wrap frame U / Wrap frame V】控制贴图框架在过大表面上的重复方式,有三种模式:periodic/color/clamp/mirror;
- 【Wrap frame color】定义在Wrap frame U/V中使用Color模式时的颜色,如上图中,如果设置Color:black,未被贴图覆盖的表面将会显示为黑色;
- 【Repeat】控制贴图重复次数;
- 【Offset】沿U方向偏移贴图,该偏移发生在S和T坐标缩放、翻转或互换之前;
- 【Rotate】控制贴图在贴图框架内的旋转程度,框架本身不会旋转,如果要旋转整个贴图,需要使用上面的【Rotate frame】属性;
- 【Pivot】对任何值进行修改时,均基于这个原始值;
- 【Noise】U和V的2D噪波;
- 【Mirror U / Mirror V】控制贴图切片如何在彼此旁边放置;启用后,每个贴图副本将是U/V的镜像;只有一张贴图时效果同Flip;
- 【Flip U】水平翻转;
- 【Flip V】垂直翻转;
- 【Swap UV】互换轴:
- 【Stagger】控制贴图切片对其方式;启用时,每隔一行贴图切片将会偏移其一半宽度,类似于砖块在砌墙时候的样子;
vector_map
传统的置换贴图如果想要产生表面变化,其多边形对象需要垂直于基础网格,Vector displacement map(矢量位移置换贴图)可以在面法线以外的方向上位移,而不用非要垂直于基础网格,Vector displacement map使用指定空间中被选定的向量的颜色通道来控制移动位置和幅度,这更加灵活。
- 【Input】映射贴图,通常从Mudbox和ZBrush导出;
-
【Tangent】The tangent map(切线图),与shading normal一起定义了输入向量适用的切线坐标系,如果可以使用sculpting tool,则应在此处连接法线贴图所依赖的切线贴图;如果参数值为0,着色器将尝试以下操作:
a.寻找名称为“tangent”和“bitangent”的矢量用户数据;
b.使用UV衍生物;
c.建立自己的本地框架;
另:vector_map只能在tangent space中使用,如果切线贴图是从word space和object space中导出,可以使用更通用的space_transform;
- 【Normal】视情况连接法线和切线参数;如果未连接任何法线,则使用默认表面法线;
- 【Order】选择输入通道顺序;
- 【Invert X】启用则反转X通道;
- 【Invert Y】启用则反转Y通道;
- 【Invert Z】启用则反转Z通道;
- 【Color to signed】8位位图使用。启用时,输入将重新映射到[-1,1]范围内;
注:【Order】/【Invert】/【Color to signed】这几个参数一般情况下不要动,这几个参数的默认值能够保证正确使用Mudbox导出的切线贴图。
- 【Tangent space】指定输入是在world space 还是 tangent space;
-
【Scale】缩放vector;
以上就是Utility的全部内容,涉及了太多太多的图形学概念,老夫也是尽力科普了,如果还是一脸懵逼。。。不要紧,要坚信能打造出自己想要的设计结果最重要,不懂会用完全OK。
附赠图形学经典名言:如果它看上去是对的,那它就是对的。
至此,【材质】部分就讲的七七八八了,如果想起来还有别的需要讲的,那就。。。。插播吧
下篇开始【Camera】
好,下次见。
禁止私自转载,请勿先得到老夫同意!
否则后果自负
这一章真的写到吐血,需要小💗💗~~复活