その作業の中でPICファイルをTGAに変換する必要がありました。
普段でしたらPhotoshopを使って変換しますが、大量のデータだとこれは時間が掛かりすぎます。
Photoshopのアクションやスクリプトを使えば多少楽にはなるけど、もっと早く、もっと楽、そして
出来ればSoftimage上でテクスチャパスを取得して、1クリックで変換が出来る方法を探していました。
これでしたら、一瞬で終わります。
その為にコマンドライン対応の変換ソフトが必須です。
色々調べて試してみたけど、一番使い勝手が良かったのはSoftimageメールリストのXSI仲間が教えてくれた
「imf_copy.exe」でした。10年ぐらいSIを使っているのに知りませんでした。
このコマンドは bin フォルダの中に入っています。
2015 の場合:
C:\Program Files\Autodesk\Softimage 2015\Application\bin
コマンドラインでこれを使えば画像の変換が簡単に出来ます。
情報があまりない為、どのフォーマットを対応しているもまだ分かりません。
私のテストではTIFF, TGA, PNG, JPG, PIC (Softimage) の変換は問題なく可能でした。
残念ながら PSD,GIFとDDSはダメでした。
imf_copy.exe をそのまま実行すると、使えるフラグが見れます。
画像の場合は JPEG と EXR の圧縮設定が出来ます。
オプションが少ないですが、単純な変換には使えます。
使い方は簡単:
test.PIC を test.TGA に変換する場合:
imf_copy.exe C:\test.PIC C:\test.TGA
です。
このようなファンクションもできます:
#python
from subprocess import call
import os
def ConvertPic(folder, in_format, out_format):
for dirpath, dirnames, files in os.walk(folder):
for filename in files:
if filename[-3:].lower() == in_format.lower():
newname = filename[0:-3]+ out_format
newFullPath = os.path.join(dirpath, newname)
oldFullPath = os.path.join(dirpath, filename)
xsiPath = r"C:\Program Files\Autodesk\Softimage 2015\Application\bin"
cmdline = "imf_copy.exe " + oldFullPath + " " + newFullPath
call(cmdline, cwd=xsiPath)
ConvertPic("D:\\convertPic", "tga", "png")
これは指定されたフォルダに入っている in_format ファイルを探して、 out_format に変換します。
この例は TGA → PNG になっています。
※ サブフォルダも含めてのファイル検索です。
参考になるかもしれないので、そのプロジェクトで使っていたコードです。
俺用のコードなので、コメントは英語です、すいません:
#python
xsi = Application
from subprocess import call
import os
# Search File And Convert (used by ConvertTextures)
#-----------------------------------------------
# Search Pic File in a Folder and convert it ot TGA
def searchFileAndConvert(filename, rootdir):
for dirpath, dirnames, files in os.walk(rootdir):
for name in files:
if name == filename:
if name[-3:].lower() == "pic":
newname = filename[0:-3]+"tga"
newFullPath = os.path.join(dirpath, newname)
oldFullPath = os.path.join(dirpath, name)
xsiPath = r"C:\Program Files\Autodesk\Softimage 2015\Application\bin"
cmdline = "imf_copy.exe " + oldFullPath + " " + newFullPath
call(cmdline, cwd=xsiPath)
else:
newFullPath = os.path.join(dirpath, name)
return newFullPath
# Convert Textures
#-----------------------------------------------
# Convert All PIC files inside the Project
def ConvertTextures():
oProject = xsi.ActiveProject
projPath = oProject.path
oScene = oProject.ActiveScene
ImageClips = oScene.ImageClips
for img in ImageClips:
oSource = img.Source
fileName = oSource.Parameters("FileName").Value.replace("/","\\")
oriPath = oSource.Parameters("Path").Value
#Skip noIcon
if oSource.Name == 'noIcon_pic': pass
# FileName without Path
texName = fileName[fileName.rfind('\\')+1:]
# Search for texture file in Project
newPath = searchFileAndConvert(texName, projPath)
# If found, assign it. Replace FullPath for Relative Path
if newPath and newPath[newPath.find(projPath):] != -1:
relativePath = newPath[len(projPath)+1:]
if oSource.Parameters("FileName").Value != relativePath:
oSource.Parameters("FileName").Value = relativePath
これで、全てのPICファイルはTGAに変換されて、パスをTGAに直してくれる。
因みに、他に試したソフトの結果:
■IrfanView
http://www.irfanview.com/
有名なフリーツールですね。商用は有料です(US$12)。
こちらはコマンドラインも対応しているので、丁度いいかもと思い試してみましたが
なぜかTGAに変換するとアルファチャンネルが消えてしまいます。
i_view32.exe D:\TestXSI\textureFile.pic /bpp=32 /convert=D:\TestMaya\textureFile.tga
■XnConvert
http://www.xnview.com/en/xnconvert/
こちらは完全無料です。
なんと500フォーマットを対応しているそうです。そんなにあったのか画像の形式・・・。
とても良いソフトですが、コマンドライン対応していない為スクリプトで使えない。
1人で変換作業する場合はこのソフトは結構お勧めです。
■XnView
http://www.xnview.com/en/
同じ開発会社のソフトなので、XnConvertと似ていますが、
コマンドラインも対応しています(nconvert.exeというサブツール)
こちらもIrfanViewと同じように、個人で使う場合は無料ですが、商用は有料(US$30)
中々良いソフトです。
これにしようか迷っていた時にimf_copy.exe に出会いました。
次にもっと複雑な作業の時にXnViewにしようかな。
nconvert.exe -out tga D:\TestXSITest\textureFile.pic