Advertisement

【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは

Unity Technologies Japan K.K.
Jan. 31, 2019
Advertisement

More Related Content

Slideshows for you(20)

Similar to 【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは(20)

Advertisement

More from Unity Technologies Japan K.K.(20)

Advertisement

【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは

  1. 軽量レンダーパイプライン
 Light Weight Renderer Pipeline
 …とは Tatsuhiko Yamamura @ Unity
  2. 今までと概ね同じ表現
  3. カスタムシェーダーで面白表現
  4. パイプラインをカスタマイズ
  5. One Plus 5T Galaxy S7 Galaxy S5 iPhone 6S 0 17.5 35 52.5 70 16.8 51.62 16.72 16.65 27.23 61.23 45.87 45.98 Unity Standard(ms) LWRP(ms) 1 Directional Light、 MSAA LWRP 2.0.4, Unity 2018.2b06 軽くて、早い
  6. LWRP …とは
  7. HDRP LWRPHigh-Definition-Render-Pipeline Lightweight-Render-Pipeline
  8. HDRP LWRPHigh-Definition-Render-Pipeline Lightweight-Render-Pipeline • モバイルやXR向け • 軽量・高速が優先 • PS4やハイエンドPC向け • 忠実度の高いビジュアル
  9. https://github.com/Unity-Technologies/ScriptableRenderPipeline/blob/master/com.unity.render-pipelines.lightweight/Documentation%7E/lwrp- builtin-feature-comparison.md 今までのレンダリングパイプラインと
 幾つかの機能が異なる
  10. LWRP 何が良いの? •パフォーマンスに良い • Light Weight Forward Renderer • Smartなシェーダー •カスタマイズが簡単に出来る • ゲーム独自のエフェクトを追加出来る • 不要な機能を削れる
  11. リニアカラーへ変更 Lightweight RP パッケージ導入 Lightweight RP Assetの作成 Lightweight RPを設定 シェーダーの差し替え 絵の調整 導入 手順
  12. Demo
  13. LWRP Built in
  14. エディターワークフローは殆ど変わらない
  15. 何が
 変わるのか
  16. LWRP Shader Lighting Single Path Forward SRP SRP Batcher ライト戦略 Shader Graph Shadow 絵作り Custom Path Frame 
 Debugger OSS GI scriptable shader variants stripping LWRP Lit カスタマイズ
  17. 1 Passで4個のライトを
 一括で描画 ライトの数だけ
 重ね塗り BuiltinLWRP Single Path Forward Rendering
  18. 範囲が重複しても
 まぁ大丈夫 Single Path Forward Rendering でも範囲が小さいライト を沢山置くと、
 チカチカするので注意
  19. •GIの表現は殆ど今まで通り • Realtime GIは非対応 • Progressive light mapper
 GPU accelerationは対応 •Mixed Lightは現状
 Subtractiveのみ • Unity 2019.1でBaked Indirectと
 Shadow Maskに対応予定(未実装) ライトマップのベイク
  20. Main Light Additional Light ライト戦略
  21. ライト戦略
  22. •LWRPはStandardShaderに は対応していない • 正確にはSRPがSurface Shaderを
 使用できない状態 •対応するShaderに差し替える • Update Project Materail To LightWeight Render Pipelineで、プロジェクト内のマテリアルを
 一気に更新 LWRPは対応シェーダーを要求
  23. • プロジェクトが使用しているシェーダーを、LWRP対応のシェーダーへ
 一気に差し替えるオプション • 個別(選択しているマテリアル一覧)を一括変更するオプションもある
  24. •自動差替は、
 特定の組み合わせで
 行われる •ココに無いものは
 差し替えられない https://github.com/Unity-Technologies/ScriptableRenderPipeline/blob/master/com.unity.render-pipelines.lightweight/ Documentation%7E/upgrading-your-shaders.md
  25. Standard ShaderLWRP/Lit Simple Lit Lit PBRではない 低スペック端末向け 要微調整 PBR 比較的重い(Simple Litと比較) フォトリアル表現向けLWRPは対応Shader
  26. 他のシェーダーはどうか? • SurfaceShaderを使用していなければ
 案外動く事も多い • Trash Dashデモはほとんど
 Unlitなので問題なく動作 • SpriteやUIも動作
  27. LWRP SRP HDRP Scriptable Render Pipeline Culling Generate Camera Data Generate Light Data Execute Renderer Single Path Forward LWRP Lit Shader Fine PrunedTile Lighting HDRP Lit Shader Layered Material others others SortingFiltering ビルトインパイプラインとは根本的に異なる
  28. 大は小を兼ねない事もある
  29. 好きな組み合わせで作っても良い
  30. SRP(&LWRP-HDRP)はオープンソース
  31. 2019.1 2019.2 2019.3 2019.4 2020.1 Unity 4.0 4.1 LWRP 4.2 5.0 4.0 4.0a 0.1 0.2 MyRP 0.3 0.4
  32. • SRPとは何か • SRPを活用すればどんな事 が出来るようになるのか • LWRPをカスタムする
 ポイント https://www.slideshare.net/UnityTechnologiesJapan/ gtmf2018scriptablerenderpipeline SRPを勉強する上で参考になる資料
  33. ビルトインパイプラインのバッチング Material A Material B Shader 1 Shader 1 Material B Shader 1 Material C Shader 2 1 Draw Call 1 Draw Call 1 Draw Call 1 Draw Call
  34. Material A Shader 1 Constant Buffer
 作成 Constant Buffer
 アップロード 描画を 発行 ビルトインパイプラインのバッチング
  35. 1 Draw Call ビルトインパイプラインのバッチング 1 Draw Call 1 Draw Call
  36. • フレーム毎にCPUで構築するのは
 コストが高く、Z精度も悪い • OpenGLES2以下では
 確かに有益だった
 (ES3以降は無くても良い) • Dynamic Batchingは
 3Dテンプレートでは既にOFF • 代わりにInstancingを使う ビルトインパイプラインのバッチング
  37. Material A Shader 1 SRPBatching C Buffer Cache Constant Buffer
 アップロード 描画を 発行
  38. For Each Material Constant Bufferを
 配列にコピー C Buffer 1 C Buffer 2 C Buffer 3 Linear Constant Buffer
 アップロード 描画 C Buffer 1 C Buffer 2 C Buffer 3 offsetでbufferを
 切り替えながら描画 SRPBatching 描画頻度を減らすのではなく、
 描画命令を安くするアイディア 同じShader Keyword の組み合わせでまとめる
  39. ノードが異なる
 シェーダキーワードを使用 バッチが途切れる理由 一括描画した
 オブジェクトの個数
  40. SRPBatching • PS4、DX11、 Metal、 Vulkanで動作
 (OpenGLESでは動作せず) • 全てのMaterial PropertyをUnityPerMaterialの
 CBUFFERの中に入れる必要あり。 • LWRP Shaderは特に何もしなくても良い
  41. UberShaderは柔軟だが膨らむ COLOR_ORANGEかつOP_ADDなシェーダー COLOR_ORANGEかつOP_MULなシェーダー COLOR_ORANGEかつOP_SUBなシェーダー COLOR_VIOLETかつOP_ADDなシェーダー COLOR_VIOLETかつOP_MULなシェーダー COLOR_VIOLETかつOP_SUBなシェーダー COLOR_GREENかつOP_ADDなシェーダー COLOR_GREENかつOP_MULなシェーダー COLOR_GREENかつOP_SUBなシェーダー COLOR_GRAYかつOP_ADDなシェーダー COLOR_GRAYかつOP_MULなシェーダー COLOR_GRAYかつOP_SUBなシェーダー
  42. Scriptable shader variant stripping • ゲームが使用しない
 ShaderのVariantの組み合わせを
 ストリップ(削除)する • アプリサイズとビルド時間短縮
 ついでにメモリに優しい
  43. Scriptable shader variant stripping • ストリップ条件 • 未使用なシェーダー • 未使用なパス • 無効な組み合わせ • 無効化された機能
  44. Scriptable shader variant stripping Player Data Shader Variant Count 0 8000 16000 24000 32000 7,156 31,080 Unstripped Stripped Player Data Size on disk 0 32.5 65 97.5 130 116 121 Player Build Time(sec) 0 225 450 675 900 286 839
  45. \おーーーい/
  46. パス自作
  47. パス自作
  48. Demo
  49. • パイプラインに新しくパスを追加 • 画面を解像度を下げてコピー • 描画結果を_GrabTextureとして参照できるように • シェーダーを用意 • _GrabTextureの結果を使って解像度の低い画面を描画 • 画像を反転もしてみた
  50. Grabに関しては、
 こんな事をしなくても
 _CameraDepthTextureと
 _CameraOpaqueTextureで
 テクスチャを取得出来る
  51. • Passを挿入出来る
 タイミング一覧
  52. • IRenderSetupで
 パイプラインをオーバーライド • LWRP自体を改造せず
 独自のパイプラインを構築
  53. LWRP…とは? • 広い端末で動作 • 高いカスタマイズ性 • モダンなレンダリング • 高速なシェーダー • 新しいバッチング • モバイルにフォーカス • 簡単に使える • 簡単に拡張できる
  54. おしまい
Advertisement