メガネ向けガラスシェーダー Ver.2.2
メガネなどの薄いガラスをイメージした表現の透過シェーダです。 表面の反射やMatcapが球面状に見え、ローポリや板ポリのモデルでもメガネらしさを向上できる効果を追加しています。 をたぱちさん(https://wotapacchin.booth.pm/)の公開されている丸メガネなど、レンズ部分が平面のモデルにもおすすめです。 更新履歴: Ver 2.2 2022.03.11 VRChatのアップデート(リリース時点ではOpen Beta)に対応し、シングルパスインスタンシングレンダリング(Single Pass Instancing)をサポートするようシェーダのコードを変更 また、Unity 2020.3.30f1にて動作確認 この対応により、Shader Forgeでの再編集は非対応となります Ver 2.11 VRChatの現時点のシェーダフォールバックの仕組みに対応し、フォールバック先を非表示(Hidden)に変更 これに伴いシェーダの名称を変更 Ver 2.1 Unitypackageを追加。 シェーダ自体に変更はありません。 Ver 2.0 2018.11.24 レンズ効果およびノーマルマップ対応を追加。 Matcapの仕様を変更。 Distortionを無効化できる設定を追加。 レンズ効果対応のため、添付メガネのUVを変更。 Ver 1.3 2018.10.14 色付き版(oy_Glass_Color)で実施した変更に合わせた対応。 入射光に対する色味を「Incident_Color」として分離したほか、 「Matcap_Saturation_Range」の名称を「Matcap_Hue_Range」に修正、 ReadMeの誤記修正など。。 Ver 1.2 2018.10.10 VRChatにてセーフティ設定によりシェーダを無効化された際、半透明のシェーダ(Particles)としてふるまうため、シェーダ名を変更。 また、ダミーパラメータを追加。 Ver 1.1 2018.10.06 Matcapに対応。リアルタイムライトの無い/弱いワールドでもメガネの存在を主張できるように。 これに伴い設定項目追加、名称変更。 Ver 1.0 2018.10.03 初版
ライセンス
パブリックドメイン(CC0)とします。 ご自由にお使いください。
インストール
Unityプロジェクトを開き、適当なフォルダにoy_Glass.shaderファイルをドラッグ&ドロップしてください。 Unity 2019.4.31f1で作成・確認しています。 アップデートの場合はUnity上で元のシェーダを削除してからコピーするか、エクスプローラにて直接上書きコピーしてください。
使い方
まず任意のマテリアルにて、シェーダー「Shader Forge/oy_Glass」を選択してください。 次にMatcapのテクスチャ欄に、Texturesフォルダ内に同梱している「matcap_horizon_gradation.png」をセットします。 他のパラメータはデフォルトの設定でまずは試してみてください。 (同梱の「推奨設定(添付メガネv2.0).png」に書かれている値がデフォルトです。) ◆エッジを付けたほうがガラスっぽく見えますので、メガネなら縁なしやハーフリムタイプのメガネがおすすめです。 もしくは、2.0で追加したレンズ効果やノーマルマップを試してみてください。 ◆をたぱちさん(https://wotapacchin.booth.pm/)の公開されている丸メガネに合わせた設定例を同梱しています。 元々平面のレンズ面がとても綺麗なカーブになります。一度試してみてください! ◆ShaderForgeで作成していましたが、Ver 2.2にてシングルパスインスタンシングレンダリングに対応する都合でShader Forgeでの再編集には非対応となりました。 なお、VRChatにてこのシェーダを使用した際、他プレイヤーのセーフティ設定によりシェーダを無効化された場合には、表示しないもの(Hidden)としてふるまいます。
設定項目
以下のパラメータを調整して、好みのガラス感を出してみてください。 Use Distortion: Distortionの使用をオンオフできます。 モデルやUVによっては使いにくい効果になっていたため、切り替えられるようにしました。 そして、添付のメガネではオフが推奨です。。 Distortion: ガラスを通して見えるもののゆがみ度合いを調整できます。 小さな値にするとゆがみ効果が大きくなり、大きな値にするとゆがみ効果はなくなります。 実際のガラスとは違う効果ですが、適度な値にすることでガラスらしさを表現できるかもしれません。 設定したら、モデルを斜めや横から見てみてください。 Specular: 表面での反射度合いを調整できます。 リアルタイムライト及びReflection Probeによる反射度合いになります。 Gloss: こちらも表面での反射度合いですが、Specularと効果のかかり方が違います。 大きな値にすると、映り込みが鏡面のようにくっきりします。 こちらもリアルタイムライト及びReflection Probeによる反射度合いになります。 Albedo_Base_Color: ガラスのベースの色味を変更します。 また、アルファ値を変更することで全体の透過率を変更できます。 Incident_Color: ガラス自体とは別に、入射光に対しての色味付けや明るさの強弱を調整できます。 (色味付けの効果はAlbedo_Base_Colorのアルファ値にも依存します。) Reflection_Color: 反射光全体(Specular,Matcap)に対しての色味付けや明るさの強弱を調整できます。 Emission_Base_Color: 暗いワールドなどで、周囲の明るさや傾きによらず常に一定の色で光らせたい場合に設定します。 通常は黒のままで良いですが、アバターがUnlitシェーダーの場合にはほんの少し明るくしてもよいかもしれません。 Matcap: Matcapとして使用する画像をセットします。 Matcapにより、ワールドのライトやReflection Probeによらず、光を反射しているように見せることができます。 Matcap Style: Matcap効果の現れ方を切り替えます。 オフの場合:Matcapテクスチャの反映がワールド基準になり、疑似的なReflection Probeのような感じになります。 添付している「matcap_horizon_gradation.png」ではオフ推奨です。 オンの場合:Matcapテクスチャの反映がビュー基準になり、一般的なMatcapっぽい挙動になります。 添付している「matcap.png」や一般的なMatcapテクスチャではオン推奨です。 Matcap_Scale: Matcapによる反射光のサイズを変更します。小さくすると広範囲にわたって反射しているように見えます。 大きなオブジェクトに適用する場合にこの値を小さくするなど試してみてください。 Matcap_Strength: Matcapによる反射の強さを設定します。 反射光全体の明るさはReflection_Colorで変更できますが、こちらはそれに加えてMatcapのみを調整するものです。 (Matcapによる反射はEmissionで実現しているため、好みに応じて強弱をつけられるようにしました。) Matcap_Hue_Range: Matcapによる反射に対する、色相変化効果の強弱を調整できます。 Matcapにはメガネレンズのコーティングをイメージして、視点からの位置関係で色相が変化する効果を追加してあります。0にすると色相は変化しません。 Matcap_Emission_Bottom: Matcapによる反射では、ワールドの明るさに応じたMatcapの明るさ調整を行っています。 この明るさ調整の下限値を調整できます。 Unlitシェーダーなど、暗いワールドでも明るく描画されるシェーダを顔のマテリアルに設定している場合は、この値を大きくすることでしっかり反射させることができます。 ※ダミーパラメータ Color このパラメータはVRChatにてセーフティ設定によりシェーダを無効化された際、半透明のシェーダとしてふるまうために必要なパラメータであり、変更不要です。 このパラメータを変更することによる見た目の変化はないようです。 Use LensEffect: レンズ効果を有効にします。 表面の反射やMatcapが球面状に見え、ローポリや板ポリのモデルでもメガネらしさを向上できます。 メッシュの展開されているUVマップ上の位置に基づいて、球面状の法線を割り当てています。 イメージは同梱の「UVマップ上でのレンズ効果のかかり方.png」を参照してください。 Normal Map: ノーマルマップを指定します。ノーマルマップはレンズ効果オフ(Use LensEffectがオフ)の場合のみ使用できます。 Lens Curve: レンズの球面効果の強さを調節します。 1で完全な球、値を小さくすることで厚み方向に球が押しつぶされ、0で平面となります。 Lens Radius: UVマップ上の球の半径を調整します。 球の中心位置がデフォルトの場合、デフォルト値の0.5でUVにぴったり収まります。 Lens Offset X: UVマップ上の球の中心位置を左右方向に調整します。-0.5で左端、0.5で右端になります。 Lens Offset Y: UVマップ上の球の中心位置を上下方向に調整します。-0.5で下端、0.5で上端になります。
レンズ効果をメガネモデルで使用する場合の制約
レンズ効果の球面を、一枚のUVマップ上に複数個作り出すことはできません。 そのため、レンズ部分のメッシュは、左右対称に重ねてUV展開することをお勧めします。 UV展開の例を画像で同梱しています。(レンズ効果使用時の推奨UV展開例.PNG)
おまけ
参考までにお休みさんのメガネ(glasses.test.fbx)を同梱してあります。 新たに追加したレンズ効果を生かすため、従来のバージョンからレンズ部分のUVを変更してあります。 (旧バージョンもglasses.test_old.fbxとして同梱してあります) Texturesフォルダ内のglasses.trad2_glassesで始まる3つの画像は、添付メガネのフレームをStandardシェーダーで表現する場合に使っているものです。 ガラスシェーダーでは使用しません。