任意の形状の表面上を動くポイントのノーマル操作


今回の記事では、任意の形状のモデル上を移動するポイントに対して、モデルの持つノーマルをコピーする方法をご紹介します。

※本記事ではHoudini 18.5.563を使用しています。

この記事で作成したhipファイルはこちらよりダウンロード可能ですので、ご確認いただけたらと思います。

 

■モデル上にポイントを作成

はじめに、任意の形状のモデルを作成(今回はSphere)を作成します。

 

作成したモデル上を動かすためのポイントをScatter SOPによって散布します。

 

■Volumeによるノイズの作成

次に、ポイントを動かす準備として、ノイズをかけたVolumeデータを作成します。
今回はVolumeデータに対してノイズをかけ、そのVolumeデータを参照して、POP内でポイント動かします。

まず、Bound SOPをベースのモデル(Sohere)と接続します。
さらに、その下に、VDB from Polygons SOPを作成し接続。「Voxel Size」を、「0.05」に、「Distance VDB」のトグルを無効にし、「Fog VDB」のトグルを有効にします。

 

VDB SOPと、VDB Activate SOPを作成し、VDB Activate SOPの第1入力にVDB SOP、第2入力にVDB from Polygons SOPを接続します。

 

接続が出来たら、
VDB VOPの
「Name」を「vnoise」
「Type」を「Vector Float」
「Voxel Size」を「0.05」
に変更。
VDB Activation VOPのタブを「Reference」に変更します。

 

次に、Volumeに対しノイズをかけるために、Volume VOP SOPを作成し接続します。

 

Volume VOP SOP内に入り、Vector to Vector4 VOPを作成し、Volume VOP Global Parameter VOPの”P”と”Time”をVector to Vector4 VOPの”vec”と”fval4”に接続します。
さらに、Anti-Aliased Flow Noise VOPを作成、Vector to Vector4 VOPのの出力と”pos”を接続し、「Signature」を「4D input, 3D Noise」に変更します。

 

Anti-Aliased Flow Noise VOPのノード上で右クリックをし、
VEX / VOP Options > Create Input Parameters
を選択し、パラメータをSOP階層に出します。
今回使用するパラメータは”frc”、”amp”、”flow”の3つだけなので、それ以外の接続を外します。

  

新しくMultiply VOPを作成し、Anti-Aliased Flow Noise VOPの出力と接続します。
さらに、Parameter VOPを作成し、Multiply VOPの第2入力に接続、Parameter VOP内の「Name」を「Multiply」に変更します。

 

最後に、Bind Export VOPを作成し、Multiply VOPの後ろに接続。「Name」をVDB VOP SOPで設定したものと同じ「vnoise」に、「Type」を「3Float(Vector)」に変更します。

 

以上で、Volumeに対してノイズをかける準備が終了となります。
SOPの階層に戻り、パラメータを調整します。

Volume VOP SOPを選択すると、先ほどSOPの階層に出したパラメータが表示されています。
各パラメータを
「Frequency」:5.5.5
「Amplitude」:2
「Flow」:$F*0.05
「Multiply」:2
に変更します。

 

以上で、Volumeによるノイズ作成は終了となります。

■POPによるポイントの編集(ノイズを参照した動きの設定)

POP Network SOP を作成し、ポイント(Scatter)を第1入力に、ベースのオブジェクト(Sphere)を第2入力に、Volumeデータ(Volume VOP SOP)を接続します。

 

POP Network SOP内に入り、POP Source DOPの「Source」タブ内の「Emission Type」を「All Points」に変更します。
さらに、今回はポイントを今以上に増やす必要がないので、「Birth」タブ内の「Impulse Activation」に「$F==1」を入力します。

※こちらを入力することにより、1フレーム目のみ、パラメータに「1」が入り、それ以降は「0」が入り、1フレーム目のみポイントを作成するようになります。

 

次に、SOP階層で作成したVolumeのノイズを参照してポイントに動きをつけます。
POP Advect by Volumes DOPを作成し、POP Solver DOPに繋がるMergeと接続します。
さらに、「Parameters」タブ内の「Velocity Suorce」を「Thied Context Geometry」に、「Field Name」を「vnoise」に変更します。

 

タイムスライダーを動かすと、下の動画のようにポイントが動いていることを確認できます。

 

この状態では、ポイントが、ばらばらに広がってしまいます。
こちらに、VEXを使い、ポイントがオブジェクトの表面に沿うように動きを変更します。

 

■POPによるポイントの編集(モデル表面に沿う動きへの変更)

POP Wrangle DOPを作成し、Mergeと接続します。
さらに、「Inputs」タブ内の「Input 2」を「Seconde Context Geometry」に変更します。

 

次に、POP Wrangle DOPの「Code」タブに以下のWrangleを書き込みます。

——————————————————————————————————————–
int prim_num;
vector prim_uv;

//任意のポイント@Pから、一番目にインプットされたオブジェクトの一番近いプリミティブ番号をprim_num、そのUVをprim_uvに代入する。
xyzdist(1, @P, prim_num, prim_uv);

//一番目にインプットされたオブジェクトのプリミティブ番号prim_numのUVprim_uvの位置をnear_pに代入
vector near_p = primuv(1, “P”, prim_num, prim_uv);

//アトリビュートを代入
@P = near_p;
——————————————————————————————————————–

すると下の動画のようにポイントを、モデルの表面上で動かすことが出来ます。

 

以上の工程で、オブジェクトの表面にポイントを這わせて動かす設定は終了です。

しかし、この状態では各ポイントのノーマルはそのポイントがもともと持っているノーマルのままとなるため、下の動画のように、ポイントが移動した際に、モデルの形状に沿ったノーマルは作成されません。

  

そこで、モデルの形状に沿ってノーマルを再構成するように、調整します。

 

■ノーマルの再構成

再度、POP Wrangle DOPの「Code」タブに以下の赤色で表示されたWrangleを追加します。

——————————————————————————————————————–
int prim_num;
vector prim_uv;
xyzdist(1, @P, prim_num, prim_uv);

vector near_p = primuv(1, “P”, prim_num, prim_uv);

//一番目にインプットされたオブジェクトのプリミティブ番号prim_numのUVprim_uvのノーマルをnear_nに代入
vector near_n = primuv(1, “N”, prim_num, prim_uv);

@P = near_p;

//アトリビュートを代入
@N = near_n;
——————————————————————————————————————–

——————————————————————————————————————–
int prim_num;
vector prim_uv;
xyzdist(1, @P, prim_num, prim_uv);

vector near_p = primuv(1, “P”, prim_num, prim_uv);

//一番目にインプットされたオブジェクトのプリミティブ番号prim_numのUVprim_uvのノーマルをnear_nに代入
vector near_n = primuv(1, “N”, prim_num, prim_uv);

@P = near_p;

//アトリビュートを代入
@N = near_n;
——————————————————————————————————————–

すると、下の動画のように元のモデルの持つノーマルを参照して、各ポイントのノーマルを再構成することが出来ます。

 

以上の工程で、モデルの面に沿ったノーマルの再構築を行うことが出来ます。

今回の説明ではSphereを使用していますが、このシステムはどのようなモデルにも適用することが出来ます。
以下の動画は別のモデルに対して今回のシステムを適用したものとなります。

 

このように、このシステム使うことにより、モデルの形状に沿ったポイントの移動、ノーマルの再構成を行うことができ、動くポイントであっても、元のノーマルを使用した編集を行うことが出来ます。