首页/文章/ 详情

【步骤详解】炸裂SEC-X!白师杰导师带队,CATIA Hackathon TeamA的未来梦飞车

1年前浏览1306


材质详解


在构建完所有的模型之后,我们便要开始为模型赋予材质。在设计的视觉表现中,材质扮演着至关重要的角色:模型最终的质感、细节、情绪,都要通过材质来呈现。下面,笔者就来介绍一下,在CATIA Live Rendering模块中如何为我们的模型赋予材质。


打开CATIA的创建材质面板,映入眼帘的便是茫茫多的选项。其实,这里面诸如Clear Glass、Basic、Car Paint之类的材质,都可以视为基于物理渲染(PBR,Physically Based Rendering)的Complex材质的简化版。

Complex材质,顾名思义,非常的复杂,也因此具有描述大多数材质的强大能力。提供简化材质的意义则在于,对于特定类型的材质(如塑料、玻璃、金属),特定的参数往往是固定的、无需调整的,因而这些无需调整的参数被赋予了其应有的数值并隐藏起来,仅仅暴露给用户有限的参数。故而,一旦我们了解了Complex材质背后这些参数基于的物理原理,我们就了解了CATIA材质背后的总体逻辑,进而便可以游刃有余地使用CATIA调材质啦!因此,稍后笔者将先为大家梳理一下Complex材质最核心的参数。

如果希望获得更加丰富逼真的材质效果,我们还可以在CATIA中调用Substance材质。本次案例中,为了获得更加丰富的细节,笔者绝大多数的材质都使用了Substance材质。在理解了Complex的基础之上,笔者也会为大家介绍如何在CATIA中使用和调整Substance材质以获得更上一层楼的视觉表现效果。

那么首先,我们先简单捋一遍材质的基本原理(一些进阶的参数暂时跳过不论)。我们依着Complex材质的参数来说。

漫反射 Diffuse


首先,我们来看看大家都耳熟能详的Diffuse(漫反射)参数:

我们中学都学过漫反射这个概念,当时的内容基本等同于百度给出的解释:

漫反射,是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,……很多物体,如植物、墙壁、衣服等,……其表面是凹凸不平的,所以本来是平行的太阳光被这些表面反射后,弥漫地射向不同方向。

然而PBR渲染中,事情则不止这么简单。事实上,表面光滑的物体也可能有Diffuse(为了防止与后文的「反射」相混,此后行文中只使用Diffuse以消歧义),表面粗糙的物体也不一定有Diffuse(如表面粗糙的纯金属,后文会讲到),并且其物理原理也不同于真正发生在物体表面的反射(Specular,后文表示反射时同样只用Specular以消歧义)。其实漫反射现象是光线穿进物体内部后无规则地被反弹出来而形成的,如图:

Image from "Real-Time Rendering, 3rd Edition", A K Peters 2008

这张图示意了非金属表面与光线的交互。在图中,我们可以看到,经由物体表(面直接反射的光就是我们之前提到的Specular,这个参数稍后便会讲到。而我们注意到,除了被物体表面直接反射(Reflect)出的一部分光Specular),还有一部分光折射(Refract)进入了物体内,被物体内的粒子吸收(Absorb)一部分,其余的散射(Scatter)后向四面八方射出物体表面。

如图,蜡烛便是一个典型的这种散射。然而,懂行的读者一定都注意到,这并不是我们常说的Diffuse现象,而是所谓的次表面散射现象(后文称SSS,Sub-Surface Scattering)啊!

而事实上,Diffuse与SSS原理上并无本质的区别,如图:

Image from "Real-Time Rendering, 3rd Edition", A K Peters 2008

图中绿圈表示一个像素的大小。当情况如左上图所示时,一条入射光线散射的出射点都在一个像素之内,此时我们可以将情形简化为右上图,即将散射光线穿出物体表面的位置等同于入射光接触到物体表面的位置(出射点=入射点)。此时,散射光即为Diffuse。一般来说,塑料、木头、漆面、橡胶等材质都满足此情况。

而当情况如中下图所示时,一条入射光线散射出的许多光都超出了一个像素的范围,这时的散射光便被我们称作SSS 次表面散射。前面的蜡烛便是这种情况,同理还包括肥皂、玉石、人类皮肤等材质。

细心的读者一定已经发现,前面的示意图全部都是在说「非金属材质」。那么,金属材质是如何与光的表面进行交互的呢?情况其实非常相似,甚至更为简化,如图:

Image from "Real-Time Rendering, 3rd Edition", A K Peters 2008

对于(纯)金属材质而言,被折射入物体表面的光立刻被物体内的自由电子所吸收,因此(几乎)不会有Diffuse和SSS,观察者能通过接受Specular来看到金属。

下面,我们将上述的理论对应到Complex材质中与Diffuse相关的三个参数中去:

Diffuse Color指的就是物体的固有色。大体上可以理解为,物体在纯白色光源的直接照射下,在没有被吸收(Absorb)和透明/半透明的情况下散射出的颜色。根据刚刚所说,纯金属的Diffuse Color应为黑色或极深的颜色,而合金、锈等材质由于不是纯金属,可以考虑给予一定的Diffuse Color。

可以看到,如果为导体赋予了比较高的Diffuse,其最终效果会显得很假

  • Diffuse Weight在0~1间取值,大体可以理解为1份的能量(光/亮度)照进物体表面,有多少份能量(光/亮度)会以漫反射的形式离开物体表面。当数值小于1时(p.s.,如果不用贴图的话,此数值通常小于1),说明光线被折射进物体后,一部分能量被吸收。

  • Diffuse Glossiness控制散射光线射向不同方向的倾向,基本上可以认为Glossiness越高,物体就显得越平、越黯淡。欲获得准确解释,读者可搜索关键词Oren–Nayar做进一步了解。

从左到右,Diffuse Glossiness逐渐升高

反射 Specular


前面我们已经讨论了Specular和Diffuse/SSS的区别,也大概解释了Specular的原理。

Image from "Real-Time Rendering, 3rd Edition", A K Peters 2008

不过这张图似乎又有和我们中学学习过的知识相冲突的地方:上图画的物体表面看起来是一个光滑表面。对于光滑表面,它的反射应该是这个样子的:

也就是说,反射光应该是没有分叉的。那么,我们之前讲解的图例错了吗?分叉出的多条反射光又是如何形成的呢?

其实,原理和我们之前区别Diffuse与SSS时用到的思想相仿,请看下图:

宏观来看,这个小球的表面是光滑的,而微观尺度上,物体表面的凹凸会导致平行的光线被反射到不同的方向。然而,由于凹凸极为微观,远远小于一个像素,因此我们同样将这些入射光线合并,并且假定所有反射光线都由同一个点发出,便有了我们之前的示意图。而分叉的程度也很好理解,是由于表面粗糙/光泽程度Specular Glossiness)的高低造成的:物体表面越粗糙,反射光越发散,反之同理,如下图所示:

Image from "Real-Time Rendering, 3rd Edition", A K Peters 2008

相信大家已经注意到,我们之前在讲Diffuse参数的时候,将材质分为金属与非金属两类。对于Specular材质而言,我们同样可以对金属与非金属分而治之:

可以看到,对于典型的非金属材质来说,反**色Specular Color应为白色(工艺复杂的CMF中,此限制可突破。但常见的生活用具、建筑材料都遵循此规律);而对于金属材质而言,Specular Color则可以有色彩倾向(尽管往往饱和度极低,几乎与灰色无异。金、铜等金属除外)。

然而,单单设置之前说过的Diffuse Color(还记得吗,金属的Diffuse Color一定要很低暗低暗至是黑色哦)及反**色外,并不能得到上面图示的效果。

想把一个材质在金属和非金属之间转换,除了之前讲的Diffuse Color、Diffuse Weight、Specular Color、Specular Weight这几个参数之外,还有一个至关重要的参数需要调整——折射率(后文称IORIndex of Refraction)。非金属的折射率往往应该调得较低(约1.33~2.0,少数材质,如宝石,达到2.0+),而金属材质往往调得很高(实践上大于10,尽管物理上金属的IOR是一个复数)。

下面,我们来看看把一个金属材质调整成非金属材质时,不调整IOR和调整IOR的区别:

同样地,我们来看一下非金属材质调整成金属材质时,不调整IOR和调整IOR的区别:

看到这里,我们不禁要问,这个IOR为何如此神通广大,调整IOR又到底带来了什么样的改变呢?这里我们先来做一个实验:我们关掉漫反射,为反**色赋予金色,然后调整IOR分别为1.45(一般塑料的IOR值)、2525(金属),如图所示:

这里,我们以IOR=25的渲染图为底图(注意图层面板),单独提取出不同IOR的球体置于其上(这里以IOR=1.45为例),然后将混合模式改为「减去」。顾名思义,这个混合模式就是用来求上下两个图层每个像素的差异值的。方法如下:

由于图像并不是以线性浮点值存储,而是经过Gamma校正的8bpc图像,因此下面的结果仅仅代表趋势,并非物理准确的结果

这样一来,我们便得到了不同IOR的小球与IOR=25的金属小球每个像素的差值,于是就可以大体看到不同的IOR带来了怎样的区别。运算后的结果如下,左列是不同IOR的小球原图右列是其与IOR=25的小球的差异值。大家注意边缘处(红圈所示)与靠近中心处(绿圈所示)差异值的区别:

我们来解读一下这张图示:

最后一行球体为纯黑,是IOR=25的球体与底图(IOR也是25)的差值。这个结果显而易见,二者差值自然为0(毕竟原本就是同一张图),结果自然是黑色。

而随着IOR的升高,我们可以看到差值越来越小(也就是右列的球体随着左侧IOR的升高越来越暗)。然而整体变暗的趋势背后,我们发现,变暗的主要是靠近中心的部分(绿圈所示),而边缘部分(红圈所示)永远是纯黑色。这也就代表着,无论IOR如何调整,无论我们的材质是否是金属,其边缘的反射都与IOR=25时没有差别。而我们可以很明显地看到,IOR=25时,无论边缘还是中心,反射都是极为强烈的。于是,我们便可得出结论,无论IOR如何调整边缘处的反射都保持极高的强度,(几乎)只有中间部分的反射强度会被改变。这种物体边缘反光永远很强的现象被称作菲涅尔效应Fresnel Effect)。

*注:这里的「边缘」,实际上是指表面切线方向与视线接近平行法线方向与视线接近垂直)的部分。 而「中间」部分(即法线方向与视线接近平行、夹角接近0)的反射强度,我们称作F0改变IOR,其实就是在改变F0

对于非金属材质,F0约在2%至5%,少数(如宝石)可以达到8%。而对于金属材质,F0则在70%至100%

我们再来看一组图,直观感受一下菲涅尔效应:

可以看到,由上到下,随着视线与蓝色平面越来越垂直,黄色小球在蓝色平面上的反射、蓝色平面对环境的反射都越来越弱

通过上面的分析,我们基本已经了解了如何设置均质(即没有纹理)不透明物体的材质。在小结之前,我们还有一个小实验。

在上面的叙述中,大家是否对Specular/Diffuse Color和Weight的分工有所疑惑?下面我们来看看它们具体起着什么样的作用。对于Specular Color和Specular Weight而言:

可以看到,只要Specular Color和Specular Weight的乘积不变最终的效果就不会有变化。想准确求证的读者,可以尝试像之前笔者实验IOR作用时一样,在Photoshop中调整混合模式求差值,看看结果是不是纯黑色。同理,对于Diffuse Color和Diffuse Weight而言,只要二者乘积不变,最终的效果变别无二致,请看下图:

把二者分离开可以说是各有利弊。优点包括:

可以快速通过Weight参数调整Specular和Diffuse的强度或者关闭Specular和Diffuse,而无需改变Specular和Diffuse的色彩倾向

由于实体世界里物体多少会对入射的光有所吸收能量损耗),因此几乎不会出现纯白的Specular和Diffuse(即Color和Weight都为1)。于是,保持Weight参数在0.9(及以下)可以相对放心地调整Color参数而不会出现不真实的结果;

即使在Color中贴图了,依然可以通过Weight参数Specular和Diffuse的强度有所控制

缺点也有:

一些情况下需要调整的参数增加;

描述材质需要的数据增加,会一定程度上拖慢渲染速度(尤其是材质、场景很复杂时,以及没有打开Ray Tracing的实时材质预览时)。

基于这一点,许多对渲染速度要求比较高的场景(如游戏),普遍会选择把Weight和Color合并,即从Specular Weight、Specular Color、Diffuse Weight、Diffuse Color四个参数变为Specular和Diffuse两个参数,其中:

Specular = Specular Weight * Specular Color

Diffuse = Diffuse Weight * Diffuse Color

大家从网络上下载的PBR贴图中,见到的也基本都是Specular、Diffuse,而不会再各自细分成Color和Weight两个参数。

在理解以上事实后,读者可以根据自己的需求来调整这两组参数。

折射/透明(Transparency)


     

受限于篇幅限制,这里不对Transparency相关的参数进行深入的讲解了。大家可以将鼠标悬停在选项名称上,会有图文相配的提示出现

欢迎大家结合提示与之前给出的对比实验方法自行探索。

不过,这里还是要指出提示中未指出,读者可能也不易自行发现的两个小点。

首先,为了得到视觉上正确的效果,Specular Glossiness和Transparency Glossiness(反射光泽度与折射光泽度)应保持一致。我们来看对比图:

以看到,当只有Glossiness一致时才能得到正常的效果。

同样地,如果想得到物理正确的效果,Reflectance中的IOR与Volume中的IOR(反射IOR与折射IOR)也应保持一致,如图:

这两组参数需要一致的原因在于,反射光与折射光都是发生在物体表面的(见下图),而同一表面的Glossiness(光滑程度)和IOR(偏折光线的能力)都是一致的。

还记得这张图吗?

此外,常见的非金属材质中,基本只有宝石IOR>2。此时,我们可以尝试通过Abbe Number为材质添加一些色散:

读到这里,相信大家已经理解了多数材质背后的逻辑了。更复杂的材质,我们结合为Team A模型赋予材质的过程来进一步讲解。


小  结

对于常规的不透明物体而言,可以遵循如下的步骤来创建:

1. Specular Weight和Diffuse Weight调到0.9(也可根据自己的偏好,调整至如0.8这样的数值)

2. 确认材质是金属材质还是非金属材质

如果是金属材质,那么:

1. Diffuse调至很低或直接关闭

2. IOR调至10以上

3. 根据视觉效果、贴图或查表数据、物理数据调整Specular Color

如果是非金属材质,那么:

1. IOR根据视觉效果或查表数据、物理数据调整至1.33~2

2. Specular Color调整至白色

3. 根据视觉效果、贴图或物理数据调整Diffuse Color

3. 根据视觉效果、贴图或物理数据调整Specular Glossiness和Diffuse Glossiness

4. 根据需要进一步调整Specular Weight和Diffuse Weight(使用贴图时也可考虑将Weight调至1)




材质实战


我们之前已然建好了SEC-X的白模。现在,我们来一起为它赋予材质吧。

顶盖玻璃材质

先易后难,我们首先为顶盖新建一个Clear Glass材质。这一步无需过多调整。

车灯材质


车灯材质也不难,新建一个Emissive材质即可。如图所示赋予到如图所示的车灯区域。

钛金属Substance材质的创建


首先通过Create Appearance Data from Substance命令创建一个Substance材质。界面如图所示,这里笔者选择了一个拉丝的钛材质。有时,Select a Substance Graph to Import一栏中会出现Convert to Specular/Glossiness按钮,一般点击即可。

Substance的好处之一在于,我们使用细节丰富材质的同时,还保有相当大的修改自由度(相比于使用贴图而言)。这里,我们首先把Output Size调到最高,保证有足够的细节。

Roughness参数为例,这里将Roughness调到了最低。大家可以看到,我们如此便得到了一个镜面般光滑的材质。

同样,我们将Roughness调到最高,得到的结果看起来就是很粗糙的样子呢。

当然,为最终效果考虑,我们这里还是将Glossiness调到一个中等的值,得到如上图所示的效果。


车漆材质的创建        


我们为底盘和上面胶囊部分的底盖创建一个车漆材质。由于前面我们着重讲解了Complex材质,我们这里也直接通过Complex来创建我们的车漆。

基本参数如Diffuse, Specular等我们之前已经详细讨论过,这里不在赘言。相比于普通的材质而言,车漆材质主要多了以下的选项:

  • Edge Color: 许多车漆边缘的颜色会变深,不过我们由于是黑漆,暂时都拉到黑即可;

  • Flake: 闪闪的亮片,珠光漆必备;

  • Coat: 表面的清漆,启用可以一定程度上提升质感,见下图(注意靠近边缘处的提亮,以及同时存在有锐利和模糊反射的现象)


碳纤维饰板Substance材质的创建        

     


再次利用Create Appearance Data from Substance命令导入Substance材质,这次我们通过为内饰创造一个碳纤维材质来继续探索Substance材质的可能性。

首先,我们可以通过调整Output Size、Tile来获得我们符合我们要求的细节精度,以营造质感。

继而,我们可以尝试将Metallic(金属度)从0调至1。顾名思义,Metallic描述的是材质有几分像金属,有几分像非金属。把值调到0便是非金属的效果,反之调到1就是金属的效果。

不过,这里建议大家不要尝试0和1之外的Metallic值。原因比较复杂,「太长不看」版的理由是:0和1之外的数值几乎无法对应到物理世界中任何材质的情况,导致很难保障真实性及在不同灯光环境下的一致性。

其他材质        

     



我们还用Substance材质为模型创建了Alcantara、织物等材质。但CATIA借助Substance材质能做到的还远远不止于此。

创建海面材质        

     


没错,我们还可以借助Substance材质快速构建环境,通过场景的构建来传达情感,如木地板,水泥地,甚至草地,苔原,乃至海面。

先依然是创建一个Substance材质。这里为了保证足够的细节量,我们将Output Size设定为最高的2048。但我们发现,这里的材质由于制作不是很规范,并没有Tile选项可以使用。这里我们就可以考虑将Material Application Mapping一栏中的Scale调高(如下图):

为了让海面更加立体真实,我们可以分别在Height Map和Normal Map中打开Displacement和Bump。


     
灯光与相机设置        

     


着,我们可以将相机调整到我们想要的角度,而后通过Create Camera命令存储当前的视角。我们还可以通过Manage Camera命令来管理和修改相机的各种参数。

相机确定后,我们还可以使用Manage Ambience命令换一个我们心仪的HDRI环境贴图,并通过Manage Lights进行补光。

最终,我们还可以开启Bloom(光晕)、DoF(Depth of Field,景深)、Tone Mapping等特效,而后最终渲染出图。


最后,我们一起来看看Team A的最终汇报吧。


了解更多      

如此酷炫的SEC-X当时的设计概念和草图是怎么样的,如何结合Mechanical Design、Human Design与Imagine & Shape的模型构建,何如利用xGenerative Design参数化纹理制作?有兴趣可以参考:


炸裂SEC-X!白师杰导师带队,CATIA Hackathon TeamA的未来梦飞车



 


来源:达索系统
Mechanical建筑电子CATIA理论材料游戏控制渲染
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-04-25
最近编辑:1年前
达索系统
3DEXPERIENCE平台-定义三维体验新...
获赞 184粉丝 417文章 1083课程 25
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈