【Unity3D技术文档翻译】第2.2篇 创建和使用材质

【Unity3D技术文档翻译】第2.2篇 创建和使用材质_第1张图片
Unity3D技术文档翻译

上一章:【Unity3D技术文档翻译】第2.1篇 纹理 (Textures)

本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Materials, Shaders & Textures】→【Creating and Using Materials】

创建和使用材质 (Materials)

想要创建一个新的材质,可以通过编辑器主菜单或者在 Project View 窗口中,选择使用 Assets->Create->Material 选项。

新建的材质默认配置了标准着色器(Standard Shader),所有的映射属性都是空的,如图:

【Unity3D技术文档翻译】第2.2篇 创建和使用材质_第2张图片
新建的材质

一旦材质被创建,你就可以将它应用到一个物体上,以及在监视器(Inspector)中调整它的所有属性。想要将它应用到一个物体上,只需要将它从 Project View 窗口拖动至 Scene(场景) 窗口或者 Hierarchy(层级) 窗口中的任意物体上。

设置材质属性

你可以为每个材质选择你想要使用的着色器。直接在监视器(Inspector)中展开 Shader 的下拉选项,并选择你想使用的着色器。你所选择的着色器将改变材质中可用的属性。这些属性可能是颜色、滑动条、纹理、数值或者向量。如果你已经将材质应用到场景中一个活跃(active)的物体上,你会发现材质属性的改变会实时地作用于该物体。

有两种方式将一个纹理赋值给 Texture 属性:

  1. 从 Project View 窗口将纹理拖动至 Texture 属性方框上。

  2. 点击 Texture 属性上的 Select 按钮,然后从出现的下拉列表中选择纹理。

内置的着色器

除了标准着色器(Standard Shader)之外,还有许多其他类型的用于专门目的的内置着色器:

  • FX:光照和玻璃效果。
  • GUIUI:用于用户界面图形。
  • Mobile:简化的高性能着色器,用于移动设备。
  • Nature:用于树木和地形。
  • Particles:粒子系统效果。
  • Skybox:用于渲染所有几何体背后的背景环境(即天空盒渲染)。
  • Sprites:用于2D精灵(Sprite)系统。
  • Toon:卡通风格的渲染。
  • Unlit:用于渲染完全不需要光照和阴影的物体。
  • Legacy:老版本着色器的集合,现在被标准着色器取代。

着色器技术细节说明

一个着色器就是一个包含了数学运算和算法的脚本,用于处理一个模型表面上的所有像素应该看起来是什么样子。标准着色器展现了复杂、写实的光照运算。其他的着色器可能使用更简单或者不同的运算,来显示不同的效果。材质使用任何一个着色器,都会显示相应的许多可赋值的属性。当查看一个材质时,监视器中将显示数值、颜色定义或者纹理等属性。然后材质会被渲染(Render)组件应用到游戏物体上渲染网格。

有时候你可能想在多个不同的材质上引用相同的纹理。而且这些材质可能使用相同或者不同的着色器,这取决于项目需求。

下面是一个可能出现的组合设置的例子,它使用了3个材质、2个着色器和一个纹理。

【Unity3D技术文档翻译】第2.2篇 创建和使用材质_第3张图片

在上图中,我们有一辆红色车和一辆蓝色车。两个模型的车身分别使用了各自的材质: “Red car material” 和“Blue car material”。

这两个车身的材质都使用了相同的自定义着色器:“Carbody Shader”。这里使用自定义的着色器,是因为它提供了针对汽车的额外特性,比如:金属光泽的渲染,或者可能有一个自定义的损坏遮罩特性。

每个车身的材质都有一个对“Car Texture”的引用,这是一个包含了车身所有细节的纹理映射,并且没有指定具体的颜色。

车身着色器有一个调色板,用来为红色车和蓝色车设置不同的颜色,让每辆车在使用同一个纹理的时候有不同的外观。

车轮模型再次使用了一个单独的材质,但是这次两辆车的车轮使用了相同的材质,因为两辆车之间的轮子没有什么不同。车轮材质使用了标准着色器,并且再次引用了 Car Texture。

注意,Car Texture 包含了车身和车轮的所有细节——它是一个纹理图集(texture atlas),这意味着纹理图片的不同部分,能够准确地映射到模型的不同部分。

虽然车身材质正在使用的纹理包含了车轮,车轮纹理也不会出现在车身上,因为车轮部分的纹理没有映射到车身几何体上。

同理,车轮材质使用了相同的纹理,里面也包含了车身细节,但是车身细节不会出现在车轮上,因为只有车轮部分的纹理映射到了车轮几何体上。

这种映射关系是由3D艺术家在外部的3D软件中完成的,称之为“UV 映射”。

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

  • 渲染一个物体的方法。包含了代码和数学运算,包括光照资源的角度、可视角度,以及其他相关的运算。着色器同样能够根据不同终端设备的图形硬件,来指定使用不同的方法。
  • 在材质监视器中提供可被自定义的参数,比如:纹理映射、颜色,以及数值。

一个材质定义了:

  • 使用哪个着色器来渲染材质。
  • 具体的着色器的参数值——比如:纹理映射、颜色,以及数值。

用户自定义的着色器是由图形程序员编写的。这些着色器可以使用 ShaderLab 语言编写,这是一种更简单的语言。然而,想要让一个着色器在不同的显卡上良好运行,是一个复杂的工作,它需要相当的综合性的关于显卡是如何工作的知识。

许多着色器已经直接在Unity中内置了,更多的着色器未来会添加到 Standard Assets 库中。

如果本文对你有帮助的话,点个赞或者评论一下吧!

下一章:【Unity3D技术文档翻译】第2.3篇 标准着色器 (Standard Shader)

你可能感兴趣的:(【Unity3D技术文档翻译】第2.2篇 创建和使用材质)