ARLitToon(エーアールリット・トゥーン)は、VRChat のアバターやパーティクルエフェクトのための軽量・高機能なアニメ・トゥーン調カスタムシェーダー。イラスト風・セル画風の表現に最適化された、キャラクターアバター・アバター装飾品とエフェクト制作に特化した汎用トゥーンシェーダーです。
BOOTH -ALTIMA- https://altima.booth.pm/
はじめに・導入
概要
ARLitToon は物理ベースのリアル質感ではなく、イラスト風やセル画風の表現に最適化されています。パーティクルのカラー連携、ディゾルブ、ソフトパーティクル、HDR発光、リムライトといった機能を標準で備えています。
バージョン(更新履歴 / Changelog)
バージョンは小数点を使わない整数で v{見出し版}_GUIr{GUI 枝番} と表記します。見出し版(v の数字)の基準はシェーダー本体 ARLitToon.shader の _ShaderVersion、GUIr の数字は GUI(ARLitToonGUI.cs)の枝番です。現在の版はマテリアル Inspector のヘッダ(✦ ARLit Toon ✦ v42_GUIr0)で確認できます。本履歴には各版の変更点のみを記載します。各機能の使い方・設定値は前述の「機能とプロパティ一覧」を参照してください。
v42_GUIr0 Back Light(逆光ライト)にも 環境順応(Env Adapt)/環境色になじませる(Env Tint)を追加しました。逆光は「光が背後にあるかどうか」と「影で遮られているか」だけで判定していたため、ライトを弱めても逆光の明るさは変わらず、暗いワールドでは逆光だけが強く残って浮いて見えることがありました。環境順応を上げると、周囲の明るさ(環境光+メインのライト)に合わせて逆光が自動的に弱まります。明るい場所での見え方は変わりません(暗い側にだけ効きます)。環境色になじませるを上げると、周囲の光の色みが逆光の色に乗ります(明るさは変えません)。Rim Light の同名の項目とまったく同じ仕組み・同じ操作感なので、両方を使う場合も設定の勘所は共通です。暗いワールドで弱まりすぎる場合は 暗所の下限 を上げてください(Back Light の項を参照)。
v41_GUIr0 Rim Light に 環境順応(Env Adapt) を追加しました。これまでリムの発光は周囲の明るさに関係なく一定だったため、暗いワールドではリムだけが強く浮いて見えることがありました。環境順応を上げると、周囲の明るさに合わせてリムが自動的に減光され、暗い場所でも風景に馴染みます。明るい場所での見た目は変わりません(暗い側にだけ効く一方向の調整のため、これまでの見え方が明るくなることはありません)。暗所の下限 を上げると真っ暗な場所でもうっすら輪郭が残ります。あわせて 環境色になじませる(Env Tint) を上げると、周囲の光の色みがリムの色に乗ります(寒色の場所では青寄り、暖色の場所では暖色寄り)。色みだけを寄せて明るさは変えないため、環境順応と組み合わせても二重に暗くなることはありません。どちらも Blend Mode の Add / Multiply、および Unlit に同じように効きます。環境順応は既定 ON(= 1)ですが、明るい場所での見え方は従来と変わりません(暗い側にだけ効くため)。従来どおり明るさが一定のリムにしたい場合は環境順応を 0 にしてください(Rim Light の項を参照)。
v40_GUIr2 Bake to Base(テクスチャ焼きこみ) を追加しました。複数のレイヤー画像(デカール・ロゴ・模様・メイクなど)とカラー調整(Hue / Saturation / Brightness)を、ベーステクスチャへ焼きこんで1枚の画像にまとめる Unity エディタ用のツールです。実行時に重ねられるテクスチャレイヤーは1枚までですが、焼きこみなら枚数に制限がなく、焼いた後もテクスチャは1枚のままなので実行時の負荷もテクスチャメモリも増えません。マテリアル Inspector の Texture Layer の下に追加された Bake to Base から操作します。上の Texture Layer に設定した画像をそのまま焼きこめるので、「Texture Layer で位置や合成方法を決める → 焼く → 空いたスロットに次のデカールを置く」を繰り返せば何枚でも重ねられます(焼きこみ後は同じ絵が二重に乗らないよう Texture Layer が自動で OFF になり、焼いた設定はレシピに取り込まれるので前に焼いた分が消えることはありません)。カラー調整も同様に焼き重ねができます。焼く前に実際のモデル上で焼き上がりを確認できるプレビューがあり、プレビュー中に設定を動かせばリアルタイムでモデルに反映されます。プレビューと最終出力は同じ処理で作られるため見え方が一致します。焼きこみ結果は新しい PNG として保存され、元のテクスチャは変更しません。設定(レシピ)は保存されるので、いつでも1クリックで焼き直せます。シェーダー本体は変更していないため、既存マテリアルの見た目・実行時の負荷は完全に従来どおりです(Bake to Base の項を参照)。
v40_GUIr1 Lighting & Shadow の Receive Shadow(落ち影を受ける) に、半透明プリセットでは効かないことをその場で示す表示を追加しました(GUI のみ)。Blend Preset が Transparent / Fade / Additive のときにチェックが ON になっていると、チェックボックスの右に 「(現在の Preset では無効)」 と表示し、下の説明も原因と対処(Cutout プリセット+Dither Fade)を案内する警告表示に切り替わります。半透明のマテリアルは Unity の仕様で落ち影を受けられないため、「チェックを入れているのに影が乗らない」という誤解を防ぐための表示です。表示のみの変更で、機能・保存値・見た目は従来と完全に同じです(チェックボックスは従来どおり操作でき、Opaque / Cutout に戻せばそのまま効きます)。
過去の更新履歴を開く(クリックで展開)
- v40_GUIr0 Glitter / Sparkle(プロシージャルラメ・スパークル) を追加しました。テクスチャを使わずに細かな輝きの粒を生成する装飾用の発光レイヤーです。視線を動かすと粒がきらめきます(金属ラメ・フレークのような表現)。形状は Point(丸点)/ Star(先端の尖った十字)/ Diamond(菱形)/ Fine Dust(微細ラメ) の4種から選べ、粒の座標系は UV / Object(三面投影で全面均一) を切り替えられます。粒の輪郭はどのサイズでもシャープに保たれ、両面表示メッシュの背面でも正しく光ります。スクロール(流れる粒)、HDR 発光(Bloom 連動)、AudioLink 連動(音に合わせた明滅)に対応します。通常 Emission とは独立した加算レイヤーのため、Emission を OFF にしても単体で発光します。発光は透明度に追従します。既定 OFF・既存マテリアルの見た目は従来と完全に同じです(Glitter / Sparkle の項を参照)。
- v39_GUIr3 Lighting & Shadow の Receive Shadow を、Light Limit と同じ「太字の小見出し+直下にチェックボックス」の表示形式にし、上部の余白も広げました(GUI のみ)。同セクション内で視認性を上げるための表示調整で、機能・保存値・見た目(発現条件)は従来と完全に同じです。
- v39_GUIr2 Dither Fade(ディザ擬似半透明)の設定位置を Transparency / Rendering から Texture Layer(透明マスクの下)へ移動しました(GUI のみ)。透明マスクと同じ「アルファで抜く」系の機能のため隣接配置にまとめました。表示位置のみの変更で、表示条件(半透明プリセットでは非表示)・機能・保存値・見た目は従来と完全に同じです。
- v39_GUIr1 GUI の各項目のヘルプボックス(説明文)を整理し、簡潔にしました(GUI のみ)。冗長だった説明を要点に絞り、「詳細は README 参照」の案内は各ヘルプボックスの最後に一度だけ表示するようにしました。表示テキストのみの変更で、機能・保存値・見た目は従来と完全に同じです。
- v39_GUIr0 Back Light(逆光ライト) を追加しました。メインの平行光(Directional Light)がキャラクターの背後にあるときだけ、輪郭の広い範囲を発光させるイラスト調の逆光表現です。Rim Light が「見る角度で常に縁が光る」のに対し、Back Light は「光が背後にある時だけ光る」ことに加え、影(シャドウ)で光が遮られている部分(上着の内側など)は光りません。Width を小さくすると光る範囲が広がり、Directivity を上げると光が真後ろに近いときだけ光ります。発光は透明度に追従し、裏面での無効化もできます。既定 OFF・既存マテリアルの見た目は従来と完全に同じです(Back Light の項を参照)。
- v38_GUIr0 Distance Darken(カメラ距離で減光) を追加しました。カメラからの距離に応じて本体の色を減光色(既定は黒)へ近づけます。アルファ(透明度)ではなく色を変えるため、不透明(Opaque)のマテリアルでも作用します。「近づくと暗くなる」「なでなで時に手元を暗くする」といった演出に使えます。既存の Distance Fade(アルファのフェード)とは独立した機能で、併用もできます。Darken Near で最も暗くなり、Darken Far で元の色に戻ります(Near > Far にすると反転して「遠いほど暗い」になります)。発光(Emission)は減光されません。既定 OFF・既存マテリアルの見た目は従来と完全に同じです(Transparency / Rendering の項を参照)。
- v37_GUIr4 環境光の立体化 を追加しました(常時有効・設定不要)。環境光(ライトプローブ)が主体のワールドや逆光の場面で、環境光に含まれる方向情報から光側/陰側を自動的に復元し、本体が一律の明るさで平面的に沈んで見えるのを軽減します(Lighting & Shadow の項を参照。平行光が強いワールドでは変化はわずかです)。⚠️ 常時有効な改良のため、環境光主体・逆光のワールドでは既存マテリアルも見た目が変わります。あわせて GUI に セクション設定のコピー/ペースト を追加しました:各セクションの折り畳み見出しを右クリックすると「コピー」「ペースト」が選べ、そのセクションの数値設定をひとまとめに別のマテリアルへ移せます(カラーとテクスチャは含みません=マテリアルごとの色・画像はそのまま保てます。Lighting & Shadow は Shadow Intensity / Border / Blur の3項目です)。
- v36_GUIr0 Dither Fade(ディザ擬似半透明) を追加しました。Cutout / Opaque の描画のまま、網点(ディザ)でアルファ値どおりの擬似半透明を作ります。Fade などの半透明プリセットは Unity の仕様で落ち影(Receive Shadow)を受けられないため、「前髪を表情に重ねて透かしつつ、影も受けたい」場合は Cutout+Dither Fade を使ってください(Transparency / Rendering の項を参照)。既定 OFF・既存マテリアルの見た目は従来と完全に同じです。あわせて同梱修正として、Dither Fade 使用時に輪郭線(Outline)の色が網点の穴から面状に透けて飽和して見える問題を修正しました(Alpha Sync が ON のとき輪郭線も本体と同じ網点で追従します)。
- v35_GUIr0 Receive Shadow(落ち影を受ける) を追加しました。ワールドの平行光が落とす影(木々や建物の落ち影、自分の前髪の影など)を、トゥーンの影色(Shadow Color / Border / Blur の設定)として受け取ります。既定 ON です。ワールド側のライトに影の設定があるときのみ発現し、影のないワールドでは従来と同じ表示です。影の縞や粗さが目立つ場合は OFF にするか、Shadow Blur を上げて馴染ませてください(Lighting & Shadow の項を参照)。
- v34_GUIr0 Outline に Alpha Sync(本体の透明度に追従) を追加しました(既定 ON)。半透明プリセット(
Transparent/Fade/Additive)で本体が透けるとき、輪郭線(と本体越しに透けて見える輪郭色)が本体の透明度(Color の A × メインテクスチャの A)に追従して一緒に薄くなります。従来の「透明度に関係なく常時表示」に戻したい場合は OFF にしてください。不透明(Opaque/Cutout)プリセットの見た目は変わりません。あわせて、Base Color (HDR) の A(アルファ)が輪郭線自体の不透明度として効くようになりました(従来は無視されていました。A=1 なら従来どおり。⚠️ 保存済みマテリアルで Base Color の A を 1 未満にしていた場合、v34 から線が薄くなります=A を 1 に戻してください)。さらに、Sweep の筋が輪郭線を飽和(白飛び)させる問題を修正しました:筋の明るさの上限が Sweep OFF のソリッド線と同じになり、どの設定でも Sweep で輪郭線が飽和しません(従来は筋の部分だけ最大2倍の明るさになっていました)。⚠️ このため Base Glow1(旧既定)では管と筋が同じ明るさになり筋が見えません=Sweep を使っている保存済みマテリアルは Base Glow を下げてください(例: 新既定の0.3。GUI で Sweep を OFF→再 ON しても自動補正されます)。 - v33_GUIr0 Distance Fade(カメラ距離フェード)が輪郭線(Outline)にも効くようになりました。従来は本体だけがフェードし、輪郭線が距離に関係なく残っていた不具合の修正です。輪郭線は本体と同じ距離設定・同じ濃さでフェードします。Distance Fade を使っていないマテリアルの見た目は従来と完全に同じです。
- v32_GUIr1 Outline の操作性を調整しました(GUI のみ・見た目と保存値は不変)。(1) Self-Illuminate を Base Color の直後(Intensity の前) に移動しました(この値が Intensity / Line Width の効き方を左右するため、先に決められる並びにしました)。(2) Sweep の Speed の表示数値を 10 倍にしました(実値0.1=表示1)。効果・保存値は変わりません。
- v32_GUIr0 Outline に Use Outline Mask(アウトラインマスク) を追加しました。グレースケールのマスク画像で輪郭線を部分的に消せます(白=線あり/黒=線なし)。目尻・口元など 1 枚のマテリアル内で一部だけ線を消したいときに使えます。既定 OFF・マスク未指定(白)で従来と完全に同じです。あわせて、Sweep を OFF にしたときに Base Glow(Sweep 専用設定)の値が輪郭線の明るさに残り続ける不具合を修正しました(Sweep OFF 時は Base Glow に依存せず均一なソリッド線になります)。
- v31_GUIr5 各機能のチェックボックスを OFF→再 ON したときに、調整した値を保持するようにしました(GUI のみ)。誤ってチェックを外してしまっても、Strength や輪郭線の太さ・Sweep の設定などが初期値に戻らなくなります。値が 0(=その機能が見えない状態)のときだけ、見えるように既定値を補います(Matcap は元から既定で見えるため挙動は変わりません。Outline を新規マテリアルで初めて有効化したときはシェーダー既定の見た目になります)。
- v31_GUIr4 マテリアル Inspector の表示言語を 日本語 / English で切り替えられるようにしました(GUI のみ)。ヘッダ直下の言語トグルで切り替えます。設定はエディタ単位で記憶され、すべてのマテリアルに反映されます(マテリアル自体には保存されません=シェーダー・保存値・見た目は変わりません)。
- v31_GUIr3
Fade/Additiveプリセットの既定Render Queueを 3000 → 3001 に変更しました(GUI のみ)。半透明エフェクトがガラス等(Transparent=3000)より既定で手前に描画されます。Transparentプリセットは従来どおり 3000 です(保存済みマテリアルはプリセットを選び直すと反映されます)。 - v31_GUIr2 Outline の Line Width スライダーの表示の数値を1桁繰り上げました(GUI のみ)。表示レンジ
0〜2→0〜20。実際の効果・保存値は変わりません。 - v31_GUIr1 Outline の Line Width スライダーの表示レンジを
0〜5→0〜2・小数第3位に調整しました(GUI のみ)。実際の効果・保存値は変わりません。 - v31_GUIr0 Outline の使い勝手を調整しました。(1) Lighting Influence を Self-Illuminate(自己発光) に名称変更し、値の向きを反転(
0=ライティング追従/1=自己発光)。(2) Base Glow を Sweep の設定内へ移動。※既定の輪郭線がライティング追従に変わります。旧来の常時発光にしたい既存マテリアルは Self-Illuminate を1にしてください。 - v30_GUIr0 Lighting Influence(暗所追従) の追従方式を「Directional Light の総量+環境光で均一の明るさに追従」へ変更しました(輪郭線に明暗の境界が出ないよう改善)。
0(既定)での見た目・後方互換は変わりません。 - v29_GUIr0 Lighting Influence(暗所追従) がメインの Directional Light+環境光に追従するよう改良しました(環境光だけを見て線が灰色に沈む問題の改善)。
0(既定)での見た目・後方互換は変わりません。 - v28_GUIr0 Lighting Influence(暗所追従) を本体(肌・髪など)と同じ明るさで馴染むよう改良しました(薄暗いワールドで線だけ明るく残る問題の改善)。
0(既定)での見た目・後方互換は変わりません。 - v27_GUIr0 Lighting Influence(暗所追従) の暗所での下限を Light Min Limit と同じ明るさにそろえました(真っ暗なワールドで線が本体より明るく残る不具合の修正)。
0(既定)での後方互換は変わりません。 - v26_GUIr0 Outline(輪郭線)に Lighting Influence(暗所追従) を追加しました。既定
0=従来どおりの自己発光(既存マテリアルは見た目不変)。 - v25_GUIr0 リアルタイムライトが多数あるワールドでアバターの明るい部分が白飛びする問題を修正しました(追加ライトをまとめて1回の明るさ制御にかける方式に変更)。追加ライトの陰影は簡易(頂点単位・最大4灯)になりますが、トゥーン表現では影響はごくわずかです。
- v24_GUIr0 強いリアルタイムライトのあるワールドでアバターの明るい部分が白飛びする問題を修正しました(明るさの上限 Light Max Limit が追加のリアルタイムライトにも効くように)。Light Limit 無効時は従来どおりです。
- v23_GUIr0 Outline の Edge Fade を Sweep 専用に変更しました(ハードエッジのメッシュで輪郭線まで消える不具合の修正)。項目は Sweep の設定内へ移動(保存済みの値は維持されます)。
- v22_GUIr0 Outline に Edge Fade を追加しました(半透明時に裏側の Sweep が放射状に透ける問題を軽減)。既定
2=ON、0で従来動作。不透明では見た目は変わりません。 - v19_GUIr0 Matcap に Contrast(コントラスト) を追加しました(既定 1.0=既存マテリアルは不変)。
- v18_GUIr0 2枚目 Matcap を独立レイヤー化し、カラー Tint・Strength・Blend を 1枚目・2枚目で個別に設定できるようにしました(OFF 時の挙動は不変)。
- v17_GUIr0 Matcap に 2枚目スロット(Mask Select) を追加しました(既定 OFF=既存マテリアルは不変)。
- v16_GUIr0 Rim Light に 「裏面で無効化」 を追加しました(既定 OFF=既存マテリアルは不変)。
- v15_GUIr0 Matcap に 「裏面で無効化」 を追加しました(既定 OFF=既存マテリアルは不変)。
- v14_GUIr0 Particle の Vertex Color Blend Mode から
Additiveを削除しました(None/Multiplyの2択)。保存済みマテリアルでAdditiveを選んでいた場合はMultiply相当の表示にフォールバックします。あわせて内部のライト下限クランプ処理を整理しました(挙動・見た目は不変)。 - v13_GUIr0 使い勝手の調整。(1) Particle の Vertex Color Blend Mode の初期値を
Noneに変更。(2) Outline 有効化時の初期設定を Sweep OFF / Intensity1/ Line Width0.1に調整。いずれも保存済みマテリアルの見た目は変わりません。 - v12_GUIr0 (1) Rim Light に Blend Mode(Add / Multiply) を追加。(2) Texture Layer に 透明マスクモード を追加。あわせて Outline の Line Width スライダー表示レンジを
0〜5に変更しました(実際の値・効果は不変)。 - v10_GUIr0 Sweep の減衰を片側から両側対称に変更。Count を整数入力(IntRange)に変更し、Pivot Offset(周回中心) を追加。アバター本体への適用ガイドを README に追加しました。
- v9_GUIr0 機能を Outline(輪郭線) と Sweep(周回発光) の二層構造に再編。Base Glow の既定値を
1に変更しました。 - v8_GUIr0 Outline の輪郭描画を反転外殻(Inverted Hull)パス方式に変更。Line Width・Extrude Mode・Base Glow を追加し、Rim Power を廃止しました。
- v7_GUIr0 Outline Sweep の周回基準をカメラビューポイント基点(画面上の角度)に変更し、Axis プロパティを廃止しました。
- v6_GUIr0 Outline Sweep(アウトライン周回発光) を追加しました。
- v5_GUIr0 Dissolve のノイズが、回転して配置したオブジェクトの一部の面で一方向に伸びた縞模様になる不具合を修正しました(v0 から潜在していた問題です)。無回転で配置していたオブジェクトの見た目は変わりません。
- v4_GUIr0 内部コードの整理(リファクタリング)。機能・見た目・パフォーマンスに変更はありません。マテリアルの再設定は不要です。
- v3_GUIr1 Unlit モード ON のとき、影の詳細プロパティ(Shadow Color〜Shadow Blur)を自動的に非表示にするよう変更(Unlit では影が計算されないため。GUI のみの更新)。
- v3_GUIr0 Light Limit の常時 ON をシェーダー既定値(
_UseLightLimit=1)として組み込み。Inspector を開いていないマテリアルでもクランプが有効になりました。 - v2_GUIr2 Light Limit 常時 ON の焼き込み処理を Inspector 表示時に確実化(セクション折りたたみ時にクランプが効かず白飛びする不具合を修正。GUI のみの更新)。
- v2_GUIr1 Light Limit を常時 ON 化(有効/無効チェックボックスを廃止)。Unlit モード時は設定 UI を自動的に非表示に変更(GUI のみの更新)。
- v2_GUIr0 Light Limit(Directional Light 影響度クランプ/白飛び・黒つぶれ防止)を追加。
- v1_GUIr0 初版リリース。
ファイル構成
シェーダーは ALTIMA/ARLitToon/ という専用サブフォルダで独立させています。これにより、同じ ARLitToon シェーダーを使う別のアバターアイテムを追加購入した際の二重インポートや、アイテムフォルダ削除によるシェーダーの巻き込み削除を防げます。
動作環境
| Unity | 2019.4 LTS 以上(2022.3 LTS 推奨) |
| レンダリングパイプライン | Built-in(Legacy) |
| VRChat SDK | SDK3(Avatars / Worlds) |
| 対応プラットフォーム | PC 専用 |
VRChat の Android(Quest)版では、アバターに使用できるシェーダーは VRChat SDK 付属の VRChat Mobile シェーダーのみに制限されています。本シェーダーを Quest アバターに適用した場合、VRChat クライアントがカスタムシェーダーを自動的に VRChat Mobile シェーダーへ置き換えます。本シェーダーは PC プラットフォーム向けのアバター・パーティクルエフェクト専用です。
インポート手順
- 配布パッケージ(
.unitypackage)をプロジェクトにインポートするとAssets/ALTIMA/ARLitToon/に展開されます。 - Unity が自動コンパイルを行います。マテリアルの Shader ドロップダウンから ALTIMA > ARLitToon を選択して適用してください。
ARLitToonGUI.cs は必ず Editor フォルダ内に配置してください。フォルダ外に置いた場合でも #if UNITY_EDITOR ガードにより動作しますが、Editor 内への配置を推奨します。
以降のセクションの並びは Unity の Inspector(マテリアル設定画面)の表示順と同じです。Inspector と本ガイドを見比べながら設定できます。
Inspector ヘッダ(✦ ARLit Toon ✦)の直下に言語トグル(日本語 / English)があります。ラベルとヘルプ文の表示言語を切り替えられます。設定はエディタ単位で記憶され、すべてのマテリアルに反映されます(マテリアル自体には保存されません)。
Transparency / Rendering
用途に合わせて Preset から選択するだけで、内部のブレンドや Cutoff 設定が自動で最適化されます。基本的には Preset を選ぶだけで、詳細設定を手動で触る必要はありません。
# Blend Preset(ブレンドプリセット)
(※半透明系のプリセットでは、完全な透明部分に発生する描画エラーを防ぐための安全処理が自動適用されます)
他のシェーダーでは Transparent 系モードでアルファによる段階的フェードを行えることが多いですが、本シェーダーの Transparent はガラス等の常時半透明の質感表現に最適化されており、マテリアルの透明度(_Color.a やテクスチャのアルファ)を下げても、ハイライト(鏡面反射)・環境反射(映り込み)・発光は透けずに残ります(質感を保つため)。アニメーションで _Color.a を 0 にしても照り返し・映り込み・発光だけが残ります。
そのため、マテリアルのアルファや _Color のアルファでオブジェクト全体をフェードイン/アウトしたい場合は、Fade(不透明な発光・反射も含めて透ける)または Additive を選択してください。
【例外:パーティクルの寿命フェード】 Transparent でも、パーティクルの頂点カラーのアルファ(Color over Lifetime)で下げた場合は、ハイライト・環境反射・発光(Dissolve エッジ・Rim・Emission 含む)もすべて完全に消えます。これは「マテリアル透明度=ガラスの透け具合(映り込みは残る)」「パーティクル寿命=存在そのもの(消えれば全部消える)」を区別しているためです。Transparent のガラスマテリアルを Dissolve で消すエフェクトもこの仕組みで、映り込みごと自然に消滅します。Vertex Color Blend Mode を Multiply にして使ってください。
# 詳細設定(通常は変更不要)
| プロパティ | 説明 |
|---|---|
| ZWrite(深度書き込み) | オブジェクトの前後関係(奥行き)情報を書き込むかどうかの設定です。Preset が自動で最適な値を設定するため、通常は変更不要です。On は不透明向けで前後関係が正しく描画され、Off は半透明向けで重なり順の描画を可能にします。 |
| Cull(カリング) | 描画する面を指定します。Back(標準)は表面のみ、Off は裏表両面、Front は裏面のみを描画します。布や葉、リボンなど裏側も見せたい薄い形状では Off にします。 |
| Alpha Cutoff | テクスチャのアルファ値が、この数値より低い部分を切り抜く(消す)しきい値です。主に Cutout モードで使用します。半透明系プリセットでは透明部分のエラー防止のため自動で 0.001 に設定されます。 |
| Render Queue(描画順) | オブジェクトを描画する順番です。数値が大きいほど後(手前)に描画されます。Preset が自動設定します。 |
Fade / Additive は既定で Render Queue = 3001(ガラス等の Transparent = 3000 より手前)に設定されます。これは、同じ Render Queue(3000 同士)だと Unity が前後をオブジェクト単位の距離で並べ替えるため、半透明エフェクトがガラスの裏に回り込んで見える現象を避けるためです。
それでもパーティクルやエフェクトが奥のガラスなどに隠れて見えなくなる場合は、インスペクターの Render Queue の数値を 3050 などへさらに上げることで手前に描画できます。逆に手前に出すぎる場合は数値を下げてください。
# Soft Particles(ソフトパーティクル)
半透明(Fade/Additive等)のオブジェクトが、地面や壁などの不透明オブジェクトにめり込む際の不自然な境界線を消し、滑らかに溶け込ませる機能です。
| プロパティ | 説明 |
|---|---|
| Fade Distance | 境界線がフェードアウト(透ける)距離を調整します。 |
仕様上の注意: ZWrite が Off の時(半透明プリセット時)にのみ動作します。また、VRChatのサムネイルカメラ等(正投影カメラ)では不具合を防ぐため自動で無効化されます。
ソフトパーティクルは、VRChat ワールド側のカメラが「深度テクスチャ」を生成している場合にのみ動作します。具体的には、ワールドが Deferred Rendering、ポストプロセスを使用、または他のソフトパーティクルシェーダーを使用している場合に有効になります。
上記の条件を満たさないシンプルな Forward Rendering ワールドでは、ソフトパーティクル機能は自動的に無効化され、通常の半透明描画として表示されます。これは VRChat ワールド側のレンダリング設定に依存する仕様上の制約であり、アバター側のシェーダーから制御することはできません。他のVRChat用シェーダーでも同様の制約があります。
【未対応ワールドでの挙動】 境界線が残った状態で半透明描画されますが、エフェクト自体は正常に表示されます。完全透過などの破綻は発生しません。
# Distance Fade(カメラ距離フェード)
カメラからの距離に応じてオブジェクトのアルファをフェードさせる機能です。一人称視点で自分のオーラやエフェクトが視界を塞ぐのを防いだり、近づくと消える演出に使えます。輪郭線(Outline)も本体と同じ距離設定でいっしょにフェードします。
| プロパティ | 説明 |
|---|---|
| Use Distance Fade | 機能の有効/無効。 |
| Fade Near | この距離(カメラからの距離)以下で完全に透明になります。 |
| Fade Far | この距離以上で完全に不透明(通常表示)になります。 |
仕様上の注意: アルファを操作する機能のため、半透明プリセット(Fade / Additive / Transparent)での使用を前提としています。Cutout / Opaque でも Dither Fade を ON にすれば使用できます(アルファが網点の密度として反映されます)。Fade Near を Fade Far より大きい値にすると挙動が反転し、「遠いほど透明」になります。_DistanceFadeNear / _DistanceFadeFar はアニメーションも可能です。
Base(基本の見た目)
| プロパティ | 説明 |
|---|---|
| Albedo テクスチャ | モデルの表面に貼り付ける基本の画像です。A(アルファ)チャンネルを持たせることで、切り抜きや半透明の表現も可能です。 |
| Color | 全体の色合いを調整します。テクスチャの色を上書きして別の色にしたり、暗いワールドに合わせて少し暗く落としたい時に使います。(アニメーションで色を変えることも可能です) |
| Color Intensity | 色の明るさ(強度)を 0 から調整します。全体をパッと明るく見せたい時に数値を上げます。 |
| Hue Shift(色相) | テクスチャを編集せずに色相を回転させて色違いを作れます。0 で無変化。アニメーションさせると虹色に変化させることもできます。 |
| Saturation(彩度)/ Brightness(明度) | 彩度と明度を補正します。どちらも 1 で無変化(2 で2倍)。色をくすませたり鮮やかにしたい時に。 |
| Albedo/Normal Scroll(スクロール) | X・Y にスクロール速度を入れると、Albedo と Normal が同じ速度で流れます(0 で停止)。流れる炎・水・スキャンライン等のエフェクトに使います。 |
Hue/Saturation/Brightness はデフォルト値(Hue=0 / Sat=1 / Bright=1)では一切処理を行わない(恒等変換)ため、既存マテリアルの見た目とパフォーマンスに影響しません。
Texture Layer(重ね合わせ)
ベーステクスチャの上にもう1枚の画像を重ねる「色オーバーレイ」と、画像の明るさでベースを透明にくり抜く「透明マスク」の2つを備えた機能です。両者は独立したトグルで、片方だけ・両方の併用ができます(同じ Layer テクスチャを共有します)。
# ① 色オーバーレイ(Use Texture Layer)
ロゴ・刺繍・ワンポイント模様・タトゥー・メイク・エフェクトの二層パターンなどに使えます。
| プロパティ | 説明 |
|---|---|
| Use Texture Layer | 色オーバーレイの有効/無効。 |
| Layer テクスチャ (A=合成マスク) | 重ねる画像を設定します。画像のアルファ(透明度)チャンネルが合成強度のマスクになります(白=合成 / 黒=スキップ)。別途マスク画像を用意する必要はありません。Tiling/Offset でベースとは独立に配置・繰り返しを調整できます。 |
| Color Tint (HDR) | レイヤー画像にかける色味。HDR 対応のため、Add/Screen と組み合わせて発光的な重ねも可能です。 |
| Blend Mode | 合成方法。Normal(通常の上重ね)/ Multiply(乗算・陰影や汚し)/ Add(加算・発光的な重ね)/ Screen(スクリーン・明るく重ねる)。 |
| Opacity | 合成の強さ(0=完全に透明 〜 1=最大)。アニメーション可能で、模様をフェードイン/アウトさせられます。 |
| Scroll(スクロール) | X・Y に速度を入れるとレイヤー画像が流れます(0 で停止)。 |
# ② 透明マスク(Use Texture Layer as Alpha Mask)
グレースケールのマスク画像でベース形状を切り抜く機能です。
| プロパティ | 説明 |
|---|---|
| Use Texture Layer as Alpha Mask | 透明マスクの有効/無効。 |
| Layer / マスク テクスチャ | マスク画像を設定します(色オーバーレイと共有)。画像の明るさが透明度になります(黒=透明 / 白=不透明 / グラデーション=半透明)。色オーバーレイ OFF でマスクだけ使う場合は、このトグルを開くとテクスチャ欄が表示されます。 |
| Scroll(スクロール) | マスクを流して、くり抜く位置を動かせます(0 で停止)。 |
マスクの使い方: グレースケール(黒〜白)のマスク画像を用意し、透けさせたい部分を黒、残したい部分を白で描きます。中間色やグラデーションは半透明になります。色オーバーレイと併用する場合は同じ画像の明るさ=透明マスク/アルファ=色の合成マスクと役割が分かれます。
透明マスクが見えるのは半透明系の Blend Preset(Cutout / Fade / Transparent)のときです。Opaque(不透明)では不透明度が無視されるため透けません。くっきり切り抜くなら Cutout、グラデーションで滑らかに透かすなら Fade が向いています。Transparent では素材の透明感を保つ設計上、反射・発光などのハイライトはマスクで消えずに残ります(ガラス表現用)。
色オーバーレイの重ね合わせはオブジェクトの色(見た目)にのみ作用し、不透明度は変更しません。色相シフト(Hue Shift)はベース色のみに作用し、このレイヤー画像には影響しません(ロゴ等の色を保つため)。無効時はほぼ負荷ゼロです。
# Dither Fade(ディザ擬似半透明)
Cutout / Opaque の描画のまま、細かい網点(ディザ)パターンでピクセルを間引き、アルファ値どおりの擬似半透明を作る機能です。上の透明マスクと同じ「アルファで抜く」系の機能のため、本セクションに配置しています。
| プロパティ | 説明 |
|---|---|
| Dither Fade | 機能の有効/無効(既定 OFF)。ON にするとテクスチャやレイヤーマスクのアルファ値がそのまま「残すピクセルの割合」になります。 |
Fade などの半透明プリセットは Unity の仕様で落ち影(Receive Shadow)を受けられません。前髪など「半透明にしたいが影も受けたい」部位は、Cutout プリセット+Dither Fade ON にすることで、影を受けながらアルファどおりに透かすことができます。
網点はピクセル単位の間引きのため、至近距離では点々のパターンが見える場合があります(アンチエイリアス(MSAA)が有効な環境では目立ちにくくなります)。Scene ビューと Game ビュー、また VRChat 実機では、解像度・アンチエイリアス・カメラ角度が異なるため網点の見え方(透け具合)が変わります。最終的な見た目は VRChat 実機でご確認ください。 Alpha Cutoff は併用でき、Cutoff 未満のアルファは従来どおり完全に切り抜かれます。Distance Fade やテクスチャレイヤーの透明マスクによるアルファも網点として反映されます。半透明プリセット(Fade / Transparent / Additive)ではこの機能は無効です(通常のアルファブレンドが使われます)。
Outline の Alpha Sync が ON(既定)のとき、輪郭線も本体と同じ網点で追従します(網点の穴から輪郭色が面状に透けて飽和して見えることを防ぎます)。Alpha Sync を OFF にすると輪郭線は網点に追従せず常時表示になります。
Bake to Base(テクスチャ焼きこみ)
複数のレイヤー画像(デカール・ロゴ・模様・メイクなど)とカラー調整を、ベーステクスチャへ焼きこんで1枚の画像にまとめる Unity エディタ用のツールです。上の Texture Layer が「実行時に1枚だけ重ねる」機能なのに対し、こちらはあらかじめ1枚に焼いてしまうため、重ねる枚数に制限がなく、実行時の負荷もテクスチャメモリも増えません(焼いた後はテクスチャ1枚のままです)。
この機能は追加ファイル Editor/ARLitToonBaker.cs で提供されます。配布パッケージには常に含まれています。このファイルが無い場合、マテリアル Inspector に Bake to Base の項目が表示されないだけで、シェーダーの他の機能はすべて通常どおり動作します。
| 項目 | 説明 |
|---|---|
| 焼きこみレシピを作成 | このマテリアル用の設定ファイル(レシピ)を作ります。マテリアルと同じフォルダに <マテリアル名>_BakeRecipe.asset として保存され、レイヤー構成が記録されます。 |
| 焼き元テクスチャ (Base) | 焼きこみの土台になる画像です。レシピを作った時点の Albedo テクスチャが自動で入ります。焼いた後もこの項目は変わりません(何度でもここから焼き直せます)。焼いたテクスチャはこの画像と同じフォルダに保存されます(直下の 出力フォルダ に表示されます)。 |
| 出力解像度 | 既定は「焼き元と同じ」です。変更する場合は焼き元の縦横比を保ったまま拡大縮小されます。 |
| 基本色の調整(プレビューで表示) | 焼き元テクスチャにだけ掛かる Hue / Saturation / Brightness です。この調整はマテリアルには直接反映されず、プレビューまたは焼きこみで初めて見えます。レイヤーには作用しません。1つの値としてだけ持つので、何度焼き直しても調整が積み重なることはありません。 |
| マテリアルの カラー調整 (HSV) も取り込む | マテリアル側の Hue / Saturation / Brightness を焼きこみに含め、焼いた後は 基本色の調整 へまとめて、マテリアル側は初期値(0 / 1 / 1)へ戻します(既定 ON)。チェックボックスのみで、値の編集は上の Base セクションで行います(プレビュー中は取り込む値が数値で表示されます)。Color と Color Intensity は焼きこみません(色変えギミック等でアニメーションさせるために残します)。 |
| Texture Layer も焼きこむ | 上の Texture Layer に設定したレイヤーを、最下層(いちばん奥)に重ねて焼きこみます(既定 ON)。テクスチャ・Color Tint・Blend Mode・Opacity・Tiling / Offset・透明マスクの設定がそのまま反映されます。焼きこみ後は Texture Layer が自動的に OFF になり、その設定は下のレイヤー一覧の先頭へ取り込まれます(重ね順は取り込み後に ▲▼ で入れ替えられます)(同じ絵が二重に乗るのを防ぎ、かつ焼き直しても同じ結果になるようにするためです)。スロットが空くので、次のデカールに使えます。 |
| レイヤー | 焼きこむ画像が 上から順に重なります(一覧の上にあるものほど奥、下にあるものほど手前)。▲▼ で順番の入れ替え、✕ で削除、左のチェックで一時的な無効化ができ、値も後から編集できます。焼きこみは毎回この一覧どおりに焼き元テクスチャから作り直すため、後から直して焼き直せます。焼きこんだ Texture Layer は (Texture Layer から取り込み) と表示されます。 |
| レイヤーの調整(このレイヤーのみ) | そのレイヤーの画像にだけ掛かる Hue / Saturation / Brightness です。基本色にも他のレイヤーにも一切作用しません。デカールの色だけを変えたいときはここを使ってください。 |
| レイヤーを追加 | Texture Layer とは別に、画像を何枚でもここへ足して一度に焼きこめます(実行時には存在しないレイヤーです)。1枚ごとに テクスチャ / Color Tint (HDR) / Blend Mode / Opacity / Tiling / Offset と上記の調整を指定できます。Blend Mode と Opacity の意味は Texture Layer と同じです。 |
| 輝度でベースをくり抜く | そのレイヤー画像の明るさを透明マスクとして使い、ベースの不透明度をくり抜きます(黒=透明 / 白=不透明)。Texture Layer の「透明マスク」と同じ計算です。 |
# 使い方の流れ
- 上の Texture Layer に重ねたい画像を設定し、位置(Tiling / Offset)や合成方法(Blend Mode)を実際の見た目で決めます。
Bake to Baseを開き、焼きこみレシピを作成を押します。さらに何枚も一度に重ねたい場合はレイヤーを追加で登録します。プレビュー(仮ベイク)を押すと、実際のモデル上で焼き上がりを確認できます。プレビュー中は焼きこみの設定(基本色の調整、各レイヤーの調整・Opacity / Tiling / Offset など)を動かすと、その場でリアルタイムにモデルへ反映されます。上の Texture Layer の設定を変えた場合も同じです。Ctrl+Z(元に戻す)にも追従します。元の状態に戻すときはプレビュー終了を押してください。- 問題なければ
焼きこみ実行を押します。結果が 新しい PNG(<マテリアル名>_Baked.png)として保存され、Albedo テクスチャがそれに差し替わります。焼きこみのたびに新しいファイルが作られるので(_Baked 1.png→_Baked 2.png…)、以前に焼いたテクスチャが上書きされることはありません。保存先は「焼き元テクスチャと同じフォルダ」です(Bake to Baseの出力フォルダに焼く前から表示されます)。完了するとテクスチャ名と保存先パスを表示するウィンドウが開きます(文字を選択してコピーでき、Project で表示で該当アセットに移動できます)。焼きこんだ Texture Layer は自動的に OFF になり、取り込んだカラー調整は基本色の調整へまとめられてマテリアル側は初期値に戻ります(二重に掛からないようにするため)。 - さらに重ねたい場合は、空いた Texture Layer に次の画像を設定して 3〜4 を繰り返します。
- やり直したいときは
焼き元テクスチャへ戻すで、一度も焼いていない状態(焼き元テクスチャ・HSV・Texture Layer の ON/OFF)に戻ります。このとき、焼きこみが自動で足したステップ(カラー調整と取り込まれた Texture Layer)もまとめて取り消されます(自分で追加したレイヤーは残ります)。
焼きこみは毎回「焼き元テクスチャ + 焼きこみステップ」から作り直しますが、焼いた内容はステップとして残るので、2回目以降も前に焼いた分は消えません。毎回元から作り直すため、何度焼き重ねても画質が劣化しません。
基本色の調整は焼き元テクスチャだけに、レイヤーの調整はそのレイヤーだけに掛かり、互いに影響しません。デカールの色だけを変えたいときはそのレイヤーの調整を、下地だけを変えたいときは基本色の調整を動かしてください。どちらも積み重なりません(何度焼き直しても二重に掛かることはありません)。
なお マテリアルの カラー調整 (HSV) も取り込む で取り込まれる調整は 基本色にだけ掛かります。すでにレイヤーがある状態でマテリアル側のスライダーを動かすと、画面では全体の色が変わって見えるのに焼き結果はベースだけが変わる、という差が出るため、その場合は Inspector に注意が表示されます(レイヤーの色も変えたいときは各レイヤーの調整を使ってください)。
Bake to Base の下部に出る 直近の結果 を見てください(例:焼きこみ: 基本色の調整 あり / レイヤー 2 枚(うち調整あり 1 枚)(うち Texture Layer 1 枚))。ここが レイヤー 0 枚 なら、その回は画像が焼かれていません(Texture Layer が OFF/テクスチャ未設定などが原因です)。
焼きこみ結果は毎回新しいファイルとして保存されます(不要になった古い焼き結果は Project ウィンドウから削除してください)。また、カラー調整(HSV)を焼きこんだときは、同じ調整が二重に掛からないよう Hue / Saturation / Brightness が自動で初期値(0 / 1 / 1)に戻ります。これらの操作は Unity の Undo(Ctrl+Z)で取り消せます。
ただし、プレビューは無圧縮・保存後は圧縮設定が効くため、色にごくわずかな差が出ることがあります。最終確認は保存後に行ってください。
プレビュー中のカラー調整は 基本色の調整 と各レイヤーの レイヤーの調整 で行います。 プレビューを開始すると、マテリアル側の Hue / Saturation / Brightness は(焼きこみに含まれるため)いったん初期値に戻ります。色を詰めたいときはこの2つのスライダーを動かしてください(リアルタイムに反映され、その値のまま焼きこまれます)。
焼きこみは UV 空間の操作です。時間で動く要素は焼けません(Texture Layer の Scroll など)。Scroll が 0 以外のときは注意が表示され、停止状態(開始位置)の絵が焼かれます。位置は Scroll を 0 にして Tiling / Offset で合わせてください。また、焼いた後はレイヤーを個別にアニメーションできません(スクロール・フェード・色変え)。動かしたい画像が1枚あるなら Texture Layer(実行時合成)、動かさない意匠は焼きこみ、という使い分けになります。
なお、Color に色を付けた状態でカラー調整(HSV)を焼きこむと、焼く前後で色がわずかに変わることがあります(実行時は Color を掛けてから HSV、焼きこみは画像に HSV を掛けてから Color の順になるためです)。この条件に当てはまるときは Inspector に注意が表示されます。プレビューで確認するか、Color を白にしてから焼いてください。
Lighting & Shadow
| プロパティ | 説明 |
|---|---|
| Unlit モード | 光源を完全に無視して常に100%の明るさで表示します。パーティクルや発光エフェクト向けです。 |
| Shadow Color / Intensity | 影の色と、影の濃さ(暗さ)を調整します。 |
| Shadow Border | 光と影の境界線の位置を調整します。アニメ調(トゥーン)の表現を作る際に重要です。 |
| Shadow Blur | 影のボケ足(滑らかさ)を調整します。Sphereなどの影がカクつく場合や、落ち影を綺麗に馴染ませたい場合は数値を少し上げてください。 |
| Receive Shadow(落ち影を受ける) | ワールドの平行光が落とす影(木々・建物の落ち影や自分の前髪の影など)を、上記のトゥーン影(Shadow Color / Border / Blur)として受け取ります(既定 ON)。影の縞や粗さが目立つワールドでは OFF にするか、Shadow Blur を上げて馴染ませてください。 |
ワールドにリアルタイムの平行光(Directional Light)があり、そのライトの影(Shadows)が有効で、シャドウ描画距離の範囲内にいるときのみ影を受けます。条件を満たさないワールドでは従来どおりの表示です(OFF と同じ見た目)。アバターが影を「落とす」機能は従来から有効で、本設定の対象は「受ける」側のみです。
Fade / Transparent / Additive などの半透明プリセットは、Unity Built-in パイプラインの制約により平行光の影を受けられません(ON にしても影は乗りません)。前髪など「半透明にしたいが影も受けたい」部位は、Cutout プリセット+Dither Fade(ディザ擬似半透明)を使用してください(Texture Layer の項を参照)。
GUI の表示(v40_GUIr1〜): 半透明プリセットでチェックが ON になっているときは、チェックボックスの右に 「(現在の Preset では無効)」 と表示され、下の説明も対処を案内する警告表示に切り替わります(表示のみで、設定値は変わりません)。チェックはそのまま操作できるので、Opaque / Cutout に戻せば設定した内容がそのまま効きます。
# Light Limit(環境光クランプ・白飛び/黒つぶれ防止)
ワールドの環境光が過剰に明るい・暗いときに、アバターが受ける光量を一定範囲に制限し、白飛びや真っ暗で何も見えない状況を防ぎます。暗いワールドではより暗く、明るいワールドでは白飛びしない範囲で明るさに余裕を持たせています。
| プロパティ | 説明 |
|---|---|
| Light Min Limit | 暗所での明るさの下限。下げるほど暗いワールドで暗くなります(0 で下限なし=完全に暗くできます)。 |
| Light Max Limit | 明所での明るさの上限(白飛び防止)。上げるほど明るいワールドで明るく見えます。 |
本機能は常時有効です。Lit(Unlit OFF)のときのみ作用し、Unlit モードのときは光に応答しないため、この項目自体が自動的に非表示になります。発光(Emission)と環境反射の映り込みは制限の対象外です。追加のリアルタイムライトも、メイン光・環境光とまとめて 1 回の上限・下限処理にかかります(追加ライトは頂点単位・最大4灯として扱われます)。_LightMinLimit / _LightMaxLimit はアニメーション可能です。
PBR & Specular
| プロパティ | 説明 |
|---|---|
| Metallic / Smoothness | 金属っぽさと表面の滑らかさを調整します。周囲の景色を反射するツヤっとした金属質にしたい時に数値を上げます。 |
| Normal Map + Scale | ポリゴン数を増やさずに細かい凹凸(服のシワ、レンガの溝など)を表現したい時に使います。 |
# Specular Reflection(環境反射・ガラス/金属の映り込み)
ワールドの景色(リフレクションプローブ/スカイボックス)を表面に映り込ませる機能です。ガラス・金属・濡れた質感などに使います。
| プロパティ | 説明 |
|---|---|
| Reflection Strength | 映り込みの強さ。0 で無効(デフォルト・従来どおり負荷ゼロ)。 |
| Fresnel Power | 輪郭反射の鋭さ。大きいほど視線が浅い「縁」だけが強く反射し、ガラスらしくなります。小さくすると面全体が均一に反射(鏡・金属向け)。 |
| Fresnel Min | 正面を向いた面の反射量。ガラスは 0 付近、鏡・金属は上げます。 |
| Specular Highlight | Metallic とは独立に光源のハイライト(テカリ)を足します。ガラス/プラスチックのキラッとした反射に。 |
反射の鮮鋭さは Smoothness で決まります(高い=鏡のようにくっきり / 低い=すりガラスのようにぼやける)。
Blend Preset を Transparent、Unlit は OFF(Lit)にし、Reflection Strength を上げ、Fresnel Power を 4〜6 程度にします。必要に応じて Specular Highlight でテカリを、Matcap で擬似的な光沢を追加します。Transparent はマテリアル透明度(_Color.a)では反射・ハイライト・Matcap を透かさない設計のため、薄く透けつつ映り込みがしっかり乗ります(Fade/Additive では反射もアルファに追従して透けます)。
なお Transparent のガラスをパーティクルで使い、Color over Lifetime でフェードアウトさせた場合は、環境反射・Matcap・発光も含めてすべて完全に消えます。ガラスを Dissolve で消すエフェクトでも映り込みごと自然に消滅します。
※ Unlit モードは光に応答しないため、環境反射・鏡面ハイライト・Matcap がいずれも表示されません。ガラスは必ず Lit(Unlit OFF)で使用してください。
映り込む内容は、VRChat ワールド側のリフレクションプローブ/スカイボックスに依存します。プローブが配置されていないワールドでは反射が暗くなる場合があります(ソフトパーティクル・AudioLink と同様、ワールド側の環境に依存する仕様上の制約です)。
Matcap
常に一定の美しい光沢や環境の映り込みを「擬似的」に表現します。非常に処理が軽いため VRChat で重宝します。
| プロパティ | 説明 |
|---|---|
| Matcap テクスチャ | 球状に描かれた環境反射風の画像を設定します(髪の天使の輪やシルクのテカり等)。 |
| Strength / Blend | 合成強度と合成モード(0=乗算落とし込み / 1=加算発光)を調整します。 |
| Contrast | マットキャップの明暗のメリハリを強めます。値を上げると暗部を持ち上げずにハイライトが締まり、金属的な質感になります(既定 1.0=変化なし)。金属表現は Blend=Add + Contrast 高めが目安です。 |
| Highlight Threshold / Boost | Threshold(明るさのしきい値)より明るい部分だけに Boost のゲインを乗せ、鏡面のテカりだけを尖らせます。暗部・ベースは持ち上げません。Contrast と併用するとより金属らしくなります(既定 Boost=0=変化なし)。 |
| 裏面で無効化 | 両面描画(Cull = Off)のとき、裏面のメッシュに Matcap を当てません。服の袖裏・コートの裏側などを暗く落ち着かせたいときに使います。既定は OFF。 |
| 2枚目 Matcap(Mask Select) | 1枚のマテリアルで、部位ごとに 2 種類の Matcap を出し分けます。領域マスク(グレースケール)の黒=1枚目/白=2枚目で切り替わります。1枚目と2枚目はそれぞれ独立して、カラー Tint・Strength・Blend を設定できます(例:トリムは明るい金属、布は落ち着いたシルク)。既定は OFF。 |
「2枚目 Matcap を使う」を ON にすると、Matcap テクスチャ 2・Matcap 2 のカラー Tint / Strength / Blend / Contrast / Highlight・領域マスクが表示されます。マスクのグレースケールで Matcap を出し分け(黒=1枚目 / 白=2枚目 / 中間は補間)、マスクはメインテクスチャと同じ UV で参照します。1枚目と2枚目はそれぞれ独立して色・強さ・合成モード・コントラスト・ハイライト強調を設定できるため、部位ごとに別の質感を作り込めます。裏面無効化と寿命フェードは両 Matcap に共通で適用されます。OFF のときや 2枚目を割り当てないときは、従来どおり 1枚の Matcap として動作し、処理負荷も変わりません。
このオプションは描画設定の Cull が Off(両面描画)のときに効果を持ちます。裏面で Matcap を切ると、その面にはハイライトが乗らなくなるぶん自然に暗く見えます(裏地の沈み)。Cull が Back(裏面を描画しない・既定)の場合は裏面そのものが表示されないため、この項目を ON にしても見た目は変わりません。Cull は「Transparency / Rendering」の詳細設定にあります。
補足: Matcap もハイライト系として、パーティクルカラーのアルファに追従してフェードします(Fade/Additive、および Transparent のパーティクル寿命フェード時)。Transparent ではマテリアル透明度(_Color.a)では透けずに残り、パーティクルの Color over Lifetime で映り込みごと自然に消えます。
Unlit モードは光に応答しない自己発光専用のため、Matcap・環境反射・鏡面ハイライトはいずれも表示されません。Matcap や映り込みを使ったガラス表現は Lit(Unlit OFF)で使用してください。
Emission(発光・HDR対応)
暗闇でも自己発光するマテリアルを作ります。
| プロパティ | 説明 |
|---|---|
| Emission Color HDR / Intensity | 発光色と強さを調整します。Intensity を上げると Unity の Bloom(光があふれる効果)が綺麗に効きます。 |
| Emission Map | 発光させたい場所を白黒画像等で指定します。 |
| Scroll(スクロール) | X・Y に速度を入れると Emission Map が流れます(0 で停止)。エネルギーの流動表現等に。 |
| Pulse Speed / Pulse Min | 発光を脈動(明滅)させます。Pulse Speed が点滅の速さ(0 で無効)、Pulse Min が一番暗くなった時の明るさ(0 で完全に消えるまで点滅)。 |
補足: 発光(Emission)も、パーティクルカラーのアルファに追従してフェードイン/アウトします(Fade/Additive、および Transparent のパーティクル寿命フェード時)。Color over Lifetime で発光ごと自然に消えます。
AudioLink(音楽連動・発光リアクション)
ワールドで再生されている音楽に合わせて発光させる機能です。VRChat のクラブワールドやライブ演出で定番の機能です。
本シェーダーの AudioLink は、通常の Emission(恒常発光)とは独立した「音反応専用の発光レイヤー」として動作します。音の大きさに応じて発光を base(色×Intensity)に向けて加算するため、通常 Emission を OFF にしても、AudioLink だけで音に合わせて発光させられます。逆に通常 Emission を ON にすれば、恒常発光の上に音反応発光が重なります(両者は打ち消し合いません)。
| プロパティ | 説明 |
|---|---|
| Use AudioLink | 機能の有効/無効。ON にすると反応量・Intensity が自動で 1 に設定され、すぐ反応する状態になります(既に値がある場合は維持)。 |
| AudioLink Band | 反応させる音域を Bass(低音)/ LowMid / HighMid / Treble(高音)から選びます。低音はキック、高音はハイハット等に反応します。 |
| 発光への反応量 (Master) | 音への追従量。0 で無反応、1 で音量に完全連動(無音時は AudioLink 発光が消える)。_AudioLinkEmission はアニメーション可能です。 |
| AudioLink Emission Color (HDR) | 音反応で光らせる色(HDR)。通常 Emission とは別に指定できます。 |
| AudioLink Emission Intensity | 音反応発光の強さ。音のピーク時に到達する明るさの上限です(0〜16)。 |
発光する「場所」は Emission Map を共用します。 通常 Emission を OFF にしている場合は、AudioLink セクションに表示される Emission Map で光らせたい場所を指定してください(白=光る / 黒=光らない。未設定なら全面が反応)。通常 Emission を ON にしている場合は、Emission セクションで設定した Emission Map がそのまま使われます。
AudioLink 発光は Emission Map × AudioLink Emission Color × Intensity × (音量 × 反応量) で計算される加算レイヤーです。反応量 または Intensity が 0 だと光らないため、両方を 0 より大きくしてください(各 1 が標準)。通常 Emission の Color / Intensity とは別系統なので、通常 Emission の Intensity を 0 にしても AudioLink 発光には影響しません。
使用上の注意: 通常 Emission(恒常発光)も使いたい場合は Emission セクションを ON にしてください。AudioLink 発光のみで使う場合は Emission は OFF のままで構いません。
AudioLink は、VRChat ワールド側に AudioLink システムが導入されている場合にのみ動作します(ワールドがグローバルな音響データテクスチャを提供している必要があります)。AudioLink 非対応ワールドでは、本機能は自動的に無効化されます(破綻は発生しません)。これはソフトパーティクルと同様、ワールド側の環境に依存する仕様上の制約です。
Glitter / Sparkle(プロシージャルラメ・スパークル)
テクスチャを使わずに、細かな輝きの粒(ラメ/スパークル)を表面に散らす装飾用の発光レイヤーです。粒はシェーダー内でプロシージャルに生成されるため、専用のノイズ画像は不要です。視線を動かすと粒がきらめきます(金属ラメ・フレークのような、見る角度で瞬く表現)。通常の Emission(恒常発光)とは独立した加算レイヤーとして動作するため、Emission を OFF にしても、Glitter だけで発光させられます。
| プロパティ | 説明 |
|---|---|
| Use Glitter | 機能の有効/無効。ON にすると Intensity が自動で 1 に設定されます(既に値がある場合は維持)。 |
| Glitter Color (HDR) | ラメの発光色(HDR)。Intensity を上げると Bloom に影響します。 |
| Intensity | 発光の強さ(0〜16)。 |
| Shape(形状) | 粒の形を Point(丸点)/ Star(先端の尖った十字のきらめき)/ Diamond(菱形)/ Fine Dust(高密度の微細ラメ)から選びます。輪郭はどのサイズでもシャープに保たれます(拡大してもぼやけません)。 |
| Space(座標系) | 粒の基準座標を UV(メッシュの UV に沿う・スクロールが自然・平面/パーティクル向き)/ Object(オブジェクト空間・三面投影〔Triplanar〕で Cube の側面や球の極でも引き延ばしなく均一)/ View(ワールド座標を基準に、粒が常にカメラを向く「ビルボード」表現。メッシュの UV 展開にも面の裏表にも一切影響されません) から選びます。 |
| Grain Scale(粒の大きさ) | 1 粒の大きさ。値を大きくするほど粒が大きく、小さくするほど細かくなります(既定 181)。粒を小さくするほど自動的に粒の数が増えるため、細かいラメでも密度が不足しません。大きなラメにしたいときは値を上げてください(290 前後で粗めのラメになります)。 |
| Coverage(被覆率) | 実際に光る粒の割合。0 に近いほどまばらに、1 に近いほど密に光ります(既定 0.6)。 |
| Size(粒サイズ) | 1粒の充填率(セル内でどれだけ大きく描くか・既定 0.7)。密度と独立しているため、粒を大きくしたまま密度を上げても欠けません(粒の絶対サイズは Density で調整します)。 |
| View Sharpness(視線シャープさ) | 視線に対するきらめきの鋭さ。値が大きいほど、特定の角度で鋭く一瞬光ります。 |
| Flicker Speed(明滅速度) | 明滅の速さ(0 で明滅なし)。明滅は粒ごとにランダムで、速さ・タイミングが 1 粒ずつ違います。さらに周期の異なる 2 つの波を重ねているため、同じ場所で同じ点滅が繰り返されるパターンは実質知覚できません。 |
| Scroll (X,Y) | 粒を流れるように動かす速度(UV/Object それぞれの座標を平行移動)。入力欄は X/Y のみです(Z/W は未使用)。 |
| AudioLink 連動 | ON にすると、ラメの明滅を音(AudioLink)に合わせて駆動します。Band(反応させる音域)と Sound Strength(音の掛かり具合)で調整します。 |
| Emission Map で局在化 | ON にすると、Emission Map の輝度でラメの出る範囲を絞ります(白=出る/黒=出ない)。マップは Emission と共用です(未設定なら全面)。 |
仕組み: ラメは Glitter Color × Intensity ×(形状 × 視線グリント × 明滅 ×(AudioLink)× マスク) で計算される加算発光レイヤーです。テクスチャを使わないプロシージャル生成のため、サンプラー・キーワードを増やしません(アップロード時のコンパイル負荷は据え置き)。発光は透明度に追従し、パーティクルの寿命フェードや半透明にも自然に馴染みます。Glitter Color / Intensity / Flicker Speed などはアニメーションも可能です。
補足: AudioLink 連動 は、他の音連動機能と同様、VRChat ワールド側に AudioLink システムが導入されている場合にのみ動作します(非対応ワールドでは明滅の音連動のみ自動で無効化され、ラメ自体は通常どおり表示されます)。Object 座標系はオブジェクト空間基準のため、アバターが移動・回転しても粒が表面に固定されて追従します(UV はメッシュの UV 展開に依存するため、UV が引き延ばされた箇所では粒も伸びます)。両面表示(Cull Off)のメッシュでは背面の粒も正しく光ります。
View 座標系について: 粒がワールド座標に紐づいたまま常にカメラを向くため、メッシュの UV 展開・面の向き・裏表を一切考慮しません。Object と同じく三面投影(Triplanar)で合成しているため、斜めから見た面でも粒が引き延ばされません。UV が用意されていないメッシュや、UV が大きく歪んだ箇所、両面ポリゴンでも粒の形と大きさが均一になります。オブジェクトのスケールにも左右されないため、複数のメッシュにまたがっても粒の大きさが揃います。VR でも左右の目で粒がずれません。なお、カメラを回すと粒の並びが入れ替わります(常に正面を向く表現のための仕様です)。
Dissolve(ディゾルブ / 消失エフェクト)
オブジェクトをノイズ模様に合わせて溶かすように消滅・出現させる機能です。
| プロパティ | 説明 |
|---|---|
| Dissolve Texture | 溶け方の基準となるノイズ画像を設定します。 |
| Threshold | 消失の進行度(-1.0=完全表示 〜 1.1=完全消去)。これをアニメーションさせることで美しい消失エフェクトが作れます。 |
| Noise Scale | ノイズパターンの細かさ(1=標準 / 10=細かい)。オブジェクト空間・Triplanarマッピングを採用しているため、スケール変更や面の向きに関わらず均一な模様が維持されます。 |
| Edge Width / Edge Color | 溶け際(エッジ)の発光幅とHDRカラーを指定します。 |
補足: 溶け際(エッジ)の発光は、パーティクルカラーのアルファ(不透明度)に追従してフェードイン/アウトします(Fade/Additive、および Transparent のパーティクル寿命フェード時)。Transparent のガラスマテリアルを Dissolve で消す演出でも、エッジ発光ごと自然に消えます。
Rim Light(輪郭の光・逆光表現)
モデルの輪郭(エッジ)部分を強調する機能です。Blend Mode で「光らせる」か「暗く落とす」かを切り替えられます。
| プロパティ | 説明 |
|---|---|
| Rim Color HDR / Intensity | 輪郭の色と強さです。Add ではキャラクターを浮き上がらせたり魔法のオーラを、Multiply では縁を暗く落とす縁取りを表現します。 |
| Rim Power | 効果の太さを調整します。大きくするほど太く柔らかく、小さくするほど細く鋭いエッジになります。 |
| Blend Mode | Add(既定)は縁を加算で発光させます(逆光・オーラ)。Multiply は縁を暗色化します。Rim Color を黒系にすると縁を暗く落とす縁取り(黒いリム)になります。 |
| 裏面で無効化 | 両面描画(Cull = Off)のとき、裏面のメッシュにリムを出しません(Add/Multiply 両モードに作用)。服の袖裏・コートの裏側などを暗く落ち着かせたいときに使います。既定は OFF。 |
| 環境順応 (Env Adapt) | 周囲の明るさ(環境光+メインのライト)に合わせてリムを減光します。暗いワールドでリムだけが浮いて見えるのを防ぎます。値は「環境の影響をどれだけ受けるか」の度合いで、1(既定)で完全に追従、0 で従来どおり明るさが一定のリムになります。白でしっかり照らされている明るさ以上の場所では従来と同じ見た目になり、そこから暗くなるほど減光します(=暗い側にだけ効きます)。Add / Multiply 両モード、および Unlit にも作用します。 |
| 暗所の下限 (Dark Floor) | 真っ暗な場所でリムをどこまで残すかの下限です。0(既定)は完全に消灯、0.2 程度にすると暗闇でもうっすら輪郭が残ります。暗いワールドで減光しすぎると感じたときの調整はこの値で行います。環境順応が 0 より大きいときだけ表示されます。 |
| 環境色になじませる (Env Tint) | 周囲の環境光の色みをリムの色に乗せます。寒色のワールドでは青寄りに、夕焼けなど暖色のワールドでは暖色寄りにリムが転びます。0(既定)で色は変わりません。明るさは変えず色みだけを寄せるため、環境順応と併用しても二重に暗くなりません。環境順応とは独立しているので、明るさは一定のまま色だけ馴染ませる(環境順応 0 + 環境色になじませる 1)といった使い方もできます。効果はリム色に含まれる成分を環境光の色みの分だけ抑える形で出るため、白や淡色のリムほど変化がはっきりします。 |
黒いリム(縁を暗くする)にするには: Blend Mode を Multiply にし、Rim Color を黒〜暗色に設定してください。Intensity で暗くする強さ、Rim Power で縁取りの太さを調整します。
「裏面で無効化」について: このオプションは描画設定の Cull が Off(両面描画)のときに効果を持ちます。Cull が Back(裏面を描画しない・既定)の場合は裏面そのものが表示されないため、ON にしても見た目は変わりません。Cull は「Transparency / Rendering」の詳細設定にあります(Matcap の同名オプションと同じ考え方です)。
環境順応の使いどころ: リムの発光は本来「光の当たり方に関係なく一定」の演出であるため、暗いワールドではリムだけが明るく残って浮いて見えることがあります。環境順応(既定 1)が周囲の明るさに追従して自動的に暗くしてくれるので、そのままで多くのワールドに馴染みます。明るいワールドでの見え方は変わらないため、調整が要るのは暗所だけです。暗所で消えすぎる場合は 暗所の下限 を上げる(または 環境順応 を少し下げる)のが目安です。逆に、アバターの見せ場としてリムを常に一定の明るさで光らせたい場合は、環境順応を 0 にすれば従来どおりの一定発光になります。
環境順応は「白でしっかり照らされている明るさより暗い側にだけ」効きます。明るいワールドでライトを少し動かしても変化が出ないのは仕様です(明るい場所は従来と同じ見た目に保つため)。効き方を確かめたいときは、Directional Light の Intensity を 0 に近づけるか、暗い Skybox に変えると変化がはっきり見えます。
環境色になじませる(Env Tint)について: こちらは明るさではなく色みを環境に寄せる調整で、環境順応とは独立して使えます。周囲の光の色を取り出して色相だけをリム色に乗せるため、明るさが二重に落ちることはありません。既定は 0(色を変えない)です。白〜淡色のリムほど効果がはっきり出ます(もともと濃い色のリムでは変化が分かりにくい場合があります)。ワールドを渡り歩く用途で「どこでも浮かない」ことを狙うなら環境順応と併用、キャラクターの色を守りたい場合は 0 のままが無難です。
補足: Multiply は Lit(Unlit OFF)でのみ効果が出ます(Unlit モードは光に応答しないため)。Add のリムライト発光は、パーティクルカラーのアルファに追従してフェードイン/アウトします(Fade/Additive、および Transparent のパーティクル寿命フェード時)。
Back Light(逆光ライト)
メインの平行光(Directional Light)がキャラクターの背後にあるときだけ、輪郭の広い範囲を発光させるイラスト調の逆光表現です。Rim Light が「見る角度で常に縁が光る」のに対し、Back Light は「光が背後にある時だけ光る」ことに加え、影(シャドウ)で光が遮られている部分は光りません(上着の内側・襟元など、体に遮られて逆光が届かない場所は発光しない)。シーンのライトの向きと遮蔽に反応する自然な逆光になります。
| プロパティ | 説明 |
|---|---|
| Use Back Light | 機能の有効/無効。 |
| Back Light Color (HDR) / Intensity | 逆光の色と強さです。HDR カラーなので Bloom と組み合わせると強く発光します。 |
| Width | 光る範囲の広さです。小さいほど広い範囲が光り、大きいほど輪郭近くの細い範囲だけになります。 |
| Directivity | 「光が背後にある」と判定する指向性です。大きいほど光がほぼ真後ろにあるときだけ光り、小さいほど斜め後ろでも反応します。 |
| 環境順応 (Env Adapt) | 周囲の明るさ(環境光+メインのライト)に合わせて逆光を弱めます。暗いワールドで逆光だけが浮いて見えるのを防ぎます。値は「環境の影響をどれだけ受けるか」の度合いで、1(既定)で完全に追従、0 で従来どおり一定の明るさになります。白でしっかり照らされている明るさ以上の場所では従来と同じ見た目になり、そこから暗くなるほど弱まります。Rim Light の同名の項目と同じ仕組みです。 |
| 暗所の下限 (Dark Floor) | 真っ暗な場所で逆光をどこまで残すかの下限です。0(既定)は完全に消灯、0.2 程度にすると暗闇でもうっすら残ります。暗いワールドで弱まりすぎると感じたときの調整はこの値で行います。環境順応が 0 より大きいときだけ表示されます。 |
| 環境色になじませる (Env Tint) | 周囲の環境光の色みを逆光の色に乗せます。寒色のワールドでは青寄りに、暖色のワールドでは暖色寄りに転びます。0(既定)で色は変わりません。明るさは変えず色みだけを寄せるため、環境順応と併用しても二重に暗くなりません。 |
| 裏面で無効化 | 両面描画(Cull = Off)のとき、裏面のメッシュに逆光を出しません。既定は OFF。 |
Rim Light との違い: Rim Light は光源の向きに関係なく「視線に対して縁」が光ります。Back Light はシーンのメイン平行光の向きを見て光が被写体の背後にある時だけ光り、さらに影で遮られた部分は光りません。両方を同時に使うこともできます。
光の遮蔽判定にはワールドの影(シャドウ)を利用します。影の無いワールド(シャドウが無効な環境)では遮蔽が働かず、光の向きだけで判定されるため、上着の内側などにも光が出ることがあります。また Unlit モードでは無効です(光に応答しないため。Rim の Multiply と同じ扱い)。
逆光は「光が背後にあるか」と「影で遮られているか」だけで判定していたため、ライトの強さを弱めても逆光の明るさは変わりませんでした。環境順応(既定 1)を使うと周囲の明るさに合わせて自動的に弱まり、暗いワールドでも風景に馴染みます。明るいワールドでの見え方は変わらないため、調整が要るのは暗所だけです。効き方を確かめたいときは、Directional Light の Intensity を 0 に近づけるか、暗い Skybox に変えると変化がはっきり見えます。Rim Light の同名の項目とまったく同じ仕組みなので、両方使う場合も設定の勘所は共通です。
補足: 発光は透明度(hlFade)に追従してフェードします。効果はメインの Directional Light を基準にするため、ワールドに Directional Light が無い場合は光りません。「裏面で無効化」は Cull = Off(両面描画)のときのみ意味を持ちます(Rim / Matcap の同名オプションと同じ考え方です)。
Outline & Sweep
# Outline(アウトライン / 輪郭線)
メッシュの輪郭線を描くベース機能です。トゥーン調の縁取りから、HDR カラー+Bloom によるネオン管のような発光輪郭まで対応します。球・キューブ・文字・衣装・小物など任意の3Dメッシュに対応し、スキンメッシュではアニメーションにも追従します。基本の輪郭線はテクスチャ・UV展開なしで描けます(マスクは任意:目尻など部分的に線を消したいときだけマスク画像を使えます)。
| プロパティ | 説明 |
|---|---|
| Use Outline | 機能の有効/無効。 |
| Base Color (HDR) | 輪郭線の色。HDR 対応のため Intensity を上げると Bloom(光の滲み)が綺麗に効きます。A(アルファ)は輪郭線自体の不透明度です(v34 から有効・既定 1=不透明)。 |
| Self-Illuminate(自己発光) | 輪郭線がワールドのライティングを無視して自己発光する度合い(0〜1・既定 0)。0(既定)では輪郭線がシーンの明るさ(メイン Directional Light の総量+環境光、Light Min/Max Limit に追従)に均一に追従します(Directional Light があれば明るく(白)、シーン全体が暗いときだけ灰色〜黒・線は均一で明暗の境界は出ません・真っ暗では Light Min Limit で止まり 0 で消灯)。1 ではライティングを無視して常時発光(従来のネオン)になります。発光の強さは Base Color (HDR) の明るさで調整してください。アニメーション可能です。※この値が次の Intensity / Line Width の効き方(明るさの基準)を左右するため、先に決められるよう Base Color の直後に配置しています。 |
| Intensity(光の強さ) | 線の発光の強さ(0〜16)。 |
| Line Width(線の太さ) | 輪郭線の太さ(メッシュの押し出し量)。スライダーは 0〜20(0.01 刻み・小数第2位まで)で、0 で線が消えます。細い線の微調整向けのレンジです(表示値は内部値の便宜的な倍率で、効果・保存値の意味は値の大小に依存しません)。 |
| Extrude Mode(押し出し方式) | Normal=法線方向(ベベル付き文字・文字列など複数パーツのメッシュ・スムーズな一般モデル向け)/ PivotScale=ピボットから外向き(キューブ等のハードエッジな単一凸形状向け・角が割れません)。 |
| Alpha Sync(本体の透明度に追従) | 半透明プリセット(Transparent / Fade / Additive)で、輪郭線を本体の透明度(Color の A × メインテクスチャの A)に追従させます(既定 ON)。本体が透けるほど、本体越しに透けて見える輪郭色も一緒に薄くなり、完全透明の部分には線も出ません(深度も書きません)。OFF で従来どおり透明度に関係なく常時表示(内側に輪郭色が透ける従来の見た目)。不透明(Opaque / Cutout)プリセットでは本体が透けないため効果はありません。 |
| Use Outline Mask(マスクで部分的に消す) | 輪郭線をテクスチャマスクで部分的に消す機能(既定 OFF)。目尻・口元など、線を出したくない箇所だけ消せます。ON にすると下記のマスク欄が表示されます。 |
| Outline Mask | グレースケールのマスク画像。白=線あり / 黒=線なし(中間はグラデーション)。メインテクスチャと同じ UVで参照します。マスクで消した部分は深度を書かないため、半透明時の裏側の透けも増えません。 |
Outline を有効にすると、扱いやすい初期設定(Intensity 1 / Line Width 0.1 / Sweep OFF)で始まります。値はあとから自由に変更できます。なお Outline を一度 OFF にして再び有効化すると、この初期設定に戻ります。
輪郭線は「メッシュを少し膨らませた複製を裏面だけ描画する」方式(反転外殻)で幾何学的に描かれます。そのためキューブのような平面メッシュでも正確に輪郭線が出ます。
Normal:法線に沿って押し出すため線の太さが均一。ハードエッジ(フラットシェーディング)の角では線が途切れることがあります。その場合は PivotScale に切り替えるか、モデル側にベベル/スムーズ法線を付けてください。
PivotScale:ピボットから放射状に押し出すため角が割れませんが、文字列のような複数パーツのメッシュや凹形状では線の太さが不均一になります(ピボットを向く側に線が出ません)。単一の凸形状専用と考えてください。
- スキンメッシュのボーン変形に輪郭線が追従します。Extrude Mode は Normal を使用してください(
PivotScaleは全身メッシュでは破綻します)。 - 線の太さはアバターのスケールに比例します(巨大/小型アバターでも見た目の比率が保たれます)。
- 顔など輪郭線を出したくない部位は、そのマテリアル側で Outline を OFF(または Line Width を
0)にしてください。アバターは部位ごとにマテリアルが分かれているのが一般的なので、これが部位制御の基本手段です。1枚のマテリアル内で目尻など一部だけ消したい場合は Use Outline Mask(白=線あり/黒=線なし)が使えます。 - 該当マテリアルの頂点処理が約2倍+ドローコールが1つ増えます。本体規模でも実用範囲ですが、Performance Rank を重視する場合は適用範囲を絞ってください。
# Sweep(周回発光オプション)
Outline の輪郭線の上を、ひときわ明るい発光の筋がぐるりと周回するオプションです。ネオン管・サイバーガジェット・魔法陣などの「光が走る」演出に使えます。Outline が有効なときのみ機能します。
| プロパティ | 説明 |
|---|---|
| Use Sweep | オプションの有効/無効。 |
| Base Glow(管の基本輝度) | 周回する筋が走る土台=輪郭線(管)の基本の明るさ(0〜1・既定 1)。下げると「淡く光る管の上を強い光の筋が走る」コントラストが作れます。Sweep 専用の設定です(Sweep を有効化すると表示)。Sweep を OFF にすると Base Glow は効かなくなり、輪郭線は均一なソリッド線になります(明るさは Intensity と Base Color で調整)。 |
| Width(筋の長さ) | 光の筋の全長。小さいほど点状に、大きいほど長く光ります。 |
| Sharpness(減衰の鋭さ) | 筋の中心から両側へ対称にかかる減衰の鋭さ。大きいほど中心が鋭く際立ち、小さいほど全体がなだらかに光ります。 |
| Speed(周回速度) | 周回する速さ。符号で周回方向が反転します(正=一方向 / 負=逆方向)。0 で停止。アニメーション可能です。(表示値は便宜的な倍率で、効果・保存値の意味は値の大小に依存しません。) |
| Count(筋の本数) | 同時に周回する筋の本数(1〜8 の整数)。2 以上で等間隔の複数の光が追いかけ合います。 |
| Pivot Offset(周回中心) | 筋が周回する中心のオフセット(オブジェクト空間)。通常は (0,0,0) のままで構いません。アバター本体に使う場合は Y を胸の高さ(例: 1.0)に設定すると周回が均等になります。 |
| Edge Fade(透過時の放射抑制) | 半透明(Transparent / Fade)で本体越しに Sweep が放射状に透けて見える場合に、リムの筋を残して内側の放射だけを抑えます(0〜8・既定 2)。0 で無効。滑らかな曲面(球・有機的なメッシュ)向けの機能です。不透明では裏側が本体に隠れるため効果はありません。 ⚠️ ハードエッジのメッシュ(キューブ等)ではリムの筋も減衰するため、その場合は 0 にしてください(輪郭線そのものは Edge Fade の影響を受けず、常に表示されます)。 |
光の筋の位置はカメラから見た画面上の角度で生成されるため、どの方向から見ても、いま見えている輪郭を筋が一周します。ビュー(見る側)基準のエフェクトであるため、頭(カメラ)を傾けると周回の起点も画面と一緒に回ります。また VRChat のミラー内では周回方向が反転して見えますが、これは Matcap など視点依存エフェクト共通の仕様です。
- パーティクルにこのマテリアルを使う場合、輪郭線がパーティクル1粒ごとに描画されるため、パーティクル用途では OFF を推奨します(ON の場合、線は寿命フェードに追従します)。
- 本機能はシェーダーキーワードを使わないため、有効化してもアップロード時のコンパイル時間(バリアント数)は増えません。OFF 時は描画負荷ほぼゼロですが、専用パスの分だけドローコールが 1 つ増えます。
- Transparent / Fade 系プリセットでは、本体が半透明になると裏側が本体越しに透けて見える場合があります。輪郭線そのものは常に表示されます(幾何学的に描くため、どのメッシュでも消えません)。Sweep の放射状の透けが気になる場合は、滑らかな曲面では Sweep の Edge Fade(既定
2)が内側の放射を抑えます(ハードエッジのメッシュでは0を推奨)。
アニメ・パーティクル連携
# Particle Color(パーティクルとの連携)
| プロパティ | 説明 |
|---|---|
| Vertex Color Blend Mode | 既定は None(パーティクルの頂点カラーを反映しません)。Multiply(乗算)に変更すると、Particle System 側の色(Color over Lifetime 等)を受け取ります。 |
アニメーションから操作する方法
Unity Animator で以下のプロパティ名をキーフレームに追加することで、時間経過でエフェクトを動かせます。
手順(VRChat Avatar 例)
- Animator Controller を開く
- 対象の GameObject を選択した状態でキーフレームを追加
Add Property→Skinned Mesh Renderer(またはMesh Renderer)→Materials→ 対象マテリアル → 上記プロパティ名で追加
パーティクル(Particle System)での使用について
本シェーダーはパーティクルエフェクトへの使用を想定して設計されています。
- Particle System の
Renderer > Materialに本マテリアルをセット - マテリアルの
Vertex Color Blend ModeをMultiplyに変更
以上で動作します。 Enable Mesh GPU Instancing のチェックや Custom Vertex Streams などの追加設定は一切不要です。
パフォーマンス・利用規約
パフォーマンスと最適化
本シェーダーは、VRChat環境での軽量動作とコンパイル速度のために最大限の最適化を行っています。
- アバター用途で使われない描画パス(ShadowCasterやDeferredパス)や、フォグ・ライトマップ用の内部バリアントを完全にパージし、ビルド(アップロード)時間を大幅に短縮しています。
VRChat Fallback について
シェーダーには "VRCFallback" = "Standard" タグが設定されています。
VRChat 内で他のユーザーの Safety 設定によりカスタムシェーダーが無効化された場合でも、自動的に Unity 標準の Standard シェーダーに置き換わり、アバターがピンク色(マテリアルエラー)になるのを防ぎます。
リファレンス・謝辞(References & Acknowledgements)
ARLitToon の開発にあたり、以下の先行するシェーダー・ライブラリの仕様や設計を参考にさせていただきました。素晴らしい成果を公開されている各プロジェクト・作者の皆さまに、敬意と感謝を表します。
- lilToon(lilxyzw)— アバター向けトゥーン表現の機能仕様を参考にしました。https://github.com/lilxyzw/lilToon
- OpenLit(lilxyzw)— ライティング設定、とくに多数のリアルタイムライト環境における明るさ制御(追加ライトの扱いと上限クランプ)の考え方を参考にしました。https://github.com/lilxyzw/OpenLit
- Unity Built-in シェーダー(Unity Technologies)— 環境光・環境反射(Global Illumination/リフレクションプローブ)の解決に、Unity 標準のライティング経路を利用しています。
- AudioLink(AudioLink プロジェクト)— 音楽連動の発光機能は、AudioLink の仕様(ワールドがグローバルに提供する音響データテクスチャ)に準拠して実装しています。https://github.com/llealloo/audiolink
本シェーダーは上記のコードをそのまま流用したものではなく、公開されている仕様・設計思想を参考に独自実装したものです。
利用規約(ライセンス)
本シェーダーの著作権は ARL に帰属します。 本パッケージを購入・ダウンロードした時点で、以下の利用規約に同意したものとみなします。
# 【許可される事項】
- ご自身の VRChat アバター、ワールド、ゲーム制作等への組み込みおよび商用利用(動画配信などを含む)。
- 本シェーダーのコードおよび GUI スクリプトの改変。
- 本シェーダーを使用した際、作者名(ARL)や本シェーダー名(ARLitToon)のクレジット表記は任意(不要)です。
ARLitToon シェーダーを作品(アバター・ギミック・ワールドアイテム等)に同梱して配布・販売する場合は、シェーダーが正しく動作するよう、以下の 3 ファイルを必ずセットで同梱してください。
ARLitToon.shader(シェーダー本体)ARLitToonGUI.cs(マテリアル Inspector 用 GUI スクリプト/Editorフォルダ内)README.md(本ガイド)
※ ARLitToonGUI.cs が欠けると Inspector のカスタム GUI が表示されず、マテリアルを正しく設定できません。README.md は使用方法と本利用規約を受け取り手に伝えるために同梱してください。
ARLitToonBaker.cs(テクスチャ焼きこみツール/Editorフォルダ内)
※ こちらは必須ではありませんが、同梱を推奨します。同梱すると受け取り手も Bake to Base(焼きこみ)を使えます。同梱しなくてもシェーダーは完全に正常動作し、焼きこみの機能のみが使えなくなります。
※ 万一この 1 ファイルが原因で Unity のコンパイルが通らない場合(バージョン差や他アセットとの競合など)は、ARLitToonBaker.cs を削除すれば復旧します。必須にしていないのはこのためです。
# 【禁止事項】
- 本シェーダー(改変物を含む)単体での無断再配布、転載、および販売(※ご自身の作品に同梱して販売・配布する場合は問題ありません)。
- VRChat等において、ARLitToonシェーダーを利用したアバターを「パブリックアバター」としてアップロードする行為(第三者がアバターをクローン・抽出できる状態にすること)。
# 【免責事項】
- 本シェーダーを利用したことによって生じるいかなるトラブルや損害に対しても、作者(ARL)は一切の責任を負わないものとします。