有关obj文件的那些事儿
问题描述
前两三个月,程序那边自动生了一些blendshape,然后让绑定这边整理下看下效果。文件拿过来后有点傻了眼,394个obj文件,而且每一个obj文件导进Maya命名都是“Mesh”,这就有点难受了
解决方法
没办法,只能批量导出obj文件了,然后批量命名,命名的话就根据文件的名字
#coding=utf-8
import pymel.core as pm
import maya.cmds as mc
import os,time
path=r"F:\work\s2a_tensor\s2a_tensor"
def importObjFile(path,pre=None):
file=[i for i in [os.path.join(path,file) for file in os.listdir(path) if file.endswith(".obj")] if os.path.isfile(i)]
if len(file)>0:
for file_name in file:
obj_name=file_name.split('\\')[-1].split('.')[0]
if pre==None:
if obj_name.isdigit():
pm.error("Please add a prefix")
mc.file(file_name,i=1,type="OBJ",ignoreVersion=1,ra=True,mergeNamespacesOn*=True,namespace=":",options="mo=1",pr=1,importTimeRange="combine")
if pm.objExists("Mesh"):
pm.rename("Mesh",obj_name)
else:
mc.file(file_name,i=1,type="OBJ",ignoreVersion=1,ra=True,mergeNamespacesOn*=True,namespace=":",options="mo=1",pr=1,importTimeRange="combine")
if pm.objExists("Mesh"):
pm.rename("Mesh",(pre+obj_name))
else:
pm.warning("don't have obj File to import")
return True
importObjFile(path,"obj_")
值得注意的是以纯数字命名的obj文件名在maya重命名会出错,需要加前缀
问题扩展
为什么模型或者程序那边以obj文件给的blendshape导进maya,有时候会命名成"Mesh",有时候又是原本名称呢。顺着这个问题,研究了下obj文件格式。在maya里创建一个"pCube1",并导出obj文件,用记事本打开
参数说明
1. mtllib
此前缀后指定了此OBJ文件所使用的材质库文件(*.mtl)的文件路径
2. v
指定一个顶点的坐标
3. vt
指定一个顶点的纹理坐标
4. nt
指定一个顶点的发现向量
5. f
表示一个面
f 1 2 3
这样的行表示以第1、2、3号顶点组成一个三角形。
f 1/3 2/5 3/4
这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3。
f 1/3/4 2/5/6 3/4/2
这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,其法线的索引值是4。
f 1//4 2//6 3//2
这样的行表示以第1、2、3号顶点组成一个三角形,且忽略纹理坐标。其中第一个顶点的法线的索引值是4;
需要注意的是文件中的索引值是以1作为起点的
6. g
组名称
7. s
光滑组
也就是说,我把obj文件中的这行"g initialShadingGroup pCube1"
改成"g myobj"
,再用maya导入,物体的名称就会变为"myobj"
上一篇: php 生成CSV文件