为渲染层创建集合

集合有两个用途:可以使用集合填充层;或者,可以将多个节点分到一个集合中,然后通过一个步骤将属性覆盖到所有这些节点上。通过提供表达式和/或通过从视口或“大纲视图”(Outliner)中选择节点,可以填充集合。

集合可用于轻松管理复杂场景中的数据更改。

创建集合,以便根据要在场景中覆盖的属性对节点进行分组。创建集合还可对节点进行分组,使您能够同时控制其可见性。

使用表达式将节点添加到集合时,名称与表达式匹配的所有节点将自动包括在内。可以重新应用该表达式,动态地适应场景中的更改。请参见更新场景时动态更新渲染设置在渲染层中为集合创建覆盖

您既可以将对象添加到集合中,也可以将节点(例如,着色节点、纹理节点等)添加到集合中。有关节点类型的详细信息,请参见节点类型

可以在渲染层中创建一个或多个集合。请参见创建渲染层

若要控制集合的可见性,您可以启用或禁用集合,这样只有已启用的集合才会影响场景且可见。此外,您还可以隔离选择集合,以便只有这些集合在视口中可见。通过此功能,您能够最少的步骤控制多个对象的可见性。请参见控制集合的可见性在视口中显示集合的隔离子集

集合自上而下进行解释。在可见性和覆盖应用这两个方面,较低的集合均优先于较高的集合。请参见控制集合的可见性覆盖的应用顺序。通过使用鼠标中键进行拖放,可以在渲染设置编辑器中对集合重新排序。

创建集合

若要创建集合,请在渲染层上单击鼠标右键,然后选择“创建集合”(Create Collection)

向集合添加成员

选择一个集合,其属性将显示在“特性编辑器”(Property Editor)中。您可通过执行以下操作之一来向集合添加节点:

可以将同一对象添加到多个集合。

通过表达式添加成员

在表达式中使用通配符可将节点包含在集合中;例如,使用 building* 可将名称以 building 开头的所有节点包括在内。ls 命令支持的所有通配符也可用于此表达式。

表达式区分大小写;例如,*cushion* 与 *Cushion* 不同。

在此示例中,表达式 Mesh_K* 将 Killamari 的身体、两只眼睛和眼镜包含在集合中。

提示: 还可以使用表达式将着色器包含在集合中。例如,如果场景中有十只猫,且着色器命名为 cat1_body、cat2_body,依此类推,则可创建一个集合,然后使用表达式 cat*body 将所有猫身体着色器包含在一个集合中。

使用表达式包含名称中带有名称空间的成员

可以使用表达式和通配符包含名称中带有名称空间的节点。对每个名称空间使用通配符。

例如:

以下表达式将选择名为 livingRoom_substances 的名称空间中的所有节点。例如:livingRoom_substances:greenapple4。

livingRoom_substances:*

以下表达式也会选择该名称空间中的节点,但仅限于名称以 c 开头的节点。例如:livingRoom_substances:couchB。

livingRoom_substances:c*

但是,它与 livingRoom_substances:chairB_v08:chairB 等对象不匹配。在这种情况下,您必须使用:

livingRoom_substances:*:c*

第三个表达式与具有两个嵌套名称空间的节点匹配。第一个名称空间为 livingRoom_substances,第二个名称空间可以是任何内容,节点名称必须以 c 开头,例如:

  • livingRoom_substances:chairB_v08:chairB
  • livingRoom_substances:coffeeTable_v08:coffeeTable
提示: 通过名称空间,可以轻松使用表达式填充集合。因此设置场景时,例如,在对象中引用时,您可能希望将类似对象引用到同一名称空间中,以便使用名称空间将这些对象添加到一个集合中。例如,将所有集对象引用到设置的名称空间中,然后可以使用名为 set:* 的表达式将其全部包含在一个集合中。请参见渲染设置最佳实践

在表达式中表示层次

使用 | 可表示层次;例如,以下表达式意味着 Mesh_All 是 LOD0 的父对象,而 LOD0 又是名称中包含 Mesh_K 的节点的父对象。

|Mesh_All|LOD0|*Mesh_K*

也可以使用通配符表示层次;例如,以下图案:

aTransform|*|aShape

将匹配以下所有项:

|aTransform|WildMiddle|aShape
|aTransform|Something|aShape
|A|Starting|Path|aTransform|SomethingElse|aShape
|Another|Path|aTransform|OutOfNameIdeas|aShape

也就是说,将包括所有属于 aTransform 孙对象的 aShape 节点,而不考虑 aTransform 是否从根开始。

此表达式表示层次和名称空间。将包括名称以 c 开头且属于所设名称空间的所有节点以及所设名称空间中父节点的子节点:

|set:parent|set:c*

合并表达式

通过使用逗号、分号或空格分隔多个表达式,可以合并这些表达式。例如,以下组合表达式允许同时包含 livingRoom_substances:couchB 和 livingRoom_substances:chairB_v08:chairB。

livingRoom*:c*; livingRoom*:*:ch*;

使用表达式进行排除

若要使用表达式排除节点,请将表达式以 - 开头。继续上述示例,以下表达式将从包含在前两个表达式中的成员中减去椅垫节点。

livingRoom*:c*; livingRoom*:*:ch*; -livingRoom*:*cushion* -livingRoom*:*:*cushion*

请记住,表达式区分大小写;因此,如果在场景中拼写的 cushions 和 Cushions 大小写不一致,则可能需要使用两个排除表达式:

livingRoom*:c*; livingRoom*:*:ch*; -livingRoom*:*cushion* -livingRoom*:*:*cushion* -livingRoom*:*Cushion* -livingRoom*:*:*Cushion*

表达式的顺序非常重要。表达式从左至右解释,您可以重新添加之前减去的节点。继续上述示例,以下表达式将右椅垫(且仅将所有椅垫中的右椅垫)重新添加回集合:

livingRoom*:c*; livingRoom*:*:ch*; -livingRoom*:*cushion* -livingRoom*:*:*cushion* -livingRoom*:*Cushion* -livingRoom*:*:*Cushion* livingRoom*:*cushion_right*
注:

如果需要使用“包括层次”(Include Hierarchy)填充集合,则不支持使用表达式排除层次内的节点。

例如,如果将 myGr* 声明为表达式,然后启用“包括层次”(Include Hierarchy)以向集合添加 myGroup 节点及其子节点,并且 pCylinder1 是 myGroup 的子对象,则无法使用 myGr* -pC* 从集合中排除 pCube1。

解决方法:将要排除的节点添加到单独的集合中,然后创建覆盖以禁用可见性。但请注意,这可能会影响性能。

通过静态选择添加成员

您可以将成员静态添加到集合(通过显式选择并添加节点),而不是动态执行此操作(使用表达式,如上所述)。为此,请使用鼠标中键将节点从“大纲视图”(Outliner)拖放到“特性编辑器”(Property Editor)。或者,可以在“大纲视图”(Outliner)中选择节点,然后在“特性编辑器”(Property Editor)中单击“添加”(Add)

如果已包含表达式并手动添加节点列表,则集合将同时包含与表达式和所列节点匹配的节点。

如果使用该方法填充集合,则重新设置节点的父对象时应谨慎操作。如果将某个节点添加到集合,然后将其父对象从一个根节点重新设置为另一个根节点,则集合中可能会失去该节点。| 用于表示每个节点的层次中。例如,|group1|group2|group3 表示 group3 是 group2 的子对象,而 group2 又是 group1 的子对象。如果将 group3 添加到某个集合,然后移动 group3 使其成为 group4 的子对象,则 group3 将不再是该集合的成员。有关如何标识集合中缺少的节点的信息,请参见标识集合中缺少的成员

注: 也可以通过在对象上创建覆盖向集合添加节点。请参见通过创建覆盖向层添加对象

遍历根节点的子节点以填充集合

启用“包括层次”(Include Hierarchy)选项,可遍历组节点或父节点的子节点。将组节点或父节点添加到集合,父节点及其子节点均会添加到集合中。将此功能与“集合过滤器”(Collection Filters)集合使用,可以轻松使用所选成员填充集合。请参见按节点类型添加集合成员

该功能对于将着色器添加到集合中非常有用。您仅需在视口中选择角色,然后在集合的特性编辑器中单击“添加”(Add),即可覆盖其着色器属性。请参见创建着色器的集合

注:

如果集合应用了一个覆盖,则会将此覆盖应用于父节点中与过滤器类型匹配的所有子节点。

若要标识属于集合的节点,一种简单的方法是在大纲视图中启用“渲染设置过滤器”(Render Setup Filter)“显示 > 渲染设置过滤器”(Display > Render Setup Filter)),然后从可用的过滤器选项(例如,“选定层内部”(Inside Selected Layers))中选择。选择您的集合,大纲视图将简化为仅显示集合成员。

添加父节点时,建议不要在根级别上声明表达式,因为这可能会增加处理时间。精确声明表达式(通过使用 | 表示节点的层次;例如:|Set|Building|*,而不仅仅是 |Set|*)有助于减少计算时间。

“包括层次”(Include Hierarchy)是一个功能强大的工具,使您能够轻松填充集合而不必手动选择各个节点。但是,由于此功能可以遍历节点,因此也有可能会增加处理时间并降低场景性能。如果场景中包含许多节点且您在填充集合时不需要此选项,则可能需要在声明表达式或静态添加节点之前先禁用此选项。

另一方面,如果需要使用“包括层次”(Include Hierarchy)填充集合,建议首先完成表达式的输入以及节点的选择和添加,然后再启用此选项。

将集合简化为仅包含特定节点类型

集合“特性编辑器”(Property Editor)中的“集合过滤器”(Collection Filters)功能可用于仅将特定节点类型包含在集合中。例如,您可以使用表达式 apple* 填充集合,但是只想将变换节点包含在集合中,并排除名称中包含字母 apple 的所有形状节点和着色器。有关详细信息,请参见按节点类型添加集合成员

验证集合的成员身份

通过单击特性编辑器中的“选择”(Select),以在场景和大纲视图中选择集合成员,从而验证集合成员。对于通过表达式添加的成员和通过选择并添加来添加的成员,均存在单独的“选择”(Select)按钮。请参见标识属于集合的对象

从集合中移除成员

若要移除通过拖放添加的成员,请在集合“特性编辑器”(Property Editor)中的相应节点(或多个节点)上单击鼠标右键,然后选择“移除”(Remove)。还可以选择该节点并单击“移除”(Remove)

若要移除通过表达式添加的成员,请删除表达式。