ラベル Houdini の投稿を表示しています。 すべての投稿を表示
ラベル Houdini の投稿を表示しています。 すべての投稿を表示

2026年3月5日木曜日

Houdiniワークショップ第10弾準備中

ようやく Houdiniワークショップ第10弾の準備をしています。
ページ↓を立ち上げました。

開催日決定いたしました。(4/7 追記)

https://sugi-iggy.blogspot.com/p/workshop10.html

すでにお申込みの方々が、、、ありがとうございます!!感謝です。

ワークショップ始めた当初は3回くらい出来たら良いかなと思っていましたが、

あっという間に10年立ってしまいました。
4月か5月に開始できたらと思います。
よろしくお願いいたします。


2025年10月28日火曜日

Percy Jackson and The Olympians | Season 2


Percy Jackson and The Olympiansのシーズン2
後半の海のシーン担当しました。シミュレーション激重でショットによっては30時間以上かかるものも。無事終わって良かったです。

2025年5月17日土曜日

Workshop9

Houdiniワークショップ第9弾の ようやく準備が整いました。


>
詳細はこちらから↓

https://sugi-iggy.blogspot.com/p/workshop9.html


今年もよろしくお願いいたします!

2024年12月25日水曜日

樹木からワイヤーを作る

 この記事はHoudini アドベントカレンダー2024↓の24日目の記事です。
 https://qiita.com/advent-calendar/2024/houdini

この記事は、Speed Tree等の樹木生成ソフトなどで作った木のデータからワイヤーを作るTipsです。ワイヤーを作成できるとシミュレーション使えたり、
このワイヤーを元にローポリモデルを簡単に作れたりと何かと便利です。

木のデータは、以下からダウンロードしました。
https://www.cgtrader.com/free-3d-models/plant/conifer/american-elm-tree-78c0a9f7-078f-40cf-bbd9-236c991cb019

前提として、樹木生成ソフトで作った木のデータは、どの枝(幹)も多少の違いはあれど円柱をベースとした頂点番号の並びになっています。
なので、どの枝も同じような頂点番号の並びの円柱の集まりなので、ルールを把握し枝毎に一本エッジを取り出し、中心に配置という処理を構築出来れば、あとはFor Loopで回せば木全体のワイヤーを作ることができます。

というわけで、手動モデリングした木のデータなどにはこの手法は使えないのでご注意を。

以下、手順です。

まずは、木のデータ(FBX)をインポートし、以下の様に下準備。


以下は、枝毎にエッジを一本取り出し、枝の中心に配置する処理です。


以下はFor Loopの各ステップのビューポート。
For Loopの一番始め(上図のforeach_begin1)

上図の2番(get_edge)エッジを一本とりだす。

上図の3番。エッジを枝(幹)の中心に移動。


どの枝も円柱ベースで、同じルールで頂点番号が並んでいるので上図2,3の様な
処理でエッジを取り出したり、中心座標を計算できます。


For Loopを抜け出すと、完成です。

以上で、解説は終わりです。

この木のデータではこの手法が有効でしたが、別ソフトで作られた場合はルールが変わります。ですが、どの樹木生成ソフトも枝や幹は円柱がベースになっているので少し改造するだけで同じことができるかと思います。

hipファイルはこちら

今年も本家もApprenticeもどちらのHoudiniアドベントカレンダーを盛況ですね。
素晴らしいです。過去にも多くの有用な記事あるので是非見てみてください。
以下からアクセスできます!







2024年4月7日日曜日

Houdiniワークショップ第8弾

はやいもので、もうHoudiniワークショップ8年目です。

皆様今回もよろしくお願いします!
第8弾のページはこちら↓
 https://sugi-iggy.blogspot.com/p/workshop8.html



2023年12月19日火曜日

MaterialXでbumpの正しい設定方法

まだHoudiniアペレンティスの方のアドベントカレンダー↓に空きがあったので12日目に
入ってみました。

Material Xでグレースケールの画像を使い正しくバンプを設定する方法です。
以前ワークショップで紹介した方法は間違っていました。すみません (^^;)

以前から何となくおかしいなと思ってはいたのですが、、、
言い訳をすると、diffuseの画像がごちゃっとしていたり、bumpの強度を少なくしていたので
間違いに気づいていなかったのと、某フォーラムで紹介されていたので合っていると信じてしまっていました。
(それと会社ではジオメトリのシェーダーはLookDevチームがArnoldシェーダーで行うので、、、)



以下、解説です。
diffuseには何も張らずに、bumpだけ設定しています。
左は間違ったもの、右は正しい方法です。

ノイズ画像を用意して、


以下の様に設定していました。mtlx tile imageで画像を読み、グレースケールの画像なので height to normalでnormalに変換しmtlx standard surfaceマテリアルのnomarlに指す。
するとトップ画像の左側の様になんかおかしな感じの結果になります。
ボックスの色は白です。


念のため、同じ画像でディスプレスメントを設定するとどうなるか試しました。

これが正しい結果ですね。
bumpでもこれに近しい感じにならないといけません。


以下は正しい方法、height to normalの後に normal mapノードが必要でした。結果はトップの右側の絵です。

簡単な記事で恐縮ですが、以上です。

hipファイルはこちら

そろそろ年の瀬ですね。皆様良いお年を!







2023年12月14日木曜日

サブフレーム無し! カーブモーションブラーをかける

この記事はHoudiniアペレンティスアドベントカレンダー↓ 14日目の記事です。
 https://qiita.com/advent-calendar/2023/happrentice


パーティクル(だけではなく何でもいけます。)にカーブモーションブラーをかける方法を紹介します。
Mantraではめんどくさい感じだったですが、Karmaレンダーでaccelを使って簡単にカーブモーションブラーをかけれる様になりました。
上の図は、左はvのみを使用したモーションブラー、右はaccelを使ったモーションブラーです。

以下シーンの解説です。とてもシンプルです。

Sphere(球)から適当にパーティクルを出して、Windのノイズで動かしています。
popnetやpopsolverでサブフレームは使っていません。



パーティクルのSimの後に、Trailでaccel(加速度)アトリビュートを作ります。



Velocity ApproximationをCentral Differenceに、Compute Accelrationにチェック、
Match by Attributeにチェックを入れidを指定するのを忘れずに。
このチェックでパーティクルが死んだりした場合でも、キチンとidが同じものをみてvやaccelを計算してくれます。

下準備は以上です。


Solaris(stage /  lop)に移動して、Sop Import  Lopでこのパーティクルを読み込んで
レンダリングします。

カメラは適当に好きな位置に置きました。
モーションブラーを長くしたかったので、下図の様にシャッターが開いている時間を長くしてあります。



Karma Render Settingで、Geometry Time Sampleを2以上に(大きくすればするほど綺麗なカーブ、数が少ないとカクカクしたカーブになります。)、
Velocity BlurをAccleration blurに指定するだけです。


accelを保存しておくだけで、簡単にカーブモーションブラーかけられて便利ですね。
欠点としてはレンダーグローバルのサンプルを高くしないとノイズがなかなかとれないです。
(カーブモーションブラーに限らず、どんなモーションブラーでもシャッター開放時間を長くするとどんなレンダラーでもノイズは出てしまいます。)

火花なんかは、ワークショップで紹介している実態化する方法がサンプルを上げずに済むので良いですね。

hipファイルはこちら


2023年のHoudiniアペレンティスアドベントカレンダー全て埋まりそうな勢いですね。
indie以上のカレンダーは既に満席です。
毎年素晴らしいです。










2023年12月5日火曜日

交差してても大丈夫! Curveでパーティクルをコントロール

こちらはHoudiniアドベントカレンダー2023↓ 6日目の記事です。
https://qiita.com/advent-calendar/2023/houdini

左がデフォルトのCurve Force 、右がこの記事で紹介する方法です。

デフォルトのCurve Forceも巷にあるチュートリアルのカスタムな方法も、交差したカーブだったり、パーティクルのスピードが速すぎると大体うまくいきません。

なぜなのか?
1つ目の理由は、パーティクルの粒それぞれが自分に一番近いカーブを空間ベースで参照しにいくので
交差した部分にはカーブが複数存在するので、ごちゃっとしてしまいます。

2つ目は、下の図の様に急カーブな位置でパーティクルが速すぎると次のフレームでカーブから遠い位置に移動してしまい、
カーブに近い位置に戻ってこれなくなったり、戻れたとしてもカーブに沿った形状を保てなくなります。

2つ目の理由はサブステップ数を上げれば解決する場合もありますが、交差しているカーブの場合は空間ベースでカーブを参照している以上解決できません。


上記の2つの問題を解決する方法は、@ageの値を使ってカーブ参照するというやり方です。

まずは、適当に交差する様描いたCurveをResample Sopで細かくします。(こんなに細かくしなくても大丈夫。結果を見ながらお好みで)
(クリック拡大)

カーブをpopnetの2番目に指しておきます。(1番目はスタート付近に置いたエミッターです。)

popnet_customの中

follow (POP Wrangle)


/////////////////////////////////////////////////////
float ageF = @age / @TimeInc; 
//@ageは単位が秒なのでフレームにします。

vector P0 = point(1,'P',ageF); 
vector P1 = point(1,'P',ageF+1);
vector moveDir = P1 - P0;
//ageFが0の時は、カーブの最初のポイントと次のポイントの位置を使い、動く分のベクトルを作ります。

@P += moveDir;
//その値をパーティクルのポジションに追加するだけです。

i@ageF = ageF;  //次のPop Killで使用、パーティクルがカーブの最後のポイントを参照したら消けすようにしています。
/////////////////////////////////////////////////////

通常のCurveForceはv@forceだったり、v@vをいじりますが、
それだとどうしても破綻が起きるので、パーティクルのポジション@Pを直接いじる結構強引なやり方です。

動きにノイズを加えたり、カーブを中心に回転させたりも@PをVex(POP wragle)で変更を行
う事で複雑な動きを作る事も可能です。

以上です。


hipファイルはこちら



Houdiniアドベントカレンダー2023全て埋まってるみたいで、素晴らしいですね。
Apprenticeの方のカレンダーがまだ空いているみたいなので、別の記事を書いてみようかと思います。

Houdiniアドベントカレンダー2016年から始まりもう8年目ですね。
Houdiniのテクニックは過去のものも古くならず有効なものが多いです。
是非こちらから過去のものやチェックしてみてください。


2023年3月4日土曜日

Houdiniワークショップ第7弾

Houdiniワークショップ第7弾のページオープンしました。


2023年3月25日から開催です。よろしくお願いいたします!!


2022年12月5日月曜日

ダイナミックオプティマイズサブディビジョン(長っ)

こちらはHoudiniアドベントカレンダー2022↓ 6日目の記事です。
https://qiita.com/advent-calendar/2022/houdini

別ジオメトリからの距離に応じてサブディビジョンの細かさをコントロールする仕組みです。


以前ツイートしたこちらの解説です。

 この例では、ラインに近いグリッドのプリミティブが細かくなる様になっています。

どんな時に使うかと言うと、エフェクトではアセットチームから来たモデル破壊などする時に
破壊する部分にディティールを持たせたいのでメッシュを細かくします。たまにモデル全体を細くしてしまう例も見かけますが、データが重くなり、自分の作業も遅くなり、破壊したモデルをパブリッシュするので、後工程にデパートメントへの影響や(ライティングは勿論のこと、最近はコンパーもジオメトリを読み込んだりしているので)、トラフィックなどデータの大きさは、行程全てに影響があるので成るべくオプティマイズした下準備がお勧めです。


ネットワークは非常にシンプルで、大まかに説明すると
グリッドのプリミティブにラインからの距離に応じたアトリビュートを持たせ、
その値でSubdivideの回数を設定するというものです。


最近HoudiniにDistance From Geometry というSopが着きましたが、少し遅いのと
後に値を0 - 1にノーマライズする際に最大値を決めるのが面倒なので使いません。

グリッド側のポイントにカラー0(黒)、ライン側のポイントに1(白を)もたせAttribute TransferでBand Widthを利用する事で、0 - 1 にマッピングする手間を省きつつ距離に応じて
グラデーションが作成されます。


このpointアトリビュートを値をAttribute Promoteでprimitiveに移します。
(最初からprimitiveにカラーを持たせてAttribute Transferしないのは、グリッドのプリミティブが大きい場合、primitiveの中心とラインとの距離が大きく上手くグラデーションが作成されない事がある為。)

この各プリミティブが持っているカラー(Cd)の値を、subdivという整数値にリマップ(fit) させて(この例では白い所は4、黒い所は0)subdivide sopのdepthに利用します。




Subdivide Sopのdepthパラメーター(サブディバイド回数)が、この新たに作った@subdivアトリビュートを参照出来れば楽なのですが、多くのHoudiniのパラメーターはh-expressionで変数(この場合は自分自身のプリミティブ番号)を使用しつつ、値を取る事が出来ないので
forloopを@subdivの値が同じプリミティブのくくりで回してあげる事で、変数を仕様せずに
prim h-expressionでプリミティブ番号0番の@subdivの値をとってきて、depthの値に使用できます。



以上です。
hipファイルはこちら

毎年小ネタで恐縮です、アドベントカレンダーに空きがあったら、もう一つ小ネタ記事を書こうかと思いますのでご了承下さい(^^;)

Houdiniアドベントカレンダー2016年から始まりもう7年目ですね。
Houdiniのテクニックは過去のものも古くならず有効なものが多いです。
 是非こちらから過去のものやチェックしてみてください。 
https://qiita.com/advent-calendar/2022/houdini



2022年8月30日火曜日

Houdiniアドバイザー

ありがたい事に 日本のとある会社さんとHoudiniアドバイザーの契約を結びました。
期間契約でセットアップを提供したり、Houdiniの質問への回答だったり、パイプラインの構築のアドバイスをするというもの。

基本的にサブスクリプション方式で毎月固定の金額ではあるが、何も相談事が無い月があれば支払いは発生しないという形。
何も手助け出来ていない月に金額が発生するのも気まずいですので、これは双方にメリットがありそうで良い形態だなと思います。

日本でもHoudiniがもっと広く使われるよう手助けができて嬉しいです。


話は変わりますが、Houdiniワークショップ6の録画視聴期限を9月末まで延長いたしました。
あと1ヵ月ご活用いただけたらと思います。



2022年3月11日金曜日

Houdiniワークショップ第六弾

まだ絶賛準備中ですが、 Houdiniワークショップ第六弾のページをオープンしました。

4月9日から開催です。よろしくお願いいたします。

https://sugi-iggy.blogspot.com/p/workshop6.html





2021年12月20日月曜日

オブジェクトをブレンドする 

この記事はHoudini アドベントカレンダー 20日目の記事です。 

ぶっさしのオブジェクトをブレンドした感じに見せる2つのテクニックの紹介です。


---------------------------------------------------------------------------------------------------------------------------

初級編と中級編2つ紹介します。

まずは初級編すごくシンプルです。(初級編は当初空きがあったらApprenticeのカレンダーがあったらそちらに書こうかと思っていたんですが、全てスケジュール埋まってますね。素晴らしいです。)
円柱側(右側)へSphereの法線(N)をattribute transfer で移すのみ!Band widthパラメータで、元の法線は残しつつ境界のみにグラデーションで移せます。



簡単な方法ですが難点としては、ある程度メッシュが細かくないと綺麗にいきせん。
後半の中級編はこの問題は起きません。

---------------------------------------------------------------------------------------------------------------------------

次に中級編です。
こちらは境界に補助ジオメトリをプロシージャルに作成する方法です。その際補助ジオメトリに法線をそれぞれの法線Nを持たすことで綺麗にブレンドして見えます。


まずは全体のネットワーク。


メッシュは細かくなくとも大丈夫です。

重なった部分のメッシュをBooleanで取り出し、Divide SopのRemove Shared Edgeを使い外周のみのジオメトリにします。

その取り出したメッシュにそれぞれ(球と円柱)から法線Nを移します。

その2つの法線Nをブレンドするのですが、内積をとって位置の調整をします。
この法線Nがこの後のSweep Sopで沿わすLineの傾きになります。


以下はSweepの結果。
この作例では球に対して円柱が垂直に立っていてどの境界も同じ角度ですが、
以下のような重なり具合が違う場合、内積の値を位置の調整に使う有用性が分かり易いです。

Sweepで沿わせるLineには、後に使用する終点と始点の分かる様アトリビュートを仕込んでおきます。

Sweepで作っただけでは元ジオメトリの表面と完璧に一致する位置にはないので、RaySopで円柱側に終点側(上記で仕込んだ@mapアトリビュートが1.0)のみ円柱側へ貼り付けます。

同様に始点側(@mapアトリビュートが0)を球に貼り付けます。

以上で形状は完成です。2つのRay共にPoint Intersection Normalを有効にするとそれぞれ球側・円柱側の法線Nを持ってこれスムースにつながります。


最後にストレステストをしてみました。そこそこ複雑な形状やアニメーションさせても有効です。


以上です。

Houdiniアドベントカレンダー2016年から始まりもう6年目ですね。Houdiniのテクニックは過去のものも古くならず有効なものが多いです。今回はAppernticeのカレンダーもすべてスケジュールが埋まっているようなので素晴らしいです。
是非こちらから過去のものやチェックしてみてください。