使用文件引用可以管理复杂的场景层次。若要从文件引用获得最大益处,请使用下列提示以确保更高效的工作流。同样,对名称空间的基本了解将有助于工作流。有关详细信息,请参见名称空间。
为父场景和被引用文件预先规划文件和节点命名约定是很重要的,并将极大地有助于在生产环境中成功实现文件引用。特别是规划确保:
或者,可以指定比默认文件名长度更短的名称空间(如果这样做有意义)。使用 Maya 的编辑器(“通道盒”(Channel Box)、“大纲视图”(Outliner)、“层编辑器”(Layer Editor)等)时,较短的节点名称会简化工作流。可以通过在“创建引用选项”窗口中键入所需的文本字符串来创建自定义名称空间。例如,可以选择使用名为 mt 的自定义名称空间,而不使用 mapleTree 一词。上例中的 tree1 节点名称应称为 mt:tree1。这会减少在 Maya 中工作时可能需要的名称长度(以及任何键入)。
如果将非引用节点添加到引用名称空间中,这可能会导致与引用节点发生名称冲突(例如,如果将节点添加到名称空间时已卸载该引用),并可防止在移除引用时名称空间被删除。有关详细信息,请参见名称空间。
使用文件引用时,以 Maya ascii 文件格式 (.ma) 保存文件是首选的。可以在喜爱的文本编辑器中打开和编辑 Maya ascii 文件,而且如果文件或文件的某些组件未按预期加载,这些 Maya ascii 文件更易于进行疑难解答。
文件引用仅支持绝对路径和包含环境变量的路径。使用文件引用时,不支持相对路径名称。由于环境变量是显式的并可针对每个用户的文件结构进行自定义,所以它可以用作相对路径的极好替代。
绝对路径(支持):C:/projects/cityscene/scenes/street.ma
环境变量路径(支持):$myProject/scenes/street.ma
有关环境变量的详细信息,请参见使用 Maya.env 设定环境变量。
有关详细信息,请参见在引用编辑器中编辑引用路径。
如果计划在生产环境中使用文件引用,请考虑团队的工作流实践(建模师、装配师、动画设计师、材质等)以及确定场景层次之前的项目总体要求。
通常,应以自下而上的方式引用文件(即,将小型项目引用到较大的项目中)。使用该自下而上的结构可以轻松加载或卸载场景中用户不需要的任何分段。例如,在创建一个城市父场景时,应首先将门和其他相关组件引用到一个建筑物文件中。然后将该建筑物引用到街道文件中,然后再将街道文件引用到城市父场景中。
构建角色时,请将模型引用到装备文件中。然后将装备文件引用到将设置角色的动画的环境中。这样可以确保将对装备的更改正确传播到可能使用该角色的所有环境文件。
如果法线场景变得比最初预期的更为复杂,可以提取法线场景的分段作为被引用文件。通过使用“将当前选择导出为引用”(Export Selection as a Reference)命令,可以选择场景的特定组件,然后将这些组件导出为单独的被引用子场景文件。会自动引用导出的被引用子场景文件,并会将其加载到当前打开的场景中。不可能通过使用文件引用来使用“将当前选择导出为引用”(Export Selection as a Reference)命令。
以这种方式创建文件引用有一个很吸引人的好处:场景的每个区域都处于正确的世界空间位置,且在引用到父场景中时不需要重新定位。
通过进一步减少场景中的数据量,对象的实例化可用于帮助进行场景管理。例如,如果街道场景中充满路灯,那么可以引用一次路灯文件,然后剩余的路灯会进行实例化。如果未加载路灯文件,那么场景中的所有路灯将会由于它们与原始路灯文件的实例化关系而消失。
如果有一个引用文件并实例化了该文件内的一个对象,稍后移除了该引用文件,那么将在父场景中移除该对象的全部两个版本。变换节点将被留在该实例的父场景中后面的位置。如果父场景中的用户已将其他更改应用于该实例,该节点将保留。
如果父场景包含已实例化的对象,请不要重命名节点或者更改被引用文件中的层次。这样的更改将使实例消失;Maya 将查找一个不再存在的对象。Maya 的实例化是基于名称的。通过在引用文件中重命名对象,可以使原始对象离开,这样父场景就无法再找到它。
需要在场景视图中通过其组节点移动文件引用时,文件引用定位器选项很有用。每当卸载引用时,定位器还充当引用的可视提示。仅当选中“分组”(Group)选项时,定位器选项在“引用选项”(Reference Options)窗口中才可用。定位器选项将被引用文件的内容在定位器下分组,用引用节点名称进行注释。通过在定位器上单击鼠标右键,然后从上下文相关菜单中选择,可以加载或卸载场景内的引用。
有关详细信息,请参见“文件 > 创建引用(File > Create Reference.)”。
父场景文件可能会受到在该层次的被引用子场景文件级别所进行的编辑的负面影响。也就是说,如果在子场景文件级别更改了节点名称和连接,那么在父场景级别所进行的编辑可能会变得无法解析。有关其他负面影响的一些示例,请参见修改文件引用。
可能存在需要从引用节点移除不需要的编辑的情形。例如,在父场景中工作时,已经从一个文件引用应用并移除动画。已完成动画,但现在要确保在最终版本中不应设置动画的属性上不存在任何不需要的 setAttr 编辑。
该示例显示了如何确定与引用到当前打开的场景中的文件相关联的引用节点的名称。
reference -q -f world:planet
file -q -rfn world.ma
worldRN
确定了引用节点的名称之后,必须立即卸载引用文件,以便移除引用编辑。
file -unloadReference worldRN
reference -editCommand “setAttr” -rfn worldRN -q
file -cleanReference worldRN -editCommand “setAttr”
file -loadReference worldRN
如果在启用共享着色网络的情况下,将文件引用到当前场景中,则会将被引用场景中的着色网络与当前场景中的着色网络(包括任何引用的着色网络)合并到一起。需要在整个场景中使用相同的着色网络(包括引用)时,这样可避免创建重复的着色网络。
仅当着色网络相同时,才能共享着色网络。从着色组向上游移动时,仅当其中包含的所有节点都具有相同的名称和类型时,Maya 才会认为两个着色网络是相同的。
着色网络中的每个节点的名称和类型必须相同,才能共享该着色网络,而不会考虑每个节点中的实际值。因此,对于子场景中具有一个值(例如,蓝色)的节点和父场景中具有不同的值(例如,红色)的节点,只要其名称和类型相匹配,就会认为它们是相同的。
如果其中任何项目显示在着色网络中,那么在启用共享着色网络的情况下引用文件时,将不会共享该网络。
如果在启用共享显示层的情况下,将文件引用到当前场景中,则会将被引用场景中的显示层与当前场景中的显示层(包括任何引用的显示层)合并到一起。需要在整个场景中使用相同的显示层(包括引用)时,这样可避免创建重复的显示层。
Maya 使用显示层名称来确定如何将被引用显示层添加到当前场景中。如果父场景中已存在一个显示层名称,那么在引用指定给子场景中的一个名称相同的显示层的任何对象时,会将这些对象添加到原始父显示层中。
如果子场景包含一个在父场景中不存在的显示层,在引用子场景时,就会在父场景的“显示层”(Display Layer)编辑器中出现子场景中的显示层。如果随后从父场景中移除这些子场景,那么也会从“显示层”(Display Layer)编辑器中移除其关联的显示层。
将包含引用的 Maya 6.5 版本之前的文件转化为更高版本的 Maya 文件时,可能会创建名为“_UNKNOWN_REF_NODE_”的引用节点,并且/或者可能会将某个特殊的“_UNKNOWN_REF_NODE_”条目添加到现有引用节点。
该节点类型用于存储 6.5 之前所做的任何编辑,直到能应用这些编辑为止。
已加载场景中的所有引用之后,应该立即应用所有编辑,并且 _UNKNOWN_REF_NODE_ 区域和节点应消失。如果存在任何无法应用的编辑(例如,已重命名或删除的原始引用文件中的节点),_UNKNOWN_REF_NODE_ 将保留在文件中。
如果需要移除这些引用节点,可以通过查询 _UNKNOWN_REF_NODE_ 并删除它来移除。也就是说,使用“引用编辑器”(Reference Editor)无法删除该特定节点类型。在“脚本编辑器”(Script Editor)中:
默认情况下,如果引用了同一个文件两次,那么在文件打开时,Maya 将复制现有节点,而不是从磁盘中重新读取它们。有时,使用文件引用的内置多重引用优化功能可能会导致错误。MAYA_FORCE_REF_READ 环境变量会禁用文件引用优化,并会强制在任何情况下都显式读取引用文件。在某些情况下,这会修复 Maya 的行为,否则会对 Maya 的行为错误地进行求值。
有关详细信息,请参见常规变量。
会将许多文件引用辅助对象脚本作为“Maya Bonus Tools”的一部分进行提供。“Bonus Tools”是一些很有用的 Maya 脚本和插件的免费集合,可从 Autodesk 网站 (www.autodesk.com/maya-bonustools) 下载。
可能需要注册才能获得访问 Autodesk 网站某些区域的权限。完成安装后,会立即在 Maya 内 Bonus Tools 自己的下拉菜单中显示“Bonus Tools”。
先前,对于 Maya 2010 及更低版本,如果在节点名称或名称空间中遇到字符“<”和“>”,则会将其转化为“_”。会移除所有前导无效字符,并将所有其他字符转化为下划线。
namespace -add "<foo>" // Result: foo_ createNode transform -n "<bar>" // Result: bar_ namespace -add "foo<bar>" //Result: foo_bar_
对于 Maya 2011 及更高版本,仍会移除节点名称中的字符“<”和“>”,并会将其转化为“_”。但是对于名称空间的名称,Maya 会将这些字符之间的所有内容视为占位符名称空间。因此,如果正在使用这些字符并依靠 Maya 去更正它们,则应更新代码。例如,在 Maya 2012 中:
namespace -add "<foo>" // Result: <foo> createNode transform -n "<bar>" // Result: bar_ namespace -add "foo<bar>" //Result: foo_bar_