>   >  痴山紘史の日本CG見聞録:第20回:クラウド環境構築[クラウド環境でのアセット管理]
第20回:クラウド環境構築[クラウド環境でのアセット管理]

第20回:クラウド環境構築[クラウド環境でのアセット管理]

必用なファイルのリストアップ

Gafferの.gfrファイルと.usdファイルを調べて、中で使用されている外部データをリストアップします。gafferは引数によって動作モードが変わり、cliではpythonコンソールを使用することができます。例えば、以下のようにして.gfrファイルを読んでノードをリストアップすることができます。

[neo@matrix HTCondor]$ /opt/gaffer-0.54.1.0-linux/bin/gaffer cli
>>> import Gaffer
>>> script = Gaffer.ScriptNode()
>>> script['fileName'].setValue('/home/neo/Documents/HTCondor/layout_Arnold.gfr')
>>> script.load()
>>> for node in script.children(Gaffer.Node):
>>>     print(node)

また、cliの代わりにpythonを指定するとpythonスクリプトファイルを実行できるので、これを使用します。

とりあえずざっくりと、.gfrファイルと中で読んでいる.usdファイルを解析して関連するファイルをリストアップします。.usdファイルは本連載の第4回で生成したものを使用して、必要最低限の処理でアセットをリストアップします。

今回はこのようなコードにしました。

[neo@matrix neo]$ cat gfrAnalyzer.py
import sys
import re

import Gaffer
import GafferScene


def listupUSDAssets(path):
    ret = []

    fp = open(path)
    for l in fp.readlines():
        m = re.search('references = @([^@]+)@', l)
        if m is None:
            continue

        ret.append(m.group(1))

    return ret


def analyze(path):
    script = Gaffer.ScriptNode()
    script['fileName'].setValue(sceneFileName)
    script.load()

    ret = []
    for node in script.children(Gaffer.Node):
        if node.__class__ == GafferScene.SceneReader:
            fileName = node['fileName'].getValue()
            ret.append(fileName)
            ret.extend(listupUSDAssets(fileName))

        if node.__class__ == Gaffer.Reference:
            ret.append(node.fileName())

    return ret


if __name__ == '__main__':
    sceneFileName = sys.argv[1]
    files = analyze(sceneFileName)
    files = list(set(files))
    files.sort()

    for f in files:
        print(f)

[neo@matrix neo]$

これを実行します。

[neo@matrix neo]$ ~/gaffer.sh python gfrAnalyzer.py layout_Arnold.gfr
/gs/assets/BenchV1/rev001/BenchV1.usd
/gs/assets/BrickPattern1/rev001/BrickPattern1.usd
/gs/assets/Building10_House/rev001/Building10_House.usd
/gs/assets/FamilyCar/rev001/FamilyCar.usd
/gs/assets/Tree3/rev001/Tree3.usd
/gs/work/neo/gaffer/projects/default/references/Bench.grf
/gs/work/neo/gaffer/projects/default/references/BrickPattern.grf
/gs/work/neo/gaffer/projects/default/references/FamilyCar.grf
/gs/work/neo/gaffer/projects/default/references/Hotel.grf
/gs/work/neo/gaffer/projects/default/references/Tree.grf
/gs/work/neo/layout.usd
[neo@matrix neo]$

.gfrファイル中で読んでいる.usdファイルと、さらにその中で読んでいるアセット、それからlookdevに使用した.grfファイルがリストアップされています。ここまでくれば、後は前回の方法と組み合わせてクラウド環境でのレンダリングまでできるでしょう。ここから先はこれまでやってきたことの繰り返しになりますし、環境や要望によって詰めていく内容が異なってくるので言及しません。

皆さん各自工夫していただけたらと思います。

まとめ

これで、本連載のクラウド編は一区切りとなります。おつかれさまでした。次回以降、2回ほどクラウドを絡めた番外編を挟み、5月から新章に突入できればいいかなと考えています。今後も引き続きよろしくお願いします。



第21回の公開は、2020年3月を予定しております。

プロフィール

  • 痴山紘史
    日本CGサービス(JCGS) 代表

    大学卒業後、株式会社IMAGICA入社。放送局向けリアルタイムCGシステムの構築・運用に携わる。その後、株式会社リンクス・デジワークスにて映画・ゲームなどの映像制作に携わる。2010年独立、現職。映像制作プロダクション向けのパイプラインの開発と提供を行なっている。新人パパ。娘かわいい。
    @chiyama

その他の連載