左右/上下に対称なアルファのグラデーションを設定する方法


2つに分けたジオメトリに、対称なアルファのグラデーションを設定する方法をご紹介します。

※使用バージョン:Houdini17.0.352

 

■ジオメトリに透明度を設定するには

ジオメトリに透明度を設定したい場合は、「Alpha」アトリビュートをジオメトリに追加します。TypeをFloatにして、0から1の範囲で数値を設定することで、0に設定したところは透明に、1に設定したところは不透明になります。

以下の画像は、球体のジオメトリのポイントに対して、一番下のポイントのAlphaを0、一番上のポイントのAlphaを1としたグラデーションを設定した際の画像です。

 

今回はこの透明度(Alpha)のグラデーションを、

  • 1つのジオメトリから分割した2つのジオメトリへ
  • 上下対称に
  • Rampで制御可能な、ジオメトリの変形に連動する状態で

適用してみたいと思います。

こちらの記事では、ノードベースで設定する方法とVOPを使用して設定する方法の2通りの手順を紹介致します。

 

 

■ノードベースの設定方法

  1. ジオメトリは、球体のジオメトリをDelete SOPを使用して中央付近を削除し、上下2つのパーツに分割したものを使用します。
     

     
  2. Delete SOPを2つ使用してプリミティブの下側と上側をそれぞれ削除し、上側と下側のパーツに分けます。以下のエクスプレッションを使用します。
    @P.y > ch(“../delete/ty”)
    以下は、その結果の画像です。[delete_Lower]と名前を付けたDelete SOPで下側を削除して上側のみのパーツにし、[delete_Upper]と名前を付けたDelete SOPでは上側を削除して下側のみのパーツにしています。
     

     
  3. 各パーツのジオメトリに対して、Attribute Create SOPを用いて、bbox_yアトリビュートを追加します。
    上側のジオメトリの場合、bbox_yアトリビュートには、$BBYを使用し、ポイントに対してY軸方向のバウンディングボックスでの相対位置を利用して0から1の値を設定します。
    また、下側のジオメトリの場合、bbox_yアトリビュートには、1-$BBYで、0から1の範囲を反転させた値を設定します。
     

     
  4. その後、Merge SOPで合成し、Attribute Create SOPでAlphaアトリビュートを追加します。
    bbox_yアトリビュートをもとにグラデーションを追加しつつ、グラデーションの幅を調整できるように、Edit Parameter InterfaceからRamp(Float)パラメータを追加し、Nameを「alpha_ramp」と設定して適用します。
    その後、Attribute Create SOPのパラメータ、Valueに以下のエクスプレッションを入力します。
    chramp(“alpha_ramp”,@bbox_y,-0.2)
     

     

これで、alpha_rampと名前を付けたrampパラメータで、Alphaのグラデーションの幅が調整可能になります。シーンビューで結果を確認しながら調整できます。

 

補足:トポロジーを保持したい場合

オブジェクトを分割する前のトポロジーを保持したい場合は、Delete SOPでスフィアの一部を削除する前に、Attribute Create SOPで$PTを使用してポイント番号をidとして設定します。

手順1~4の操作が終了した後に、Attribute Copy SOPを作成し、 idアトリビュートを参照するように設定し、元のジオメトリにAlphaアトリビュートをコピーします。

 

 

■VOPを使用した方法

  1. Delete SOPを使用して、ジオメトリを上下2つのパーツに分割したものを使用します。
     

     
  2. Group Expression SOPを使用して、それぞれのパーツのグループを作成します。
    以下のエクスプレッションを入力します。
     
    Group:   Upper

    @P.y > ch(“../delete1/ty”)
    Group:  Lower
    @P.y < ch(“../delete1/ty”)
     
    上側のジオメトリのポイントをUpperグループに、下側のジオメトリのポイントをLowerグループに設定します。
     

     
  3. Attribute VOP SOPで、手順2で作成したグループと、それぞれのジオメトリのバウンディングボックスを使用して、rampで制御可能なグラデーションのAlphaアトリビュートを追加します。
  • グループをVOP内で使用するためにParameter VOPを2つ追加し、TypeをString(文字列)に、LabelをUP Point Group、BTM Point Groupにして、Attribute VOP SOPのパラメータで、グループ名を指定できるようにします。
     
  • Relative to Point Bounding Box VOPは、上下のパーツそれぞれのバウンディングボックスの相対位置を取得します。
     

     
  • Vector to Float VOPで先程取得した数値の中からY座標の値だけを取り出し、Clamp VOPで0-1の範囲にします。
     
  • Lowerグループ側は、Alphaの数値をUpperグループ側と上下対称にするために、0から1の範囲を反転しています。
     
  • Add VOPで上側と下側のグループを組み合わせ、Ramp Parameter VOPでグラデーションの幅を調整できるようにします。Ramp TypeはSpline Ramp(float)にします。また、Nameにalpha_ramp、LabelにAlpha Rampと入力しています。
     
  • 最後、Bind VOPで、これらの情報をAlpha アトリビュートとして出力しています。
     

     

Parameter VOPで設定したUP Point Group、BTM Point Groupと、Ramp Parameter VOPで設定したAlpha Rampパラメータは、Attribute VOP SOPのパラメータに追加されていて、こちらで変更、調整が可能です。

以下の画像では、わかりやすいように、Edit Parameter IntaefaceでFolderを追加して、そちらにパラメータを移動しています。

以上の手順により、Pointアトリビュートに上下対称なアルファのグラデーションを設定することができます。

尚、これらの方法は、BBOXで得られる相対位置(0~1)を利用しているため、上下のジオメトリの高さが変わった場合は、相対的にグラデーションの幅も変わります。