一、问题描述
最近遇到了maya模型standIn方式导入arnold .ass格式后,贴图内部路径不对,无法在maya中直接修改的问题,而ass文件是很大文本格式数据。maya中没有现成的工具显示ass文件原有丢失贴图路径,所以考虑用pilotedit超大文本编辑器来手动查询,修改路径链接:一方面可以查看原有图片路径;另一方面快速批量替代图片新路径。
二、解决方法如下:
1、用pilotEdit打开.ass文件,如果是.gz压缩文件,可以用7z压缩软件先解压,打开后,直接拖拽ass文件到pilotEdit中。几秒后,将ass中涉及的 image{}标签类 filename名后的图片路径的对应图片文件,都拷贝到现有maya工程的sourceimages目录里。
2、在pilotEdit中,按ctrl+r,或 点击查找>替换 菜单命令,弹出替换窗,替换路径,快速替代新图片根路径。编辑完成后,可以关闭7z,即可自动保存修改结果,到gz压缩包中了。如果硬盘空间够大,还是建议使用ass未压缩文件,替换如下图:
3、最终的替换结果如下:
三、maya内批量替换gz为ass路径mel程序方法:
此方法可以把场景中所有的standIn节点的XXXXX.ass.gz 压缩文件路径,转换为XXXXX.ass 非压缩文件路径,拷贝代码在maya的脚本编辑其中粘贴,运行,阿弥陀佛。
//批量standin节点路径 gz 转 ass 路径
global proc tjh_arnold_standin_gzToAss()
{
string $ass_array[] = ` ls -type "aiStandIn" `;
string $ass;
for($ass in $ass_array)
{
string $path = ` getAttr ($ass+".dso") `;
string $splitPath[];
tokenize $path "." $splitPath;
if( $splitPath[ size($splitPath)-1 ]== "gz")
{
print ($ass+":::"+$path+"\n");
string $finalPath =$splitPath[0];
for($i=1;$i<size($splitPath)-1;$i++ )
{
$finalPath += "."+$splitPath[$i];
}
setAttr ($ass+".dso") -type "string" $finalPath ;
}
}
}
tjh_arnold_standin_gzToAss ;
//批量standin节点路径 ass 转 gz 路径
global proc tjh_arnold_standin_assToGz()
{
string $ass_array[] = ` ls -type "aiStandIn" `;
string $ass;
for($ass in $ass_array)
{
string $path = ` getAttr ($ass+".dso") `;
string $splitPath[];
tokenize $path "." $splitPath;
if( $splitPath[ size($splitPath)-1 ]== "ass")
{
print ($ass+":::"+$path+"\n");
string $finalPath =$splitPath[0];
for($i=1; $i<size($splitPath); $i++ )
{
$finalPath += "."+$splitPath[$i];
}
$finalPath += ".gz";
setAttr ($ass+".dso") -type "string" $finalPath ;
}
}
}
tjh_arnold_standin_assToGz;
四、maya场景内查找ass文件路径 与 批量替换路径mel方法:
如下代码可以批量查找制定ass 包含名的standIn节点,并可以批量替换为制定路径名。
//查找standin 节点 ass图片名是否存在检测,和路径替换
global proc arnold_ass_path_findname(string $find_path,string $replace_path) //$replace_path 为空 "" 时,仅仅显示满足查找条件的图片路径结果。
{
string $ass_array[] = ` ls -type "aiStandIn" `;
string $ass;
for($ass in $ass_array)
{
string $path = ` getAttr ($ass+".dso") `;
string $result =` match $find_path $path `;
if($result == $find_path)
{
print ($ass+":::"+$path+"\n");
if($replace_path !="")setAttr ($ass+".dso") -type "string" $replace_path ;
}
}
}
//查询ass路径,如果存在 替换为新路径
arnold_ass_path_findname "e:/Tree/Tree_D.ass" "E:/Tree_D.ass";
//仅仅查询 standin 中的ass文件名是否存在
arnold_ass_path_findname "e:/Tree/Tree_D.ass" "";
结束语:
最终效果看,,对于超大ass文件的图片路径修改,还是比较高效的。特别是查过几个G的大文件都可以用此pilotEdit编辑器,快速打开和修改。南无阿弥陀佛。