>   >  痴山紘史の日本CG見聞録:第4回:USDシーンの作成
第4回:USDシーンの作成

第4回:USDシーンの作成

みなさんこんにちは。8月はSIGGRAPH 2018があったため、大きなニュースもモリモリ発表されてきました。最も大きなニュースだと感じたのは Academy Software Foundation(ASWF)発足のニュースです。企業を超えてオープンソースソフトウェアの開発・運営を行うことを後押しする団体ができるというのはすごいことです。このニュースに関してはTechCrunch日本語の記事にもなっています。われわれもこの流れに乗ることで大きな恩恵を受けられますが、そのためには流れに乗るための技術を日々磨いていかなければいけません。皆さんがんばりましょう!!

TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)

USD環境の更新

8月の頭にUSDがバージョンアップし、v18.09になりました。一気に正式版っぽいバージョンになったのと、前回docker-usdで構築した環境ではAlembicを正常に扱うことができないとわかったのでUSD環境を更新します。

docker-usdから変更する点は以下の2つです。

  • ・USD_VERSIONを18.09に書き換え
  • ・USDのビルド方法を標準の手順に置き換え

また、8/12時点でIntel TBBの4.4.6がWebサイトから消えてしまっており、ビルドに失敗するようになっていたので、代わりに4.4.5を使用するようにもします。

USD_VERSIONの書き換えは前回と同じです。

$ vi centos7/usd/Dockerfile

# 18.09 に書き換え
ENV USD_VERSION "18.09"

USDのビルド方法の変更は以下の通りです。

$ vi scripts/build_usd.sh

(中略)

    # cd build && \
    sed 's$https://github.com/01org/tbb/archive/4.4.6.tar.gz$https://github.com/01org/tbb/archive/4.4.5.tar.gz$g' build_scripts/build_usd.py > build_scripts/build_usd_modify.py

    python build_scripts/build_usd_modify.py --alembic $BUILD_DIR/usd/${USD_VERSION}

    #cmake \
    #  -DCMAKE_INSTALL_PREFIX=$BUILD_DIR/usd/${USD_VERSION} \
    #  -DCMAKE_PREFIX_PATH=$BUILD_DIR \
    #  -DPXR_BUILD_TESTS=ON \
    #  -DOPENEXR_LOCATION=$BUILD_DIR \
    #  -DPTEX_INCLUDE_DIR=$BUILD_DIR/include/ptex \
    #  -DOIIO_BASE_DIR=$BUILD_DIR \
    #  -DOPENSUBDIV_ROOT_DIR=$BUILD_DIR \
    #  -DDOUBLE_CONVERSION_INCLUDE_DIR=$BUILD_DIR/include \
    #  -DDOUBLE_CONVERSION_LIBRARY=$BUILD_DIR/lib/libdouble-conversion.so \
    #  -DPTEX_LIBRARY=$BUILD_DIR/lib/libPtex.so \
    #  -DGLEW_INCLUDE_DIR=$BUILD_DIR/include/GL \
    #  -DGLEW_LIBRARY=$BUILD_DIR/lib/libGLEW.so \
    #  -DPXR_MALLOC_LIBRARY:path=$BUILD_DIR/lib/libjemalloc.so \
    #  -DPXR_BUILD_ALEMBIC_PLUGIN=ON \
    #  .. && \
    #make -j ${BUILD_PROCS} && \
    #make install && \

(後略)

あとは前回と同様にbuild-centos7.shを実行すればいいです。注意点としては、標準のビルド処理を使用するとビルド時の標準出力の結果が表示されないため、処理が走っているのか、何かの理由で止まっているのかわかり辛いことが挙げられます。今回はとりあえずtopで様子を見ながら、大体これくらいの時間で終わるだろうなという目星をつけて放置しておきました。

このようにして環境をつくり、Mayaから出力したアニメーション付きのAlembicファイルをusdviewで再生できることを確認しました。

※前述のファイルは、Mocap Onlineから提供されているテスト用のフリーデータを使用し、Mayaから.abcファイルに出力しています。

USDシーンを作成してみる

USD環境ができたので、シーンを作成してみます。


・アセットの準備

アセットを一からつくっていると大変なので何かいいデータはないかなと探したところ、Highend3DAnimator Starter Pack(For Short Films or Animations)Final 6.0.0 for Mayaを見つけました。これは無料でどのような目的にも使用できるアセットが100個以上詰まった、ものすごく有難いデータ集です。今回はこれを使わせていただきます。

このままではただのMayaデータなので、Alembicファイルに変換します。以下のスクリプトをMaya上で実行するとsrcディレクトリにあるファイルをabcファイルに変換してdestに保存します。

import os
import maya.cmds as cmds

src = r'/home/chiyama/Documents/usdtest/assets/Street Walk Scene/scenes'
dest = r'/home/chiyama/Documents/usdtest/assets/Street Walk Scene/cache/alembic'

def getTops():
    ret = []
    for t in cmds.ls(type='transform'):
        p = cmds.listRelatives(t, parent=True)
        if p is not None:
            continue
        if t in ['front', 'top', 'side', 'persp']:
            continue
        ret.append(t)

    return ret

for f in os.listdir(src):
    prfx, ext = os.path.splitext(f)

    cmds.file(os.path.join(src, f), open=True, force=True)
    tops = getTops()

    g = cmds.createNode('transform' ,n='%s_root' % prfx )
    cmds.parent(*(tops + [g]))

    fname = os.path.join(dest, '%s.abc' % prfx)
    cmd = '-frameRange 0 0 -uvWrite -root %s -file "%s"' % (g, fname)
    cmds.AbcExport ( j = cmd )

ただ、Mayaから出力したabcファイルをそのままusdviewで見てもsubdivisionが再現されないようです。usdviewで確認したときに、本来はオブジェクトのsubdivisionSchemeプロパティがcatmulClarkになっていてほしいのですが、どうやってもnoneになってしまいます。いろいろ試行錯誤したのですがどうにも上手くいかなかったので、今回は以下のような感じでabcファイルをusdファイルに変換しつつ、このプロパティを書き換えてしまいます。

$ cat setSubdivision.sh
#!/bin/sh

for f in *.abc
do
  d=$(echo $f | sed "s/abc/usd/g")
  echo $f
  usdcat $f | sed 's/subdivisionScheme = "none"/subdivisionScheme = "catmullClark"/g' > $d
done
$

このようにして出力したものと、元の.abcを横に並べてusdviewで確認してみました。.abc版では下図の通りsubdivisionSchemeがnoneになっています。


今回はソフトウェアの制限など諸々の条件があったので、Maya上の作業では.abc版を使用して、ライティングやレンダリング環境では.usd版を使用します。

次ページ:
USDシーンを作成してみる
・レイアウト

その他の連載