この記事はHoudini Apprentice アドベントカレンダー2025 16日目の記事です。
はじめに
アドカレの締め切りを意識すると、年の瀬を感じる体になってしまいました。
今年はHoudini21のリリースがホットな話題だったと思います。
Houdini HIVE TOKYOに参加して刺激を受けたので、H21 H20.5で新実装されたVEX関数をお題にしてみます。
(注:H21ではなく事実上H20.5でした)
この記事で紹介する内容
Houdini21から追加された osd_limitsurface 関数の紹介と、使用例を作ります。
作業環境
Houdini indie 21.0.559 Py3.11
参考記事
公式ドキュメント
https://www.sidefx.com/ja/docs/houdini/vex/functions/osd_limitsurface.html
Houdini HIVE TOKYO 2025
https://youtu.be/102sG5cjDiA?si=tvJD1mlSQRxCYiWn
osd_limit functionとは
ドキュメントを読んでみる
何はなくとも公式ドキュメントを読みます。
osd_limitsurfaceは、サブディビジョンサーフェスとして指定されたジオメトリ内のPointアトリビュートを評価します。
な・る・ほ・ど
わからん…
int osd_limitsurface(<geometry>geometry, string attrib_name, int patch_id, float u, float v, <type>&result)
int osd_limitsurface(<geometry>geometry, string attrib_name, int patch_id, float u, float v, float &result[])
引数がUV座標になっている点が目に留まります。
patch_id, u, v は、primのuvではなく、OSD patch 上の (u,v) なので注意。
続いて記述例もみていきます。
// Examples
// サブディビジョンメッシュの境界サーフェス上にポイントクラウドを生成します。
int npatches = osd_patchcount(file);
for (int patch = 0; patch < npatches; patch++)
{
for (int v = 0; v < 100; v++)
{
vector P;
if (osd_limitsurface(file, "P", patch, nrandom(), nrandom(), P))
{
int ptid = addpoint(geohandle, P);
}
}
}
内容の把握
では早速サンプルを試してみましょう。
正四面体を作ります。

サブディビジョンをかけた結果です。

osd_limitsurfaceを使用した結果です。

サブディビジョン後の面にポイントが配置され、
サブディビジョンサーフェスとして指定されたジオメトリ内のPointアトリビュートを評価
した結果が取得できました。
つまり、対象メッシュのOpen SubDivisionの「無限分割後(限界境界面)と同じ位置・法線・距離(交差)」の情報を取得(評価)できるという関数です。
同様の処理は世界中の現場で使われていると思うのですが、恥ずかしながら知らなかったです。
利点
メッシュ解像度や分割回数の概念がなくなり、位置・法線・傾斜などの判定(評価)に使えます。
RayやHeightField変換の結果はメッシュ解像度に依存し、場合によっては局所的な段差などのノイズが発生しますが、osd_limitsurfaceを用いることで正確な結果を高速に得ることができます。
使い方
実際にHoudiniでみていきます。
まず入力メッシュをWrangle(Run over point)につなぎ、公式ドキュメントのサンプルを参考に入力します。

これでlimit surfaceにポイントを作成できました。

サンプルコードは入力ジオメトリを維持しているため、結果から除外します。

(このあたりの処理はお好みで)

ポイントだけになりました。

使用例
簡単に思いつくものをあげてみます。
粗い地形への配置物
大規模な地形メッシュは粗いことがあります。
そのままポイントをメッシュの上に散布すると、

レンダリング時にサブディビジョン後の結果から浮いてしまいます。

limit surfaceを用いることでサブディビジョン後の限界境界面に配置できます。

Ray使用時のコリジョン境界の精度を向上させたりもできそうです。
分割数を上げたい場面でかなり汎用的に役立つと思います。
おわりに
今回のネタは参考記事にあるHoudini HIVEで聴講したYunus Balcioglu氏のおかげでした。
過去の受講時は手書き実装で理解が不十分だったものを学びなおす機会になりました。
毎年アドカレのおかげで確実に新しい学習ができてありがたいです!
(これぞアドカレ効果!)
最後までお読みいただきありがとうございました。
来年もよいHoudini lifeを!