在完成模型制作后,对部件选中批量命名,然后data name from object使网格体名称能够规范化。在SendToUE的工作流中,网格体的名称是static mesh名称,物体名称是场景中的actor名称。对于同一网格体的部件会有多个instance对象,理想中的状况是选中其中一个instance对象烘焙而不需要所有的instance都拿去烘焙,我搜了很久并没有找到对若干包含多组instance的物体选中其中单个instance的办法。后来我想了个思路,既然有插件可以对instance操控必然是可以获取instance的,那么按照网格体分类获取其data name然后移动到各自的collection里面,再从collection着手选取其中一个对象,那么就能实现我的想法了。然而我对python几乎没什么印象了,更别说还要去啃blender python的api文档。抱着死马当活马医的态度,我试了下用kimi人工智能和chatgpt,居然在一番循序渐进的诱导下成功做出了这两段代码。
2024-4-28更新: 使用这两个代码前用rename插件对物体重命名(配合similar object data或material选择),窗都叫window,墙都叫wall等等。场景中的命名完成后全选所有物体data name from object对所有物体的data name修改,有时候执行分集合的代码会出错,在script视图模式下查看outline下面这个大纲,object和collection会存在一些layout的大纲中没有的隐藏物体,删除以后就正常了。执行第二个选择集合中第一个物体的代码后需要再执行一次data name from object,以使得烘焙的贴图命名与static mesh的命名是一样的,这样才能使ue中的auto convert material instance生效。rename插件一定要勾选Numerate,这样统一所有的物体都是下划线加数字后缀,不然会有.加数字后缀,而在ue中.加数字后缀和下划线加数字后缀会互相冲突,导致SendToUE出错覆盖。内景在烘焙之后通过control j合并批量给窗户通过instance关联添加,像图2中有两个并列窗和单体是instance关系,这时合并会导致内景重叠重复一份,因此并列窗要自成一个物体与单体区分开。图3的窗框damage问题是mesh的方向没有转向。
评论