| On this page |
散布ポイントにアトリビュートを追加することで、インスタンスとそのシェーダの挙動を制御することができます。
典型的なアトリビュートはorientやpscaleですが、カラーをランダムにすることもできます。
あるいは、距離、高さ値、温度、風向などのアトリビュートを格納したい場合もあるでしょう。
可能性は無限大です。
既存のアトリビュート(例えば、pscale)をVEXコードや適切なノードを使って上書きすることもできます。
Note
Solaris/USDでは、アトリビュートのことを Primvar ( Primitive Variable の略)と呼びます。 また、一部のアトリビュートはSolarisでは別の名前が付けられています。
この章では、カスタムのhueおよびsaturationアトリビュートを適用して、シェーダのカラーを制御する方法について説明します。
最終章では、それらのアトリビュート値を読み込んで、マテリアルに接続する方法を説明します。
アトリビュートの定義と作成の工程は、基本的にはHoudini内の他のジオメトリと同じです。 一般的な方法としては、アトリビュートを作成しそのタイプを定義します。 その後、ポイント全体でアトリビュート値をランダムにします。
このガイドは、散布に関する4ページにわたるワークフローの説明の2ページ目となります。
-
散布: SOPでは、シーンの準備方法を説明しています。
-
散布: ポイントの除去では、散布ポイント数を制御する方法を説明しています。
-
“散布: アトリビュート”では、
pscaleやorientといったアトリビュートを作成します。 -
散布: Solarisでは、インスタンスを作成する方法を説明しています。
ポイントの分離 ¶
Height Fieldを使用する場合、考慮すべきことが1つあります。
HeightField Scatter SOPをクリックして選択し、Geometry Spreadsheetを開いてください。
Points モードでは、最初の
0と1の2つのエントリがあるのが分かります。
これらはHeight Fieldを示したものであり、アトリビュートを適用すると、その地形にも影響します。
これは何を意味してるでしょうか?
例えば、ランダムなCdカラーアトリビュートを適用したと仮定します。
Height Fieldが2つのポイントで表現されている状況では、地形に色が付くようになります。
そのため、散布ポイントとHeight Fieldを別々のストリームに保存することが推奨されます。
そうすれば、散布ポイントにアトリビュートを書き込んでも、その結果に誤りが生じることはありません。
このワークフローは、アトリビュートだけでなく、Solarisにおける全工程のパイプラインにおいても便利です。
HeightField Scatter SOPの Relaxation セクションにある Keep Incoming Terrain オプションを無効にしてください。
すると、ビューポートには散布ポイントのみが表示されます。
スケールと向き ¶
HeightField Scatter SOPには、 Range パラメータを含む Variability セクションがあります。
ここでは、各ポイントの最小/最大スケール係数を定義することができます。
実際にはpscaleを変更していることになります。
Method ドロップダウンメニューにもスケール調整用の3つのオプションが備わっています。
既にScatter and Align SOPを使用したことがあるのであれば、おそらく
orientアトリビュートについてご存知かと思います。
このアトリビュートは、ベースオブジェクトの法線やその他の軸を基準としたインスタンスの回転値を制御します。
HeightField Scatter SOPも同様の動作をし、その適切なパラメータが Relaxation セクションにあります。
ヘルプによれば、 Randomize Up パラメータは“インスタンスから計算された法線方向をジッターさせる度数を指定します”と書かれています。 簡単に言うと、このパラメータは、すべてのインスタンスが地形の法線と完全に整列するのを防ぎます。 例えば、すべての木が地面に対して完全に垂直に立っている森を想像してみてください。 自然界ではこのような状況はほとんど発生せず、一部の木は94度で成長し、他の木は部分的に倒れ、また別の木は85度で成長するなど、様々な状態が見られます。 Randomize Up は、このような挙動を再現することができます。
Randomize Yaw パラメータは、インスタンスを地形の法線を基準に回転させます。 Yawは、すべてのオブジェクトが同じ方向を向かないようにします。
必要な法線は、HeightField Scatter SOPを追加した際にHoudiniがその場で計算します。 とはいえ、 Match Normals with Terrain パラメータと Match Direction with Slope パラメータを使用して法線の方向を調整することができます。
もちろん、VEXスクリプトや適切なノード(下記参照)など、ネットワーク内の任意の場所で両方のアトリビュートを上書きすることができます。
色相と彩度 ¶
hueアトリビュートを定義するには、まずAttribute Create SOPを配置します。
このノードをHeightField Scatter SOPに接続します。
次にそのAttribute Create SOP上で、 Name パラメータを
hueに変更します。
このアトリビュートは散布ポイント上では浮動小数点型として使用したいので、残りのパラメータは変更不要です。
次に、Attribute Randomize SOPを追加して、その入力をそのAttribute Create SOPの出力に接続します。
そのAttribute Randomize SOPでは以下の設定が必要です。
-
Attribute Name パラメータには、
hueと入力します。 -
Distribution タブにある Dimensions パラメータを
1に設定します。 この値は前述の浮動小数点数を表します。 -
次に、 Min Value と Max Value を選択します。 このアトリビュートは、テクスチャマップの彩度を制御します。 微妙な変化を得るために、通常では色関連の値を狭い範囲内に変更します。 不自然な色を避けるために、それぞれ
0.9と1.1を試してみてください。 -
saturationPointアトリビュートについては、上記で説明した手順通りにすべて繰り返すことができます。 さらに1つのAttribute Create SOPと1つのAttribute Randomize SOPが必要です。1の値は元の彩度を表すため、変更するのは Min Value のみとなります。 一方、0の値はグレースケールマップを生成しますが、通常これは望ましくありません。 適切な値は例えば0.7です。 これによってHoudiniはポイントに0.7から1.0までの間のランダムな値を追加します。
Height Fieldの散布: Solarisのページでは、カラー補正アトリビュートをシェーダに接続する方法を説明しています。
アトリビュートの削除 ¶
パーティクル数が多くてアトリビュートも多い場合、レンダリング処理に必要なコンピュータリソースを消費します。 不要なアトリビュートを削除することで、時間とメモリを節約することができます。
この作業にはAttribute Delete SOPを使用すると良いでしょう。
そこで様々な (…) Attributes パラメータが確認できるので、削除したいアトリビュートを入力してください。
パラメータの関連ドロップダウンメニューからアトリビュートを選択することもできます。
最終手順 ¶
次に、ネットワークの特定部分によりアクセスしやすくするためにNull SOPを追加します。
例えば、SOPジオメトリをSolarisステージにインポートする場合などが該当します。
ここでは、Height Field用に1個のNull SOP、散布ポイント用に1個のNull SOPを使用します。
-
Null SOPを配置して、その入力をネットワークの最終ノード(おそらくAttribute Delete SOP)の出力に接続します。 そのNull SOPの名前を
POINTSに変更します。 -
さらにNull SOPを追加して、その入力をHeightField Noise SOPの出力に接続します。 そのNull SOPの名前を
TERRAINに変更します。