Amplify Shader Editorを使った
LWRP対応について
伊藤 和樹
プロフィール
2017年より前職にて
初内製の新規タイトルの開発に従事
システム周りをメインにAssetBundleなどを担当
今年7月より別の会社に転職
新規開発中タイトルのLWRP対応などを担当中
1
アジェンダ
• LWRP(Lightweight Render Pipeline)とは
• LWRPの導入
• ASE(Amplify Shader Editor)でLWRP対応シェーダを作るには
• ASEでLWRP対応のカスタムテンプレートを作成する
• 既存マテリアルのシェーダ差し替え
2
LWRPとは
• Unity 2018.1より利用可能となったScriptable Render Pipeline
そのレンダーパイプラインのテンプレートの1つ
• ライティングやシェーディングに制限をかけるかわり
従来のレンダーパイプラインよりパフォーマンスの最適化がされている
3
LWRPの導入
4
Unity 2018から追加されたPackage Managerから
インストールするよ
5
・Render-pipelines.lightweight
・Render Pipeline Core Library をインストールします
6
ポストエフェクトを利用する場合は
Post Processing v2をPackage Managerからインストールしましょう
7
Post Processingも最新のプレビュー入れとけば大丈夫だろう
8
と思ってた時期が僕にもありました、、、
パッケージのバージョン相性問題
素直に最新版を入れたらポストエフェクトを使ってるシーンのUIが楽しい事になった(Android/iOS 実
機)
9
Unity 2018.2番台の場合RenderPipeline CoreとLWRPのバージョンが3.0.0に対して、
Post Processing v2のバージョンを2.0.10にする事でバグは解消した
10
11
12
13
バージョン相性問題にはかなり手を焼いたので気をつけてください!
Amplify Shader EditorでLWRP対応シェーダを作るには
14
AmplifyShaderEditor/Plugins/EditorResources/Templates/SRP/LWSRPTemplat
es.unitypackage
1. 専用テンプレートのパッケージをインポートする
2. パッケージと同じディレクトリに移動する
以上!
一部ASEバージョンのLWRP対応テンプレートの注意点
一部のバージョンのLightweightUnlitテンプレートで
InputSurfaceUnlit.hlslをincludeしていますが、
_MainTex ・ _Colorがプロパティ名で使用出来なくなります。 (InputSurfaceUnlit側で予約されている為)
弊害としてuGUIのimageに設定された画像を_MainTexに自動で当てはめると言った使い方が
出来なくなるのでUI向けシェーダ使ってる際に問題が出ます。
15
解決法
• InputSurfaceUnlitのincludeを削除する
Amplify Shaderでシェーダを制作する際に使わない関数の集まりとなっているので、
削除しても問題ありません。(最新verのASEではシレッと削除されています)
16
さて、シェーダ作ろうか。
17
ん?LWRP対応のテンプレートがPBRとUnlitしかない
ぞ
18
ライティングを反映させたければPBR使わんとならん、、、
19
うわァァァァァァァァァ
何の為Lightweightなんだよぉぉぉぉ
20
という事で、テンプレート作りましょう
21
ASEでLWRP対応のカスタムテンプレートを作成する
22
AmplifyShaderEditor/Plugins/EditorResources/Templates
ここより下に作ればおk
PBRとUnlitのテンプレートをベースに改造してくと作りやすいと思います
23
Amplify Shaderのwiki
http://wiki.amplify.pt/index.php?title=Unity_Products:Amplify_Shader_Editor/Templates
ASEのカスタムノードを作成する
Scriptable Render PipelineではUnityCG.cgincが使えない為、
いくつかのノードが使えないので、対応したカスタムノードを作って対応します。
• 使用出来なくなるノード
Shade Vertex Light
PI
Blinn-Phong Lighting
Half Blinn-Phong Lighting
24
25
CommonInitとGenerateShaderForOutputをオーバーライドする事で作成可能
カスタムノードの実装例(LWRP対応Vertex Light)
既存マテリアルのシェーダ差し替え
手動だとヒューマンエラーも発生しやすいし
何より数が多いと死にます、
エディタ拡張しましょう。
26
27
Shader Util
https://docs.unity3d.com/ja/current/ScriptReference/ShaderUtil.html
まとめ
• LWRPとPost Processingにはバージョン間の相性問題があるぞ
• Amplify ShaderはCustom Template作って対応した方が良い
• 既存マテリアルへのシェーダ差し替えはエディタ拡張で行った方が良い
• シェーダ系のエディタ拡張を作る際はShaderUtilが便利
28
我々にはLWRPは早過ぎた。
29
うかつにプレビュー版の機能を取り入れるのはリスクが大きい
ご静聴ありがとうございました。
30

AmplifyShaderEditorを使ったLWRP対応について