はじめに
本記事は2019/08/31に行われた勉強会、第4回 Substance Designer ゆるゆる会にて出た、SDで「コーナーを検出してそこにビスを打つにはどうしたらいいだろう」というお題について、Houdiniでの回答例となります。
なぜSDの話題でHoudiniを使った解法についてお話をするかというと、答えはシンプル。SDでの回答方法について僕が解答を導き出せなかったからです。
SDなんもわからん。
SDとHoudiniは根本的に異なるツールですが、別の視点での解答という意味では意味があるかなと思い、ここに記載しておきます。
サンプルファイル
本記事に使用したサンプルファイルはこちら
※ 配布はhipファイルのみとなります。 (Sample includes hip file only.)
やりたかったこと
上記画像のビス打ちの部分は、破壊処理(目合わせによる配置)なのでプロシージャルな変更に対応していません。せっかくSDを使っているのだからうまいことできれば嬉しいなぁという質問を参加者にお尋ねしてみました。
記事の最後にまとめますが、参加者の皆さんによるSDのアイデアも多く頂けました。ありがとうございます!
また、本作例はBuilding Sci Fi height maps in Substance Designerを参考に作成させていただきました。
Thank you Allen Grippin!
Houdiniによる別解
SDでの解法は皆目見当がつかなかったため、ぼくはHoudiniならどうやるかな?というアプローチでこの課題に取り組んでみました。
最終的な挙動
下記動画のような感じです。内側のコーナーにビスを生成するかどうかのチェックボックスを用意しています。
ネットワーク解説
簡単なネットワークですが、順に見ていきましょう。全体はこのような感じです。灰色のoriginal geometryと書いてあるネットワークボックスはその名の通り元となるジオメトリ群です。
曲率を検出する
まずはMeasureSOP
で曲率を検出します。Element TypeをPointsに、MeasureをCurvatureに変更しましょう。これだけで曲率をcurvatureポイントアトリビュートとして取得することができました。お手軽ですね。
続けてビスのオフセット(移動方向と移動量)を確定できれば良さそうです。さて、どうしましょう。
オフセット方向はノーマルを利用して決定する
単純にMeasureSOP
の後にNormalSOP
を接続しても望む方向は取得できません。面方向上に出ちゃいますね。
というわけで、立体物にしてからノーマルを生成、それを転写するという方向で行きましょう。具体的には下記手法をとりました。
PolyextrudeSOP
で押出しTransformSOP
でオブジェクトをY座標センターに移動*1SuvdivideSOP
でなめらかな曲面にし、ノーマルを平均化NormalSOP
でノーマルをポイントに付加
このような感じです。Suvdivideの流れはVDB from Polygons
からAttribute Blur
でも良いでしょう。
ノーマルの転写
Attribute TransfarSOP
でノーマルを転写します。*2
曲率を指定してグループ化、ポイントの取り出し
Group ExpressionSOP
で任意の曲率を超えるポイントを指定し、BlastSOP
でポイントを取り出します。
現在Group ExpressionSOP
では曲率のしきい値はハードコードしていますが、実際に運用する際は外側にパラメータアウトしたほうが良いでしょう。
ノーマル方向にオフセット(移動)
書いているVEXは2行です。
@N.y = 0; @P += normalize(@N) * ch("offset");
難しいところは特にないですが、ノーマルのベクトルをnormalize
(正規化)しているところにご注意ください。これをしないとオフセットの位置が元形状によって変わってしまいます。
最後にパラメータをNullにまとめる
これはやってもやらなくても良いですが、NullSOP
に変更したいパラメータをまとめておくと後々振り返った際に何をしたかったのか把握できて良いですね。
SDでのアイデア
先達がまとめてくださったアイデアを引用させていただきます。
すみません、画像ミスってたのでネジ留め作成案再掲です #YuruSubstance pic.twitter.com/DBdQr28luu
— のーてん (@no_ten) August 31, 2019
これはShapeのDiscとSquareを組み合わせサブグラフテクニックで部品を分けたまま移動やミラーを掛けられるようにして作った角丸四角です。4隅にDiscが置かれているので角を検出というか特定するのはそのDiscを使うことで容易になります。#YuruSubstance pic.twitter.com/qYOD5eJLlT
— MINO@boothで本販売中 (@MINO_8601) September 2, 2019
もんしょさんのブログ記事: いいところにビス打ちをしようと思って失敗した話
まとめ
SDは画像単位で管理をし、Houdiniは3D形状とアトリビュートによって管理をするものなので、そもそも全く違うものであり、Houdiniの方が良いという意見ではないのでご理解ください。 そもそもぼくがSDでできてれば全く問題のない話だったわけですし。
しかし、このように違うツールの違う視点で解決法を考えることは有意義だと思いますし、SPとHoudiniの連携を考えていく上でも良い思考実験になるかと思います。各ツール得意なところをうまく組み合わせてより効率的に、よりよい出力が出せるよう研鑽していきたいものです。
最後にSubstance Designer ゆるゆる会の主催者・参加者の皆様、会場をご提供いただいたヒストリア様に感謝をもって〆させていただきたいと思います。
追記
上記勉強会でグラフのスパゲッティ化を避ける上で非常に有用なテクニックを教えていただきました。次回の記事にまとめます。