NOVA Shader: Particle System用多機能シェーダ
April 7, 2026 · View on GitHub
NOVA Shader: Particle System用多機能シェーダ
ドキュメント (English, 日本語) | サンプル (English, 日本語) | デモ (English, 日本語)
NOVA ShaderはUnityのUniversal Render Pipeline (URP)に対応した、Particle Systemのための多機能シェーダです。
ビジュアルエフェクト制作でよく使われる汎用的な機能をまとめているので、効率的に高品質なエフェクトを作成できます。

Author: @Ugokashiya
特徴的な機能としてはフローマップ、Flip-Book(連番テクスチャアニメーション)、ディゾルブ、フェード、回転、アニメーション可能なTintマップ、エミッション、ディストーションなどがあります。

特徴的な機能
詳細については以下のドキュメントやサンプル、デモを参照してください。
目次
詳細
セットアップ
要件
本ライブラリは以下の環境に対応しています。
- Unity 2022.3 LTS 以上
- Universal Render Pipeline
- Shader Model 3.5
なお、Mesh GPU Instancingを使う場合にはShader Model 4.5が要件となります。
また、Mirror Samplingプロパティを有効にする場合には、ハードウェアがInline Sampler Statesに対応している必要があります。
3Dテクスチャや2Dテクスチャ配列を使用する場合には、圧縮形式がそれらに対応している必要があります。
また本ドキュメントでは、Universal Render Pipeline のセットアップが完了していることを前提としています。
Universal Render Pipelineに関する詳細はUnityのマニュアルを参照してください。
インストール
インストールは以下の手順で行います。
- Window > Package Manager を選択
- 「+」ボタン > Add package from git URL を選択
- 以下を入力してインストール
あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記します。
{
"dependencies": {
"jp.co.cyberagent.nova": "https://github.com/CyberAgentGameEntertainment/NovaShader.git?path=/Assets/Nova"
}
}
バージョンを指定したい場合には以下のように記述します。
なおNo 'git' executable was found. Please install Git on your system and restart Unityのようなメッセージが出た場合、マシンにGitをセットアップする必要がある点にご注意ください。
バージョンを更新するには上述の手順でバージョンを書き換えてください。
バージョンを指定しない場合には、package-lock.jsonファイルを開いて本ライブラリの箇所のハッシュを書き換えることで更新できます。
{
"dependencies": {
"jp.co.cyberagent.nova": {
"version": "https://github.com/CyberAgentGameEntertainment/NovaShader.git?path=/Assets/Nova",
"depth": 0,
"source": "git",
"dependencies": {},
"hash": "..."
}
}
}
使い方
Renderer Feature を登録
まず、Distortion を掛けるための Renderer Feature を設定します。
URP の ForwardRendererData アセットのインスペクタ最下部から、Add Renderer Feature > Screen Space Distortion を選択します。

Add Screen Space Distortion
下図のように Screen Space Distortion が追加されていることを確認します。

Screen Space Distortion
Note
なお Distortion シェーダを使用しない場合には Renderer Feature を設定する必要はありません。
Depth Textureを有効化
次に Soft Particles や Depth Fade といった機能に使用するため Depth Texture を有効化します。
UniversalRenderPipelineAsset のインスペクタから Depth Texture にチェックを入れます。

Depth Texture
Depth Texture の設定は各 Camera にもあるので、こちらも必要に応じて設定します。
Note
なお Soft Particles や Depth Fade を使わない場合にはこの設定は必要ありません。
マテリアル作成、アサイン
ここまでの設定が完了したら、NOVAシェーダが設定されたマテリアルを作成します。
任意のマテリアルを作成し、シェーダに Nova/Particles/UberUnlit を設定します。
Base Map には適当なテクスチャをアサインしておきます。

Material
Particle System を作成してこのマテリアルをアサインすると、指定したテクスチャのパーティクルが表示されることを確認できます。

Particle
その他各シェーダ、各機能の詳細については以下にまとめます。
Uber Unlitシェーダ
Uber Unlitシェーダはライティングが反映されない多機能シェーダです。 発光するエフェクトなど、ライティングが不要なパーティクルにはこのシェーダを使用します。
Uber Unlitシェーダを使用するには、マテリアルに Nova/Particles/UberUnlit シェーダをアサインします。
Inspectorから設定可能な各プロパティの説明は以下の通りです。
Render Settings
Render Settingsではマテリアルの描画方法を制御できます。

Render Settings
| プロパティ名 | 説明 | ||
| Render Type |
描画方法を以下の選択肢から指定できます。
Cutoutを選択した場合には、CutOffプロパティが表示されます。 | ||
| CutOff |
Render TypeをCutoutに設定した時のみ表示されます。
半透明部分を切り取る際の閾値を制御します。 | ||
| Blend Mode |
Render TypeをTransparentに設定した時のみ表示されます。 色の合成方法を以下の選択肢から指定できます。
| ||
| Render Face |
描画する面を以下の選択肢から指定できます。
| ||
| Render Priority |
描画の優先度を指定できます。 | ||
| Vertex Alpha Mode |
頂点カラーのアルファ値の用途を以下の選択肢から指定できます。
| ||
| ZWrite |
ZWriteを設定できます。
| ||
| ZTest |
ZTestを設定できます。
| ||
Vertex Deformation
Vertex Deformationでは頂点の変形を制御できます。

Vertex Deformation
| プロパティ名 | 説明 | ||
| Texture |
頂点変形マップを設定します。頂点変形マップの仕様は以下の通りです。
| ||
| Intensity |
頂点変形を適用する際の強度を設定します。 | ||
| Base Value |
テクスチャの値に対してのオフセットです。 | ||
Base Map
Base Mapでは色のベースとなるテクスチャを制御できます。

Base Map
| プロパティ名 | 説明 | ||
| Mode |
ベースマップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
| Texture |
ベースマップを設定します。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。 | ||
| Channel |
Base Mapのどの色チャンネルを描画に使用するかを選択します。単一チャンネル(Red/Green/Blue)が選択された場合、選択されたチャンネル値がRGB成分に適用され、元のアルファチャンネルは保持されます。利用可能なオプション:
| ||
| Rotation |
ベースマップの回転度合いを設定します。 | ||
| Offset |
ベースマップを回転する際の中心座標のオフセットです。 | ||
| Mirror Sampling |
チェックをつけるとテクスチャがミラーサンプリングされます。 | ||
| Flip-Book Progress |
ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 Flip-BookあるいはFlip-Book Blendingの進行度を設定します。 | ||
| Random Row Selection |
ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 UnityのTexture Sheet AnimationのRow Mode > Random機能と同等の機能です。有効にすると、各パーティクルがライフタイム中にランダムに1つの行を選択・維持してアニメーションを再生します。 ランダム値の入力にUnity Particle SystemのCustom Coordを使用します。まずRow Countをテクスチャシートの行数に合わせて設定し、その後任意のCustom Coordチャンネルを「Random Between Two Constants」モード(範囲:0からRow Count)で設定し割り当てます。 | ||
| Row Count |
Random Row Selectionが有効な時のみ表示されます。 テクスチャシートの行数を設定します(例:4×4のテクスチャシートの場合、Row Countを4に設定)。 | ||
| Random Coord |
Random Row Selectionが有効な時のみ表示されます。 ランダム値の入力に使用するCustom Coordチャンネルを選択します。Unity Particle SystemのCustom Dataで「Random Between Two Constants」モードに設定したチャンネルと対応させます。 | ||
| Tone Mode |
輝度値に基づく色調調整のためのトーンマッピングを制御します。以下のオプションから選択します:
境界値によって領域の閾値が決定され、設定された色にマッピングします。 各境界間の色は線形補間され、滑らかなトーンマッピングが適用されます。 なお、この線形補間はシェーダーで行われるため、プロジェクトの色空間を考慮してパラメータ設定を行う必要があることに注意してください。 | ||
| Tone Channel |
Tone ModeがNoneでない場合に表示されます。 トーンマッピングの輝度計算に使用するカラーチャンネルを選択します。Red、Green、Blue、Alpha(デフォルト)から選択可能です。 | ||
| Highlights Color |
Tone ModeがTritoneまたはPentoneの時に表示されます。 ハイライト領域に適用される色を設定します。 | ||
| Brights Color |
Tone ModeがPentoneの時のみ表示されます。 Brights領域(HighlightsとMidtonesの間)に適用される色を設定します。 | ||
| Midtones Color |
Tone ModeがTritoneまたはPentoneの時に表示されます。 ミッドトーン領域に適用される色を設定します。 | ||
| Darktones Color |
Tone ModeがPentoneの時のみ表示されます。 Darktones領域(MidtonesとShadowsの間)に適用される色を設定します。 | ||
| Shadows Color |
Tone ModeがTritoneまたはPentoneの時に表示されます。 シャドウ領域に適用される色を設定します。 | ||
| Highlights |
Tone ModeがTritoneまたはPentoneの時に表示されます。 ハイライトの輝度境界値を設定します。 | ||
| Brights |
Tone ModeがPentoneの時のみ表示されます。 MidtonesとHighlights間のBrights境界位置を制御します。 | ||
| Midtones |
Tone ModeがTritoneまたはPentoneの時に表示されます。 ShadowsとHighlights間の中間点位置を決定することで、トーン領域間のバランスを制御します。 | ||
| Darktones |
Tone ModeがPentoneの時のみ表示されます。 ShadowsとMidtones間のDarktones境界位置を制御します。 | ||
| Shadows |
Tone ModeがTritoneまたはPentoneの時に表示されます。 シャドウの輝度境界値を設定します。 | ||
Tint Color
Tint Colorでは乗算色を指定できます。

Tint Color
| プロパティ名 | 説明 | ||
| Mode |
乗算色の適用範囲を以下の選択肢から指定できます。
| ||
| Progress |
ModeをRimに設定した時のみ表示されます。
リムの範囲を設定します。 | ||
| Sharpness |
ModeをRimに設定した時のみ表示されます。 この値が大きいほどリムのエッジが鋭くなります。 | ||
| Inverse |
ModeをRimに設定した時のみ表示されます。 リムの範囲を逆転させます。 | ||
| Color Mode |
乗算色の指定方法を以下の選択肢から指定できます。
選択したモードによって必要なテクスチャタイプが変わります。 | ||
| Color |
Color ModeをSingle Colorに設定した時のみ表示されます。 乗算色を指定します。 | ||
| Texture |
Color ModeをSingle Texture、Flip Book、あるいはFlip Book Blendingに設定した時のみ表示されます。 乗算色を表すテクスチャを設定します。 Color ModeをFlip Bookに設定した場合はTexture2DArrayを設定する必要があります。 Flip Book Blendingに設定した場合はTexture3Dを設定する必要があります。 | ||
| Rotation |
Color ModeをSingle Texture、Flip Book、あるいはFlip Book Blendingに設定した時のみ表示されます。 ティントマップの回転度合いを設定します。 | ||
| Offset |
ティントマップを回転する際の中心座標のオフセットです。 | ||
| Flip-Book Progress |
Color ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 フリップブックまたはフリップブックブレンディングの進行度合いです。 | ||
| Blend Rate |
乗算色の適用率です。 | ||
| Random Row Selection |
Color ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 UnityのTexture Sheet AnimationのRow Mode > Random機能と同等の機能です。有効にすると、各パーティクルがライフタイム中にランダムに1つの行を選択・維持してアニメーションを再生します。 ランダム値の入力にUnity Particle SystemのCustom Coordを使用します。まずRow Countをテクスチャシートの行数に合わせて設定し、その後任意のCustom Coordチャンネルを「Random Between Two Constants」モード(範囲:0からRow Count)で設定し割り当てます。 | ||
| Row Count |
Random Row Selectionが有効な時のみ表示されます。 テクスチャシートの行数を設定します(例:4×4のテクスチャシートの場合、Row Countを4に設定)。 | ||
| Random Coord |
Random Row Selectionが有効な時のみ表示されます。 ランダム値の入力に使用するCustom Coordチャンネルを選択します。Unity Particle SystemのCustom Dataで「Random Between Two Constants」モードに設定したチャンネルと対応させます。 | ||
Flow Map
Flow Mapを使うとベースマップを指定した方向に歪ませることができます。

Flow Map
| プロパティ名 | 説明 | ||
| Texture |
フローマップを設定します。フローマップの仕様は以下の通りです。
| ||
| Rotation |
フローマップの回転度合いを設定します。 | ||
| Offset |
フローマップを回転する際の中心座標のオフセットです。 | ||
| Intensity |
フローマップを適用する際の強度を設定します。 | ||
| Targets |
フローマップを適用する対象を設定します(複数選択可能)。
| ||
Parallax Map
Parallax Mapを使うと視差効果が出せます

Parallax Map
| プロパティ名 | 説明 | ||
| Mode |
視差マップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
| Texture |
視差マップを設定します。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。
| ||
| Flip-Book Progress |
ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 フリップブックまたはフリップブックブレンディングの進行度合いです。 | ||
| Random Row Selection |
ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 UnityのTexture Sheet AnimationのRow Mode > Random機能と同等の機能です。有効にすると、各パーティクルがライフタイム中にランダムに1つの行を選択・維持してアニメーションを再生します。 ランダム値の入力にUnity Particle SystemのCustom Coordを使用します。まずRow Countをテクスチャシートの行数に合わせて設定し、その後任意のCustom Coordチャンネルを「Random Between Two Constants」モード(範囲:0からRow Count)で設定し割り当てます。 | ||
| Row Count |
Random Row Selectionが有効な時のみ表示されます。 テクスチャシートの行数を設定します(例:4×4のテクスチャシートの場合、Row Countを4に設定)。 | ||
| Random Coord |
Random Row Selectionが有効な時のみ表示されます。 ランダム値の入力に使用するCustom Coordチャンネルを選択します。Unity Particle SystemのCustom Dataで「Random Between Two Constants」モードに設定したチャンネルと対応させます。 | ||
| Strength |
視差マップを適用する際の強度を設定します。 | ||
| Targets |
視差マップを適用する対象を設定します(複数選択可能)。
| ||
Color Correction
Color Correctionはここまでの色を補正します。

Color Correction
| プロパティ名 | 説明 | ||
| Mode |
色調補正のモードを以下の選択肢から指定できます。
| ||
| Texture |
ModeをGradient Mapに設定した時のみ表示されます。 グラデーションマップを設定します。グラデーションマップの仕様は以下の通りです。
| ||
Alpha Transition
Alpha Transitionは徐々に消えていく表現に使用します。

Alpha Transition
| プロパティ名 | 説明 | ||
| Mode |
アルファトランジションのモードを以下の選択肢から指定できます。
| ||
| Map Mode |
アルファトランジションマップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
| Texture |
アルファトランジションマップを設定します。アルファトランジションマップの仕様は以下の通りです。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。 また色ではなく値としてテクスチャを使うので、テクスチャ設定のsRGB Colorのチェックを外す必要がある点に注意してください。 | ||
| Rotation |
アルファトランジションマップの回転度合いを設定します。 | ||
| Offset |
アルファトランジションマップを回転する際の中心座標のオフセットです。 | ||
| Flip-Book Progress |
Map ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 Flip-BookあるいはFlip-Book Blendingの進行度を設定します。 | ||
| Random Row Selection |
Map ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 UnityのTexture Sheet AnimationのRow Mode > Random機能と同等の機能です。有効にすると、各パーティクルがライフタイム中にランダムに1つの行を選択・維持してアニメーションを再生します。 ランダム値の入力にUnity Particle SystemのCustom Coordを使用します。まずRow Countをテクスチャシートの行数に合わせて設定し、その後任意のCustom Coordチャンネルを「Random Between Two Constants」モード(範囲:0からRow Count)で設定し割り当てます。 | ||
| Row Count |
Random Row Selectionが有効な時のみ表示されます。 テクスチャシートの行数を設定します(例:4×4のテクスチャシートの場合、Row Countを4に設定)。 | ||
| Random Coord |
Random Row Selectionが有効な時のみ表示されます。 ランダム値の入力に使用するCustom Coordチャンネルを選択します。Unity Particle SystemのCustom Dataで「Random Between Two Constants」モードに設定したチャンネルと対応させます。 | ||
| Transition Progress |
トランジションの進行度を設定します。 | ||
| 2nd Texture Blend Mode |
2枚目のテクスチャの合成方法を以下の選択肢から指定できます。
| ||
| 2nd Texture Map Mode |
2nd Texture Blend ModeをAverageあるいはMultiplyに設定した時のみ表示されます。 2枚目のアルファトランジションマップのMap Modeを1枚目のテクスチャとは独立して指定できます。以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
| 2nd Texture Rotation |
2nd Texture Blend ModeをAverageあるいはMultiplyに設定した時のみ表示されます。 2枚目のアルファトランジションマップの回転度合いを設定します。 | ||
| Offset |
2枚目のアルファトランジションマップを回転する際の中心座標のオフセットです。 | ||
| Edge Sharpness |
ModeをDissolveに設定した時のみ表示されます。 エッジの鋭さを設定します。 | ||
Emission
Emissionは発光する表現のために使用します。

Emission
| プロパティ名 | 説明 | ||
| Mode |
エミッションのモードを以下の選択肢から指定できます。
| ||
| Map Mode |
ModeをBy Textureに設定した時のみ表示されます。 エミッションマップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
| Texture |
ModeをBy Textureに設定した時のみ表示されます。 エミッションマップを設定します。エミッションマップの仕様は以下の通りです。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。 また色ではなく値としてテクスチャを使うので、テクスチャ設定のsRGB Colorのチェックを外す必要がある点に注意してください。 | ||
| Rotation |
ModeをBy Textureに設定した時のみ表示されます。 エミッションマップの回転度合いを設定します。 | ||
| Offset |
エミッションマップを回転する際の中心座標のオフセットです。 | ||
| Flip-Book Progress |
ModeをBy Textureに設定し、Map ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 Flip-BookあるいはFlip-Book Blendingの進行度を設定します。 | ||
| Random Row Selection |
ModeをBy Textureに設定し、Map ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 UnityのTexture Sheet AnimationのRow Mode > Random機能と同等の機能です。有効にすると、各パーティクルがライフタイム中にランダムに1つの行を選択・維持してアニメーションを再生します。 ランダム値の入力にUnity Particle SystemのCustom Coordを使用します。まずRow Countをテクスチャシートの行数に合わせて設定し、その後任意のCustom Coordチャンネルを「Random Between Two Constants」モード(範囲:0からRow Count)で設定し割り当てます。 | ||
| Row Count |
Random Row Selectionが有効な時のみ表示されます。 テクスチャシートの行数を設定します(例:4×4のテクスチャシートの場合、Row Countを4に設定)。 | ||
| Random Coord |
Random Row Selectionが有効な時のみ表示されます。 ランダム値の入力に使用するCustom Coordチャンネルを選択します。Unity Particle SystemのCustom Dataで「Random Between Two Constants」モードに設定したチャンネルと対応させます。 | ||
| Color Type |
エミッションの色を以下の選択肢から指定できます。
| ||
| Color |
Color TypeをColorに設定した時のみ表示されます。 エミッションの色をHDRカラーで指定します。 | ||
| Keep Edge Transparency |
ModeをEdgeに設定した時のみ表示されます。 チェックをつけると、エッジが透過しなくなります。 | ||
| Gradient Map |
Color TypeをGradient Mapに設定した時のみ表示されます。 グラデーションマップを設定します。グラデーションマップの仕様は以下の通りです。
| ||
| Intensity |
エミッションの強さを設定します。 | ||
Transparency
Transparencyは透明度を調整できます。

Transparency
| プロパティ名 | 説明 | ||
| Rim |
チェックをつけるとリムを透過できます。 | ||
| Progress |
透過の進行度合いを設定します。 | ||
| Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
| Inverse |
透過範囲を逆転させます。 | ||
| Luminance |
チェックをつけると輝度が小さい部分を透過させます。 | ||
| Progress |
透過の進行度合いを設定します。 | ||
| Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
| Inverse |
透過範囲を逆転させます。 | ||
| Sort Particles |
チェックをつけるとソフトパーティクルを有効にします。 | ||
| Intensity |
この値が大きいほど、透過する範囲が大きくなります。 | ||
| Depth Fade |
カメラに近い部分と遠い部分を透過させます。 | ||
| Distance |
透過する範囲を設定します。 | ||
| Width |
透過し始めてから完全に透過するまでの距離です。 | ||
Uber Litシェーダー
Uber LitシェーダーはUnityのPBRライティングの仕様に準拠したライティングが反映される多機能シェーダーです。メッシュエフェクトなどのライティングの影響を受けたいパーティクルにはこのシェーダーを使用します。
Uber Litシェーダーを使用するには、マテリアルにNova/Particles/UberLitシェーダーをアサインします。
Uber LitシェーダーはUber Unlitシェーダーにライティングのための処理とプロパティを追加したシェーダーです。
追加されたプロパティの説明は以下の通りです。
Render Settings
Render Settingsには以下の赤枠で囲まれたプロパティが追加されています。

Render Settings
| プロパティ名 | 説明 | ||
| Work Flow Mode |
PBRライティングのワークフローを指定できます。
| ||
| Receive Shadows |
チェックをつけるとディレクショナルライトによる影を落とすことができます。 | ||
| Specular Highlights |
チェックをつけるとスペキュラハイライトが有効になります。 | ||
| Environment Reflections |
チェックをつけるとReflection ProbeやSkyboxによる環境光の影響を受けるようになります。 | ||
Surface Maps
ライティングのために必要なサーフェイスに関する各種情報の設定が追加されています。

Surface Maps
| プロパティ名 | 説明 | ||
| Normal Map |
法線マップを設定します。法線マップの仕様は以下の通りです。
https://docs.unity3d.com/ja/2021.3/Manual/StandardShaderMaterialParameterNormalMap.html | ||
| Metallic Map |
Work Flow ModeにMetallicを設定すると表示されます。
メタリックマップを設定します。メタリックマップの仕様は以下の通りです。
https://docs.unity3d.com/ja/2018.4/Manual/StandardShaderMaterialParameterMetallic.html | ||
| Specular Map |
Work Flow ModeにSpecularを設定すると表示されます。
スペキュラマップを設定します。スペキュラマップの仕様は以下の通りです。
https://docs.unity3d.com/ja/2018.4/Manual/StandardShaderMaterialParameterSpecular.html | ||
| Smoothness Map |
スムースネスマップを設定します。スムースネスマップの仕様は以下の通りです。
| ||
Distortionシェーダ
Distortionは画面に対して歪み効果をかけるためのシェーダです。
熱波など、歪み効果が必要なエフェクトにはこのシェーダを使用します。
Distortionシェーダを使用するには、マテリアルに Nova/Particles/Distortion シェーダをアサインします。
Inspectorから設定可能な各プロパティの説明は以下の通りです。
Render Settings
Render Settingsではマテリアルの描画方法を制御できます。

Render Settings
| プロパティ名 | 説明 | ||
| Render Face |
描画する面を以下の選択肢から指定できます。
| ||
| ZTest |
ZTestを設定できます。
| ||
Distortion
Distortionでは歪ませ方を設定できます。

Distortion
| プロパティ名 | 説明 | ||
| Texture |
ディストーションマップを設定します。ディストーションマップの仕様は以下の通りです。
| ||
| Intensity Mode |
歪み強度の制御方法を指定します。
| ||
| Intensity |
Intensity Mode が Single の場合にのみ表示されます。 歪みの強さを設定します。 | ||
| Intensity X / Intensity Y |
Intensity Mode が XY の場合にのみ表示されます。 各軸の歪み強度を個別に設定します。 | ||
| Rotation |
ディストーションマップの回転度合いを設定します。 | ||
| Offset |
ディストーションマップを回転する際の中心座標のオフセットです。 | ||
| Mirror Sampling |
チェックをつけるとテクスチャがミラーサンプリングされます。 | ||
| Use As Normal Map |
チェックをつけるとTexture TypeをNormal Mapとみなし、Unpackしてサンプリングされます。 | ||
Flow Mapping
Flow Mapを使うとディストーションマップを指定した方向に歪ませることができます。

Flow Map
| プロパティ名 | 説明 | ||
| Texture |
フローマップを設定します。フローマップの仕様は以下の通りです。
| ||
| Rotation |
フローマップの回転度合いを設定します。 | ||
| Offset |
フローマップを回転する際の中心座標のオフセットです。 | ||
| Intensity |
フローマップを適用する際の強度を設定します。 | ||
Alpha Transition
Alpha Transitionは徐々に消えていく表現に使用します。

Alpha Transition
| プロパティ名 | 説明 | ||
| Mode |
アルファトランジションのモードを以下の選択肢から指定できます。
| ||
| Texture |
アルファトランジションマップを設定します。アルファトランジションマップの仕様は以下の通りです。
色ではなく値としてテクスチャを使うので、テクスチャ設定のsRGB Colorのチェックを外す必要がある点に注意してください。 | ||
| Rotation |
アルファトランジションマップの回転度合いを設定します。 | ||
| Offset |
アルファトランジションマップを回転する際の中心座標のオフセットです。 | ||
| Progress |
トランジションの進行度を設定します。 | ||
| Edge Sharpness |
ModeをDissolveに設定した時のみ表示されます。 エッジの鋭さを設定します。 | ||
Transparency
Transparencyは透明度を調整できます。

Transparency
| プロパティ名 | 説明 | ||
| Rim |
チェックをつけるとリムを透過できます。 | ||
| Progress |
透過の進行度合いを設定します。 | ||
| Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
| Inverse |
透過範囲を逆転させます。 | ||
| Luminance |
チェックをつけると輝度が小さい部分を透過させます。 | ||
| Progress |
透過の進行度合いを設定します。 | ||
| Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
| Inverse |
透過範囲を逆転させます。 | ||
| Sort Particles |
チェックをつけるとソフトパーティクルを有効にします。 | ||
| Intensity |
この値が大きいほど、透過する範囲が大きくなります。 | ||
| Depth Fade |
カメラに近い部分と遠い部分を透過させます。 | ||
| Distance |
透過する範囲を設定します。 | ||
| Width |
透過し始めてから完全に透過するまでの距離です。 | ||
Uber Unlit/Litシェーダ( for uGUI )
Uber Unlit/LitシェーダにはuGUI用のシェーダーが用意されています。uGUI上でエフェクトを再生したい場合は、Nova/UIParticles/UberUnlitかNova/UIParticles/UberLitを利用してください。
マテリアルインスペクタで設定できる項目は基本的に通常のUberUnlitとUberLitと同様ですが、Custom Vertex Streamsと連携する際はzとwの要素を利用できないことに注意してください。
これはuGUIの内部でzとwのデータが破棄されているためです。
zとwが利用されている場合は次の図のようにエラーが表示されます。

Custom Vertex Error
また、Custom Vertex Streamsとの連携を利用する場合はCanvasのAdditional Shader ChannelsにTexCoord1とTexCoord2を追加してください。

Additional Shader Channels
影を落とす機能について
Shadow Caster機能を有効にするとNovaShaderから影を落とすことができるようになります

Shadow Caster
| プロパティ名 | 説明 | ||
| Enable |
チェックをつけるとShadowCasterPassが有効になります | ||
| Apply Vertex Deformation |
チェックをつけると影投射の計算にVertex Deformationが反映されます。 | ||
| Alpha Test Enable |
チェックをつけると影投射の計算にAlpha Testが有効になり、通らないところは影を落とさなくなります | ||
| Cutoff |
Alpha値がCutoff値以下の部分は影を落とさなくなります(描画処理のCutoffと別の値になります) | ||
| Alpha Affected By |
影投射計算中Alpha値に反映する項目 | ||
| Tint Color |
チェックをつけると、Tint ColorがAlpha値に反映されます | ||
| FlowMap |
チェックをつけると、Flow MapがAlpha値に反映されます | ||
| Alpha Transition Map |
チェックをつけると、Alpha Transition MapがAlpha値に反映されます | ||
| Transparency Luminance |
チェックをつけると、Transparency LuminanceがAlpha値に反映されます | ||

Shadow Caster Demo
Custom Vertex Streamsとの連携
Particle SystemのCustom Vertex Streamsを使うと、マテリアルのプロパティを自由にアニメーションさせることができます。
シェーダーは通常の頂点ストリームと、トレイル頂点ストリームの両方をサポートしています。
以下では例として、Custom Vertex Streamsを使ってテクスチャを回転させる手順を説明します。
Custom Dataを設定
まずParticle SystemのCustom Dataを設定します。
今回は以下のように、Custom1のXに0から始まり時間経過とともに1に移り変わる値を設定しました。

Custom Data
Custom Vertex Streamsを設定する
次にCustom Vertex Streamsを下図のように設定し、Custom1.xをTEXCOORD1.xに渡します。

Custom Vertex Streams
マテリアルプロパティを設定する
次にマテリアルプロパティを設定します。
今回はTEXCOORD1.xに渡された値をRotationとして設定したいため、下図のようにCOORD 1Xを選択します。

Coord
これでテクスチャが回転するようになりました。

Rotation
Mesh GPU Instancingを使う
Particle System Mesh GPU Instancingを使うと、パーティクルを効率的に描画できます。
以下では本シェーダを使ったマテリアルに対してMesh GPU Instancingを有効化する手順について説明します。
Note
PreviewRenderUtilityを利用したプレビュー画面上でパーティクルを表示する場合、Enable Mesh GPU Instancingが有効に設定されていると正常に描画されないUnity側の不具合を確認しています。
Mesh GPU Instancingを有効化する
Mesh GPU Instancingを使うにはRendererモジュールのRender ModeをMeshにする必要があります。
またその上でEnable Mesh GPU Instancingにチェックを入れます。

Enable Mesh GPU Instancing
Custom Vertex Streamsを設定する
次にCustom Vertex Streamsを下図のように設定します。

Custom Vertex Streams
Custom Dataの部分はNoiseなど他のモジュールの値を入れても問題ありませんが、
必ずINSTANCED1.xyzwとINSTANCED2.xyzwの全てが過不足なく埋まるように設定してください。
以上でMesh GPU Instancingの設定は完了です。
Custom Vertex Streamsを自動的に設定する
ここまでCustom Vertex Streamsを手動で設定するいくつかのケースを見てきました。
これ以外にもGPUが求めている頂点ストリームは各種設定によって変わっていきます。
この頂点ストリームを自動的に設定する機能Fix Nowがあります。自動設定機能は通常のパーティクルシステムとトレイル頂点ストリームの両方をサポートしています。
Fix Now
GPUが求めている頂点ストリームとの差異が生じている時に、
マテリアルインスペクターの下部にエラーメッセージとエラーを修正するためのボタンが表示されています。
この時、このボタンを押すことで、必要とされている典型的な頂点ストリームが自動的に設定されます。この機能はsharedMaterialとtrailMaterialの両方の設定に対応し、必要なすべての頂点ストリームが適切に構成されることを保証します。

Fix Now
カスタム頂点アトリビュートの設定に詳しくない場合は、
不要なエラーを避けるためにFix Nowを利用してエラーを修正することを推奨します。
不要なパラメータ参照を削除する
エフェクト制作での試行錯誤の過程で、実際には利用しないパラメータの参照が残ってしまう場合があります。
(例:Base MapのModeをSingle Textureに指定しているが、Flip Bookの場合のTexture 2D Arrayが指定されている)
不要なテクスチャ参照が残っている場合Asset Bundleの容量の増大を始めとした不都合が生じるため、解消することが望ましいです。
この不要な参照を削除するための機能RemoveUnusedReferencesがあります。
Projectビュー上でマテリアルを選択した状態でTools > NOVA Shader > RemoveUnusedReferencesから実行することができます。
削除された参照があった場合はConsoleに出力されます。
最適化シェーダーの利用によるメモリ使用量の削減
Uber Unlit/Lit シェーダーは多機能な汎用シェーダーであり、多数のシェーダーキーワードが定義されています。このため、キーワードの組み合わせによるバリアントの爆発が起こる可能性があります。
また、Depth Only パス、Depth Normals パス、Shadow Caster パスなど、プロジェクトによっては不要なシェーダーパスが含まれてしまうことがあります。
こうした要因により、Uber シェーダーのメモリ使用量が増大するケースがあります。
Nova Shader では、この問題を解消するために、使用していないシェーダーキーワードとパスを削除した最適化シェーダーの生成および適用を行う以下のエディタAPIを提供しています。
| API | 説明 |
|---|---|
| OptimizedShaderGenerator.Generate() | 最適化シェーダーを生成 |
| OptimizedShaderGenerator.Replace() | 最適化シェーダーに差し替え |
これらのAPIを活用してシェーダーを最適化することで、メモリ使用量を最大50%削減できることを確認しています。
OptimizedShaderGenerator.Generate()
Uberシェーダーから最適化シェーダーを生成します。生成されるシェーダーはレンダリングタイプと使用されるシェーダーパスの組み合わせによって次のように生成されます。
なお、APIの利用方法の詳細については、APIリファレンスのOptimizedShaderGeneratorを参照してください。

最適化シェーダー
OptimizedShaderGenerator.Replace()
Uberシェーダーが割り当てられているマテリアルのレンダリングタイプとシェーダーパスの設定に応じて適切な最適化シェーダーに差し替えます。このAPIを利用する場合はOptimizedShaderGenerator.Generate()を利用して最適化シェーダーを生成する必要があります。
なお、APIの利用方法の詳細についてはAPIリファレンスのOptimizedShaderReplacerを参照してください。
サンプルコード
APIを利用するサンプルとしてShaderOptimizeSample.csを用意しているので、こちらも参照してください。
Editor APIs リファレンス
ライセンス
本ソフトウェアはMITライセンスで公開しています。
ライセンスの範囲内で自由に使っていただけますが、使用の際は以下の著作権表示とライセンス表示が必須となります。
また、本ドキュメントの目次は以下のソフトウェアを使用して作成されています。
toc-generatorのライセンスの詳細は Third Party Notices.md を参照してください。