HoudiniでGLSLシェーダを作る / 3.エフェクト用フラグメントシェーダの整理

※今回は[HoudiniLab]の[Labs Flowmap Shader]をほぼそのまま使ってきているので
 出せる情報かなり浅いです、申し訳ありません・・・。

 
目的はライトを見てしまっているシェーダなのでライトを見なくするシェーダに変更しつつ、
シェーダの中の情報整理を行う事です。

デフォルトのコードは結構な量のコードになっていてウワァーとなってしまいますが
コードを見て上からざっくりとした内容として、
------------------------------------------------------------------------------------
・頂点シェーダからの値の引き取り
f:id:serano_vfx:20200608145506p:plain

・パラメータの取得_Houdini自動ユニフォーム
f:id:serano_vfx:20200608145526p:plain

・いくつかのビルドイン関数
f:id:serano_vfx:20200608145653p:plain

・メイン処理
f:id:serano_vfx:20200608145717p:plain
------------------------------------------------------------------------------------

こんな感じです。

今回はフラグメントシェーダのメイン処理の部分をエフェクト用にスッキリさせようと言う話です。
具体的な作業は、If文と一部のデフォルト値を変更していらない情報を整理。

それではやっていきます。

diffuseのIf文

f:id:serano_vfx:20200608151356p:plain

f:id:serano_vfx:20200608152208p:plain
f:id:serano_vfx:20200608161938p:plain
▲テクスチャを使うならこっち

こんな感じで他もガンガン削っていき、パラメータ参照してた物は値に変えていく。

opacityのIf文

f:id:serano_vfx:20200608151609p:plain
f:id:serano_vfx:20200608152404p:plain

emissionのIf文

f:id:serano_vfx:20200608152515p:plain

f:id:serano_vfx:20200608152616p:plain

oclusionとmetallicのIf文(テクスチャが32枚を超えた場合実行)

f:id:serano_vfx:20200608152803p:plain
はテクスチャそんな使わないので削除。

nN,rough,diff_roughのコード

f:id:serano_vfx:20200608153547p:plain
はそのまま使う。

f:id:serano_vfx:20200608153749p:plain

glH_LightingEnabledのIf文

※ライティングが有効なら1、無効なら0の整数が返される、その結果。

f:id:serano_vfx:20200608153959p:plain
から下に降って

f:id:serano_vfx:20200608160558p:plain

赤線までがほぼ一つのイフ文になっている模様
勉強不足ですが条件コンパイル的な物が使われているらしい...

f:id:serano_vfx:20200608161650p:plain
自分には複雑なコードだったが、ライティングオンじゃない時の表示について記述されているのは
最後のelseの部分だけのようなのでそれをほぼそのまま使う
アルファだけ頂点アルファ(fsIn.Color.a)とテクスチャアルファ(tex.a)の乗算に変更。

wireのコード

f:id:serano_vfx:20200608155211p:plain
最後のこれはそのまま使う。(ワイヤフレームの表示に関わる値です。)

 

これでunlitなシェーダが作れたはず・・・!