Maya如何为渲染层创建集合?
为渲染层创建集合
集合有两个用途:可以使用集合填充层;或者,可以将多个节点分到一个集合中,然后通过一个步骤将属性覆盖到所有这些节点上。通过提供表达式和/或通过从视口或“大纲视图”(Outliner)中选择节点,可以填充集合。
集合可用于轻松管理复杂场景中的数据更改。
创建集合,以便根据要在场景中覆盖的属性对节点进行分组。创建集合还可对节点进行分组,使您能够同时控制其可见性。
集合成员身份基于名称。使用表达式将节点添加到集合时,名称与表达式匹配的所有节点将自动包括在内。可以重新应用该表达式,动态地适应场景中的更改。
若要控制集合的可见性,您可以启用或禁用集合,这样只有已启用的集合才会影响场景且可见。此外,您还可以隔离选择集合,以便只有这些集合在视口中可见。通过此功能,您能够最少的步骤控制多个对象的可见性。
集合自上而下进行解释。在可见性和覆盖应用这两个方面,较低的集合均优先于较高的集合。请参见覆盖的应用顺序。通过使用鼠标中键进行拖放,可以在渲染设置编辑器中对集合重新排序.
集合类型
默认情况下,集合仅包含变换节点,这些节点将确定当层可见时您在视口中看到的对象。集合上的变换类型 指示器反映了这一点。
当您创建覆盖时,系统将自动创建包含其他节点类型(例如,形状、着色器或着色组)的子集合。Maya 会自动识别被覆盖的节点类型并创建仅包含该节点类型的子集合。集合上将显示节点类型指示器(例如, 或 ),用于表示其成员类型。有关节点类型的详细信息,请参见节点类型。
但是,若要进行附加控制,您还可以创建任何节点类型的集合与子集合。从“特性编辑器”(Property Editor)的“集合过滤器”(Collection Filters)下拉列表中选择选择所需的节点类型。请参见按节点类型添加集合成员。
一个渲染层中可能存在一个或多个集合,而一个集合中可能存在一个或多个子集合。Maya渲染如何创建渲染层?
创建集合
若要创建集合,请在渲染层上单击鼠标右键,然后选择“创建集合”(Create Collection)。
向集合添加成员
选择一个集合,其属性将显示在“特性编辑器”(Property Editor)中。您可通过执行以下操作之一来向集合添加节点:
-
在“包含”(Include)字段中输入表达式
-
结合使用二者。
可以将同一节点添加到多个集合。
通过表达式添加成员
在表达式中使用通配符可将节点包含在集合中;例如,使用 building* 可将名称以 building 开头的所有节点包括在内。ls 命令支持的所有通配符也可用于此表达式。
注:
默认情况下,只有与表达式匹配的变换节点才会包含在集合中。对于高级用户,您可以使用“集合过滤器”(Collection Filters)下拉菜单调整集合过滤器,从而将其他类型的节点包含在集合中;例如:着色器、形状、着色引擎和集等。通过选择“全部”(All)集合过滤器,您甚至可以包含所有节点,而不考虑类型。
表达式区分大小写;例如,*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,且节点名称必须以 c 开头,但是二者之间可存在任意数量的名称空间,或者也可以完全没有任何名称空间。
例如,以下节点均包含在该表达式中:
-
livingRoom_substances:couchB
-
livingRoom_substances:chairB_v08:chairB
-
livingRoom_substances:tables:coffeeTable_v08:coffeeTable
如果您不想包括所有嵌套的名称空间;例如,您只希望包括两个嵌套的名称空间,以添加如下所示的节点:
livingRoom_substances:chairB_v08:chairB
而不添加 livingRoom_substances:couchB 或 livingRoom_substances:tables:coffeeTable_v08:coffeeTable。
您可以在表达式中使用 : 代替 :: 来明确指定名称空间,而不是以递归方式搜索:
livingRoom_substances:*:c*
此表达式匹配的节点具有以下特点:第一个名称空间是 livingRoom_substances,第二个名称空间可以是任何内容,并且节点名称以 c 开头。
您可以在表达式中的任意位置使用 :: 语法,甚至是在表达式开头。
例如,::c* 包括任意数量的嵌套名称空间中以 c 开头的所有节点。例如,它可以包括以下节点:
-
couchC
-
livingRoom_substances:couchB
-
livingRoom_substances:chairB_v08:chairB
-
livingRoom_substances:tables:coffeeTable_v08:coffeeTable
-
diningRoom_lights:chandelier
-
diningRoom_furniture:chairA_v07:chairA
可以包括同时带有递归匹配和非递归匹配的表达式。
考虑一个包含以下节点的场景:
-
pSphere1
-
aaa:pSphere1
-
aaa:bbb:pSphere1
-
aaa:bbb:ccc:pSphere1
-
aaa:ccc:pSphere1
::p* 将与任意数量的嵌套名称空间中名称以 p 开头的所有节点匹配,包括不含名称空间:
-
pSphere1
-
aaa:pSphere1
-
aaa:bbb:pSphere1
-
aaa:bbb:ccc:pSphere1
-
aaa:ccc:pSphere1
aaa::p* 将与以 aaa 开头的名称空间中名称以 p 开头的所有节点匹配:
-
aaa:pSphere1
-
aaa:bbb:pSphere1
-
aaa:bbb:ccc:pSphere1
-
aaa:ccc:pSphere1
::ccc:p* 将与以 ccc 结尾的名称空间中名称以 p 开头的所有节点匹配;在本例中:
-
aaa:bbb:ccc:pSphere1
-
aaa:ccc:pSphere1
请注意,单个 : 表示非递归匹配。
aaa:ccc::p* 将与以 aaa:ccc 开头的名称空间中名称以 p 开头的所有节点匹配,其中, aaa 与 ccc 之间没有任何名称空间:
-
aaa:ccc:pSphere1
请注意,单个 : 表示非递归匹配。换句话说,它与 aaa:bbb:ccc:pSphere1 不匹配。
::bbb::p* 将与包含 bbb 名称空间的任何名称空间中存在的名称以 p 开头的所有节点匹配:
-
aaa:bbb:pSphere1
-
aaa:bbb:ccc:pSphere1
::aaa::ccc::p* 将与包含 aaa 和 ccc 名称空间的任何名称空间中存在的名称以 p 开头的所有节点匹配:
-
aaa:bbb:ccc:pSphere1
-
aaa:ccc:pSphere1
提示: 通过名称空间,可以轻松使用表达式填充集合。因此设置场景时,例如,在对象中引用时,您可能希望将类似对象引用到同一名称空间中,以便使用名称空间将这些对象添加到一个集合中。例如,将所有集对象引用到设置的名称空间中,然后可以使用名为 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 和 diningRoom_furniture:chairA_v07:chairA。
livingRoom*::c*; diningRoom*:*:ch*
使用表达式进行排除
若要使用表达式排除节点,请将表达式以 - 开头。继续上述示例,以下表达式将从包含在第一个表达式中的沙发和椅子成员中减去椅垫节点。
livingRoom*::c*; diningRoom*:*:ch*; -livingRoom*::*cushion*
请记住,表达式区分大小写;因此,如果在场景中拼写的 cushions 和 Cushions 大小写不一致,则可能需要使用两个排除表达式:
livingRoom*::c*; diningRoom*:*:ch*; -livingRoom*::*cushion*; -livingRoom*::*Cushion*
表达式的顺序非常重要。表达式从左至右解释,您可以重新添加之前减去的节点。继续上述示例,以下表达式将右椅垫(且仅将所有椅垫中的右椅垫)重新添加回集合:
livingRoom*::c*; diningRoom*:*:ch*; -livingRoom*::*cushion*; -livingRoom*::*Cushion*; livingRoom*::*cushion_right*
通过静态选择添加成员
您可以将成员静态添加到集合(通过显式选择并添加节点),而不是动态执行此操作(使用表达式,如上所述)。为此,请使用鼠标中键将节点从“大纲视图”(Outliner)拖放到“特性编辑器”(Property Editor)。或者,可以在“大纲视图”(Outliner)中选择节点,然后在“特性编辑器”(Property Editor)中单击“添加”(Add)。
如果已包含表达式并手动添加节点列表,则集合将同时包含与表达式和所列节点匹配的节点。
您可以按字母顺序或按添加对象的顺序对此列表进行排序。在“特性编辑器”(Property Editor)中单击鼠标右键,然后选择“按字母顺序排序”(Sort Alphabetically)或“按添加的顺序进行排序”(Sort As Added)。
如果使用该方法填充集合,则重新设置节点的父对象时应谨慎操作。如果将某个节点添加到集合,然后将其父对象从一个根节点重新设置为另一个根节点,则集合中可能会失去该节点。| 用于表示每个节点的层次中。例如,|group1|group2|group3 表示 group3 是 group2 的子对象,而 group2 又是 group1 的子对象。如果将 group3 添加到某个集合,然后移动 group3 使其成为 group4 的子对象,则 group3 将不再是该集合的成员。
注: 也可以通过在对象上创建覆盖向集合添加节点。
默认情况下,将“集合过滤器”(Collection Filters)设置为“变换”(Transforms)时,仅变换节点包含在集合中。如果在“大纲视图”(Outliner)中选择一个着色器,然后在“特性编辑器”(Property Editor)中单击“添加”(Add),该着色器将显示在节点列表中,但是处于灰显状态以表示它已被过滤掉。换句话说,它不是集合的一部分。
不必将该着色器添加到集合中即可覆盖对象的着色,因为当您创建覆盖时,系统会自动执行该操作。但是,对于高级用户,也可以通过从“集合过滤器”(Collection Filters)下拉列表中选择“着色器”(Shaders)菜单完成此操作。
验证集合的成员身份
在“特性编辑器”(Property Editor)中单击“查看全部”(View All),可获得集合成员的列表。
或者,也可以单击“全选”(Select All),以在场景和“大纲视图”(Outliner)中选择集合成员。
此外,对于通过表达式包含的成员和通过选择并添加来包含的成员,均存在单独的“选择”(Select)按钮。使用这些按钮可验证通过上述两种方法添加的集合成员。
从集合中移除成员
若要移除通过拖放添加的成员,请在集合“特性编辑器”(Property Editor)中的相应节点(或多个节点)上单击鼠标右键,然后选择“移除”(Remove)。还可以选择该节点并单击“移除”(Remove)。
若要移除通过表达式添加的成员,请删除表达式。