【前言】
我翻看一下自己的简书文章,发现《OC渲染器学习笔记》系列大家关注比较多。我这个人有个特点,就是网上有的东西,自己非常熟悉的东西,就不愿意研究,更不愿意写。因为对自己来说,已经没有新鲜感了。所以,发了十多篇之后,再也不愿意动笔写了。后来,很多网友还要求继续写下去,而且要求我重点谈谈OC渲染器的材质节点编辑和分层渲染问题。没有办法,那就接着写吧。
其实,个人认为:材质节点编辑没有什么难的?只不过是更换编辑材质的思路而已。相比较传统的材质层式编辑而言,逻辑性更强,资源利用率和总体效率更高。有的人适合这种编辑方式,有的人不适应这种方式而已。当初3DSMAX材质刚刚使用节点编辑的时候,我就花了1个小时时间就掌握了,而且用的感觉很好、很直观、很舒服。过了一段时间,3DSMAX专家们出的图书,都故意回避材质节点编辑,还用过去的方式编辑材质。当时不知道他们为什么不用,也不知道是为何?后来明白。不是材质节点编辑有多难,而是他们不想接触新事物,根本不想用啊。人呢?越老越保守,越不愿意学习新的东西。
看了上面的OC材质节点编辑,你是不是很羡慕?真厉害啊,材质节点编辑多么复杂啊!其实,我觉得不然。OC材质节点编辑这么复杂目的是什么?不就是利用OC自身的节点资源,为给材质几个通道,制作几张合适的贴图吗?如果是我,我宁可使用SP绘制纹理贴图,直接输入给材质就可以了,我可不这么费劲!
有了以前的《软件插件介绍之三十二 : RizomUV》文章作为铺垫,下面就可以轻松研究OC材质节点编辑了。前言写的有点多了。唠叨半天,我想说:一是任何材质节点编辑都不难,很容易学习。更换一个材质编辑方式而已。二是复杂的材质节点,你也不用害怕,它的实质就是为材质通道制作一个恰当的贴图而已。如果你不会复杂材质节点编辑,自己使用其他软件制作一张,不就完了吗?
【研究】
一、如何进入材质节点编辑呢?
OC有多种方式,常用以下三种。
1、一种方式是先建立材质,再点击NODE EDITOR进入材质节点编辑窗口。
2、第二种方式:在LIVE VIEWER窗口,点击菜单--MATERIALS材质--OCTANE NODE EDITOR 直接进入编辑窗口。
3、第三种方式,更直接。在OC渲染窗口,直接在模型上右键--菜单上选择NODE EDITOR进入材质节点编辑窗口。
二、材质节点编辑窗口:
节点编辑窗口,节点过滤和SEARCH都是为了方便查找节点的管理工具。
每个节点就像一个模块:从输入端口进来数据,通过节点进行处理。处理之后,再从不同输出端口输送出去。注意的是:每个输入端口输入是唯一的,不能有多个输入,进入一个输入端口,保证数据唯一性。而每一个输出端口却可以输出很多。
三、材质节点编辑就是“材质编辑方式的改变”
下面简单演示两个材质的编辑方式:
第一种传统层叠编辑方式:操作方便,逻辑性差,资源利用率重复。
3、载入一张大理石贴图。其实你也可以直接载入纹理,但与IMAGETEXTURE节点相比,少了很多功能。下面再详谈。
4、更改为GLOSSY材质,设置ROUGHNESS粗糙为0.112左右。
5、点击OC材质,通过C4DUV设置缩放比例为50%。
第二种材质节点编辑方式:逻辑清晰,资源利用率高,操作不太方便。(你需要找节点啊)
1、我们使用上面这种方式直接进入材质节点编辑窗口。
2、找到OCTANE MATERIAL节点,拖拽建立一个材质。
3、选中模型,在材质节点上右键,选择APPLE TO OBJECTS传递给对象,把这个材质赋予模型。
4、选中这个材质节点,右侧属性--基本,设置材质类型为GLOSSY。
5、找到IMAGE TEXTURE节点,拖拽下来,在右侧属性面板,输入相同的纹理贴图。
6、也可以直接把纹理贴图拽进了。OC自动建立一个IMAGETEXTURE载入这个纹理。
8、选择OC材质节点,在右侧面板找到ROUGHNESS属性,设置0.1338左右。
9、如果你想用节点控制粗糙度也可以,使用FLOAT节点。可以调整粗糙程度。只不过,ROUGHNESS取值范围在0-1,而FLOAT提供的数据超过了ROUGHNESS接受范围,但也没有什么,只要大于1的数据,在ROUGHNESS看来就是1.
11、使用OC材质节点编辑器,我们可以灵活控制OC材质每个通道的UV。添加上面PROJECTION投射节点和TRANSFORM传递节点。
11、PROJECT节点告诉IMAGETETURE节点,使用什么方式投射这个贴图,默认是MESH UV,就是使用模型自带UV方式。
12、使用TRANSFORM节点,我们可以控制UV的移动、缩放、旋转。上图,对UV进行缩放0.5 。
13、为了与上面的渲染结果有所区别,我们更换一个较深的背景。
四、材质节点研究
要想熟练使用OC材质节点编辑,首先,你必须熟悉每个节点的功能,否则,你如何能灵活应用?接下来,借助官方帮助文件,我带领大家认认真真研究每一个节点。从哪个先开始讲呢?
4.1 材质类型节点:
这与在材质编辑器窗口,直接创建材质很类似。为什么材质节点没有PORTAL 材质节点呢?PORTAL 材质就是一个门户材质,主要为了“吸引室外光线进入室内”作用,建立就OK了,与任何材质没有联系,也没有相关属性。所以,材质节点编辑也不需要它。
拖入节点,选中它,右侧出现属性,通过每个通道属性,进行设置。
4.2 IMAGE TEXTURE节点:
该节点用于在任何纹理通道上载入外部图像。它还能优化图像、简单处理图像、处理图像UV等功能。OC官方建议用这个节点载入外面的图像。
IMAGE TEXTURE是颜色和纹理组中的一个重要节点,我们首先研究它,其他以后再说。
IMAGE TEXTURE节点使用非常频繁,上图实例,通过该节点,为材质各通道载入各种贴图,然后再由TRANSFORM节点统一控制每个贴图的大小。节点图有点混乱,其实逻辑非常清晰。
其实,OC材质的纹理通道可以不通过IMAGETEXTURE节点,直接载入纹理。
直接载入纹理也可以,但这个BITMAP节点功能很少。
通过IMAGETEXTURE载入纹理,是OC官方的要求。最好按照官方要求做,不出毛病。
IMAGETEXTURE节点功能很多,调节图像亮度,反向、贴图重复设置、贴图优化、UV控制等。
4.2 -1 FILE
从这里载入外部图像纹理。
4.2 -2 POWER:Controls the brightness of the image.
控制图像的亮度。
4.2 -3 GAMMA:Controls the luminance of the input image.
控制输入图像的亮度。
4.2 -4 INVERT
反转图像的颜色值。这个功能尤其是使用阿尔法通道贴图或反射、粗糙贴图时,效果不对的时候,把图像反转,太方便了。
4.2 -4 BORDER MODE
看下图,如果载入的纹理图像没有完全覆盖整个模型,将怎样覆盖模型?重复、不重复、镜像?由BORDER MODE来设置。
当纹理图像很小,不能完全覆盖模型时,由五种方案供你使用。
4.2 -5 TYPE
我们知道,OC渲染器它是GPU渲染,纹理贴图是“吃”显存的。如果显存不够,渲染就容易崩溃。所以,OC材质如果使用纹理贴图,必须在这里进行优化。如果为漫反射通道载入是彩色图像,就默认使用“Normal”(翻译为正常),整个图像都会转换为RGB值,保留了彩色信息。当然,这也将极大消耗显存。如果载入是粗糙或反射贴图,即使是RGB彩色图像格式,一定选择“Float”,把它强制转化为灰度图像,从而大大节约显存。如果是阿尔法通道,一定要用“alpha”,从而高效地使用GPU 显存。你明白了吗?
考一考,如果你想载入置换贴图,如何优化?答案是一定选择“Float”,因为置换需要一张灰度图。如果载入是法线贴图,如何优化?答案是一定用“Normal”,因为法线贴图使用RGB三个通道来保存法线坐标的,实际上它是一张彩色图片。只不过你看不明白,它是给渲染器看的,哈哈。
我上面用一段话说明,但你一定要重视这个地方,否则,你的项目会不稳定。
4.2 -6 UV接口
IMAGETEXTURE提供了两个接口,用于控制纹理的投射和控制。你点击两个按钮就能展开,但我们研究材质节点编辑,不打算这么用,下面详谈。
注意: IMAGETEXTURE节点不仅能载入静态纹理,也可以载入动画序列,从而能渲染制作纹理动画。“动画”选项卡要求使用“图像序列”纹理,此选项卡中的选项基于Cinema 4D,逻辑是一样的。但是有一些事情你需要注意。
一是不要使用MP4和其他电影格式。它们在OC渲染器下就不管用,只需使用图像序列。二是使用图像序列最有效的格式是:Tga、Jpeg、Tiff。虽然可以使用Png,但不是很有效。 三是必须手动输入帧范围。
4.3 纹理UV控制组:
过去,我再三强调过,只要材质使用贴图,就要考虑很多因素,一是颜色空间问题,二就是UV和映射问题。需要告诉OC渲染器,这个纹理怎么往模型上去贴。所以,下面研究的这两个节点与纹理,尤其是与IMAGE TEXTURE节点有密切联系。
PROJECTION投射节点告诉贴图以什么方式来映射纹理。TRANSFORM对纹理进行缩放、移动和旋转。
4.3.1 PROJECTION 投影节点:
此节点用于调整纹理的UV映射坐标。在许多情况下,在使用IMAGE TEXTURE节点时,将与“Transform”节点一起使用它。
注意:如果启用这个投影节点,Cinema 4D材质自带UV映射系统将被禁用。这个节点虽然不会改变模型的UV,只是在节点编辑器中对其连接的纹理,应用一个新的UV投影坐标。
【范例一】
1、建立一个OC材质,添加一个IMAGE TEXTURE节点,载入一个木纹纹理。把这个材质赋予模型。
2、在材质节点编辑器中,我们没有为IMAGETEXTURE节点指定UV映射,所以,OC渲染器默认使用材质外面,C4D系统的UV投射方式。它默认的是UVW MAPPING,也就是说C4D系统使用的是模型自带的UV映射坐标。当然,你也可以更改为盒子、球形等UV映射方式。
3、上图,C4D映射默认的是使用模型自带的UV来投射木纹纹理。显示,纹理比例有点大了,纹理模糊不清。
4、在这里,调整UV的比例,对贴图进行映射进行缩放。
5、渲染,清晰多了。模型纹理虽然有接缝,我们先忽略不计。
6、如果,我们为IMAGETEXTURE节点添加PROJECTION映射节点,那么,它将接管C4D的UV映射系统,也就是说C4D的UV映射系统不能用了。这张木纹贴图在模型上的映射,由这个节点说了算。它也有很多种映射方式,默认的是MESH UV其实也是使用模型自带的UV映射坐标。
4.3.1-1 BOX映射方式:如果模型是立方体形状,最好使用这种方式投射纹理。纹理会从六个方向映射到模型上,缺点是投影平面之间的接缝可能在渲染中可见,这取决于表面的形状。
4.3.1-2 CYLINDRICAL映射方式:圆柱投影将纹理映射封装在具有圆柱形状的表面上。圆柱投影提供了一种快速的方法来映射纹理在粗略的圆柱形状的表面上没有太多的失真,然而纹理的接缝可能在渲染中可见。
4.3.1-3 MESH UV映射方式:网格UV投影节点使用模型自带的UV坐标,将纹理映射到表面,这是这个节点的默认方式。
4.3.1-4 PERSPECTIVE映射方式: 透视映射采用世界空间坐标,并将X和Y坐标除以Z坐标。有点类似C4D的相机映射。
这个投影取世界空间坐标并将X和Y坐标除以Z坐标。这是有用的,如果你想模拟投影仪(即使用此投影的纹理作为分布,并使用黑色边框模式)。图像被映射到(- 1,1)-(1,1),因此默认情况下,对于投影机或摄像机映射,不需要使用偏移量。
【范例二】
1、建立OC相机,并激活。拖动到PROJECTION节点,该节点投射模式为PERSPECTIVE。使用该节点的内部变换属性,修改贴图缩放为0.5 。
4.3.1-5 SPHERICAL映射方式:球面投影为U和V坐标执行经纬度映射。
球面投影应用于盒子、圆柱和球体上的球面投影 。该投影主要用于环境纹理和IES光分布。它对U和V坐标执行经纬度映射,对于程序纹理,W坐标是到原点的距离。若要绕垂直轴旋转纹理图像(例如HDR图像),请将纹理环境图像的投影转换为球形,并通过球体转换滑块沿Y轴旋转。
4.2.1-6TRIPLANAR 映射方式: 从XYZ三个方面对纹理进行映射。等研究TRIPLANAR 节点时再细说。
4.2.1-7 XYZ TO UVW 映射方式:XYZ到UVW也称为平面投影或平面映射。这种映射类型接受世界或对象空间中的坐标,并将它们用作UVW坐标。对于图像,只有X和Y坐标是相关的,它们映射到U和v,换句话说,图像使用沿Z轴投影的平面映射。 xyz-uvw这种贴图坐标是可以自动选择适配物体造型的最佳贴图形式,不规则物体适合选择此种贴图方式。
XYZ到UVW投影应用于一个盒子、圆柱和球体,XYZ To UVW将图像纹理映射到(- 1,1)-(1,1)范围。围绕Z轴旋转映射将图像围绕中心旋转,就像UVW旋转所做的那样。OC使用对象坐标空间的方式是,纹理投影位于每个实例的局部坐标空间中。如果需要UV映射,可以通过UV转换在UV空间中应用转换(平移/缩放/旋转)。XYZ到UVW的结果取决于它是应用于程序纹理,还是导入纹理。使用XYZ到UVW的程序纹理以类似于盒子投影的方式定向,使用XYZ到UVW的导入纹理以平面方式定向。
从这里你可以设置哪个坐标系统,使用其作为UVW。有两个选项:“对象空间”和“世界空间”。对象空间基于场景中对象的本地坐标。世界空间是基于场景坐标的。
OBJECT SPACE依据模型的坐标,WORLD SPACE依据的是场景世界坐标。
【范例三】
2、使用的是OC SKY载入的HDRI照明。其实这个标签,也是通过IMAGETEXTURE节点载入一个高动态贴图。
3、既然,标签使用IMAGETEXTURE节点,那么它也有UV控制两个接口。
4、点击PROJECTION投射按钮,可以更改投射的方式,它默认的是MESH UV,天球对象的UV就是球体。
5、我们首先隐藏背景对象,选择SPHERCIAL球体映射,渲染之后,结果与默认的MESH UV是一样的。
6、当然,我们还可以通过PROJECTION节点自带的INTERNAL TRANSFORM内部变换属性,对贴图UV进行缩放、旋转、移动。
7、上图是PROJECTION的映射方式改为XYZTOUVW.
4.3.2 TRANSFORM 变换节点:
此节点提供任何纹理的位置/旋转/缩放控制。
在许多场景中,将其与“PROJECTION投影节点一起使用。
你也可以使用Cinema 4D的纹理变换工具,但还是TRANSFORM节点给你更多的UV控制。
IMAGETEXTURE、PROJECTION、TRANSFORM这三个节点一般都在一起使用。
4.4.1 TYPE 类型
使用哪种类型的转换。
4.4.1 -1 2D Transformation: 二维变换为x和y提供尺度和平移参数,而不是z。旋转参数将绕z轴旋转或垂直于物体表面
4.4.1 -2 3D Rotation: 三维旋转为控制x、y和z轴上的旋转值提供了参数。
4.4.1 -3 3D Scale: 三维比例尺提供了控制x、y和z值的参数,因为它们与物体表面纹理映射的比例尺有关。
4.4.1 -4 3D Transformation: 3D转换为所有三个轴上的旋转、缩放和平移提供了参数。
4.4.1 -5 Transform Value: 转换值节点类似于3D转换。
4.4.1 -6 AXES ORDER 轴顺序:Type选项下面的下拉菜单用于确定轴的顺序。根据你的目的,你可以选择其中之一。这些选项为旋转参数提供了更令人满意的结果。
4.4.1 -7 RESET BUTTON 重置按钮
R.X / R.Y / R.Z:在这里你可以调整你的纹理的旋转。如果需要的话,您可以将其与类型和顺序一起使用。
S.X / S.Y / S.Z:这里你可以调整纹理的比例。如果您选择“锁长宽比”,在所有三个参数中缩放值将是相同的。如果需要,可以使用带类型和顺序的scale值。
T.X / T.Y / T.Z:在这里你可以调整你的纹理的位置。
补充:
一是大多数材质贴图都是为 3D 曲面指定的 2D 平面。因此,说明贴图位置和变形时所用的坐标系与 3D 空间中使用的 X、Y 和 Z 轴坐标不同。特别是,贴图坐标使用的是字母 U、V 和 W。
二是U、V 和 W 坐标分别与 X、Y 和 Z 坐标的相关方向平行。如果查看 2D 贴图图像,U 相当于 X,代表着该贴图的水平方向。V 相当于 Y,代表着该贴图的竖直方向。W 相当于 Z,代表着与该贴图的 UV 平面垂直的方向。
三是2D平面需要象 W 这样的深度坐标。一个原因是,相对于贴图的几何体对该贴图的方向进行翻转时,这个坐标是很有用的。为了实现该操作,还需要第三个坐标。另外,W 坐标对三维程序材质的作用非同小可。
【范例四】
1、首先场景建立一个立方体。建立的OC材质,IMAGETEXTURE节点,设置如上。
3、渲染结果如上。完全不用C4D的UV映射系统,使用OC渲染器UV节点就可以解决了。
4、其实,TRANSFORM节点,你也可以不用。PROJECTION节点,内部自带有“内部变换”属性,一样可以控制贴图的大小、旋转、缩放。OC渲染器看似简单,到处有玄机,气人不?
5、使用PROJECTION节点的内部变换控制纹理,渲染结果,效果是一样的。
6、我们还可以使用外部控制变换操作。建立一个NULL空对象,我们用它的坐标位置。
7、PROJECTION映射方式改为BOX,把NULL对象拖进来。
9、点击实时渲染,我们移动这个NULL对象,你会发现贴图也在变换。
10、我们不用TRANSFORM节点,用NULL对象对贴图PSR进行控制,这种方式叫外控制。你说OC简单吗?太TM灵活了。
【后记】
1、本篇研究的是OC渲染器的节点吗?实际上我在研究纹理的载入、优化,纹理的UV控制。同时研究了三个节点,其中IMAGE TEXTURE节点,这是OC最常用的节点。官方希望你用这个节点来载入纹理贴图,而不是直接载入。还有两个与UV有关的节点,PROJECTION映射和TRANSFORM变换节点。这三个节点总是配合使用,功能很多,有多种变化。是不是看起来有些发蒙?其实,上面的东西你知道就行了,在制作的过程中,应用起来并没有那么复杂,对于简单的贴图映射,使用C4D材质外的UV系统控制就可以了,使用上述两个节点控制反而显得麻烦。
区别:PROJECTION映射和TRANSFORM变换节能对每个通道的纹理进行“单独”地控制,而C4D材质外的UV系统只能对所有纹理贴图统一控制。
2、OC渲染器我写的文章还是太少了,看下图,我才完成了两个模块的编写啊! 其实,任何一款渲染器,基本都是这样的框架,只要你搞懂一款渲染器,其他的按照下面的结构进行自学,很快就会就会熟悉第二个,这叫类比学习。
写完材质节点编辑,再重点研究分层渲染和优化吧,一步步写吧,估计写到年底吧!
3、最近看了贴吧,很多朋友买了1660TI显卡,在使用OC渲染时,结果出问题了。因为OCTANE和谐版不支持它!OC3.07还是支持GTX1060或GTX1070、GTX1080系列,GTX1660TI与GTX10X0不是一个系列啊!大家要注意。但老显卡,市场上很少有卖了,买的时候小心“矿卡”。建议你到闲鱼上,找靠谱的卖家去买吧!