» チュートリアル ジオメトリモーフィング 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

~8d ago

joreg: Postponed: Next vvvv beginner course starting April 29: https://thenodeinstitute.org/courses/vvvv-beginner-class-summer-2024/

~1mth ago

~1mth ago

joreg: The Winter Season of vvvv workshops is now over but all recordings are still available for purchase: https://thenodeinstitute.org/ws23-vvvv-intermediates/

~1mth ago

schlonzo: Love the new drag and drop functionality for links in latest previews!

~2mth ago

joreg: Workshop on 29 02: Create Sequencers and Precise Clock Based Tools. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-08-create-sequencers-and-precise-clock-based-tools-in-vvvv-gamma/

~2mth ago

joreg: Workshop on 22 02: Unlocking Shader Artistry: A Journey through ‘The Book of Shaders’ with FUSE. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-12-book-of-shaders/