On this page | |
Since | 17.5 |
このノードを使用することで、曲率を測定することができます。 これは、ゲーム開発ワークフローを例にすると、地形上の急な崖のような領域を調べて、曲率の高い領域に岩などのアイテムを配置して、より自然な感じの景観を作成するのに役立ちます。
面積の測定は、キャラクタワークフローで役立ちます。 例えば、アーティストがキャラクタのポリゴンをアニメーション前後で測定してそのポリゴンメッシュが大きく変形する箇所を特定することができます。そして、この情報を使ってテクスチャマップをブレンドすることができます。
体積の測定は、オブジェクトを粉砕する破壊ワークフローで使用することが多いです。 全体のルックに影響を与えずにシミュレーション時間を高速化できるように、非常に小さな破片(特定の量以下の体積)を削除するといった処理をよく行ないます。 同様に、外周(Perimeter)の測定は、2次元空間内での物体の大きさを調べるのに役立ちます。 例えば、街の2次元の外周を測定することができます。
Note
外周、面積、体積以外のほとんどの測定は、ポリゴンにのみ適用可能です。
技術的な話 ¶
すべての測定量をPointアトリビュートまたはPrimitiveアトリビュートとして生成することができます。 どちらのアトリビュートでも、エレメント(ポイントまたはプリミティブ)に対して返される測定量は、各箇所の個別の読み取り値としてではなくて、そのサーフェスのエレメントの“シェア:共有”に対して測定量を評価した“Integral:積分”の結果であると理解すると良いでしょう。 要するに、そのサーフェスのポリゴンの“共有”はポリゴンそのものであるのに対して、ポイントの“共有”は、そのポイントを基点にした各三角形の1/3を切り取った四辺形の領域で構成されています(その入力ジオメトリは必要に応じて内部的に三角形化されます)。
(三角形化された)サーフェスのポイントの“共有”は、そのポイントを基点にしたすべての三角形の1/3で構成されています。
この“Integral:積分”とは何でしょうか? サーフェスのポイントにおける測定量の“Integral:積分”は、単にそのポイントが属しているサーフェスの領域の面積とその領域の各ポイントのウェイトを考慮した加重合計から求められています。 例えば、面積が1でウェイト値が3の領域と面積が2でウェイト値が5の領域を持ったサーフェスがあったとすると、その“Integral:積分”の結果は、1 x 3 + 2 x 5 = 13になります。 特に、この“Integral:積分”の結果をサーフェス総面積で割ると、そのサーフェス全体に対して比例的な平均値が得られます。 この例では13/3です。 もちろん、滑らかなポイント測定量を求めるには、無限大に領域を増やしていけば測定量の誤差を小さくすることができます。しかし、計算精度を出すには、単純に領域をもっと細かくすれば良いのですがそれには限界があります。
曲率、勾配、ラプラシアンなどの一部の測定量は、古典的な方法では“滑らかな”サーフェス上の単一ポイントに対してでないと定義できず、まったく滑らかでないポリゴンサーフェスには適用されません(グリッドなどの明らかに平坦なサーフェスを除く)。 しかし、“Integral:積分”による測定量であれば、暗黙的に“滑らかな”バージョンのサーフェスに対して、ポイントまたはプリミティブの“共有”を使って測定することができます。
Note
どの測定も閉ポリゴンのポイント/プリミティブの両方に対して動作します。 非ポリゴンに関しては、Perimeter, Area, Volumeはプリミティブでのみ動作します。 NURBS/Bezierカーブに関しては、その制御点を通るポリゴンカーブに基づいて評価され、実際の測定結果と大きくことなる場合があります。 開ポリゴンカーブに関しては、Curvatureのみがポイントに対して利用可能です。
パラメータ ¶
Group
測定したいポイント/プリミティブのグループ。 Element Type は、必ずこのグループタイプと生成されるアトリビュートのクラスに合致します。
Element Type
測定を実施するエレメントのタイプ。グループを指定した場合は、そのグループタイプは必ずこのエレメントタイプと同じでなければなりません。
Measurement ¶
Measure
このノードで測定したい内容を選択します。 選択した内容に応じて、返される値は、個々のエレメントのサーフェス共有( Accumulate を Per Element に設定した場合)、エレメントが属するピース(Accumulate を Per Piece に設定した場合)、サーフェス/グループ全体( Accumulate を Throughout に設定した場合)に対する測定量を意味します。
Perimeter / Length
個々のポリゴンの外周、繋がったピースの境界長の合計( Accumulation を Per Piece に設定し、piece
アトリビュートを指定した場合)、 ジオメトリ全体の外周( Accumulation を Throughout に設定した場合)を計算します。
技術的メモ
ポイントに対して評価した場合、各ポイントから計算さる外周は、上記の技術的な話で説明したとおり、ポイントの“サーフェスの共有”の領域の外周です。その累積計算はピース単位または全体で実行され、同じピース内の2個のポイント間で共通するポイントのサーフェス共有の外周の一部は、除外されます。
Area
面積を計算します。
技術的メモ
ポイントに対して評価した場合、各ポイントから計算される面積は、上記の技術的な話で説明したとおり、ポイントの“サーフェスの共有”の領域の面積です。
Volume
体積を計算します。
技術的メモ
体積の計算は、閉サーフェスでないと意味がありません。その理由は、体積は個々のサーフェス三角形に基づいて(自動的に選択された)共通の頂点を持つ四面体の符号付き体積の合計で評価されているからです。 開サーフェスだと、マイナス値が原因ででたらめなルックの結果を返してしまうことがあります。
Centroid
質量の中心を計算します。
Note
ジオメトリのピースの重心は、ポイントの平均位置ではなくて、サーフェス全体の質量の中心です。 1個の三角形で考えると、その平均位置と質量の中心は一致しますが、もっと複雑なジオメトリで考えると、各ポイントが属する三角形の面積がその平均位置の寄与度に影響を与えます。
技術的メモ
ポイントに対して評価した場合、このオプションは、上記の技術的な話で説明したとおり、各ポイントの“サーフェスの共有”の質量の中心を返し、ポイントの位置には一致しません。
Curvature
色々なタイプの曲率を計算します。
技術的な説明
ポイントにおけるサーフェスの曲率を完全に表現するには、複数の値が必要になります。 端的に言うと、滑らかなサーフェスの“Ordinary Point:通常点”(特異点ではない点のこと)で、サーフェスが局所的に非常に急な外側方向(逆に言えば、非常に緩やかな内側方向)に歪曲する進行方向があったとします。 その進行方向をポイント法線を軸に90度回転させてみて、そのサーフェスが非常に緩やかな外側方向(逆に言えば、非常に急な内側方向)に歪曲する方向になっていれば、その進行方向が外側を向いています。 それらの2つの直交した方向のことを“主(Principal)”方向と呼び、それぞれの方向の(符号付き)曲率のことを“主(Principal)”曲率と呼びます。 それらの曲率のうち、曲率が大きい方がプラスの値で、他方がマイナスの値となり、それぞれ外側、内側の曲率を意味します。 これら2つの主方向と主曲率を組み合わせて、指定した箇所におけるサーフェスの曲率に関するすべての情報を表現します。このノードで生成される色々なタイプの曲率すべてが、それらの情報から計算されます。
上図では、サーフェス法線を向いた平面が色々な曲率のカーブ上でサーフェスをカットしています。曲率の大きいカーブ(赤)と曲率が小さい(青)が2つの主曲率で、サーフェスポイントにおけるそれらの接線が主方向です。
Gaussian
2つの主曲率の積を返します。これは、平坦な伸縮性のある生地でサーフェスが(局所的に)ぴったりと覆われていると仮定した場合に、プラス値のガウス曲率の部分では生地を伸ばし、マイナス値のガウス曲率の部分では生地を収縮させる必要があることから、局所的な伸縮性を測定するのに使うことができます。
技術的な説明
2つの主曲率の積を考えると、ガウス曲率は、それらの主曲率のどちらかが0の時に0になるわけですから、サーフェスが平坦または局所的に円柱(一方向にのみ曲がっていて、他の方向は真っ直ぐになっているサーフェス)のように見える箇所ではガウス曲率が0になります。 サーフェスが楕円体(どちらの方向も内側に曲がっている、または、外側に曲がっている)だとガウス曲率はプラスの値になり、サーフェスが双曲面またはサドルのような曲面(一方向が内側に曲がっていて、他の方向が外側に曲がっている)だとガウス曲率はマイナスの値になります。
Mean
2つの主曲率の平均値を返します。これは、サーフェスが外側または内側にどれだけ曲がっているかを示します。
技術的な説明
0の値は、サーフェスが平坦、または、サーフェスが主方向で外側に非常に大きく曲がっている、内側に非常に大きく曲がっているかのどちらかを意味しています。 戻り値は、サーフェスが内側よりも外側の方が大きく曲がっている場合はプラスの値、そうでない場合はマイナスの値になります。
Make Scale Independent
通常では、主曲率は入力ジオメトリの均一スケールに反比例してスケールされます。このオプションは、入力ジオメトリのスケールが変わっても変化しないように調整された結果を返します。
技術的な説明
入力ジオメトリを均一スケール係数s
でトランスフォームさせた場合、それぞれの主曲率には1/sのスケールがかかり、サーフェスの総面積と各エレメントの“サーフェスの共有”はs
の2乗でスケールがかかります。
このオプションを有効にすると、それぞれの累積された主曲率をそれぞれの“サーフェスの共有”の2の平方根で除算して、スケール依存を除去します。
このオプションは、Gaussian以外のすべての曲率タイプで利用可能です。その理由は、2つの主曲率の積であるガウス曲率はスケール係数s
の平方根の逆数でスケールをかけるため、s
の平方根でスケールされた面積の効果が常に打ち消されるからです。
Principal
このオプションは、個々の主曲率を(数値として)抽出したり、主方向を(単位ベクトルとして)抽出したり、両方を(スケールをかけたベクトル)抽出することができます。
Note
主方向は、符号の変化に応じたベクトルとしてレポートされます。つまり、意図した方向のとおりの時もあれば逆になっていることもあります。
Report
2つの主曲率または主方向のうち、小さい方または大きい方のどちらをレポートするのか選択します。 さらに、曲率が内側なのか外側なのかを考慮せず曲率の度合いだけを考慮するように絶対値で大小を決めることもできます。 Curvature を選択した場合、単一値が各エレメントのアトリビュートに書き出されます。 Direction を選択した場合、該当する主方向の単位ベクトルがレポートされます。 Vector を選択した場合、該当する主曲率と同じ大きさのベクトルがレポートされます。
Difference Filter
主方向がお互いに十分に区別できないような領域に対して測定量を除去します(0にします)。
技術的な説明
2つの主曲率が同じポイントでは、そのサーフェスは局所的には球と同様で、その主方向は全方向でサーフェスが均等に曲がるのでうまく定義されません。 その曲率を数値的に近似化すると、そのような領域でレポートされる主方向はランダムな挙動になって、ノイズとして出現してしまいます。 Difference Filter を使用すれば、十分に区別できないような主方向も0に設定されます。
Curvedness
これは、2つの主曲率の2乗の平均の平方根で、2つの主曲率を区別することなく、または、それらの符号を気にすることなく、それら2つの主曲率を単一値に合算することができます。
Gradient
スカラー(実数値)ソースアトリビュートのグラデーションを計算します。
この画像は、地形の高さグラデーションを表示しています。
技術的な説明
値(関数)が与えられている滑らかなサーフェス上のどこでも、そのサーフェス上のポイントにおけるグラデーションは、局所的に値が非常に増加する方向を向いたサーフェス接線ベクトルです。 グラデーションベクトルの大きさは、その方向に値が増加する速さに比例します。 例えば、ポリゴン地形の高さのグラデーションの大きさを使用することで、平坦な領域(ゼロ長に近いグラデーション)と勾配のある領域(大きな長さのグラデーション)を局所的に区別することができます。
Source Attribute
グラデーションが計算されるアトリビュート。
Note
ここには、 Element Type で決められた出力アトリビュートで生成されるアトリビュートクラスに関係なく、Point/Primitive/Vertexアトリビュートを指定することができます。
Source Component
ソースとして使用するベクトル値のアトリビュートのコンポーネントを選択します。
Make Scale Independent
通常では、グラデーションは入力ジオメトリの均一スケールに反比例してスケールされます。このオプションは、入力ジオメトリのスケールが変わっても変化しないように調整された結果を返します。
技術的な説明
入力ジオメトリを均一スケール係数s
でトランスフォームさせた場合、グラデーションには1/sのスケールがかかり、サーフェスの総面積と各エレメントの“サーフェスの共有”はs
の2乗でスケールがかかります。
このオプションを有効にすると、それぞれの累積されたグラデーションをそれぞれの“サーフェスの共有”の2の平方根で除算して、スケール依存を除去します。
Laplacian
スカラーまたはベクトルのソースアトリビュートのラプラシアンを計算します。 Source AttributeとSource Componentのオプション、その結果を表面積で除算するオプションに関しては、グラデーションのメモを参照してください。
技術的な説明
Laplacianは、関数によるその周辺領域への整合性を測定します。 感覚的に言えば、サーフェスのポイントにおけるLaplacianは、近隣との値の差を均一にするために“不足分”を評価します。 例えば、そのラプラシアンの小数値を繰り返してアトリビュートに加算することで、そのアトリビュートを滑らかにする効果が得られます。 逆に言えば、そのラプラシアンの小数値を繰り返してアトリビュートから減算することで、その特徴が鮮明化されるようになります。 しかし、関数の値が変更されるとその関数のラプラシアンが変わるため、増分値を大きく変更してしまうと、その処理が不安定になってノイズが生成されてしまうことに注意してください。
Source Attribute
Laplacianを計算するアトリビュート。
Source Component
ソースとして使用するベクトル値のアトリビュートのコンポーネントを選択します。 他にも、 Full Vector を使って、ベクトルアトリビュートのベクトル値のラプラシアンを計算することもできます。
Make Scale Independent
このオプションを有効にすると、それぞれの戻り値をその領域の“共有”で除算して、スケール依存を除去します。
Note
特徴を平滑化または鮮明化するためにLaplacianを使用する時は、エレメントの“共有”の積分量をそれぞれの領域の平均量に効果的に置換する Make Scale Independent オプションを有効にした方が良いです。
Boundary Integral
それぞれの累積領域の境界上にあるソースアトリビュートの積分を計算します。 Accumulate が Per Piece または Throughout に設定されている時、すべての内部エッジは自動的に打ち消され、各ピースの戻り値は、その境界エッジの各エッジの長さとそのエッジのアトリビュート値の積の合計値になります。 ソースアトリビュートがPrimitiveアトリビュートの場合、エッジ上の値は、そのエッジが属するプリミティブの値と同じです。 それがPointアトリビュートまたはVertexアトリビュートの場合、エッジ上の値は、そのエッジの両点の値の平均値です。
例えば、アトリビュートの値がすべてのプリミティブ上で1の場合、各ピースの境界積分は、外周の測定結果とまったく同じ出力を生成します。
Integration Mode
ベクトル値のソースアトリビュートを積分する時、このパラメータでは、各エッジにおけるアトリビュートの解釈方法を選択することができます。
Component-wise
ベクトル値のアトリビュートの各コンポーネントは別々に積分されて、ベクトル値の結果を生成します。
Tangent Component
各エッジで積分される値は、ベクトルアトリビュートとエッジの単位方向ベクトルの内積です。 これは、“Line Integral:線積分”の数学的考えと同じです。その結果は実数値になります。
Normal Component
各エッジで積分される値は、アトリビュートから、カーブに沿った接線ベクトルを減算して取得されます。 これは、実質的にそのカーブの直交ベクトルを求めて、それを積分します。その結果はベクトル値になります。
Surface Integral
累積領域毎にソースアトリビュートの積分を計算します。 累積領域毎に返される値は、その領域内のすべてのエレメント上の、“サーフェスの共有”とそのソースアトリビュート値の積の合計値になります。このSource IntegralモードはLine Integrals(線積分)と同様に動作します。
例えば、すべてのプリミティブのアトリビュートの値が1であれば、このSurface Integralは、 Measure に Area を選択した時と同じ結果を計算します。
ソースアトリビュートがP
で、表面積で除算するオプションを選択した場合、その結果は、 Measure に Centroid を選択した時と同じになります。
Note
この場合では、ベクトルアトリビュートで Normal Component を使用すると、スカラー出力と接線コンポーネントが生成されると同時に、その接線コンポーネントがベクトル値の出力を生成します。
Accumulate
累積領域を選択します。
Per Element
出力アトリビュートは、“サーフェスの共有”に相当するエレメント毎に結果を計算します。
Per Piece
ピースアトリビュートを指定すれば、出力アトリビュートには、エレメント毎にそれが属するピース全体の積分された結果が入ります。 つまり、同じピース内のすべてのエレメントが同じ出力値を持ちます。 例えば、ピースあたりの面積の計算は、各出力プリミティブにそのプリミティブが属するピースの総面積を割り当てます。
Refine To Connected Manifold Pieces
有効にすると、各最終ピースが繋がったマニフォールドピースとなるように、piece
アトリビュートで表現されたピースが(可能であれば)さらに分解されます。
これが実行される時、非マニフォールドエッジ(3枚以上のポリゴンで共有されたエッジ、または、方向が揃っていない2枚のポリゴンで共有されたエッジ)は切断されていると見なされます。
無効にすると、同じpiece
アトリビュートを持つすべての繋がったコンポーネントの結果が合算され、その合計値がそのピース内のすべてのエレメントに書き出されます。
Throughout
単一ピースとしてジオメトリ全体を指定した場合(またはグループを指定した場合)の Per Piece と同様です。
Position Attribute
オプションで指定すると、このアトリビュートは、すべての測定で計算するP
をオーバーライドします。ここにはPoint/Vertexアトリビュートを指定することができます。例えば、UV位置またはRest Position(静止位置)を使って計算を行なうことができます。
Visualized Range ¶
Measure 2.0 SOPには、それ専用の可視化状態が用意されています。 このノードを選択した状態でビューポート内でEnterを押すことで、その状態を表示することができます。 デフォルトでは、可視化パラメータによってオペレータがクックされることはなく、あくまで可視化するために使用されます。 しかし、 Bake Visualization Range Into Output を設定または Range Group を生成した場合、これらのパラメータが変更されると再クックがトリガーされます。 スカラー値は、この値範囲の部分に割り当てられているカラー選択に使用されているカラーランプを使って、色を付けて可視化されます。 ベクトルアトリビュートは、固定長のベクトルで可視化されますが、そのカラーがベクトルの大きさを表わします。
Minimum
設定すると、その指定した最小値で出力範囲が制限されます。指定した最小値よりも小さい出力値(ベクトルの大きさ)は、この最小値に制限されます。
Maximum
設定すると、その指定した最大値で出力範囲が制限されます。指定した最大値よりも大きい出力値(ベクトルの大きさ)は、この最大値に制限されます。
Width
有効にすると、さらにこの出力範囲は Center 値を基準にここで指定した幅の範囲に制限されます。 表示されるメニューでは、オプションでこの幅に値の範囲の統計的測定単位を乗算します。
x 1.0
指定した幅をそのまま使用します。
x SD
Raw値の範囲(またはベクトルの大きさのRaw範囲)のStandard Deviation(標準偏差)をこの幅に乗算します。
x MAD
Raw値の範囲(またはベクトルの大きさのRaw範囲)のMedian Absolute Deviation(中央絶対偏差)をこの幅に乗算します。
Center
中心でクランプする際のその中心値を指定します。
Fixed
明示的に中心を指定します。
Mean
Raw出力範囲(またはベクトルの大きさ)の平均値を中心値として使用します。
Median
Raw出力範囲(またはベクトルの大きさ)の中央値を中心値として使用します。
Color Mapping
クランプした範囲をカラーランプに線形的にマップします。 このノードの可視化は、Raw範囲に沿った値の集中とこれがカラーランプにどのように重複しているのかを示したヒストグラムも表示します。
Vector Scale
出力タイプがベクトルタイプの時、このパラメータは、ビューポート内で描画されるベクトルのスケールを制御します。 ビューポート内で表示がごちゃごちゃしないように、自動的に選択された基本スケールで単位ベクトルが表示されます。
Output ¶
Attribute Name
生成されるアトリビュートの名前。 生成される名前が一部の測定タイプのデフォルトの場合、その測定を切り替えると、パラメータスクリプトを使って、変更された測定に合うようにそのデフォルトのアトリビュート名が置換されます。カスタム名は、このスクリプトで変更されません。
Total Attribute Name
有効にすると、ジオメトリ全体(または指定したグループ)の測定量の合計値が格納されたDetailアトリビュートが生成されます。
Note
この値は、 Accumulate を Throughout に設定した場合に出力アトリビュートで生成される結果と同じです。 この違いは、 Total Attribute Name では、値がDetailアトリビュートとして1度だけ書き出されるのに対して、 Throughout ではすべてのエレメントに同じ値が書き出されるということです。
Range Group
有効にすると、計算されたRaw測定値のエレメントが可視化範囲でフィットされます。つまり、クランプされていなかったエレメントが指定したグループでレポートされます。
Bake Visualized Range Into Output
有効にすると、可視化で行なわれた同じクランプも出力値に適用されます。
Remap Range
有効にすると、(オプションでクランプされた)出力値の範囲(またはベクトルの大きさ)が、指定した最小値と最大値に合うように線形的に再マップされます。 このオプションは、可視化を出力にベイクする場合に利用可能です。
Examples ¶
MeasureArea Example for Measure geometry node
このサンプルでは、Measure SOPを使って、プリミティブの面積に基づいて、グループを作成する方法を説明しています。
MeasureLaplacian Example for Measure geometry node
このサンプルでは、Laplacianの測定法を使ってアトリビュートを平滑化または鮮明化する方法を説明しています。