ドキュメント (English, 日本語) | サンプル (English, 日本語) | デモ (English, 日本語)
NOVA ShaderはUnityのUniversal Render Pipeline (URP)に対応した、Particle Systemのための多機能シェーダです。
ビジュアルエフェクト制作でよく使われる汎用的な機能をまとめているので、効率的に高品質なエフェクトを作成できます。
Author: @Ugokashiya
特徴的な機能としてはフローマップ、Flip-Book(連番テクスチャアニメーション)、ディゾルブ、フェード、回転、アニメーション可能なTintマップ、エミッション、ディストーションなどがあります。
詳細については以下のドキュメントやサンプル、デモを参照してください。
詳細
本ライブラリは以下の環境に対応しています。
- Unity 2021.3 以上
- 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": "..."
}
}
}
まず、Distortion を掛けるための Renderer Feature を設定します。
URP の ForwardRendererData アセットのインスペクタ最下部から、Add Renderer Feature > Screen Space Distortion を選択します。
下図のように Screen Space Distortion が追加されていることを確認します。
Note
なお Distortion シェーダを使用しない場合には Renderer Feature を設定する必要はありません。
次に Soft Particles や Depth Fade といった機能に使用するため Depth Texture を有効化します。
UniversalRenderPipelineAsset のインスペクタから Depth Texture にチェックを入れます。
Depth Texture の設定は各 Camera にもあるので、こちらも必要に応じて設定します。
Note
なお Soft Particles や Depth Fade を使わない場合にはこの設定は必要ありません。
ここまでの設定が完了したら、NOVAシェーダが設定されたマテリアルを作成します。
任意のマテリアルを作成し、シェーダに Nova/Particles/UberUnlit を設定します。
Base Map には適当なテクスチャをアサインしておきます。
Particle System を作成してこのマテリアルをアサインすると、指定したテクスチャのパーティクルが表示されることを確認できます。
その他各シェーダ、各機能の詳細については以下にまとめます。
Uber Unlitシェーダはライティングが反映されない多機能シェーダです。 発光するエフェクトなど、ライティングが不要なパーティクルにはこのシェーダを使用します。
Uber Unlitシェーダを使用するには、マテリアルに Nova/Particles/UberUnlit
シェーダをアサインします。
Inspectorから設定可能な各プロパティの説明は以下の通りです。
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では頂点の変形を制御できます。
プロパティ名 | 説明 | ||
Texture |
頂点変形マップを設定します。頂点変形マップの仕様は以下の通りです。
| ||
Intensity |
頂点変形を適用する際の強度を設定します。 |
Base Mapでは色のベースとなるテクスチャを制御できます。
プロパティ名 | 説明 | ||
Mode |
ベースマップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
Texture |
ベースマップを設定します。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。 | ||
Rotation |
ベースマップの回転度合いを設定します。 | ||
Offset |
ベースマップを回転する際の中心座標のオフセットです。 | ||
Mirror Sampling |
チェックをつけるとテクスチャがミラーサンプリングされます。 | ||
Flip-Book Progress |
ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 Flip-BookあるいはFlip-Book Blendingの進行度を設定します。 |
Tint Colorでは乗算色を指定できます。
プロパティ名 | 説明 | ||
Mode |
乗算色の適用範囲を以下の選択肢から指定できます。
| ||
Progress |
ModeをRimに設定した時のみ表示されます。
リムの範囲を設定します。 | ||
Sharpness |
ModeをRimに設定した時のみ表示されます。 この値が大きいほどリムのエッジが鋭くなります。 | ||
Inverse |
ModeをRimに設定した時のみ表示されます。 リムの範囲を逆転させます。 | ||
Color Mode |
乗算色の指定方法を以下の選択肢から指定できます。
| ||
Color |
Color ModeをSingle Colorに設定した時のみ表示されます。 乗算色を指定します。 | ||
Texture |
Color ModeをTexture 2DあるいはTexture 3Dに設定した時のみ表示されます。 乗算色を表すテクスチャを設定します。 | ||
Progress |
Color ModeをTexture 3Dに設定した時のみ表示されます。 3Dテクスチャで指定した乗算色の進行度合いです。 | ||
Blend Rate |
乗算色の適用率です。 |
Flow Mapを使うとベースマップを指定した方向に歪ませることができます。
プロパティ名 | 説明 | ||
Texture |
フローマップを設定します。フローマップの仕様は以下の通りです。
| ||
Intensity |
フローマップを適用する際の強度を設定します。 | ||
Targets |
フローマップを適用する対象を設定します(複数選択可能)。
|
Parallax Mapを使うと視差効果が出せます
プロパティ名 | 説明 | ||
Mode |
視差マップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
Texture |
視差マップを設定します。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。
| ||
Strength |
視差マップを適用する際の強度を設定します。 | ||
Targets |
視差マップを適用する対象を設定します(複数選択可能)。
|
Color Correctionはここまでの色を補正します。
プロパティ名 | 説明 | ||
Mode |
色調補正のモードを以下の選択肢から指定できます。
| ||
Texture |
ModeをGradient Mapに設定した時のみ表示されます。 グラデーションマップを設定します。グラデーションマップの仕様は以下の通りです。
|
Alpha Transitionは徐々に消えていく表現に使用します。
プロパティ名 | 説明 | ||
Mode |
アルファトランジションのモードを以下の選択肢から指定できます。
| ||
Map Mode |
アルファトランジションマップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
Texture |
アルファトランジションマップを設定します。アルファトランジションマップの仕様は以下の通りです。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。 また色ではなく値としてテクスチャを使うので、テクスチャ設定のsRGB Colorのチェックを外す必要がある点に注意してください。 | ||
Flip-Book Progress |
Map ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 Flip-BookあるいはFlip-Book Blendingの進行度を設定します。 | ||
Transition Progress |
トランジションの進行度を設定します。 | ||
2nd Texture Blend Mode |
2枚目のテクスチャの合成方法を以下の選択肢から指定できます。
| ||
Edge Sharpness |
ModeをDissolveに設定した時のみ表示されます。 エッジの鋭さを設定します。 |
Emissionは発光する表現のために使用します。
プロパティ名 | 説明 | ||
Mode |
エミッションのモードを以下の選択肢から指定できます。
| ||
Map Mode |
ModeをBy Textureに設定した時のみ表示されます。 エミッションマップのモードを以下の選択肢から指定できます。
選択したモードによってテクスチャの型が変わります。 | ||
Texture |
ModeをBy Textureに設定した時のみ表示されます。 エミッションマップを設定します。エミッションマップの仕様は以下の通りです。
ModeにFlip Bookを指定した場合には、Texture2DArrayを設定する必要があります。 また色ではなく値としてテクスチャを使うので、テクスチャ設定のsRGB Colorのチェックを外す必要がある点に注意してください。 | ||
Flip-Book Progress |
ModeをBy Textureに設定し、Map ModeをFlip BookあるいはFlip Book Blendingに設定した時のみ表示されます。 Flip-BookあるいはFlip-Book Blendingの進行度を設定します。 | ||
Color Type |
エミッションの色を以下の選択肢から指定できます。
| ||
Color |
Color TypeをColorに設定した時のみ表示されます。 エミッションの色をHDRカラーで指定します。 | ||
Keep Edge Transparency |
ModeをEdgeに設定した時のみ表示されます。 チェックをつけると、エッジが透過しなくなります。 | ||
Gradient Map |
Color TypeをGradient Mapに設定した時のみ表示されます。 グラデーションマップを設定します。グラデーションマップの仕様は以下の通りです。
| ||
Intensity |
エミッションの強さを設定します。 |
Transparencyは透明度を調整できます。
プロパティ名 | 説明 | ||
Rim |
チェックをつけるとリムを透過できます。 | ||
Progress |
透過の進行度合いを設定します。 | ||
Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
Inverse |
透過範囲を逆転させます。 | ||
Luminance |
チェックをつけると輝度が小さい部分を透過させます。 | ||
Progress |
透過の進行度合いを設定します。 | ||
Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
Inverse |
透過範囲を逆転させます。 | ||
Sort Particles |
チェックをつけるとソフトパーティクルを有効にします。 | ||
Intensity |
この値が大きいほど、透過する範囲が大きくなります。 | ||
Depth Fade |
カメラに近い部分と遠い部分を透過させます。 | ||
Distance |
透過する範囲を設定します。 | ||
Width |
透過し始めてから完全に透過するまでの距離です。 |
Uber LitシェーダーはUnityのPBRライティングの仕様に準拠したライティングが反映される多機能シェーダーです。メッシュエフェクトなどのライティングの影響を受けたいパーティクルにはこのシェーダーを使用します。
Uber Litシェーダーを使用するには、マテリアルにNova/Particles/UberLit
シェーダーをアサインします。
Uber LitシェーダーはUber Unlitシェーダーにライティングのための処理とプロパティを追加したシェーダーです。
追加されたプロパティの説明は以下の通りです。
Render Settingsには以下の赤枠で囲まれたプロパティが追加されています。
プロパティ名 | 説明 | ||
Work Flow Mode |
PBRライティングのワークフローを指定できます。
| ||
Receive Shadows |
チェックをつけるとディレクショナルライトによる影を落とすことができます。 | ||
Specular Highlights |
チェックをつけるとスペキュラハイライトが有効になります。 | ||
Environment Reflections |
チェックをつけるとReflection ProbeやSkyboxによる環境光の影響を受けるようになります。 |
ライティングのために必要なサーフェイスに関する各種情報の設定が追加されています。
プロパティ名 | 説明 | ||
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シェーダを使用するには、マテリアルに Nova/Particles/Distortion
シェーダをアサインします。
Inspectorから設定可能な各プロパティの説明は以下の通りです。
Render Settingsではマテリアルの描画方法を制御できます。
プロパティ名 | 説明 | ||
Render Face |
描画する面を以下の選択肢から指定できます。
| ||
ZTest |
ZTestを設定できます。
|
Distortionでは歪ませ方を設定できます。
プロパティ名 | 説明 | ||
Texture |
ディストーションマップを設定します。ディストーションマップの仕様は以下の通りです。
| ||
Intensity |
歪みの強さを設定します。 | ||
Rotation |
ディストーションマップの回転度合いを設定します。 | ||
Offset |
ディストーションマップを回転する際の中心座標のオフセットです。 | ||
Mirror Sampling |
チェックをつけるとテクスチャがミラーサンプリングされます。 |
Flow Mapを使うとディストーションマップを指定した方向に歪ませることができます。
プロパティ名 | 説明 | ||
Texture |
フローマップを設定します。フローマップの仕様は以下の通りです。
| ||
Intensity |
フローマップを適用する際の強度を設定します。 |
Alpha Transitionは徐々に消えていく表現に使用します。
プロパティ名 | 説明 | ||
Mode |
アルファトランジションのモードを以下の選択肢から指定できます。
| ||
Texture |
アルファトランジションマップを設定します。アルファトランジションマップの仕様は以下の通りです。
色ではなく値としてテクスチャを使うので、テクスチャ設定のsRGB Colorのチェックを外す必要がある点に注意してください。 | ||
Progress |
トランジションの進行度を設定します。 | ||
Edge Sharpness |
ModeをDissolveに設定した時のみ表示されます。 エッジの鋭さを設定します。 |
Transparencyは透明度を調整できます。
プロパティ名 | 説明 | ||
Rim |
チェックをつけるとリムを透過できます。 | ||
Progress |
透過の進行度合いを設定します。 | ||
Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
Inverse |
透過範囲を逆転させます。 | ||
Luminance |
チェックをつけると輝度が小さい部分を透過させます。 | ||
Progress |
透過の進行度合いを設定します。 | ||
Sharpness |
この値が大きいほど透過領域のエッジが鋭くなります。 | ||
Inverse |
透過範囲を逆転させます。 | ||
Sort Particles |
チェックをつけるとソフトパーティクルを有効にします。 | ||
Intensity |
この値が大きいほど、透過する範囲が大きくなります。 | ||
Depth Fade |
カメラに近い部分と遠い部分を透過させます。 | ||
Distance |
透過する範囲を設定します。 | ||
Width |
透過し始めてから完全に透過するまでの距離です。 |
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 Streamsとの連携を利用する場合はCanvasのAdditional Shader Channels
にTexCoord1とTexCoord2を追加してください。
Shadow Caster機能を有効にするとNovaShaderから影を落とすことができるようになります
プロパティ名 | 説明 | ||
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値に反映されます |
Particle SystemのCustom Vertex Streamsを使うと、マテリアルのプロパティを自由にアニメーションさせることができます。
以下では例として、Custom Vertex Streamsを使ってテクスチャを回転させる手順を説明します。
まずParticle SystemのCustom Dataを設定します。
今回は以下のように、Custom1のXに0から始まり時間経過とともに1に移り変わる値を設定しました。
次にCustom Vertex Streamsを下図のように設定し、Custom1.x
をTEXCOORD1.x
に渡します。
次にマテリアルプロパティを設定します。
今回はTEXCOORD1.x
に渡された値をRotation
として設定したいため、下図のようにCOORD 1X
を選択します。
これでテクスチャが回転するようになりました。
Particle System Mesh GPU Instancingを使うと、パーティクルを効率的に描画できます。
以下では本シェーダを使ったマテリアルに対してMesh GPU Instancing
を有効化する手順について説明します。
Note
PreviewRenderUtilityを利用したプレビュー画面上でパーティクルを表示する場合、Enable Mesh GPU Instancingが有効に設定されていると正常に描画されないUnity側の不具合を確認しています。
Mesh GPU Instancing
を使うにはRenderer
モジュールのRender Mode
をMeshにする必要があります。
またその上でEnable Mesh GPU Instancing
にチェックを入れます。
次にCustom Vertex Streamsを下図のように設定します。
Custom Data
の部分はNoiseなど他のモジュールの値を入れても問題ありませんが、
必ずINSTANCED1.xyzw
とINSTANCED2.xyzw
の全てが過不足なく埋まるように設定してください。
以上でMesh GPU Instancing
の設定は完了です。
ここまでCustom Vertex Streamsを手動で設定するいくつかのケースを見てきました。
これ以外にもGPUが求めている頂点ストリームは各種設定によって変わっていきます。
この頂点ストリームを自動的に設定する機能Fix Now
があります。
GPUが求めている頂点ストリームとの差異が生じている時に、
マテリアルインスペクターの下部にエラーメッセージとエラーを修正するためのボタンが表示されています。
この時、このボタンを押すことで、必要とされている典型的な頂点ストリームが自動的に設定されます。
カスタム頂点アトリビュートの設定に詳しくない場合は、
不要なエラーを避けるためにFix Now
を利用してエラーを修正することを推奨します。
本ソフトウェアはMITライセンスで公開しています。
ライセンスの範囲内で自由に使っていただけますが、使用の際は以下の著作権表示とライセンス表示が必須となります。
また、本ドキュメントの目次は以下のソフトウェアを使用して作成されています。
toc-generatorのライセンスの詳細は Third Party Notices.md を参照してください。