これを作るよ.
目次
- はじめに
- ピースとガイドジオメトリを用意
- UV Layoutでピースを敷き詰める
- Extract Transformでトランスフォーム情報を取得
- Blend ShapesやCHOPで各状態をモーフ
- Transform Piecesでピースを復元
- Time Shiftで位相をずらして合成
- マテリアルとレンダリング
- おわりに
- 参考・関連文献
はじめに
大まかな流れは目次の通り.
プロジェクトファイルはこちら
細かい説明は割愛するのでファイルを見てね.なおMOPsを使用しているのでファイルを見たい人は導入してね
全体像は以下
ピースとガイドジオメトリを用意
ピースとなるジオメトリをFontで用意する.
原点に適当に点を作ってAttribute Randomizeでpscaleとorientを散らす.
できればA~Zを個別に作りたかったけど,方法がわからなかったのでFontのTextにA~Zをそのまま打ち込んだ.
その後Connectivityで文字ごとにピースを分け,着色したりAssembleでピースごとにパックしたりする.
今回ガイドジオメトリにもFontを使用したが,平たいものなら何でも大丈夫.
UV Layoutでピースを敷き詰める
UV Layoutは本来はその名の通りUVをきれいに敷き詰めるSOPだが,応用すると平たいサーフェスにも敷き詰められる.
設定項目はこんな感じ.ピースジオメトリとガイドジオメトリを接続し,Islands To PackのUV AttributeとTargetsのUV AttributeにPを設定し,Pack IntoをIslands From Second Inputにするとガイドジオメトリの中にピースジオメトリが敷き詰められる.
Island Rotation StepやIterarionsなどを変更し望む絵が得られるよう調整する.
本機能について詳しく知りたい人はEntagma氏のチュートリアルを参照.
Extract Transformでトランスフォーム情報を取得
Extract Transformは同じ形状の2つのジオメトリを比較し,どう変形したか(トランスフォーム情報)を返すノード.
Connectivityで設定したPiece Attributeを指定するとピースごとにトランスフォーム情報を持ったポイントが得られる.
ちなみにここで得られたポイントとピースを後に使うTransform Piecesに接続するとUV Layoutで敷き詰めた状態が復元され,正しくポイントにトランスフォーム情報が入っていることがわかる.
Blend ShapesやCHOPで各状態をモーフ
上記工程で得られたBetter Harder Strongerの3つの文字をモーフさせる.
先にBlend Shapesについて説明すると,Primitive ID AttributeにConnectivityで設定したclassを指定することで同一ピース文字間のモーフが可能になる.
今回は文字の端から遷移していく動きを作るにあたり,無料のSideFX公式(?)ツールのMOPsを用いた.無くても作れそうだけどこれ使ったほうが個人的に楽.
MOPs Shape Falloffで左から0→1と変化するフォールオフアトリビュートを作成する.
PreView Falloffにチェックすると色でフォールオフを確認できる.
その後Transformで各文字をいい感じの位置に移動させる.
これをモーフ後のポイント群として使いたいため,モーフ前のポイント群にAttribute Copyで転送する.
このときにMOPs Shape Falloffで生成されるi@idも一緒に転送しておかないと後のMOPs Delayで正常に動作しないので注意.
Blend Shapeのblend値にキーフレームを打ってMOPs Dedayを見るとBetter→Harderに左から文字が組み上がっている.
これは右側のほうがフォールオフ値が大きく動きが遅延しているため.
以上のモーフをBetter→Harder/Harder→Stronger/Stronger→Betterの3つ作る.(といっても残り2つはコピペするだけ)
3つのモーフを繋げるためにCHOPsを使用する.
ジオメトリの情報をCHOPに持ってくるためにはGeometry CHOPを用いる.
GeometryでSOP階層のインポート元を指定し,P orient pscaleを持ってくる.
Trimでそれぞれチャンネルをモーフの始まりから終わりまでに切ってSequenceでその3つのチャンネルを1つに直列に繋げ,Cycleで動きをループさせる.
Sequenceについてはこのサンプルがわかりやすい.
ChannelでCHOPのチャンネルをSOPで参照できる.
Geometry, Channel共にMethodをAnimatedにしないと動いているチャンネルは正常に処理できないので注意.
Transform Piecesでピースを復元
Transform Piecesに動かしたいジオメトリ(ここでは小さい文字)とテンプレートポイントを接続し,マッチングさせるアトリビュート(ここではclass)を指定すると,一致するアトリビュートを持ったジオメトリがポイント上にトランスフォームする.
前述したが,ピース文字はそれぞれAssembleでパックしたほうが処理が早い.
Time Shiftで位相をずらして合成
TimeShiftで適当にモーフィングをオフセットして元とマージすればジオメトリは出来上がり.
マテリアルとレンダリング
ライティングの影響を受けないようにするためにConstantマテリアルを背景と文字に割り当てる.
プロパティはデフォルトのまま.
ビューポートの絵面をそのままレンダリングしたいときはOpenGL ROPを使う.
レンダリングしてみると色味が変わってしまったときはおそらくACES(OpenColorIO)かガンマ値が悪さしているのでビューやレンダラの設定を見てみると良い.
おわりに
UV Layout SOPは色々使えそうで夢が広がるのでよい.
参考・関連文献
- MOPs: Motion Operators for Houdini導入のメモ | shujihirai
- Houdini 17 Quicktip: (Ab)Using The UV Layout SOP For Geometry Packing