【Unity】NovaShaderカスタムした話

1.1K Views

October 20, 24

スライド概要

2024年10月に新横浜インディゲームもくもく会でLTした資料です。

profile-image

フリーランスのTAです。 主にもくもく会でのLT資料などをアップロードしたいと思います。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

NovaShaderをカスタマイズした話 おかひろ

2.

自己紹介  おかひろ  Twitter:@okahiro_p  個人で東方二次創作ゲーム作っています  フリーランスのTA/グラフィックエンジニア  個人のゲームでもShaderやツール作成しまくって進捗悪い

3.

NovaShaderとは  UnityのParticleSystem(Shuriken)向け多機能Shader  CyberAgentが開発  MITライセンス  HLSLでかかれている  URP用

4.

NovaShaderの機能例  SoftParticle  パーティクルのビルボードが地面など他のオブジェクトにめり込む場合の表現 SoftParticleなし SoftParticleあり

5.

NovaShaderの機能例  DepthFade  パーティクルのビルボードがカメラのNearClipより手前にくる場合の表現 DepthFadeなし DepthFadeあり

6.

NovaShaderの機能例  Dissolve + Emission (Edge)

7.

Distortion(歪み)  NovaShaderのDistortionは半透明オブジェクトも歪ませることができる  よく見かけるDistortionShaderの紹介記事は、半透明オブジェクト未対応のも のが多いので考慮が必要

8.

よくあるDistortion  “Unity Distortion”などで検索してヒットしたページを参考に作成した Distortion Shader ScreenPositionとSceneColorを使う例のやつ

9.

半透明オブジェクトが・・・

10.

なぜ?  SceneColorノードは”_CameraOpaqueTexture”をとっているが、これは不透明 オブジェクト描画の結果なので、半透明オブジェクトはまだ描画されていない ため ShadowMap計算など ここで不透明オブジェクト描画して、 その結果を”_CameraOpaqueTexture”バッ ファに格納している 不透明オブジェクト描画 半透明オブジェクト描画 ポストエフェクトなど ※ざっくり描画パイプライン 半透明オブジェクト描画 (パーティクルなど) ”_CameraOpaqueTexture”を使って歪みオブ ジェクト描画

11.

NovaShaderのDistortion  半透明オブジェクトも歪ませることができる

12.

仕組み(ざっくり)  “_CameraOpaqueTexture”は使わず、半透明オブジェクト描画結果と「どのぐ らい歪ませるかバッファ」をもとに歪ませる ShadowMap計算など 不透明オブジェクト描画 半透明オブジェクト描画 ここで不透明オブジェクト描画して、 その結果を”_CameraOpaqueTexture”バッ ファに格納している _CameraOpaqueTextureは使わない 半透明オブジェクト描画 (パーティクルなど) 歪みオブジェクトでどのぐらい歪ませるか (x,y)を専用バッファに描画 どのぐらい歪ませるかバッファ ポストエフェクトなど 半透明描画も終わった描画結果と、どこを どのぐらい歪ませるかバッファをあわせて 描画 ※ざっくり描画パイプライン 半透明込み描画結果

13.

すごいぞNovaShader  でもいくつか気になる点がある

14.

気になる点1  歪ませる箇所とそうでない箇所の境目がパッキリしている

15.

Distortionでは頂点アルファが効かない パーティクル用Shader Distortion用Shader Meshは端の部分に頂点アルファを乗せて作ってある パーティクル用Shaderには”Vertex Alpha Mode”があるのに、Distortion用 Shaderにはない!

16.

カスタマイズ1  “どのぐらい歪ませるか”の値に頂点アルファをかけることで、Meshの端に向か うにつれて歪みを弱くする カスタムDistortionShader

17.

気になる点2  歪ませる箇所とそうでない箇所の境目がパッキリしている(パート2)  球体Meshなど、頂点アルファを使えない場合

18.

DistortionではRimが効かない パーティクル用Shader Distortion用Shader パーティクル用Shaderには”Rim”があるのに、Distortion用Shaderにはない! ※SoftParticlesやDepthFadeはあるのになぜ

19.

カスタマイズ2  視線方向と法線の内積が0に近づくほど歪みを弱める カスタムDistortionShader

20.

まとめ  NovaShaderは超便利  Distortionはちょっと気になる点がある  頂点カラーのAlpha  Rim  カスタマイズすれば対応可能

21.

ご清聴ありがとうございました