あらゆるプロジェクトで使えるマスターマテリアルを考案します。
随時更新
■前提
マスターマテリアルの中身の処理は、なるべくマテリアルファンクションで構成されるようにした方が良い。(後述するブレンドモード違いのバリエーション作成のため)
■エミッシブカラー・テクスチャ2種1種・アルファテクスチャをデフォルトとカラーテクスチャをスイッチで切り替えられるようにする
・後述するOpa1ノードをそのままエミッシブカラーの源流にする
・テクスチャの濃淡に応じて色を設定できるようにする(LerpでMinとMaxにVectorColorを個別に入力する)
・後述するOpa2・Opa3が加算合成の場合(加算合成がTrueの場合)、ベクターカラーをOpa2やOpa3に乗算し、その結果をエミッシーブカラーに加算する処理を入れる
■オパシティ
・オパシティテクスチャは3種用意。以下、Opa1、Opa2、Opa3と呼ぶ
・Opa2とOpa3はスイッチで追加できるようにする。さらに、直前までの処理に対して乗算するか加算するかもスイッチで切り替えられるようにする
・Opa3種のテクスチャに、さらにそれぞれのマスク用テクスチャを乗算する処理を入れる。マスク用テクスチャはRotation(回転)できるようにする。
∟例えばヒットエフェクトを作る時、中心に近い部分は密度高く、外側は密度低くなおかつ速度を遅くするなどを表現する際にマスク用テクスチャを使う
・オパシティ1枚目のみ、DynamicParameterでUVオフセット入れれるようにする。その際はUとVのオフセット値入力用のScalarParameterとAddで繋ぐこと、こうすることでマテリアルからも値を入れれるようにする。
∟DynamicParameterからランダム値を入力すれば、同じエミッタからテクスチャのオフセット値が異なるパーティクルを複数出せる
・オパシティ1枚目のみ、ディストーション(歪み)を反映できるようにする
・各オパシティテクスチャ直後にPowerノードで輝度調節処理を入れる
・オパシティ値は、マテリアルの「オパシティ」と「オパシティマスク」出力に繋げる(Translucent、Masked両方に対応できるように)
■ディゾルブ(Broken)
・テクスチャ2種。そのうち1種はスイッチで追加できるようにする
∟軌跡表現など端から端へ模様が移動していくような表現をグラデーションテクスチャ2つ使って表現できる
■フレネル(Fresnel)
・スイッチでフレネル処理を入れられるようにする。フレネルは初期値では縁側白で中側を黒にしておき、スイッチにより反転もできるようにしておく。
■デプスフェード
・スイッチで入れられるようにする
・屈折モードはPixelNormalが綺麗め
■屈折
・ディゾルブ結果と乗算すると良い
・屈折方式は、PixelNormalOffsetがエフェクトでは向いてそう・・・
(Index of Refractionは自然の法則を取り入れているが、発光を多く扱うエフェクトでは発光の屈折がノイズになることがある)■フローマップ
オパシティ1枚目のテクスチャを流用して処理を行うことがおそらく不可能なので、フローマップ用オパシティ1枚目テクスチャノードごと用意。オパシティ1を使うかフローマップ用のオパシティ1を使うかスイッチで切り替える
∟使う頻度少ないのでいったん取り消し
ソートプライオリティについて
以下の優先を守り、プライオリティは5ずつぐらい飛ばしで設定するのが良い。
①オパシティテクスチャ
②メインのテクスチャのUVパラメータ
③オパシティテクスチャのマスクテクスチャ関連
▼例外
・スイッチのスタティックブールパラメータ系は優先度1
・Opa1に繋ぐ想定のDistortion関連は、Opa1関連の後の優先度
・Opa2やOpa3のエミッシブカラー領域へのadd系スイッチのスタティックブールパラメータ系は2
・FresnelInverseは99
ブレンドモードが異なるマスターマテリアルの複製
基本的に、BlendModeのバリエーションは、UnlitのTranslucentとMaskedが必要。DefaultLitはユニークなマテリアルが必要になることが多い気がするので、マスターマテリアルを作るべきではないかも。
とあるブレンドモードのマスターマテリアルを作成したら、異なるブレンドモードのマスターマテリアルを作成します。
異なるブレンドモードのマスターマテリアルは、普通に複製して作成する。(インスタンスではない)。その方がシェーダーバリアントが少なく済む・・・らしい。マテリアルを複製するのではなく、インスタンスで作成し、ブレンドモードを変更します。