3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

画像データの管理について考える

本日はお休みを頂きました。
が!結局やることはCGなんですよね。あはは。

現在、自分用パイプラインを考えているのですが、
どうも画像管理がネックになります。

例えば、よくあるモデルパッケージの状態というと…

f:id:blendcomp:20150311162805p:plain

全部入り…というやつなんですけどこれだと
パッケージとしては常に重たいものが出来上がります。
更新されていないものも常に含むという形式なので。

次にこの中を分解してみましょう。

f:id:blendcomp:20150311163221p:plain

とまぁ簡単に分けてみたものの…これはこれで難しいです。
メッシュとシェーダーを分けるのが難しい理由は、アサインの選択にあります。
過去にフェイスアサイン周りをまとめたので詳細はこちらに。

なので一番お手軽なのは、テクスチャーを分けることですかね。
これは割とお手軽にできると思います。
理由はMayaから最新のテクスチャにリロードするという設定をするだけなので。

とはいえ、その後の統合後のバージョン統一はどうするか…
という問題も出てきたりするのですがそこは置いておきます。

テクスチャのフロー(シンプル版)

f:id:blendcomp:20150311163919p:plain

うーん...。割と大変かも?

洗い出してみてわかるけどもデータを管理するっていうのは本当にたいへんです。
かつ複数人が共有する…という条件を追加すると嫌になってきますね。

バージョン付きデータの作成方法を考える

ちょっとPhotoshop用のスクリプトを書いてみました。

// 開いているpsdデータのフォルダパスを取得
fullPath = activeDocument.path;
dataName = activeDocument.name;
folderRef = new Folder(fullPath);
fileList = folderRef.getFiles();

// psdフォルダの作成
psdFolderPath = fullPath + "/_psd/"
psdFolder = new Folder(psdFolderPath);
flag = psdFolder.exists;
if (!flag)
    psdFolder.create();
psdFiles = psdFolder.getFiles();

// フォルダ内にデータが存在しない場合は、"ファイル名から最新のバージョンを判定"は行わない
iterFlag = 0
if (psdFiles != null)
    iterFlag = 1

// tgaフォルダの作成
tgaFolderPath = fullPath + "/_tga/";
tgaFolder = new Folder(tgaFolderPath);
flag = tgaFolder.exists;
if (!flag)
    tgaFolder.create();

// ファイル名から最新のバージョンを判定
var ver = 0
var newVer;
if (iterFlag){
    for (i=0; i<psdFiles.length; i++){
            splitFileName = String(psdFiles[i]).split("_");
            verStr = splitFileName[3].split(".")[0];
            tmp = parseInt(verStr,10);
            if (ver < tmp)
                ver = tmp
    }
}

// 最新バージョンの作成
if (ver == 0){
    ver = 1;
    newVer = "_" + ("000" + ver).slice(-3);
}
else{
    ver += 1;
    newVer = "_" + ("000" + ver).slice(-3);
}

// バージョン付きのフルパスがここで作られる
newDataName = dataName.replace("_base",newVer);

// psd saveAs
newFilePath = psdFolderPath+ newDataName;
psdFile = new File(newFilePath);
psdSaveOptions = new PhotoshopSaveOptions();
psdSaveOptions.alphaChannels = true;
psdSaveOptions.annotations = true;
psdSaveOptions.embedColorProfile = true;
psdSaveOptions.layers = true;
psdSaveOptions.spotColors = false;
activeDocument.saveAs(psdFile, psdSaveOptions, true,  Extension.LOWERCASE);

// tga saveAs
newFilePath = tgaFolderPath + newDataName;
tgaFile = new File(newFilePath);
tgaSaveOptions = new TargaSaveOptions();
tgaSaveOptions.alphaChannels = true;
tgaSaveOptions.resolution = TargaBitsPerPixels.THIRTYTWO;
tgaSaveOptions.rleCompression = false;
activeDocument.saveAs(tgaFile, tgaSaveOptions, true,  Extension.LOWERCASE);

これは開いているPSDファイルのディレクトリに、
・_psd
・_tga
というフォルダを作成しバージョン付きでセーブするスクリプトです。

ただ命名規則に則らないと上手く実行できません。
この例では、マスターファイルを hoge_work_base としました。
f:id:blendcomp:20150311165122p:plain

かつこれはテスト用なので、複数ファイルに対応していません。
バージョン付きはサーバの統合領域に保管して、統合領域の最新をリリース領域に移動…
がいいのかも。でもテクスチャ単体でパッケージにしたりしないと…。

とかもろもろ考えてたら終わらず…。
休みなのにいろいろ考えてたら余計に疲れた。

かつ結局ちゃんとした結論出てないし\(^o^)/
※ 諦めました