覆盖对象的着色

您可以通过两种方式覆盖对象的着色:

此功能适用于 Maya 着色器和第三方着色器。

创建着色器的集合

若要覆盖着色器的属性(例如,属性值或连接),必须先创建着色器的集合。您可通过以下三种方式之一执行此操作:

  1. 声明一个表达式,该表达式包含您要包括在内的着色器。

    请参见通过表达式添加成员

  2. 大纲视图Hypershade 中选择着色器,然后在特性编辑器中单击“添加”(Add)。此外,您也可以从这些编辑器拖放到特性编辑器
  3. 选择组或父节点,启用“包括层次”(Include Hierarchy),然后使用“着色器”(Shaders)集合过滤器。

    请参见按节点类型添加集合成员

标识指定给场景中每个对象的着色器

通过在“大纲视图”(Outliner)“窗口 > 大纲视图”(Window > Outliner))中启用“显示 > 指定的材质”(Display > Assigned Materials)选项,显示指定给场景中每个对象的着色器。

如果对象涉及逐面着色器指定,则会将指定给对象的所有着色器列入并分组到“材质”(Materials)标题下。请参见标识指定给场景中每个对象的着色器

提示:

此外,您还可以通过在大纲视图中启用“渲染设置过滤器”(Render Setup Filter)来标识属于集合成员的着色器。请参见在大纲视图中过滤并仅显示渲染设置成员

应用示例

覆盖指定给对象的材质

如果场景中包含三个窗口,则可使用表达式将所有这三个窗口动态添加到同一集合。例如,如果所有窗口的名称中均包含字母 window,则可使用表达式 *window* 将其包含在集合中。稍后,您可以在集合上创建一个材质覆盖,以便使用新材质覆盖原始材质。请参见覆盖应用于集合中对象的材质

现在,如果向场景中添加新建筑,只要其窗口的名称中也包含字母 window,便可重新应用表达式,使新窗口包含在集合与应用的材质覆盖中。请参见更新场景时动态更新渲染设置

提示: 这样就不需要分别将新材质应用于每个新窗口。

覆盖着色器的属性

示例 1:

如果场景中有 100 个对象,每个对象应用的着色器各不相同,并且您需要将每个着色器的亮度提高 10%,则可执行以下操作:

  1. 创建一个集合,然后使用表达式将着色器包含在该集合中。

    例如,如果着色器命名为 lizard1_skinlizard2_skin,依此类推,则可使用表达式 lizard*_skin 将所有蜥蜴皮着色器包含在集合中。

  2. 覆盖“白炽度”(Incandescence)属性。

    选择集合,然后从“添加覆盖”(Add Override)下拉列表中选择“相对”(Relative),并使用鼠标中键将“白炽度”(Incandescence)属性从任一着色器拖放到“特性编辑器”(Property Editor)

    “特性编辑器”(Property Editor)中调整“白炽度”(Incandescence)属性时,集合中包含的所有着色器会变得更亮。

  3. 提示:

    这样就不需要分别调整每个着色器。

示例 2

如果场景中有 100 个角色,且所有角色都穿着指定给不同着色器的 T 恤,但您要将所有这些 T 恤映射到新纹理,则可执行以下操作:

  1. 创建一个集合,然后使用表达式将着色器包含在该集合中。例如,如果着色器命名为 char1_shirtchar2_shirt,依此类推,则可使用表达式 char*_shirt 将所有 T 恤着色器包含在集合中。

  2. 覆盖“颜色”(Color)属性。为集合创建“连接覆盖”(Connection Override),然后使用鼠标中键将“颜色”(Color)属性从任一着色器拖放到“特性编辑器”(Property Editor)

    单击“特性编辑器”(Property Editor)中“覆盖”(Override)属性旁边的 按钮,以连接到新纹理。

    有关连接覆盖的详细信息,请参见覆盖表面着色器上的属性连接