» チュートリアル ジオメトリモーフィング CPU
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

チュートリアル ジオメトリモーフィング CPU

English | French | Russian | Italian

CPUベースのアプローチ

既に聞いたかもしれませんが、ジオメトリモーフィングでは2つの3Dモデルが必要でそれらは同じ頂点数から成り立つだけではなく、インデックス(順番)も同じ方法でなければなりません。もしそれらの必要条件の一つが備わっていなければ、モデルをモーフィングは出来ますがよりおかしな結果が得られるかもしれません。

等しいインデックスが施された3Dモデルをあなたのお気に入りのモデリングソフトウェアで作成することはそれらのソフトウェアの役割です。このチュートリアルではvvvvで作られた2つのプリミティブな円錐を単にモーフィングさせます。ではパッチを作りましょう:

モーフィングターゲットの準備

最初に作成するパッチは2つのシリンダーの頂点を交互に単純にレンダリングするものです。赤色と緑色にします。一つは正しく、もう一つはさかさまにします。この2つがモーフィングターゲットです。パッチはあなたが何かするまでは下の画像の様になります。

Camera (Transform Softimage)AspectRatio (Transform) ノードはここでは本質的ではありませんが単に良いアイデアということを書き留めておきます。

変化しないシリンダーの出力はGouraudDirectional (EX9.Effect)のMeshに接続されています。メッシュは頂点とインデックスバッファから成り立ちます。vvvvでのインデックスバッファは単純なスプレッドで表されるのに対して、頂点バッファはジオメトリを作り上げるいくつかの成分の様なものです。VertexDeclaration(EX9.Geometry Mesh)ノードとシリンダーの接続とその変化しない出力は頂点成分が次のものから成り立つことを示してくれます。シリンダーメッシュの中のPosition、Normal、そしてTextureCoordinateの値です。他のメッシュはその他の成分を含むことができます。

ちょうど2つのメッシュとモーフィング要素と私たちのために働きかけるvvvvのノードはまだありません。そして、以降もそのようなノードは恐らく無いでしょう。(なぜなら実装するのにうんざりするからです。)そして直ぐにただ正確にそのようなノードが動作するパッチを作成すればとにかく全てが正確に動作する方法を知りたがるでしょう。

頂点バッファにアクセスする

従って、手動でモーフィングできるパッチを作成出来るようにメッシュの全ての成分にアクセスするためのノードが必要です。下のパッチを見てください。Mesh (EX9.Geometry Split)に続いてVertexBuffer (EX9.Geometry Split)が全ての頂点データを読み出しています。このパッチはこの処理が逆にできることも実演しています。Mesh (EX9.Geometry Join)に続くVertexBuffer (EX9.Geometry Join)は、レンダリングするGouraudDirectional (EX9.Effect)のためのもとの正しいメッシュへシリンダーを結合しています。

Mesh (EX9.Geometry Split)の出力であるインデックスバッファは直接 Mesh (EX9.Geometry Join)に接続され、頂点バッファの位置と法線成分は分割されて結合するVertexBufferノードに扱われることに注意してください。

モーフィングの実行

これを見ていて私たちが今行うべきことが既に分かったかもしれませんが、私たちには2つのVertexBufferノード間をモーフィングするパーツが足りません。緑色のシリンダーの頂点データを、赤色のものとモーフィングするための簡単なInputMorph (Value) を使って分割しましょう。

色は頂点バッファの成分ではなくエフェクトのパラメータなので、色のモーフィングをするにはInputMorph (Color)ノードを使いましょう。InputMorphの値を0から1の間でドラッグすれば、赤色のシリンダーと逆さまの緑色のシリンダーが滑らかに混ざり合った結果となります。質問がありますか?

このアプローチでは、位置と法線のモーフィングのすべての計算はCPUで行われます。新しい頂点バッファと/またはメッシュは全てのフレームで作成されそれぞれのノードの"Apply"ピンが1であり、これはいくらかの時間がかかります。

この一時停止は比較的小さなメッシュを動かしている限りは問題ありません。もし全体的に少し遅いと感じたらよりクールなGPUベースのアプローチを読んでください。

ボーナス

もし頂点数とインデックスが一致しない2つのモデルを使ったら何が起こるか見てみましょう。最初のCylinderノードをダブルクリックして、Teapot (EX9.Geometry)ノードに置き換えてください。即席のメディアアートです!

anonymous user login

Shoutbox

~12h ago

weareallclowns: has anyone used avr-gcc with vvvv? thinking about uploading a vvvv sketch to arduino

~2d ago

motzi: @udo2013: you can't change the resolution of the standard DX11 renderer (res=window size). use temptarget renderer + preview instead

~2d ago

Tamoeba Kale: Is it possible that i am missing thew whole "animation" category nodes? how?

~3d ago

udo2013: hello. is there a way to change the fullscreen resolution of renderer dx11? found no possibility + can not be opened.

~3d ago

tekcor: @joreg vl.glTF loader looks intense inside, but is red in b36.

~3d ago

MultiNIL: @joreg sure!

~3d ago

joreg: @MultiNIL supa! can we have this as a gallery entry? 24

~4d ago

MultiNIL: forgot to share: our very first vvvv project, digital-hybrid-airhockey-table: https://vimeo.com/210617286 making of: https://vimeo.com/269974764

~4d ago

dawoof: looking for a VJ/performer for the 1st of june for 1 hour in Amsterdam for a Conference, Hit me up +649241940

~4d ago

tekcor: @joreg cool seems like i missed that one. such a good shader resource