将nemo.mod内的路径改为Nemo的位置,然后复制到"~/maya/modules"下即可。
加载后在maya顶部的菜单栏应该出现一个“Nemo”项。
- <NEMO_ROOT>/extern: 外部依赖
- <NEMO_ROOT>/modules: 解析Maya文件所需的配置文件
- <NEMO_ROOT>/scripts: 主体代码
- <NEMO_ROOT>/lib: 预编译的Nemo库
- <NEMO_ROOT>/plug-ins: Maya插件
在导出工具中,用户可以通过命名或者选择策略的方式筛选控制器和模型。同时也可以开启或关闭插件。
💡 高级用户可以设置NEMO_LOAD_TOPMENU=0隐藏菜单,参考nemo.interface直接调用nemo.m2n,直接调用下层方法做更强的自定义。
导出成功后的文件:
- Graph JSON
描述了Rig的运算逻辑。Graph JSON中的节点命名会脱敏处理。 - EXPORT.zip
用于后续组装文件。普通用户无需了解其具体内容。- Resource 是特殊的nemodata格式,它包含了模型,权重,修型等数据。
- Scene JSON 主要描述了控制器的数据。
- Debug JSON 使用户可以在本地检查效果错误及其具体原因。
- MAT (JSON & ma) 包含了资产使用的材质信息。
只有 Graph JSON 需要发送到服务器处理,通过重命名脱敏以及将资产中的几何数据保留在本地,这些隐私数据将无需对我们分享。
此处列出会导出失败的绑定设置,另请参考影响效果的设置
- 不可以出现循环依赖(Cycle Warning)
- 表达式的部分语法暂不支持
- 连续赋值,如
a=b=1
- 连续赋值,如
- 不支持动力学系统(毛发或肌肉)
- follicle需被禁用,或仅使用outTranslate而不使用outHair和outCurve等
通过 Nemo Farm 上传 Graph JSON 到服务器
服务器回传的内容包括:
- BINARY.zip
- 编译结果(dll/so)
- Config JSON
从服务器发送回的BINARY.zip
后,用户可以在本地和EXPORT.zip
重新组装成新的Maya文件。
组装完成后,工具将会把生成的Maya文件和运行时所依赖的文件保存至指定的Runtime文件夹内。
如果组装时选择相对路径模式,那么可以把这个文件夹整体打包到别处使用。
如果选择绝对路径模式,那么移动时需要改变maya文件内和config json内的路径。
动画师使用Rig时除了需要在组装阶段生成的maya文件之外,还包括:
CONFIG.json
描述了角色相关的信息,包括其它各项资源的位置。<name>.so(dll)
与角色匹配的二进制动态库。<name>__RESOURCE.nemodata
资源文件。<name>__MAT.json
材质和mesh的对应关系,在生成后不可编辑mesh部分,但可以编辑指定的材质。
💡 Linux系统可以考虑在env中设置
__GL_SYNC_TO_VBLANK=0
, 会节省帧刷新时间
Nemo的代理显示模式直接将运算所得数据传输到Maya VP2的GPU管线,提高了帧速率的同时也带来一些限制。
- 鼠标点选角色时会选中整个角色,而不能分开选择某一部分。
- 仅支持线框显示和贴图显示,不支持"灰模"显示。
- 模型上无法再附加变形器或控制器,也不能直接出缓存。
- 部分高级材质或自定义材质可能不支持,譬如用到Tangent或Binormal的材质。这类角色开启代理显示时Nemo会有报错警告。
选中角色根节点后点击顶部Nemo菜单的Switch,可以在代理显示模式和实体模式间切换。实体模式没有上述问题,但速度会有所降低。
💡 仅支持Nvidia GPU,并且需要安装最新显卡驱动
如果用生成的Nemo Rig去替换动画文件中的原始Rig,可能会发生效果不匹配的情况,甚至直接崩溃。此时可以使用NemoMayaNodes
插件中的NemoCheck命令检查错误。
💡 使用NemoCheck命令需首先打开原始Rig(而非Nemo Rig),或者包含原始Rig的动画文件(此时需要设置ns命令空间)。
此命令会检查Maya中当前帧所有节点的计算结果与Nemo是否匹配,并生成日志文件。
NemoCheck命令有两个参数,分别是导出的 Debug JSON 和 nemodata。运行前请确认是用相同版本的工具导出的Debug JSON。
除此之外的Flag包括:
id(ignoreDeformer)
默认为开。因为变形器检查的时间很长,所以可以用此选项跳过所有的变形器ns(namespace)
默认为空。Rig的命名空间,不需要时可以留空od(outputDirectory)
默认为空。日志输出目录,为空时输出到 Script Editors(skip)
默认为空。可以跳过某个节点的检查,需要跳过多个节点时用;
分隔v(verbose)
默认为0。日志的详细程度x(stopOnFirstError)
默认为开。在第一个错误时即停止而不是检查完所有节点才停止ft(focusType)
默认为空。可以只检查某种类型的节点
print cmds.NemoCheck(path_debug, path_resource, ns='<your-namespace>', od='<your-log-directory>')
如果有错误,生成的日志文件中会包含一些 closure JSON(闭包),这些 closure 记录了节点的输入和输出,用于开发者复现 Bug 进行调试。
由于变形器的输入可能包含资产数据,所以NemoCheck会选择最不匹配的一个点记录 closure,因此用户可以放心地将闭包与开发者共享。
如果 Nemo 替换后即崩溃,那么 NemoCheck 同样也可能运行即崩溃。这其实是一件好事,说明复现并捕捉到了错误。
此时可以选择将 verbose 设置为 1,并打开日志记录。日志中可以看到在哪个节点发生了崩溃。
将 verbose 设置为 2 时,NemoCheck 还会在检查前就为所有节点记录 closure,但这样会导致执行过程相当漫长,因此仅在必要时如此做。
- closestPointOnSurface在端点处可能出现U或V的坐标与Maya发生很大漂移,这是因为在极点处U或V不影响取点的位置。
- closestPointOnMesh的最近点如果落在模型边上可能导致面ID与Maya不一致。
- transferAttriutes在投影和模型边缘非常接近时结果会不稳定。
- 欧拉角与四元数转化时结果可能会变化,这是因为同一个旋转对应有两个符号相反的四元数,而对应的欧拉角则更多。
- IK
- preferredAngle会导致误差
- noise无法准确复现
- ramp节点