14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

USD 入門編3:macOS Sierra で USD を試してみる

Posted at

これは Pixar USD http://openusd.org に関する情報です。

前回の記事: [USD (2016/8 版) をビルドしてみる] (http://qiita.com/takahito-tejima/items/28c3ba624023f5154479)

前回は windows で USD をビルドしてみましたが、依存ライブラリも多く現状はなかなか大変でした。実は USD の機能をものすごく簡単に試してみる方法があります。それは macOS Sierra を使うことです。

macOS Sierra の Model I/O Framework にはなんと USD インポートが追加されています。何もインストールする必要はありません(XCodeはあったほうが便利です)。では早速試して見ましょう。

適当なテキストエディタで、次のようなファイルを書いて見てください。

cube.usda
#usda 1.0

def Cube "Cube"
{
}

すると、ファインダーにこのように現れます。
ss1.jpg
さらにこのファイルを選んでスペースキーを押すと、QuickLook が起動して、モデルビューワとして使うことができます。
ss2.jpg

めちゃくちゃ簡単ですね。メッシュも同様に、

mesh.usda
#usda 1.0
def Mesh "Mesh"
{
    int[] faceVertexCounts = [4,4,4,4]
    int[] faceVertexIndices = [0,1,4,3,1,2,5,4,3,4,7,6,4,5,8,7]
    Vec3f[] points = [(0,0,0),(1,0.5,0),(2,0,0),
                      (0,0,-1),(1,0.3,-1),(2,0,-1),
                      (0,0.2,-2),(1,0,-2),(2,0,-2)]
}
ss3.jpg

できました。

さて obj ファイルなどとの決定的な違いは、usd を使ってコンポジションができることにあります。早速試してみましょう。上で作った cube.usda ファイルを、別のファイルからリファレンスしてみます。

reference.usda
#usda 1.0
over "RefCube"
( add references=@cube.usda@</Cube> )
{
}

今度は QuickLook ではなくて、reference.usda をダブルクリックしてプレビューを使ってください。現状ではQuickLook は別のファイルを読みに行けないようです。プレビュー内では、上の cube.usda と同じ立方体が表示されるはずです。

ss4.jpg

reference.usda を次のように編集してみます。

reference.usda
#usda 1.0

over "RefCube"
( add references=@cube.usda@</Cube> )
{
}

over "RefCube2"
( add references=@cube.usda@</Cube> )
{
   token[] xformOpOrder = [ "xformOp:translate" ]
   Vec3f xformOp:translate = (-3, 0, 0)
}

over "RefCube3"
( add references=@cube.usda@</Cube> )
{
   token[] xformOpOrder = [ "xformOp:translate" ]
   Vec3f xformOp:translate = (3, 0, 0)
}

このファイルをダブルクリックでプレビューで開くと、3つのキューブが出て来ます。
ss5.jpg

最初の RefCube のリファレンス先を、上で作った mesh.usda にしてみましょう。 も忘れずに。

reference.usda
#usda 1.0

over "RefCube"
( add references=@mesh.usda@</Mesh> )
{
}

over "RefCube2"
( add references=@cube.usda@</Cube> )
{
   token[] xformOpOrder = [ "xformOp:translate" ]
   Vec3f xformOp:translate = (-3, 0, 0)
}

over "RefCube3"
( add references=@cube.usda@</Cube> )
{
   token[] xformOpOrder = [ "xformOp:translate" ]
   Vec3f xformOp:translate = (3, 0, 0)
}
ss6.jpg

ここまで、テキストエディタとプレビューを使って、USD のコンポジションのごく初歩を見て来ました。これ以外にも継承、バリアント、インスタンスなど、USD のコンポジション機能はまだまだありますが、パイプライン開発に関わる方であればここまでの例をみてピンとくる方もいらっしゃるでしょう。

cube.usda や mesh.usda と reference.usda はまったく独立に編集することが可能で、かつ、reference.usda は具体的な型(Cube, Mesh)がないのに、コンポジションの結果 RefCube2 は Cube に translate の意見(=オピニオン)がついたデータとして扱われます。これが多人数での同時編集を可能にする、非破壊シーングラフの強力な機能です。

最後に、scene kit 経由で usda が読み込めるため、Xcode で SceneKit アプリを作って、上の reference.usda ファイルを読み込めば、このようにアプリとして組み込むことも瞬時に可能です。

ss7.jpg

USD 自体がまだベータバージョンのため、シェーディングなどの対応が不完全ですが、VFX スタジオだけでなく Apple も力を入れて USD 対応を進めているのがわかるかと思います。Sierra にアップグレードした際にはぜひ試してみてください。

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?