创建和使用材质

通过主菜单 Assets->Create->Material 或项目视图的上下文菜单,可以创建一个新材质。

默认情况下,新建材质会分配标准着色器,并且所有属性都空着,就像这样:

创建和使用材质 - 图1

一旦材质被创建,你就可以把它应用到一个对象,并且在 检视视图 中修改它的所有属性。想把材质应用到一个对象上,只需要把材质从 项目视图 拖动到 场景是图层级视图 中的任意对象上。

设置材质属性

你可以为材质选择任意着色器。操作非常简单,在检视视图中展开 着色器 下单框,选择一个新着色器。所选择的着色器决定了可改变的有效属性。属性可以是颜色、滑动器、数值或向量。如果你已经把材质应用到了 场景视图 中的某个激活对象上,那么,改变属性会实时应用到该对象上。

把纹理应用到某个属性有两种方式:

  • 从项目视图拖动纹理资源到检视视图的纹理插槽上。
  • 点击 选择 按钮,从弹出的下拉列表中选择纹理资源。

内置着色器

除了 标准着色器,还是许多其他类型的内置着色器,用于不同的用途:

  • FX:用于光照和玻璃效果。
  • GUIUI:用于用户图形界面。
  • Mobile:用于移动设备的高性能着色器。
  • Nature:用于树木和地形.
  • Particles:用于粒子系统效果.
  • Skybox:用于渲染位于所有几何图形之后的背景环境。
  • Sprites:用于 2D 精灵系统。
  • Toon:用于渲染卡通风格。
  • Unlit:用于绕开所有光照和阴影的渲染。
  • Legacy:大量老版本着色器的集合,已经被标准着色器取代。

着色器技术细节

着色器是一段包含了数学计算和算法的脚本,用于决定模型表层的外观。标准着色器会执行复杂而逼真的光照计算。其他着色器可能采用简化或不同的计算方式,从而现实不同的结果。任意一个着色器都带有一组可改变的属性。这些属性可能是数值、颜色或纹理,当你查看材质时,属性会显示在检视视图中。材质由绑定到游戏对象的 Renderer 组件所使用,用于渲染游戏对象的网格。

多个不同的材质可以引用同一个纹理。这些材质可以使用相同或不同的着色器,完全取决于需求。

下面是一套设置组合的示例,用到了 3 个材质、2 个着色器和 1 个纹理。

创建和使用材质 - 图2

在上图中,有一辆红车和蓝车。两个模型的车身使用不同的材质,分别是红车材质和蓝车材质。

两个车身材质使用了同一个自定义着色器 — 车身着色器。之所以使用自定义着色器,是因为它可以为汽车提供额外的功能,例如渲染金属光斑,可能还会提供自定义的损伤变形功能。

两个车身材质都引用了汽车纹理,一张包含了车身所有细节的纹理图,但是其中没有指定绘制颜色。

车身着色器还可以接受一个色调,用于为红车和蓝车设置不同的色调,从而让两辆车拥有不同的外观,而我们实际上只使用了一张纹理。

车轮使用一个独立的材质,但是两辆车的车轮共享这个材质,因为两辆车的车轮并没有什么不同。车轮材质使用标准着色器,,并再次引用汽车纹理。

需要注意的是,汽车纹理同时包含了车身和轮胎的细节 — 称为纹理集,纹理贴图的不同部分可以明确地映射到模型的不同部位。

尽管车身材质引用了一个包含车轮图像的纹理,但是车轮不会显示在车身上,因为车轮部分没有被映射到车身结构。

同样的,车轮材质也使用了同一个材质,其中包含了车身细节。但是车身细节不会显示在车轮上,因为只有贴图的车轮细节被映射到了车轮结构。

映射关系由外部 3D 应用程序制作,称为 『UV 映射』。

更具体地说,一个着色器定义了:

  • 渲染游戏对象的方法。包括代码和数学计算,数学计算包括光源角度、视角和其他所有相关的计算。着色器也可以基于终端用户的图形硬件采取不同的方式。
  • 在材质检视视图中可以自定义参数,例如纹理映射、色彩和数值。

一个材质定义了:

  • 使用哪种着色器来渲染材质。
  • 该着色器参数的具体值 —— 例如使用哪个纹理映射、色彩值和数值。

自定义着色器由图形程序员编写。使用 ShaderLab 语言,非常简单。不过,要让一个着色器在各种各样的图形显卡上都正常运行,是一项复杂的工作,并且要求对显卡运行原理有相当全面的知识。

一些着色器直接内置在 Unity 中,更多的着色器在 标准资源 库中。