程序材质

Unity 采用一种新的资源类型,即程序材质 (Procedural Materials)。其与标准材质 (Materials) 基本相同, 但有一点不同,其使用的纹理可在运行时生成,而非预先定义并存储。 通常,按程序生成纹理的脚本代码占用的存储和传输空间小于位图图像,因此程序材质 (Procedural Materials) 可帮助缩短下载时间。另外,生成脚本可含有参数,您可在运行时更改此类参数,以更改材质的可视属性。这些属性可以是从颜色变化到墙壁上的砖块大小等任何属性。这不仅意味着,单个程序材质 (Procedural Material) 可生成许多变体,还意味着可以将材质逐帧制作为动画。您还可制作出许多非常有趣的视觉效果 - 设想一个人物物逐渐变成石头或酸性物质一接触地面就腐蚀地面的场景。

Unity 的程序材质系统是基于 Allegorithmic 开发的行业标准产品 Substance。

支持的平台

在 Unity 中,独立系统和网页播放器发布目标(Windows 和 Mac OS X)完全支持程序材质 (Procedural Materials)。对于所有其他平台,Unity 会在发布期间将其预渲染或烘焙 成普通材质 (Materials)。尽管这明确否定了程序生成在运行时具有的优势,但仍有助于在编辑器的基本材质上创建变体。

将程序材质 (Procedural Materials) 添加至工程

程序材质 (Procedural Materials) 是作为 Substance 存档 (Substance Archive) 文件 (SBSAR) 提供 ,您可使用导入任何其他资源(直接拖放至资源文件夹 (Assets folder) 或使用 资源 (Assets)->导入新资源 (Import New Asset)...)一样的方式导入这些文件。 Substance 存档资源 (Archive asset) 包含一种或多种程序材质 (Procedural Materials) 和所需的所有脚本和图像。不支持未发布的 SBS 文件。

尽管执行步骤不同,但 Unity 会像处理任何其他材质 ( Material) 一样处理程序材质 (Procedural Material)。例如,要将程序材质 (Procedural Material) 分配到网格,您只需将其拖放至网格,和任何其他材质 (Material) 的处理方式完全相同。

程序属性 (Procedural Properties)

每种程序材质 (Procedural Material) 都是可生成特定类型的材质的自定义脚本。这些脚本与 Unity 脚本相似,因为这些脚本可含有在检视器中公开分配的变量。 例如,"砖墙 (Brick Wall)" 程序材质 (Procedural Material) 可公开属性,其可让您设置砌好的砖列数量、砖块颜色和砂浆颜色。 这可从单一资源获得无限数量的材质变体。运行时,您也可在脚本中设置这些属性,方法与设置 MonoBehaviour 脚本的公共变量大致相同。

程序材质 (Procedural Materials) 也可用于制作复杂的纹理动画。例如,制作动画描述钟表指针移动或蟑螂在地板上爬行的画面。

从零开始创建程序材质 (Procedural Materials)

程序材质 (Procedural Materials) 可与任意按程序生成的纹理和存储的位图组合配合使用。另外,使用前可对位图图像进行筛选和修改。不像标准材质 (Material),程序材质 (Procedural Material) 可使用 SVG 文件格式的矢量图像,其纹理不受分辨率影响。

可用于从头开始创建程序材质 (Procedural Materials) 的设计工具使用基于节点的可视编辑器,与艺术工具中找到的编辑器相似。略知皮毛或完全不懂编码的设计师也可创建程序材质。以 Allegorithmic 的 Substance Designer 的一张截图为例,其显示正在创建的"砖墙"程序材质 (Procedural Material):

获取程序材质 (Procedural Materials)

Unity 的程序材质 (Procedural Materials) 以行业标准 Substance 产品为依据,您可从 Internet 资源中获取可用的程序材质 (Procedural Materials) 资源,包括 Unity 自有的资源商店 (Asset Store)。Allegorithmic Substance Designer 可用于创建程序材质 (Procedural Materials),但也有其他采用 Substance 技术的应用程序(例如 3D 建模应用程序)的性能可与 Unity 相媲美。

性能和优化

程序材质 (Procedural Materials) 本身占用的存储空间少于位图图像。其缺点是以脚本为基础,运行这些脚本生成材质需要一些 CPU 和 GPU 资源。程序材质 (Procedural Materials) 越复杂,其运行期的开销越大。

程序材质 (Procedural Materials) 在以下情况下支持缓存:自生成以来,材质仅在其参数发生变化时,才会更新。此外,有些材质可能含有许多理论上可更改但在运行时很少需要更改的属性。这种情况下,您可以告知 Unity 无需更改的变量,以帮助其在先前生成的材质中缓存尽可能多的数据。通常,这将大幅提升性能。

程序材质 (Procedural Materials) 可以是系统上隐藏的变量, 如运行时间或程序材质 (Procedural Materials) 实例数量(此数据可用于制作动画)。更改这些变量的值后仍可强迫程序材质 (Procedural Material) 进行更新,即使参数没有发生明显变化。

程序材质 (Procedural Materials) 也可只作用编辑器中的辅助工具(如通过设置程序材质 (Procedural Material) 的参数,然后进行"烘焙",生成标准材质 (Material))。 这将去除生成材质的运行时开销,但自然无法在设置游戏期间更改烘焙的材质或将其用于制作动画。

使用 Substance 播放器分析性能

由于程序材质 (Procedural Material) 的复杂程度会影响运行时的性能, Allegorithmic 使用Substance 播放器 (Player)工具分析功能。您可在Allegorithmic 网站 免费下载此工具。

Substance 播放器 (Player) 将相同的优化渲染引擎用作集成到 Unity 的播放器, 因此,Unity 中的渲染性能优于 Substance Designer。

Page last updated: 2013-06-14