Houdiniといえばなんといっても醍醐味はエフェクト制作。エフェクトアーティストとして活躍し、TIPSサイト「No More Retake」も運営している北川茂臣氏にラインをメインとしたエフェクトを紹介してもらった。

※本記事は月刊「CGWORLD + digital video」vol. 222(2017年2月号)からの転載となります

TEXT_ 北川茂臣(nomoreretake.net
フリーランスHoudini使い。テレビ、映画、実写、
フル3Dなど、ジャンル問わずHoudiniを使って活動中。
3DCG のTips サイト「No More Retake」運営

EDIT_海老原朱里 / Akari Ebihara(CGWORLD)、山田桃子 / Momoko Yamada

制作機会の多いラインエフェクトをマスターしよう!

今回は主にライン(線)を使ったエフェクトの作成、レンダリング、シミュレーションに関するTIPSをご紹介していきたいと思います。ここで言う「ライン」とは単純な線のことです。Houdiniは他の3DCGソフト同様、NURBSやポリゴンで線を引くことができますが、ここでは見た目が線っぽければ全部ラインと呼ぶことにします。

エフェクト作成というと、炎や煙、破壊などが真っ先に思い浮かびますが、このラインを使ったエフェクトも実はつくる機会が意外と多いと思います。例えば、雷や軌跡エフェクト。ライン自体がメインのエフェクトでなくとも衝撃波エフェクトの要素のひとつとして飛び散るラインを入れてみるなど。はたまた、他のエフェクトのガイドとして使うこともあります。ここではそんなラインにまつわる話をメインにしつつ、現場ですぐに使えそうなTIPSをいくつかご紹介したいと思います。

TIPS 01 Line Trail

ここでは軌跡のラインエフェクトの作例をご紹介したいと思います。軌跡の作成方法はいくつかあり ますが、ここではパーティクルを使用。ポイントの通った跡にパーティクルを発生させることで軌跡を作成しています。

パーティクルを使う場合、作成した軌跡を繋げてラインにする処理を自分で行う必要があります。ラ イン作成には「Add」SOPを使用しています。「Add」SOPは主にポイントやプリミティブの追加に使うノードで、指定したアトリビュートの同じ値のポイントを繋いでくれる機能があります。これを使ってポリゴンのラインを生成することが可能です。この作例では、パーティクル作成時に付与されるsourceptというアトリビュート(発生元ポイント番号を表す)を使って、共通のポイントから発生したパーティクルを繋いでラインにしています。

こうしたパーティクルを使った軌跡作成の利点は、挙動の制御にパーティクルの機能を使えることだと思います。例えば、ageアトリビュートによって色を変えるとか、lifeにバラつきをもたせることでラインの長さを変える、などといったことが比較的容易にできます。軌跡の作成は応用範囲もとても広く、つくっていて楽しいエフェクトのひとつではないでしょうか。

なお、パーティクルを使うのがちょっと難しいと感じた場合は、「Trail」SOPを使うとより簡単に軌跡の作成が行えます。「Trail」SOPはポイントの軌跡をつくりそれを繋げることのできるノードで、手軽さが利点です。こちらを使っても作成のようなエフェクトをつくることができます。

1.パーティクルを使った軌跡表現とそのネットワーク


パーティクルを使用した軌跡の作例です。この作例のネットワークを解説します


【1】ベースはシンプルな球体です/【2】その球体を「Add」SOPを使って頂点ポイントだけを残して面を削除します。「Add」SOPは、そのノード名から追加するものというイメージがありますが実は削除の機能もあり、これが結構便利です。設定は[Delete Geometry But Keey the Point]を有効/ 【3】「Point Replicate」SOPを使ってポイントを複製。これについては軌跡作成時に複数のラインの束をつくるのがねらいです。ポイントの分布などを調整できるので、それにアニメーションを付けるとラインの軌道に変化を与えられます/【4】wrangleを使ってポイントごとにランダムなwidthアトリビュートを追加しています。ライン生成時の太さを定義するものです/【5】「Attribute VOP」SOPを使って色を割り当てています。ポイント番号順にグラデーションになるようにしています/【6】動きは単純な回転アニメーションです/【7】パーティクルの作成。「POP Source」DOPの[Emission Type]を[All Points]に設定し、全てのポイントからパーティクルが発生するようにしています。パーティクルには速度は与えず、その場に残るようになっています/【8】「Add」SOPを使ったラインの作成。さらに、軌跡とは別に味付けとして中心にVolumeとライト、それに軌跡の周囲に賑やかしのパーティクルなども足しています

2.作例制作の概要

図のようなシンプルな図形を回転させて、その各頂点の軌跡を描いてつくっています。数字は上のネットワーク図と対応

3.Trail(SOP)を使用した場合のパラメータ設定


「Trail」SOPで軌跡をつくる場合の設定は[Result Type]を[Connect as Polygons]に、[Close rows]をOFFにします。後は[Trail Length]の値でどれだけのフレームの軌跡を残すか指定すればOK。軌跡とラインの作成の両方を行なってくれます。[Close rows]がONだとラインではなく面が生成されてしまうので注意

次ページ:
Topic 02
ラインのレンダリングに関するTIPS

[[SplitPage]]

TIPS 02 ラインのレンダリングに関するTIPS

Houdiniの標準レンダラであるMantraはラインをレンダリングすることができます。「ラインがレンダリングできる」と、言ってしまえばただそれだけですが、Houdiniを使い始めた当初はこれにいたく感動しました。このおかげで、ラインをレンダリングするためだけにポリゴンのチューブに変換する必要もなく、大量のラインを使ったエフェクトの作成も可能です。また、widthというアトリビュートによって、レンダリング時にラインの太さを調整することもできます。ほかにもラインをレンダリングする上で知っておくと便利な機能がいくつかあるので、ここではそういったTIPSをご紹介します。

1.インターフェイス風の図柄とそのネットワーク


画像のようなインターフェイスっぽい図柄をラインで作成しました。レンダリング時にラインを様々な太さにしています


ネットワークは上のようになっています。大きく分けて、ネットワークの左側【A】が絵の大部分を占める円群をつくっている場所です。【1】奥行き方向に短いラインを作成/【2】その上にscatterでポイントをばらまく/【3】コピーの際に使うpscaleなどのアトリビュートを作成/【4】ラインの太さ調整用にwidthアトリビュートをランダムに作成/【5】コピーする、というながれになっています。そして、右側Bが円の外側のメモリのような図柄をつくっている場所です。こちらはcircleの円周上にラインを並べただけです/【6】「Polyframe」SOPを使って円に法線情報を追加し、それをコピー時に反映させることでラインが中心から外に向くようにしています/【7】また、ラインの太さを決めるwidthアトリビュートの作成には、ここでは「Attribute Create」SOPを使用しています

2.widthアトリビュートによるラインの太さの調整


ラインを構成する各ポイントにwidthというアトリビュートをもたせておくと、Mantraはそれを使ってラインの太さを調整してくれます。例えば 「Attribute Create」SOPを使ってwidthアトリビュートをつくり、その値を0.01とすると、一律で0.1の太さのラインをレンダリングしてくれます。このおかげでレンダリングのためにラインをポリゴンのチューブに変換する必要もなく、処理も軽くてすみます


作例では、円群の部分は「Attribute Wrangle」SOPを使って、ポイントごとに乱数を割り当て、それ を基にRampで太さを調整した値をwidthアトリビュートに設定して、異なる太さのラインにしました。周囲のメモリの部分は「Attribute Create」SOPで単純にwidthアトリビュートを固定の値で割り当てました

3.widthのコントロール


今回の作例ではラインの太さ全体を調整していますが、局所的にラインの太さを変更することもできます。ラインを構成するポイントごとのwidthアトリビュートを調整することでそれが可能になります。また、VOPやwrangleを使うと比較的簡単に行えます。ここではVOPを使った場合のネットワーク例をご紹介します。VOPネットワークの中身としては、ポイント番号を0~1の範囲にフィットさせ、それにrampを割り当て、できた値をwidthとすればOK。先端にいくほど細くなる、透明になるなどの表現でよく使います

4.ラインをチューブ状にレンダリングする

Mantraでは通常ラインは板状にレンダリングされます。これをチューブ状にレンダリングしたい場合、シェーダで法線を操作することでそれが可能です。一番手っ取り早いのは「Hair Normal」VOPを使う方法だと思います。これを用いることでチューブ状(っぽい)法線をつくることができます。画像は板状のラインレンダリングと、チューブ状のラインレンダリングを比較したものです。上が通常、下がHair Normalノードを使ってチューブ状にしたレンダリング画像。ラインがチューブ状か否かでハイライトの入り方などのちがいが見てとれます


ここでは「Hari Normal」VOPの出力を「Surface Model Shader」VOPの入力[baseN」にコネクトして使っています。シェーダの法線を計算する箇所に「Hair Normal」VOPをコネクトすればOK。他のシェーダで使うときも法線っぽいところにコネクトすればよいかと思います

5.ラインのグラデーション


ラインのUV情報を利用して、U方向V方向に任意のグラデーションを付けることができます。これを使うと、例えばV方向のグラデーションを設定するとラインの根元から先端にかけてグラデーションを付けることも可能です


「UV Coords」VOPを使ってUV値を取得し、使いたい方にrampを使ってグラデーションをつくります


U方向のグラデーションを使ってグローのような表現もつくることができます。ここでは色とアルファのそれぞれに異なるグラデーションを割り当てて、グローのような表現をつくってみました

色の方はcolor ramp、アルファの方はspline rampで調整しています

次ページ:
TIPS 03
流体を使いラインを動かす

[[SplitPage]]

TIPS 03 流体を使いラインを動かす

ラインを使った面白いシミュレーションとして、「流体を使ってラインを動かす方法」をご紹介しま す。これは「Wire Object」DOPと「POP Solver」DOPを組み合わせてラインのシミュレーションを行 うというものです。

HoudiniのDOPシミュレーションは大雑把に言うと、「シミュレーションに必要なデータをもつオブジェクトと、そのデータを用いて挙動を計算するソルバによって行われている」と言えます。ノードと して用意されている「POP Object」DOPや「POP Solver」DOPがそれらにあたります。これらのノードは、例えば「POP Object」DOPと「POP Solver」DOP、「Wire Object」DOPと「Wire Solver」DOP、「Smoke Object」DOPと「Smoke Solver」DOPというように、それぞれ対応したノードをセットで使うのが基本なのですが、ソルバにとって意味のあるデータをオブジェクトがもっていれば、異なる組み合わせでもシミュレーションができます。今回はそれを利用してラインのシミュレーションを行いました。

もうひとつここで使ったテクニックとして、ラインをたくさん発生させるために「POP Source」DOPを利用しました。本来であればパーティクルの発生に用いる「POP Source」DOPですが、[Emission Type]を[All Geometry]に変更することで、ソースオブジェクト自体をシミュレーションに追加することができます。この手法はほかにも様々な使い道のある便利な手法です。例えば、Rigid bodyに使えば次々と破片を発生させることができますし、Clothシミュレーションに使えば無限に発生する紙吹雪のようなものもつくることができます。どの作例も比較的少ないノード数でつくることができるので、チャレンジしてみてはいかがでしょうか?

1.流体を使ってラインを動かすエフェクトとそのネットワーク


流体を使ってラインを動かした作例です。この作例のネットワークを見ていきます。


【1】まずPyroを使った煙のシミュレーション。ここで作った煙を使って後工程でラインを動かします。煙の設定はPyroシェルフのWispy Smokeとほぼ同じ内容です/【2】煙のシミュレーション結果の読み込み。その後「Time Blend」SOPでサブフレーム補完しています/【3】シミュレーション用のライン。1本だけです/【4】ラインのシミュレーション。ここがこの作例のメインです。DOPネットワークの構造は通常のパーティクル作成時と似ています/【5】大きなちがいは「POP Object」DOPではなく「Wire Objec」DOPを用いている点です。「Wire Object」DOPを用いることでラインをシミュレーションすることができます/【6】「POP Advect by Volumes」DOPを使って、煙のシミュレーション結果からvelフィールドを取得し、ラインの各ポイントを動かします/【7】「POP Source」DOPの[Emission Type]の設定を[All Geometry]にすることでシミュレーション内に3 で入力したラインを発生させることが可能です。SubStepごとにラインが発生しています/【8】色とアルファを発生からの時間で変化させています。徐々に消えていく設定にしました/【9】入力したラインのままシミュレーションすると、流体の動きによってどんどんラインが伸びてゆき、分割数が足りずカクカクした形状になってしまいます。そのため、「Resample」SOPを使ってラインを再分割しています。「Resample」SOPは「SOP Solver」DOP内で行なっています。こうすることで、ラインが伸びてもなめらかな曲線を維持できます

2.POP Sourceの設定


「POP Source」DOPの設定[Emission Type]を[ALL Geometry]にすると、エミッタとして指定したジオメトリそのものをシミュレーションに追加できます。ここではラインをたくさん生成するために利用しました。これをRigid bodyに利用すると、無限に発生する破片や紙吹雪のClothシミュレーションをつくることができます。次ページで詳しく紹介しましょう

次ページ:
応用1
Emit Rigid body

[[SplitPage]]

応用1 Emit Rigid body


「POP Source」DOPを用いたRigidbodyの発生シミュレーションをご紹介します。ごく普通のRigid bodyのシミュレーションに先に紹介した設定の「POP Source」DOPを追加したものになります


こちらがネットワーク。【1】Pack状態にしたティーポットオブジェクトを作成/【2】シミュレーションで大量発生させています。ネットワークはシンプルで、基本的なRigid bodyのシミュレーションに「POP Source」DOPを付けることでRigid bodyを発生させています。POP Sourceの設定は[Emission Type]を[ALL Geometry]に設定。[Impulse Activation]をエクスプレッションで制御して、発生間隔を調整しています

応用2 Emit Clot

もうひとつ応用例としてClothシミュレーションへの応用をご紹介します。基本的には、先ほどのRigid bodyと考え方は同じです。通常のClothシミュレーションに「POP Source」DOPを使ってジオメトリを追加します


ネットワークについて。【1】発生させるグリッド/【2】wrangleを使って[baseP]というアトリビュートを追加します。シミュレーションに必要です/【3】シミュレーション部分/【4】Multiple Solver」DOPを使うことで「POP Source」DOPを利用可能にしています。「Multiple Solver」DOPは2つ以上のソルバを使って計算する際に必要なものです。実は「POP Source」DOPの中を見るとSOP Solverによってつくられていることがわかります。それを「Finite Element Solver」DOPと併用するために「Multiple Solver」DOPを利用しています。なお、先の2つの作例では「POP Solver」DOPと「Rigid body Solver」DOPのそれぞれの中にMultiple Solverが含まれていたため、特に気にせず使えましたが、「Finite Element Solver」DOPではそうではないため、これが必要になるのです

ちょっとしたテクニックの積み重ねこそ一番の近道!

ラインエフェクト系のTIPSを中心に紹介させていただきました。どれも少ないノード数で比較的簡単に導入できるテクニックを選んでみたつもりです。ライン系は応用範囲が広いので、ちょっとしたテクニックを覚えていくと、つくれるものの幅が広がると思います。

Houdiniは他のソフトより幾分とっつきづらく、はじめはなかなか思うように使いこなせないかもしれません。ですが、ノードの機能やよく使う組み合わせなどを学習していくうちに一気につくれるものの幅が広がる、そういうソフトだと思います。上手くいかなくとも"あせらずコツコツと"です。



  • 月刊CGWORLD + digital video vol.222(2017年1月号)
    第1特集:Houdini徹底ガイド
    第2特集:ハイエンドゲーム開発の現場

    定価:1,512円(税込)
    判型:A4ワイド
    総ページ数:144
    発売日:2017年1月10日
    ASIN:B01MXRSEI0
詳細/ご購入はこちら