普段使いで便利なHoudiniのSideFX LabのOperatorピックアップ

この記事はHoudini Advent Calendar 2019 13日目の記事です.

昨日の記事はK240さんの『HDKでアニメーションをSOPに取り込む』でした.このアプローチでボーンアニメーションで動くポリゴンと干渉するようなエフェクトを柔軟に生成したりもできそうです...!

はじめに

HoudiniにはIndie以上のグレードのライセンスで利用できる,Operatorの追加パッケージ,SideFX Lab(旧GameDevTooks)が存在します.

SideFX Labs | SideFX

今回の記事では,その中でも実際に使っていて便利だなあと思ったOperatorを紹介していこうと思います.主にゲームのAssetの制作等のリアルタイム用途で使いやすかったSOPを中心に,どう応用できるか軽い具体例も挟みつつ解説していきます.

SOP

Labs Align and Distribute

f:id:ttata:20191212024259p:plain 接続されているPrimitive(Piece)ごとに重ならないよう並べてくれるSOPです.並べる順番や並べる方向,間隔を設定できます.複数パーツで構成されるモデルを,Substance Painter等でペイントしやすいような配置で書き出す用途に使えます.(TexToolsのExplodeのような感じ)

Labs Axis Align

Geometryをそのバウンディングボックスの大きさにより移動させます.移動方法は各軸ごとにバウンディングボックスの境界や中心を基準に設定できます.わざわざbbox等で計算してtransformしなくて済むので,大変便利な利用頻度の高いSOPです.(今回の記事で一番オススメかもf:id:ttata:20191213135825p:plain 左: 入力Geometry,右: Labs Axis AlignでXZ平面に丁度乗るようY軸方向へ動かしたもの

Labs Caluculate Occlusion

入力したMeshのOcclusionをattributeに書き出します.光の当たらない箇所に植物を配置したり,shader側のtextureのブレンドに用いると便利です. f:id:ttata:20191213140035p:plain

Labs Calcurate Slope

入力したMeshの傾きをattributeに書き出します.HeightField Mask by FeatureのSlope RampのPolygonバージョンです.SOPLabs Caluculate Occlusionと同様な用途で使えます. f:id:ttata:20191213140417p:plain

Labs Dissolve Flat Edges

平らな複数の面に対してDissolveをかけて一つの面にまとめるSOPです.Houdiniのハードサーフェスモデリングでお世話になっています.ちなみにこのSOPを通すとUVの情報が壊れてしまうので,UV展開前に用いるか,あとからAttribute TransferでUVを他のGeometryから渡す必要があります. f:id:ttata:20191213140453p:plain 左: 入力Geometry,右: 面を一つにまとめたもの

Labs Distance From Border

ポリゴンの縁(共有されていないエッジ)からの距離でAttributeに値を書き込みます.Rampやブラー等で調整が可能です.汚し等,地面に配置するPropの縁をAlphaで抜いてなじませたりするのに便利でした. f:id:ttata:20191213140851p:plain

Labs Edge Color

ポリゴンの縁(エッジが共有されていてもOK,NormalではなくEdgeの角度で見てるっぽい)からの距離でAttributeに値を書き込みます.擬似的なSSSのような表現に使えました.Convex/Concave(凹凸)を区別して検出してくれるので,エッジが立った場所の劣化のような表現のmaskにも使えます. f:id:ttata:20191213141056p:plain

Labs Group Curve Corners

カーブのどのpointが内側/外側かをgroup化してくれます.また角度も計測してpointに書き込みます.ハードサーフェスの,シルエットからコーナーにディティールを追加する用途に便利です.

Labs Group Expand

PointやPrimitiveのGroupの範囲をPolygon上で指定した数だけ広げます. f:id:ttata:20191213141326p:plain

Labs Min Max Average

Attributeの最小値,最大値等の計測を行い,Detail Attributeに書き込みます.Attribute Promoteを手軽に使いやすくしたSOPです.

Labs Path Deform

PolygonをPathに従って曲げるSOPです.これを用いると道路や柵等がCurveで簡単に編集できるようになります.また,入力するMeshを,入力するCurveとぴったり同じ長さにしたい場合は,arclen("../path/to/curve_op", 0, 0, 1)等で調整すると便利です.注意点として,長手方向の軸の設定(Base SettingsのAxis)によっては,指定した軸回りに形状が180度回転してしまう場合があるので要調整です. f:id:ttata:20191213141626p:plain 左: 曲げる対象となる入力Mesh(Curveと同じ長さになるよう調整済み),中央: ガイドになる入力Curve,右: Path Deformをかけた出力

Labs Soften Normals

いい感じにやわらかい表示になるようNormalを計算するSOPです.通常のNormal SOPよりも汚いハイライト,陰が出ないので使いやすいです. f:id:ttata:20191213132042p:plain 左が通常のNormal SOP,右がLabs Soften Normals SOP

Labs Quick Material

SOPとしてPrinciple Shader,GameDev PBR,GameDev MatCapのMaterialを扱うことができます.Material NetworkにアクセスせずにSOP Network内でサクっとマテリアルのセットアップができるので便利です.

Labs Remove Inside Faces

内側に存在する閉じた面を削除します.BooleanやVolumeのPolygon化の後に使うと便利です f:id:ttata:20191213141854p:plain 左: 内側にポリゴンを持つMesh,右: Labs Remove Inside Facesの出力

Labs Thicken

Meshに厚みを付けます.表と裏の両面について同時に押し出しを行うことができます.(あと一応裏面のポリゴンリダクション機能付き) 厚みをつける用途ならPolyExtrudeよりも便利かなーと思います. f:id:ttata:20191213142126p:plain

Labs Trace PSD File

PSDファイルの画像をレイヤ毎にGroup分けされたMeshとして読み込むことができます.実際の活用は以下の動画がわかりやすいです. www.youtube.com

注意点として,PSD側のレイヤー名には日本語は使えないようです.また,レイヤー名の-(ハイフン)は,Groupでは_(アンダースコア)に自動で置き換えられるようです.

ROP

Labs CSV Exporter

GeometryのAttributeをCSVとして書き出します. 用途の一例ですが,ゲームエンジン側でCSVをパースしてオブジェクトの配置を行う専用のツールを作成すると,以下のセッションの動画のように,Houdini Engine無しに柔軟にPropの配置を行うフローが構築できたりします. www.youtube.com

Labs Games Baker

Mantraでテクスチャのベイクができます.ベイクできるチャンネルはよくあるPBRのテクスチャタイプについては一通り網羅しています.

f:id:ttata:20191213142754p:plain

個人的に嬉しいのはBase ColorのBakeができる点で(Substanceだと出来ない),このROPで書き出したBaseColorのMapをSubstanceに持っていってテクスチャリングを行っています.このフローだと模様がプロシージャルに生成できるので気持ちよく作業ができますね.

あとアイコンがかわいい.(houdiniのOperatorのアイコンで一番好き) f:id:ttata:20191213142156p:plain

まとめ

SideFXLabには,もうすでに自分で作ってしまった,もっと早く知りたかった,と思うような便利なOperatorが,今回紹介した以外にも複数パッケージされています. 今まで使ってなかった方もぜひ試しに導入してみてはいかがでしょうか.

Operatorとの良い出会いがありますように🙏


明日の記事はtakavfxさんの『HoudiniをPython3でやる!!!』です.post-EOLの来たるべきPython3の時代に備えていきたいですね.

(たのしみ)