タイトルはズバリ、今年11月12日公開予定のハリウッド映画「Skyline」の光る筋のことです。
トレーラーが公開されているので、どなたでも見ることが出来ます。
Skyline
トレーラーを見ながら感じたことは、こういう系のエフェクトって最近やたら多いなぁってことです。
こういう系というのは、krakatoa的な、モヤモヤ系のエフェクト全般です。
僕が勝手に思ってるだけですけど。
3DSMAXなら、お手の物でしょう。うらやましい!
Houdiniだと、どんな風にアプローチすべきだろうと考えた結果、僕の最近の十八番のDOP to POPかな〜、と思いました。
ちょうど前回の記事に書いたことだし、別バージョンとして作ってみようかと思い、試してみました。
なかなか難しいですね。
やはり、扱えるパーティクルの量に圧倒的な開きがあります。
パーティクルのみでやろうと思うと太刀打ちできません。
とりあえず、それらしく見えるように軽く調整して、コンポジットでごまかします。
結果論ですが、もう少しシミュレーション全体のレゾリューションを上げて、パーティクルを細かくレンダリングしてあげれば、さらによかったかもしれないですね。
少しボリューミーな感じになってしまいました。
本家はいい感じにウィスピーで、なかなかそれに近づけるのは難しかったです。
画の半分は、Optical Flareに助けられてる感はありますね、ラッキーです。
さて、簡単に解説していきます。
今回の大元になるシミュレーションは、PyroFX Wispy Smokeを使用しました。
3本の軌跡を作りたかったので、一括でコンテナを使うのではなく、3つに分けました。
少しコストが掛かるように感じますが、各々調整したり、レゾリューションを上げたりする場合、このほうが安価だと考えました。

当初、煙をちょちょっといじればそれらしくなるかと思ったのですが、そうは問屋がおろしてくれませんでしたw
念のため、のちのち使えるかもしれないので、UpResを試しつつ作業を進めます。
PyroFXやUpResについては、今後詳しく解説出来るといいですね。
僕もまだほとんど未知の世界ですね。難しい。
ポイントになる点は、Velocity Fieldの準備と、UpResを含むFluid Simulationです。
まず、ソースに対しPyroをくっつけます。
このあたりは、シェルフからいけるので割愛します。
Pyroにはかなり細かいNoiseの設定があります。
特に重要なのは、Noiseの設定が2段階であるということです。
Pyroの強みはWaveletを利用してUpResするということにあります。
そのために、Low-Highで2段階の設定が必要になります。
ここはトライアンドエラーを繰り返していい感じに持っていくしかないですね。
うねりを強くするのか、サラッと流すのか、設定するための目標を意識して調整しましょう。
今回は、多少細かめにうねりを加えました。
詳細はPyroを解明する際に取っておきます。(いつやるかはわからないですがw)
気をつけなければならない点があります。
Rest Positionに注意が必要です!
これは僕も全然気にかけていなかった部分で、レンダリングして気づいたんですが、Rest Positionがデフォルトだと、50フレームでリセットされるってことです。
これ、本当かwって思いました。
とりあえず今回は詳しく調べてないですけど、尺以上のフレームを入れて回避しました。
これ0とか-1でリセットしないとかできそうですけどね…調べねば。
ノイズを使うシェーダを使用しないでレンダリングする場合は関係ないですけど、ちゃんと設定しないと気持ち悪いですねw
どうしてこんな設定がデフォルトであるかは不明です。
何か僕が勘違いしている可能性も大いにあります。

UpResの仕組みを簡単に図解します。仕組みと言っても流れのことですが。

おなじみのVelocity抽出を今回はLowからしました。
Upからすると、結構重くなるので避けました。
が!しかし、結果、もう少しレゾリューションが欲しかったですね・・・ コンポジット時にそう思いました。
次回は重くともチャレンジしてみようと思います。
さて、今回のメインディッシュであるパーティクルは、(Pyroはちょっと豪華な前菜ですw)色付けされています。
これがメインディッシュたる所以と言ってもいいかもしれないです。
方法は多々ありますが、面白かったので採用です。
いつもならパーティクルを放出したあとに色付します。
ただ今回は、ソース自体に色をつけておいて、その部分から発生したパーティクルがあらかじめ着色された状態で放出されるようにしておきます。
なぜそうしたかというと、当初はボリューミーにライティングしようと思ったのですが、重いんです。
量が量ですので。ですから、少しでも立体感が欲しいので、ノイズで着色してごまかしました。
今回はそういった理由ですが、とてもベーシックなアプローチなので、いろんな場面で応用できますね!

レンダリングをする際に、軽くしたい場合はMantra Delayed Loadを使用して、中間ファイルを軽量化しましょう。
今回はちょっと突貫工事の為やってませんが。
本来は突貫工事の場合にはあえてちゃんと設定すべき項目ですね。
間際で何が起こるかわかりませんから。
又の機会に、Renderの細かいTipsをやりたいですね。
プロシージャルなレンダリングは気持ちがイイです。
最後にカメラの設定ですが、これもコンポジット時に必要だと感じ、追加で設定しなおしました。
レンズフレア用に出した素材が、フレームインする際、途切れてしまっていると、いきなり光りだしてしまいます。
それだとあまりうまくないので、余白を入れてあげます。
余白をつけるためには、画角を変えずにレゾリューションを上げる必要があります。
Houdiniの場合、カメラにレンダリングのレゾリューションがあります。
それがMayaと大きく異なる点です。
Mayaにはカメラスケールがあるので、余白をつけることは簡単です。
Houdiniだと、少し計算してあげる必要がありますね。
その設定方法ですが、まずもともとのカメラをリファレンスコピーします。
そうすることで、もともとのカメラ情報を維持しつつ、それ用のカメラを作成します。
次に余白を付けるための係数を定義します。
Houdiniのパラメータは自由にスペアを追加できるので、その機能を使ってカメラスケールのパラメータを追加してしまいましょう!
パラメータの右端上の方に、ギアのアイコンがあります。
そこから、Edit Parameter Interfaceを選択します。

Edit Parameter Interfaceでは、様々なデータタイプのパラメータを追加できます。
今回は、スケールの係数を作りたいので、Floatタイプでいいでしょう。
パラメータ名などを設定したら、係数の出来上がりです。

計算方法は単純です。
係数をResolutionに乗算します。
次に、係数をFocal Lengthに除算します。
これで画角を変えず、余白を作ることが出来ます。
もちろんDOFなどの、フィジカルな設定をしていれば破綻してしまいますので、 あくまでもこういう場合にのみ使用できます。
係数は、先程追加したパラメータのチャンネルを持ってきます。
今回は"camscale"と定義したので、チャンネル関数を使って、
ch("camscale")
で呼び出すことが出来ます。
このようにしておけば、複数のパラメータに係数を流しても、スペアパラメータ一括で制御することが出来ますね。

なぜかカメラにアニメーション付けてしまったんですが、これは当初、背景を入れる前提で進めていた時の名残です。
まぁ、これはこれでよしとします。
ラスト、コンポジット調整して終了です。
ほぼコンポジットのおかげですけど。
デザートにBreakdownはいかがでしょう。
このレシピのデータです。

JOBという環境変数を設定します。
メニューのEdit > Aliases and Variables > Variablesから、 JOBのValueをプロジェクトが置いてある場所のパスを指定してあげます。
それから、前回書いてなかったんですが、Windows環境で作業する場合、Unixコマンドが走るようにしておく必要があります。
僕は大体、レンダリングの際にpreRender,postRenderでスクリプトを走らせています。
コマンドはデータ内に.cmdファイルが有ります。
レンダーイメージのディレクトリに、mantraの名前でディレクトリを自動生成するためのunixコマンd、"mkdir"があります。
Houdiniは自動的に作ってはくれないので、僕はこれで回避していますが、unixコマンドが走らないとディレクトリが作れず、パスを参照できないためエラーになります。
回避するために、unixコマンドが走るよう、cygwinなどで設定しておきましょう。
面倒であれば、イメージパスを変えるか、あらかじめディレクトリ内にmantraと同名のディレクトリを作っておくなどしてください。
作業ディレクトリの癖とかもあるので、本来なら$HIPなどを利用したほうが手っ取り早いかもしれないですが・・・
人に配布するにはなかなか難しい壁がありますね。
それ故、わからないことがあればどんどん聞いて欲しいです。
ダイレクトにメッセージくれても構わないです!




