必用なファイルのリストアップ
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月を予定しております。
プロフィール