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

~3mth ago

joreg: END OF SHOUTBOX! As this page has is now legacy, it will no longer feature new content. For latest news, see: http://vvvv.org

~4mth ago

joreg: vvvvTv S0204 is out: Custom Widgets with Dear ImGui: https://youtube.com/live/nrXfpn5V9h0

~4mth ago

joreg: New user registration is currently disabled as we're moving to a new login provider: https://visualprogramming.net/blog/2024/reclaiming-vvvv.org/

~4mth ago

joreg: vvvvTv S02E03 is out: Logging: https://youtube.com/live/OpUrJjTXBxM

~4mth ago

~4mth ago

joreg: Follow TobyK on his Advent of Code: https://www.twitch.tv/tobyklight

~4mth ago

joreg: vvvvTv S02E02 is out: Saving & Loading UI State: https://www.youtube.com/live/GJQGVxA1pIQ

~4mth ago

joreg: We now have a presence on LinkedIn: https://www.linkedin.com/company/vvvv-group

~4mth ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~5mth ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/