Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@takahito-tejima

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

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

前回の記事: USD (2016/8 版) をビルドしてみる

前回は 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 にアップグレードした際にはぜひ試してみてください。

11
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What is going on with this article?