翻看前面教程的时候发现,没有系统的讲过standard_surface的各项属性,只是穿插零散的讲了一些,这里汇总讲解一下,当作一个“复盘”,希望能够帮助大家更好的了解standard_surface着色器。
在新版C4DtoA中,standard_surface是一个非常重要的着色器,很多着色器都要结合它来运用。它相当于一个基层着色器,搞懂了这个,在学习其他着色器时也会更容易理解。
下面主要讲解一下standard_surface各项属性,具体使用方法本篇不涉及,前面【材质】第一篇教程就是讲解的Standard surface,忘记的童鞋可以再看一下:【材质(一)】Standard surface 标准着色器
本篇非常非常长,建以先马再看。可以先快速浏览一遍,有一个基本的印象,遇到具体使用场景时再回来看相应参数设置,这样会更好理解,也更能记忆深刻。
Base
Base控制对象的基础表现,类似旧版中Diffuse。
【Weight】
- Base color的权重,默认值0.8
【Color】
- 表面在100%亮度的白色光源下呈现的颜色(基色);
- Base color定义了光线在表面下散射时,RGB光谱中每个不被吸收成分的百分比;
- 金属通常拥有黑色或非常黑的基色,但腐锈的金属还是会需要其他基色;
- 基色通常是必须的;
【Diffuse Roughness】
- 控制表面粗糙度;
- 遵循具有表面粗糙度的Oren-Nayar反射模型;
- 当值为0时,相当于Lambert反射;
- 较高的值将导致较粗糙的表面,使对象看起来更像混凝土,石膏或沙子等材料;
【Metalness】
- 随着值越来越接近1.0,对象金属性质越明显;
- 值为1.0时,将使用完全镜面反射和复杂的菲涅耳;
模拟类似镜子的效果时,需要将 Metalness值设置为1,Base Weight值设置为 1,Specular Roughness值为 0。
因为当启用 Metalness时,Specular Weight和 Specular Color仅控制边缘色调(edge tint),Base仍受 Roughness(包括 Base Diffuse roughness和 Specular Roughness)影响,当 Metalness值为1.0时,Diffuse roughness会自动关闭,但 Specular Roughness仍会产生影响,因此要想得到光滑锐利的镜面效果 Specular Roughness的值应为 0。金属外观使用 Base Color(facing)和 Specular Color(edge tint)参数进行控制,并自动翻译成物理 η 值和 κ 值,用非常易于调整和编辑的颜色保证外观一致性。
下面列举一些真实世界中表现不同金属特性的值:
-
Metalness的值在 0.0~1.0之间时可被用于产生纹理,例如生锈的铁。金属表面光滑干净的区域拥有更多的镜面反射,腐锈的区域拥有更多的漫反射:
【Metal presets】
- 提供的一些金属预设,可以保存/加载自定义预设。这些预设和上面表格中金属特性值是一致的;
Specular
Specular控制对象的镜面反射(高光)。
【Weight】
- Specular的权重,影响高光的亮度;
- 值越高,对象将拥有更亮的高光:
【Color】
- 镜面反射的颜色,可以利用此参数对高光“染色”;
- 只能对部分金属使用彩色高光,非金属表面通常不具有彩色高光;
【Roughness】
- 控制镜面反射(高光)的粗糙度/光泽度;
- 值越低,反射越清晰,表面越光滑;值越高,反射越模糊,表面越粗糙(例如磨砂效果);
- 在极限情况下:当值为0时会得到完美锐利的像镜子一样的反射;当值为1时,近似漫反射效果;
- 想要得到丰富的高光变化,需要利用贴图来实现;
曲面(surface)的“微观”特征影响光的漫射和反射。这种“微观曲面(micro surface)”细节对镜面反射具有最显著的影响。 下图中可以看到,入射的平行光线照射到粗糙曲面时会返回部分光线,并且返回的光线朝不同方向发散,表面越粗糙,反射光就越发散,表面就越“模糊”:
由于Standard surface的节能属性,镜面高光的亮度会自动由其尺寸大小决定。在下面的例子中,所有材料均反射相同数量的光线,但较粗糙的曲面会将光线向多个方向散射。然而,由于粗糙度较低,曲面反射的光线会更集中:
如果要获得曲面丰富的高光变化,需要将贴图连接到Specular Roughness。 这不仅会影响高光的亮度,还会影响它的大小和环境反射的清晰度。
如果想要查看Specular Roughness连接贴图后产生的效果变化,可以利用Range shader。
Specular Roughness[镜面粗糙度]同时影响Specular reflrction[镜面反射]和Refraction[折射]。如果需要,也可以通过Transmission Extra Roughness参数来为折射添加一些额外的粗糙度。当然也可以利用Coat在锐利的折射(比如玻璃材质)上创建一个粗糙的反射层:
【IOR】
-
IOR(Index of Refraction,折射率)参数定义了材质的Fresnel reflecticity[菲涅尔反射率],并且默认使用角函数。有效的IOR定义面向观察者的曲面 和曲面边缘 之间的反射的平衡。
调节IOR可以看到,在整体反射强度保持不变的情况下,正面的反射强度变化了很多:
使用非常高的 IOR值(产生的效果)与 Metalness颇为相似。如果将 Base Color设置成 Specular Color,Speculr Color设置为黑色,看起来将会和 Metalness产生的效果一模一样。不同的是,在 Specular Color控制边缘色调 (edge tint)的同时,IOR还可以让你得到一个额外的边缘折射。金属菲涅尔的工作原理与新版中 Complex IOR shader一样,参数具有艺术性。
通常,IOR应用于塑料,玻璃或皮肤材质(介电菲涅尔),Metalness应用于金属材质(导电菲涅尔并伴随 Complex IOR)。另一个原因是,在 0~1范围内,Metalness更易于纹理化处理,并且在使用像来自 Substance painter这样的应用程序的材质纹理时,Metalness的效果要好于 IOR。
-
Specular IOR with Transmission
默认值1.0是真空折射率。例如,在真空区域对象的IOR值为1.0即意味着不折射任何光线。简单来说,1.0意味着“不折射”。Standard surface着色器假设所有几何体都具有面向外部的法线,对象嵌入在空中(IOR 1.0),并且没有叠加的曲面。
-
Normals[法线]
法线是始终垂直于某平面的虚拟线。控制面的朝向。
在渲染具有折射的曲面时,几何的法线面向正确方向非常重要。在下面的例子中(左图),可以看到面向正确方向(向外)的法线与面向内部(不正确)的法线之间的差异。这对于渲染具有“双面”厚度的材质尤为重要,例如玻璃杯。然而,对于玻璃中的气泡(中间图),反过来才是正确的。气泡的几何法线应该反过来,并且气泡应与玻璃几何结构相结合。法线方向在渲染“单面”玻璃,也同样重要,如汽车挡风玻璃(右图):
如果在应该折射的地方看到黑色,则可能没有足够高的Transmission Ray Depth值(可在渲染设置的Ray Depth部分找到)。 默认值是8,这对大多数情况已足够。
IOR中有一些材质预设值(Presets)可以使用:
【Anisotropy】
-
Anisotropy reflects[各向异性反射]和透射具有定向偏差的光线,导致材料在某些方向上显得粗糙或光泽。 Anisotropy的默认值是0,这意味着"Isotropic[各向同性]"。 当值越接近1.0时,曲面在U轴中变得更加各向异性。
各向异性适用于纹理方向清晰的材料,例如拉丝金属,它具有形成“拉伸”各向异性反射的微小凹槽:
各向异性反射适用于拉丝金属效果,如下面的例子:
- 使用各向异性时,能够看到反射高光。 通过启用平滑细分切线(Arnold subdiv_smooth_derivs参数),可以移除多面体的一些“小面”。 考虑到这一点,polymesh中应至少有一个细分迭代(subdivision iteration)才能工作。
【Rotation】
- Rotation值可以改变UV空间中各向异性反射率(anisotropic reflectance)的方向。 在0.0时,没有旋转,而在1.0时,效果旋转了180度。
- 对于具有拉丝金属的曲面,Rotation将控制材料拉斯纹理的角度; 对于金属曲面,各向异性高光显示应该在垂直于纹理的方向上延伸。
- 可以将纹理贴图连接到Specular Rotation。 这样做时,建议避免纹理过滤(texture filtering)。 这意味着禁用MIP-mapping并禁用放大过滤器(magnification filter),该过滤器默认设置为“smart bicubic”。 一种方法是将image节点的mipmap_bias设置为一个强负值,如-8,这意味着“使用比平常更高的8 MIP级别的分辨率”。
P.S. 关于Texture Filtering
Texture是要贴到三维图形表面的,而三维图形上的pixel中心和texture上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一定一致。当texture大于三维图形表面时,导致一个pixel被映射到许多texel上;当texture小于三维图形表面时,许多个象素都映射到同一texel。
当这些情况发生时,texure就会变得模糊或发生错位、产生马赛克。要解决此类问题,必须通过技术平滑texel和pixel之间的对应。这种技术就是Texure Filtering。
不同的过滤模式,计算复杂度不一样,会得到不同的效果。过滤模式由简单到复杂包括:Nearest Point Sampling(最近点采样),Bilinear(双线性过滤)、Trilinear(三线性过滤)、Anisotropic Filtering(各向异性过滤)。*
Transmission
Transmission允许光线穿透表面在表面之下散射,通常应用于玻璃材质或水等透明材质;
四舍五入等于透明度;
单反用到该参数的对象,都需要关闭Opaque(位于Arnold Parameters),否则会出不正确显示;
【Weight】
- Transmission权重,值越大,光线穿透表面越深;
- 注意,必须为已分配Standard surface的对象禁用Opaque,Transmission才会起作用;
- 如果在应该透明的部分呈现黑色,说明可能光线深度(Ray depth)的值过低,Ray Depth在Render Setting[渲染设置]中可以找到。默认Ray Depth的值是2;
【Color】
- 控制Transmission颜色;根据折射光线(Refracted ray)行进的距离过滤折射;
- 在介质内,越长的光受Transmission Color影响越大,例如一块厚度不同的彩色玻璃,较厚的部分颜色更深;
- 效果呈指数,并且用比尔定律(Beer's Law)计算;
- 建议使用浅色、微妙的颜色;
如果使用完全饱和的颜色(例如,RGB(1,0,0)),Arnold解析执行时会允许所有红色光线进入,没有任何绿色和蓝色光线。Transimission Color的值接近 0时,会使介质内部会变得非常密集以阻挡所有光线,即使将 Depth设置为像 0.001这样小的值,可能也不会有太大区别,因为无论如何,解析时的 Depth都很大。
悄咪咪的说,看的一脸懵逼了似不似????哈哈哈,憋害怕,不懂的话多试试就知道了,还不懂就略过,会用就行,不必深究,这只是一个设计工具,idea才最重要。
- 如果对象阴影需要同Transimission Color颜色值相同,则禁用选定对象Opaque。在下面例子中可以看到,启用 Opaque时,光线不能穿过球体,阴影为黑色(如果你看起来是深蓝色,那是因为视觉错误);禁用Opaque时,光线可以穿过球体并吸收Transimission Color,从而产生彩色阴影效果:
注意,除非启用 Thin Walled,否则 Transmission Color不会对 “单面几何(single sided geometry)起作用 ”:
【Depth】
- 控制Transmission Color在介质中的传播深度;
- Depth 的值越大,会使介质看起来越通透(越“薄”),这意味着更少的吸收和散射光线;
- Depth的值使用“比例”计算;
提高 Transmission Depth的值产生的影响如下图所示,注意,这种情况下也可以使用 Transmission Scatter color:
- Depth取决于场景大小,并且会对模型外观产生戏剧性的影响。Transmission Color和Depth控制光线的透射率(Transmittance)和吸收率(Absorption),并且却决于对象的比例。所以对场景中一个“小对象”来说,你可能需要设置一个非常低的Depth,反之亦然。如果Depth效果没有显示,注意检查一下场景大小;
当场景比例太小时,如下图,Transmission Color:Orange,Transmission Depth:1,显示不正确(左图)。降低Transmission Depth,固定为0.01(右图)便会正确显示。为了避免这种情况,建议使用真实世界中的物理尺寸建模:
【Scatter】
- Transiomison Scatter适用于任何体积很厚的液体,或足以使散射可见的液体(黏稠度高),如深水、蜂蜜。
如果只是一杯水,则没有那么多的散射;
然而对于海洋来说,散射是必须的;
其他材质例子包括冰、乳白色玻璃等;
- 使用Scatter时注意禁用对象Opaque
【Scatter Anisotropy】
- 控制散射的定向偏差,或着说各异向性;
- 默认值0,表示各向同性散射,即光线朝所有方向均匀散射;正值表示偏向于正向散射,负值偏向于反向散射;
【Dispersion Abbe】
- 制定材质的阿贝数(Abbe),它描述折射率在不同波长下的变化程度;
- 对于玻璃和钻石,数值通常在10~70之间,数值越小色散越多;
- 默认值是0,意味着关闭色散;
- 可以通过增加Camera(AA) samples或Refraction samples来降低色散产生的噪波;
P.S. Abbe 阿贝数,用来衡量介质的光线色散程度,材料的折射率越大,色散越厉害,即阿贝数越低。
- 展开Dispersion Abbe有预设值(Persets)可以使用:
【Extra Roughness】
- 使用各向同性微表面双向反射( isotropic microfacet BTDF
)为折射增加额外的模糊,范围从0~1,0意味着没有任何粗糙度;
【Transmit AOVs】
- 启用时,Transmission将会穿过AOVs;
- 如果背景是透明的,那么透射曲面将变得透明,以便它在另一背景上合成;
- 光路表达式AOVs将被穿过,以便达到某些特定效果,例如——透过透射曲面看到漫反射曲面在漫反射AOV中结束;其他AOV也可以直接被穿透(没有任何不透明混合);
- 此参数特性可以用于创建蒙版:
P.S.Alpha通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,其中白表示不透明,黑表示透明,灰表示半透明。
Subsurface
透光不透明;
在讲皮肤材质的时候已经讲过,另见:插播002
Coat
该参数可以理解为“涂层”;
产生“双重高光”,就像一辆车,有车漆,然后又打了一层蜡;
Coat始终具有反射特性(具有给定的粗糙度),并且假定为电介质。
可用于例如气球反光涂层、气泡、油性皮肤、手机保护膜等等材质:
【Weight】
- 控制Coat的效果强度,默认值为0;
Coat层模拟电介质(例如塑料,蜡,树脂/珐琅,多种液体),它吸收光线并使所有透射光具有淡色(可能有一些极小的极化效应),而金属则倾向于过滤它们反射的任何颜色,即使在掠射角。 因此,如果你想渲染一个裸金属,Coat权重应该是0。
如下图所示,当Coat(低粗糙度)位于Specular(高粗糙度)之上,由于菲涅尔效应,锐利的Coat高光在中心处消失:
【Color】
- Coat透明度的颜色;
- 现实世界中Coat的颜色应该为白色,此参数为了达到一些特殊艺术效果允许赋予其他颜色;
下图中,Coat Color为红色,对球体的镜面反射着色:
贴图运用举例:
下面例子中,蓝白棋盘贴图赋予Base Color,Coat Color设置为黄色。结合在一起,黄色位于蓝白棋盘之上;混合之后,原先蓝色棋盘部分呈现绿色,白色部分呈现黄色,Coat Color相当于一个半透明涂层叠加在Base Color之上(类似于PS的正片叠底):
你可以试着用贴图控制Coat Weight,看一下Coat Weight是如何影响底层的Base Color:
Coat Color也可用于形成一个“纹理层”。 在下面的示例中,图像已连接到Coat Color,并且Coat Roughness已增加。 注意,它看起来并没有受到镜面高光的影响,看起来像是直接“贴”在镜面高光之下。
【Roughness】
- 控制镜面反射的光泽度。;
- 数值越低,反射越清晰。 在极限值中,0值会呈现一个完美清晰的镜面反射,而1.0会产生接近漫反射的反射;
- 可以利用贴图,获得丰富的Coat 高光变化;
【IOR】
- 同Specular IOR;
- 定义了材质的菲涅尔反射率,并且默认使用角函数。有效的IOR定义面向观察者的曲面 和曲面边缘 之间的反射的平衡。
调节IOR可以看到,在整体反射强度保持不变的情况下,正面的反射强度变化了很多:
【Normal】
- Coat Normal会影响Coat在Base上的菲涅尔混合,因此根据Normal,Base会从特定角度或多或少的显示出来;
-
Coat Normal更多的用于呈现材质凹凸不平的特质,例如雨滴滑落效果、碳纤维、汽车漆层等;
Coat Normal也适用于,例如增加地面的油性、街道上的雨水等:
当指定一个Coat Normal时,它只影响Coat,而不影响它下面的所有层(diffuse,specular,transmission)。 在右下方的示例中,当凹凸纹理连接到Coat Normal时,岩石材质好像具有了一个透明涂层:
Thin Film
Thin Film再现了表面薄膜对光的干涉效果(例如油在水面呈现彩虹色)。
一种薄膜效果;
可用于例如多色混合车漆、烧焦的铬、甲壳虫的反光壳等材质,产生一种绚丽的色彩变化效果:
【Thickness】
- 薄膜的实际厚度(0~2000nm);
- 会影响Specular,Transmission和Coat;
- 通常情况下,这可能会像噪点图一样给干扰效应带来一些变化;
- 如果厚度变得像3000nm那样大,虹彩效果就会消失,这是一种物理上正确的行为,因此最大值为2000nm;
【IOR】
- 材质周围介质(水、空气等)折射率;
- 通常空气设定为1.0;
- 如果想要得到变化丰富的Thin Film,需要利用贴图——通过Range shader连接到Film Thickness;
水的 IOR是1.33,肥皂是1.5,所以肥皂泡的 IOR应该在1.33~1.4之间。
按照下面的Standard surface参数设置,可得到一个肥皂泡:
Base: 0
Specular: 1
Specular Color: 1 1 1
Specular Roughness: 0
Specular IOR: 1.0
Transmission: 1
Transmission Color: 1 1 1
Coat: 1
Coat IOR: 1.5
Thin Film: IOR 1.4
Thin Film Thickness: 500 [nm]
如何模拟Thin Flim:
如何将薄膜的IOR值映射到标准曲面:
Emission
该属性使材质自发光(默认白炽灯光)。
虽然发光,但是不产生间接照明。
请尽量使用Arnold Mesh Light标签的方式将对象转为光源,除非极其特殊情况下使用Emission,自发光材质不仅噪点多,渲染慢,而且没有间接照明。或者使用Mesh_light,将对象拖到Mesh里面即可,但是还是使用标签更方便。
【Weight】
- 控制光线发射数量;
- 可能会造成噪点,特别是在间接照明很少的情况下;
在使用Emission时,提高Diffuse Samples能够帮助减少场景中间接照明、黑暗中的噪点:
【Color】
-
控制Emission的颜色;
Geometry
默认情况下,C4D所有对象都是“实心”的,使用geometry可以控制其“实心程度”;
【Thin-walled】
- Thin-walled可以提供一种从后面照亮半透明对象的效果(在该点处,照射到对象反面的部分光线被指定“照亮”阴影点);
- 建议仅用于“薄”的对象(单面几何),因为厚度可能会出现渲染错误;
使用Thin-walled能够使“薄”对象(单面)产生理想效果,例如泡泡:
Thin-Walled Translucency
这种效果就像一张薄纸,光线从背后穿过。
像纸张这样的漫射曲面,将 Thin-walled 和 Subsurface 的 Weight 设置为,例如0.5,允许一半光线反射,一半光线投射:
在某些特定情况下,Thin-walled能够很好的对厚度起作用。但是在“厚度”使用Thin-walled时,务必确保Diffuse Ray Depth的值大于1:
【Opacity】
- 控制光线不能穿透的程度。;
- 与Transmission不同,材质仍然考虑Diffuse,Specular等;
- Opacity会影响整个着色器,可用于保留对象的阴影,同时使对象本身对相机不可见;
- 在使用Opacity时,请务必确保选定对象关闭Opaque;
【Normal】
- 在这里连接Normal map(法线贴图),通常由Mudbox或ZBrush导出;
- Normal map的工作方式是将Normal的曲面插值替换为贴图RGB值,其中每个通道(红/绿/蓝)对应曲面Normal的X/Y/Z坐标;
- 由于Bump map至少需要对着色器进行三次计算,因此使用Normal map会更快。
【Anisotropy tangent】
- 允许为镜面反射的各异向性指定自定义切线(tangent)。例如,如果网格(Mesh)具有切线的用户数据,则可以在此链接。
ID
Standard surface支持ID AOVs。 这对于为合成创建蒙版非常有用。
Advanced
【Caustics】
- 焦散开关;
- Standard Surface shader中的此开关指定是否启用Diffuse之后的Specular或Transmission;
- 由于焦散(Caustics)容易产生噪点,因此默认情况是禁用的;
- 为了控制来自焦散的噪点,全局间接高光模糊(Indirect Specular Blur)值应该提高,这会以牺牲精度为代价,模糊焦散光线以降低噪点;
使用Caustics时,Arnold会使用大量的Diffuse samples以清除噪点,获得干净图像,这将会大幅增加渲染速度,因此要慎重选择是否启用Caustics。
请注意,以下场景中的区域在玻璃内部较暗。 这是因为玻璃内部的照明基本上都是源自焦散。 为玻璃着色器启用Caustics便可以修复此问题:
当Specular Weight值很高时,可能会遇到萤火虫(白色光斑噪点),并且启用Caustics时Specular Roughness较低。 要减少此类噪点,可以通过提高着色器的Specular Roughness或Indirect Specular Blur(全局间接镜面模糊):
渲染眼睛时,启用Caustrics可增加眼睛的真实性(明眸感):
【Internal reflections】
- 内反射开关;
- 当折射光线深度值大于0时(即,在当前所有光线中至少有一条折射光线追踪),取消勾选Internal reflections将会停止计算间接Specular(镜面反射/高光)和间接Mirror-perfect reflection(完美镜面反射);
【Exit to background】
- 启用该选项时,Standard Surface着色器将会在background/environment [背景/环境]中追踪最大GI reflection/refraction depth [全局光照反射/折射深度],遇见并返回在该方向background/environment中的可见颜色时;当该选项被禁用时,该路径将被终止,当到达最大深度时将会返回黑色;
【Indirect diffuse】
- 仅从间接光源接收Diffuse;
- 1.0以外的值将导致材质不能保存能量,并且全局光照可能不会汇集在一点;
【Indirect specular】
- 仅从间接光源接收Specular;
- 1.0以外的值将导致材质不能保存能量,并且全局光照可能不会汇集在一点;
Reference:
- "The Law of Reflection". The Physics Classroom Tutorial. Retrieved 2008-03-31.
- "Game Engine Design: Texture Mapping" (PDF). uncc.edu. Texture Minification.
- Hendrik Lensch (2007-11-29). "Computer Graphics: Texture Filtering & Sampling Theory" (PDF). Max Planck Society. MipMaps. Retrieved 2018-01-14.
- Hendrik Lensch (2007-11-29). "Computer Graphics: Texture Filtering & Sampling Theory" (PDF). Max Planck Society. MipMapping II. Retrieved 2018-01-14.
- Hendrik Lensch (2007-11-29). "Computer Graphics: Texture Filtering & Sampling Theory" (PDF). Max Planck Society. Anisotropic Filtering. Retrieved 2018-01-14
以上~
Good good study!Day day up!
版权所有,禁止私自转载。
转载请私信。