スライドする文字をつくる
こういう感じの文字が(みえない)レーンの方向にスライドするやつの作り方を解説します。
今回の記事は第8回 Houdiniゆるゆる会 REBOOTEDに合わせて作成したものです。Houdiniゆるゆる会は、テーマに沿ったシーンを事前に作成していただき、当日に発表形式で見せ合う勉強会です。とても刺激的で勉強になるので毎回参加させてもらってます。
かんがえかた
このような文字の流れを作り出すために、注目すべきは、この流れが見えないカーブに沿って順番に進んでいることです。
このベクターフィールドをデータとして作成する手法も考えましたが、今回は上記のように非常に単純な条件だったので、直接移動する際の処理(Solver)に加えました。
文字情報を作成する
FontSOPを使用してTCGAという文字を作成します。
Houdiniのテキスト作成は、text indexという何文字目という情報をアトリビュートにできるので、for文で回して文字ごとに位置を原点にリセットしています。
カーブ情報を加工する
カーブの情報を加工します。といっても、resampleでカーブに等間隔にポイントを追加しただけです。
今回はカーブは手書きですが、ここのプロシージャルに作成しても面白いかもしれません。
CopyToPointする前にAttribute From Piecesでポイントに順繰りの番号を与えておきます。この番号に合わせて文字がコピーされます。
文字を動かす
文字は配置されましたので、今度はそれを順繰りに動かす処理を作ります。Solverの中にはWrangleが一つはいっているだけです。
Wrangleの中身は以下のようになっています。
float timeshift = ch("LoopSpeed")/4;
float rate = chramp("move",float($F%timeshift)/timeshift);
int sort = int(@ptnum-ceil($F/timeshift));
if(sort<0)sort = @numpt+sort;
vector newposition = point(1,"P",sort);
@P = lerp(@P,newposition,rate);
ちょっと複雑なので順に解説していきます。
まずtimeshiftという変数を作ります。この値はLoopSpeedというパラメーターを1/4にして使っています。timeshiftはどれくらいの時間で文字が動くかの値を持っていますLoopSpeedはパラメーターのアウトプットで$FENDを入れているので、必ずタイムスライダーの値でループします。
rateという変数は、いま文字がどの位置(割合)にいるかを持っています。この値にはrampで作成したタメツメを加えているので、動き方に工夫ができます。
sortという変数は文字が移動した場合に次に移動するべきポイントナンバーを定義しています。基本的には自分の値よりもN個低い値ですが、現在の番号が0以下の場合はポイントの最大値に折り返します。
最後にnewpositionという変数を作成しています。この値はsortの持つポイントの座標です。現在の位置とこのnewpositionの値から、rateで今はどの位置にいるべきかを求めています。
Houdiniゆるゆる会、面白い作例をたくさん見れますし、ガシガシ質問できるよい機会だと思うので、ぜひHoudini勉強中の方は参加してみてください!
この記事が気に入ったらサポートをしてみませんか?