HoudiniでGLSLシェーダを作る / 2.フラグメントシェーダの改造_パラメータの追加

※注意※シェーダ知識があまりないので間違った説明があるかもしれません。

今回は前回作成したフラグメントシェーダを改造する所までご紹介。

ポイントは

---------------------------------------------------------------

 1. diffuseTextureをそのまま利用する

 2. パラメータを使う
---------------------------------------------------------------

HoudiniのSOPはこんな感じになっています。

f:id:serano_vfx:20200511145547p:plain

f:id:serano_vfx:20200511145627p:plain

1. diffuseTextureをそのまま利用する

前回基本のGLSLシェーダを作りましたが、そのシェーダを複製して
複製したシェーダでは
前回追加したパラメータを減らして[Diffuse Texture Layers]フォルダ内だけ残します。

f:id:serano_vfx:20200511144616p:plain
▲こちらは前回用意したパラメータです。

f:id:serano_vfx:20200511144726p:plain
▲[Diffuse Texture Layers]フォルダ内だけを残して他を削除した状態にします。

f:id:serano_vfx:20200511145147p:plain
▲[+]を押すと

f:id:serano_vfx:20200511145213p:plain
▲テクスチャとUVの指定、設定をする場所が追加されます。


f:id:serano_vfx:20200511145816p:plain

f:id:serano_vfx:20200511145802p:plain

▲テクスチャとUVが指定されていればこんな感じになります。

 

2. パラメータを使う

引き続き作成したシェーダを[Edit Operator Type Properties]ウィンドウで 

[Code]タブを開きます。

f:id:serano_vfx:20200511150545p:plainf:id:serano_vfx:20200511150605p:plain▲赤線のボタンを押してFragment Shaderだけを見れるようにしておくと
 コードを書くのが少し楽になります。

コードの中腹ぐらいまでスライドするとmainになるコードを見つける事が出来ます。

f:id:serano_vfx:20200511151101p:plain▲スライドしてみると結構量が多い事がわかるのですが、今回弄るのはここだけ。
 if文になっていますが、内容は
 テクスチャを刺してないない場合は白色にする、という事みたいです。

 なので、このif文は消してしまいます。 

f:id:serano_vfx:20200511152441p:plain
▲ifとelseとelseの中身を削除。

試しにテクスチャではなく、色にしてみます。

f:id:serano_vfx:20200511152635p:plain

f:id:serano_vfx:20200511152655p:plain
tex = HOUsampleDiffuseMap(fsIn.texcoord0); から
 tex = vec4(1.0, 0.0, 0.0, 1.0); に変更した結果


これを変更前の状態に加算してみる。

 

f:id:serano_vfx:20200511153032p:plain
f:id:serano_vfx:20200511152809p:plain
tex = HOUsampleDiffuseMap(fsIn.texcoord0) + vec4(1.0, 0.0, 0.0, 1.0);
 テクスチャの上に色を加算できるようになりました。

色は変えられるようになりましたが、数値をわざわざコードで変更するのはとても大変なので
パラメータから色を変えたいですよね。
なので、パラメータを用意してシェーダが拾えるようにします。

 

f:id:serano_vfx:20200511151635p:plainf:id:serano_vfx:20200511153529p:plain
▲色とアルファのパラメータを追加、ラベルと名前を設定します。
 [Name]がCodeで拾える変数になります。

f:id:serano_vfx:20200511153825p:plain
▲こんな感じでパラメータが追加されています。

 

パラメータを取得するコードを追加します。

パラメータを取得する為のコードは

[uniform + Type + ParameterName]

----
今回の場合はRGBA、名前はaddColorなので
Typeは Vector4
ParameterNameは addColorになります。
----
uniform vec4 addColor;

こう書けば取得できます。
f:id:serano_vfx:20200511154229p:plain
▲こんな感じですね。
 パラメータを追加するコードは頭に置いていますが、もっと良い場所があるかもしれません。

 

取得したコードを先ほどの加算式から差し替えます。

f:id:serano_vfx:20200511154901p:plain
tex = HOUsampleDiffuseMap(fsIn.texcoord0) + addColor;

 

 

f:id:serano_vfx:20200511155121p:plainf:id:serano_vfx:20200511155051p:plain

 ▲RGBAパラメータを変更してみると、色が変わる事が確認できると思います。

 

Houdiniのパラメータダイアログから値を取得して
変更がサクサクできるという事はシェーダを調整する時にとても嬉しい環境だと、自分は思いました。

 

今回はここまでです。
次はいらない情報(ライト影響やラフネス等)を消す部分を説明しようかなと思います。

f:id:serano_vfx:20200511160147p:plain

▲削除出来ればとこんな見た目になって、よりゲームっぽい絵作りや
ルックの調整がHoudini上で可能になります。

ただ、自分もなんでそうなっているのか
ちょっと把握できてない部分なので説明しきれるか怪しかったりします..

上手くできなかったら申し訳ありません!

一応今後の予定としては

情報削除⇒頂点シェーダ⇒アトリビュートの取得

まで続く予定です。

 

分からない事はツイッターやブログコメントなどで投げて貰えれば追記補間できるので助かります。
独学の情報共有なので、もっとこうしたらええよ!という言葉もいただけたらとても嬉しいです!