Slide 1

Slide 1 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS © VISUAL ARTS/Key ヘブンバーンズレッドの レンダリングパイプライン刷新 株式会社 WFS 技術室 野⼝顕弘

Slide 2

Slide 2 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⽬次 ● アプローチ ● シェーダー移植 ● ライティング ○ ベイクドライティング ○ リフレクションプローブ ○ Physically Based Rendering ○ シャドウ ● 描画パス ○ 半透明とキャラクター ○ ポストプロセス ○ 複数カメラ ● アセットマイグレーション ● Quality Assurance 2

Slide 3

Slide 3 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⾃⼰紹介 野⼝顕弘(Akihiro Noguchi) 技術室 WFS シニアリードエンジニア 3

Slide 4

Slide 4 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ヘブンバーンズレッドとは ● 「ヘブンバーンズレッド」は、2022年にリリースされたライブサービス型ゲーム ● 対応機種:iOS/Android/Windows 4

Slide 5

Slide 5 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ヘブンバーンズレッドとは 5

Slide 6

Slide 6 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ヘブンバーンズレッドとは 6

Slide 7

Slide 7 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● Built-in Render Pipeline (Built-in) ○ 従来のパイプライン ○ イベントコールバックなどの API でグラフィックス機能を拡張 動機 7

Slide 8

Slide 8 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● Built-in Render Pipeline (Built-in) ○ 従来のパイプライン ○ イベントコールバックなどの API でグラフィックス機能を拡張 ● Universal Render Pipeline (URP) ○ 新しいパイプライン ○ Scriptable Render Pipeline ベース 動機 8

Slide 9

Slide 9 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● URP の機能が使いたい ○ SRP Batcher ○ Single Pass Forward Rendering 動機 9

Slide 10

Slide 10 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● URP の機能が使いたい ○ SRP Batcher ○ Single Pass Forward Rendering 動機 10

Slide 11

Slide 11 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● URP の機能が使いたい ○ SRP Batcher ○ Single Pass Forward Rendering ● URP プロジェクト間の技術共有 動機 11

Slide 12

Slide 12 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● URP の機能が使いたい ○ SRP Batcher ○ Single Pass Forward Rendering ● URP プロジェクト間の技術共有 ● 柔軟にカスタマイズできる描画パイプライン 動機 12

Slide 13

Slide 13 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 13 トライした結果、頓挫

Slide 14

Slide 14 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 頓挫の理由 ● URP に移⾏すると⾒た⽬が変化する ○ 運営チームの監修が必要 14

Slide 15

Slide 15 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 頓挫の理由 ● URP に移⾏すると⾒た⽬が変化する ○ 運営チームの監修が必要 ● 全コンテンツの監修と修正をするコストが⾼すぎる ○ 運営が⽌まってしまう 15

Slide 16

Slide 16 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⾒た⽬を変えなければ監修は不要 16

Slide 17

Slide 17 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key アセットを調整して⾒た⽬を合わせる ↓ プログラムを調整して⾒た⽬を合わせる 17

Slide 18

Slide 18 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 移⾏結果 Built-in URP 18

Slide 19

Slide 19 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● ライブサービス運営を⽌めない ⽬標まとめ 19

Slide 20

Slide 20 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⽬標まとめ ● ライブサービス運営を⽌めない ● 全く⾒た⽬を変えない 20

Slide 21

Slide 21 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⽬標まとめ ● ライブサービス運営を⽌めない ● 全く⾒た⽬を変えない ● Unity 本体のバージョンアップも同時に実施 ○ 2020.3.15f2 ➡ 2022.3.32f1 21

Slide 22

Slide 22 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 2 名 ● レンダリング担当1名(私) ● アセットパイプライン、UI、描画チェックなど担当1名 作業者 22

Slide 23

Slide 23 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● リリースまで9ヶ⽉ 期間 23

Slide 24

Slide 24 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● リリースまで9ヶ⽉ ● 運営チームのアウトプットとの並⾛ ○ ⻑引くと作業量が増える 期間 24

Slide 25

Slide 25 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key プロジェクト構成 バージョン管理 Git + LFS カラースペース ガンマ レンダリングパス フォワード ポストプロセス Post Processing Stack v2 (PPSv2) 25

Slide 26

Slide 26 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 作業前の状況 26

Slide 27

Slide 27 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 移植対象シェーダーのリストアップ ● 難易度の⾼い問題を先に解決し中盤以降は単純な物量勝負に持ち込む ● シェーダーのリストアップ、内容の精査 27

Slide 28

Slide 28 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 移植対象シェーダーのリストアップ ● シェーダーの統合、プロパティのデフォルト値の変更を検討 ○ 将来的なアセット制作の効率化も⾏う 28

Slide 29

Slide 29 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 移植対象シェーダーのリストアップ ● シェーダーは92種類 ● 他の作業と並⾏で移植が完了するまで7ヶ⽉ 29

Slide 30

Slide 30 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key シェーダーの種類 ● ⼿書きシェーダー ○ プログラマー向け ○ ShaderLab + Cg で記述 30

Slide 31

Slide 31 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key シェーダーの種類 ● ⼿書きシェーダー ○ プログラマー向け ○ ShaderLab + Cg で記述 ● Amplify Shader Editor (ASE) シェーダー ○ アーティスト向け ○ ノードベースのシェーダーエディター Amplify Shader Editor 31

Slide 32

Slide 32 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key URP では互換性が無いコードが多く、ASE に⼿動移植 ⼿書きシェーダーの移植 Code ASE 32

Slide 33

Slide 33 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⼿書きシェーダーの移植 ● シェーダーテンプレートの仕組みを利⽤することで移植作業を集約 ● アーティストがシェーダー開発を⾃律的に⾏えるようになる Code ASE 33

Slide 34

Slide 34 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⼿書きシェーダーの移植 ● URP 向けテンプレートをベースに本作特有のシェーダー再現機能を実装 ○ たとえばカスタム仕様のフォグ Code ASE 34

Slide 35

Slide 35 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⼿書きシェーダーの移植 ● URP 向けテンプレートをベースに本作特有のシェーダー再現機能を実装 ○ たとえばカスタム仕様のフォグ ● アーティストが扱いやすいようにカスタムノードの利⽤は最⼩限 Code ASE 35

Slide 36

Slide 36 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⼿書きシェーダーの移植 プロパティ順序を再現 36 Built-in URP

Slide 37

Slide 37 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ASE シェーダーの移植 ● テンプレートで描画差分を吸収しているため簡単 ● マスターノードの再接続とテンプレート設定の⼿動移植で対応 Built-in URP 37

Slide 38

Slide 38 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ASE シェーダーの移植 ● テンプレート設定の調査 ○ 各種設定の URP テンプレートでの再現⽅法を事前に確⽴ 38

Slide 39

Slide 39 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ASE シェーダーの移植 ● テンプレート設定の調査 ○ 各種設定の URP テンプレートでの再現⽅法を事前に確⽴ ● 考慮漏れがあり、後々描画差異が発⽣して⼿戻りが発⽣した 39

Slide 40

Slide 40 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key その法線、正規化されていますか? ● Built-in の ASE テンプレートはフラグメントの法線が正規化されて いなかった ● URP のテンプレートでは正規化されていた ● テンプレート挙動の理解が重要 40

Slide 41

Slide 41 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 作業の物量が多く、事前調査を⼊念にする価値が⾮常に⾼い ○ 調査不⾜による⼿戻りが多かった ● ASE のテンプレート修正に共通の再現処理を集約できた シェーダー移植まとめ 41

Slide 42

Slide 42 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● まずはゲーム全体で⼀番使われる汎⽤シェーダーを再現してテスト ● ここまで約3週間 ● 移植出来るのではないかという希望が⾒えてきた 汎⽤シェーダーの移植 *この時点ではポスプロ無し 42

Slide 43

Slide 43 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ベイクドライティング 43

Slide 44

Slide 44 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ベイクドライティング ● 間接光はライトマップ ● 静的オブジェクトの影はシャドウマスク No Baked GI With Baked GI Lightmap Shadowmask * ポスプロ無し 44

Slide 45

Slide 45 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 既存のシーンは完全に同じ⾒た⽬を保つ ● 新規制作するシーンは以前と同じ⾒た⽬を再現 ベイクドライティング No Baked GI With Baked GI Lightmap Shadowmask * ポスプロ無し 45

Slide 46

Slide 46 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライティングをベイクしなおした結果 全く同じ結果になれば問題ない 46

Slide 47

Slide 47 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライトマップのライト減衰 ● Unity 提供の C# API を⽤いて減衰式の設定変更を⾏う ● ドキュメントを参考に URP を改造 47

Slide 48

Slide 48 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● ライトマップ再ベイク時に暗くなった Meta パス Before After 48

Slide 49

Slide 49 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Meta パス ● 背景シェーダーは Meta パスが未定義、フォールバック挙動に変化 ○ 前環境:⽩⾊を出⼒ ○ 現環境:sRGB ミッドグレーを出⼒ 49 Before After

Slide 50

Slide 50 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Meta パス ● 背景シェーダーは Meta パスが未定義、フォールバック挙動に変化 ○ 前環境:⽩⾊を出⼒ ○ 現環境:sRGB ミッドグレーを出⼒ ● URP 版シェーダーの Meta パスを実装し、⽩⾊を出⼒ 50 Before After

Slide 51

Slide 51 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Meta パス ● 明るさがおおよそ⼀致 ● しかし所々⾒た⽬が違う箇所がある Before After 51

Slide 52

Slide 52 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Meta パス ● 明るさがおおよそ⼀致 ● しかしちらほら⾒た⽬が違う箇所がある ● Unity はバージョンによってライトマッパーの挙動が変わる 52 Before After

Slide 53

Slide 53 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key データ問題の発⾒ ● ベイクしたあとにシーンのライト設定が変更されたシーンを発⾒ ● ベイクし直すと⾒た⽬が変わってしまう 再ベイク前 再ベイク後 53

Slide 54

Slide 54 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ベイク結果を合わせる(Cast Shadow) ● Cast Shadow がオフになっているオブジェクトの影響が変化 ○ 設定がライトマップに影響を及ぼさなくなった ● 仕様かバグか、判断がつかない 54 再ベイク前 再ベイク後

Slide 55

Slide 55 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライトマップの状況整理 ● 新規シーン ○ ⾒た⽬をほぼ再現できるため問題はない 55

Slide 56

Slide 56 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライトマップの状況整理 ● 新規シーン ○ ⾒た⽬をほぼ再現できるため問題はない ● 既存シーン ○ ベイクしなおすと⾒た⽬が変わる ○ 監修が必要になるため、ベイクしなおすことが出来ない 56

Slide 57

Slide 57 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 古いベイク結果を再利⽤すれば 全く同じ結果になる 57

Slide 58

Slide 58 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライトマップ UV の問題 ● Unity の⾃動ライトマップ UV 展開機能を利⽤していたが、 バージョンアップにより展開結果が変化 ● 外部で展開したライトマップ UV と Unity の⾃動ライトマップ UV 展開が混在 58

Slide 59

Slide 59 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 旧エディターでインポートした結果を持ってくる 古いバージョンの UV を維持する 59

Slide 60

Slide 60 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 旧エディターでインポートした結果を持ってくる ● インポート結果の頂点数も変化するため、 メッシュ情報全てを持ってくる必要がある ○ 頂点座標 ○ UV ○ カラー ○ etc. 古いバージョンの UV を維持する 60

Slide 61

Slide 61 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key メッシュの再現 FBX OnPostprocessModel バイナリ出⼒ 旧エディター 61

Slide 62

Slide 62 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key メッシュの再現 FBX OnPostprocessModel バイナリ出⼒ FBX OnPostprocessModel Unity 新エディター 62 旧エディター

Slide 63

Slide 63 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 再現されたライトマップ UV 63

Slide 64

Slide 64 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key メッシュの再現(例外) FBX OnPostprocessModel バイナリ出⼒ FBX OnPostprocessModel Unity 新エディター 64 旧エディター ● リリース済み背景データの編集は禁⽌

Slide 65

Slide 65 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● リリース済み背景データの編集は禁⽌ ● しかし未リリース FBX は変更されることがある メッシュの再現(例外) FBX OnPostprocessModel バイナリ出⼒ FBX’ OnPostprocessModel 65 新エディター 旧エディター 変更!

Slide 66

Slide 66 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● FBX のチェックサムに変化があり、 ライトマップ UV が未展開の場合はエラーとする ● ライトマップ UV を Unity 外で制作してもらうように促す メッシュの再現(例外) FBX OnPostprocessModel バイナリ出⼒ FBX’ OnPostprocessModel 66 新エディター 旧エディター チェックサム不⼀致 → エラー 変更!

Slide 67

Slide 67 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライトマップまとめ ● Meta パスは明⽰的に実装したほうが安全 67

Slide 68

Slide 68 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ライトマップまとめ ● Meta パスは明⽰的に実装したほうが安全 ● ライトマップ UV を再現することで、ベイクしたライティングを維持 o Unity のバージョンが変わるとベイク結果は別物になる 68

Slide 69

Slide 69 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブ 69

Slide 70

Slide 70 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● リフレクションプローブを利⽤している ● ⼀部の室内シーンではボックスプロジェクションを採⽤している リフレクションプローブ 70

Slide 71

Slide 71 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブ ● ボックスプロジェクション設定の挙動が違う Built-in URP 71

Slide 72

Slide 72 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブ ● ボックスプロジェクション設定の挙動が違う ● リフレクションプローブの AABB 設定の反映⽅法が変化 72 Built-in URP

Slide 73

Slide 73 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ボックスプロジェクション AABB Reflection Probe AABB Object AABB 73

Slide 74

Slide 74 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ボックスプロジェクション AABB(URP) Reflection Probe AABB = Box Projection AABB Object AABB プローブに設定した AABB がそのまま採⽤ 74

Slide 75

Slide 75 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ボックスプロジェクション AABB(Built-in) Reflection Probe AABB Object AABB Box Projection AABB プローブの AABB と、オブジェクト⾃⾝の描画 AABB を内包する最⼩の AABB 75

Slide 76

Slide 76 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ボックスプロジェクション AABB Reflection Probe AABB Object 2 AABB Object 1 AABB 76

Slide 77

Slide 77 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ボックスプロジェクション AABB Reflection Probe AABB Object 2 AABB Object 1 AABB Box Projection AABB 1 Box Projection AABB 2 77

Slide 78

Slide 78 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブ ● データ修正で対応が出来ない ● シェーダーで対応する 78

Slide 79

Slide 79 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブ ● シェーダーで今描画しているオブジェクトの描画バウンドを取得 ● リフレクションプローブの AABB と描画バウンドの OR を取るように シェーダーで調整 float4 legacyBoxMin = float4(min(unity_SpecCube0_BoxMin.xyz, unity_RendererBounds_Min.xyz), unity_SpecCube0_BoxMin.w); float4 legacyBoxMax = float4(max(unity_SpecCube0_BoxMax.xyz, unity_RendererBounds_Max.xyz), unity_SpecCube0_BoxMax.w); reflectVector0 = BoxProjectedCubemapDirection(reflectVector, positionWS, unity_SpecCube0_ProbePosition, legacyBoxMin, legacyBoxMax); 79

Slide 80

Slide 80 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブ Built-in URP (Shader Fix) 80

Slide 81

Slide 81 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key リフレクションプローブまとめ ● ボックスプロジェクションを使っている場合は挙動が違うので注意 ● シェーダー側で対応が可能 81

Slide 82

Slide 82 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Physically Based Rendering 82

Slide 83

Slide 83 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画 ⼀部のオブジェクトは PBR で描画されていた 83 *左の遠くに⾒える氷が PBR

Slide 84

Slide 84 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画差異 Built-in URP 84

Slide 85

Slide 85 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画 ● Built-in ではプロジェクト設定により実装が変化 85

Slide 86

Slide 86 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画 ● Built-in ではプロジェクト設定により実装が変化 ● URP では PBR 実装が固定 86

Slide 87

Slide 87 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画 ● Built-in ではプロジェクト設定により実装が変化 ● URP では PBR 実装が固定 ● アーティスト確認環境での設定をリファレンスとする 87

Slide 88

Slide 88 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画 ● Built-in ではプロジェクト設定により実装が変化 ● URP では PBR 実装が固定 ● アーティスト確認環境での設定をリファレンスとする ● Standard Shader Quality = High 88

Slide 89

Slide 89 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Diffuse Built-in URP 89

Slide 90

Slide 90 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Diffuse Built-in (Burley Diffuse) URP (Lambert Diffuse) ● シェーダーを⽐較して実装⽅法の確認 ● Built-in では Burley Diffuse が採⽤ ● URP では Lambert が採⽤ ● Built-in の実装に寄せる 90

Slide 91

Slide 91 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Diffuse Built-in (Burley Diffuse) URP (Burley Diffuse) 91

Slide 92

Slide 92 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Diffuse ● Built-in ではカラースペースでライティング処理が変わる ● URP はリニアで処理 ● 例えば Built-in では⾮⾦属の F0の値の分岐(Linear: 0.04、Gamma: 0.22) ● カラースペースの分岐を URP に移植する Built-in (Burley Diffuse) URP (Burley Diffuse) 92

Slide 93

Slide 93 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Diffuse Built-in (Burley Diffuse) URP (Burley Diffuse + Gamma Fix) 93

Slide 94

Slide 94 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Specular 94 Built-in URP (Gamma Fix)

Slide 95

Slide 95 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Specular 95 スペキュラハイライトの⼤きさが違う Built-in URP (Gamma Fix)

Slide 96

Slide 96 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Specular *Renaldas Zioma, “Optimizing PBR for Mobile”, SIGGRAPH 2015 Built-in URP ● Built-in: GGX NDF + Smith Joint GGX ● URP: 独⾃の最適化された式* ● Built-in の実装に寄せる 96

Slide 97

Slide 97 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Specular Built-in URP (Final) 97

Slide 98

Slide 98 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR 描画調整後 Built-in URP 98

Slide 99

Slide 99 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポイントライト URP ではライトの減衰式が逆⼆乗に変更されている Built-in URP 99

Slide 100

Slide 100 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポイントライト ● Frame Debugger とシェーダーを確認、LUT で減衰値を求めている事が判明 Built-in URP Frame Debugger 100

Slide 101

Slide 101 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポイントライト ● Frame Debugger とシェーダーを確認、LUT で減衰値を求めている事が判明 ● Built-in と同⼀の減衰式になる LUT(16-bit)をサンプルして減衰値を取得 Built-in URP Frame Debugger 101

Slide 102

Slide 102 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポイントライト Built-in URP (Fixed) https://docs.unity3d.com/6000.0/Documentation/Manual/urp/lighting/custom-lighting-change-light-falloff.html 102

Slide 103

Slide 103 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key PBR まとめ ● PBR は Built-in でのプロジェクト設定次第でかなり差が出るので注意 ● URP のライティングは簡単に調整が可能 103

Slide 104

Slide 104 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key シャドウ 104

Slide 105

Slide 105 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● Close Fit Shadow Projection を採⽤していたが、URP は⾮対応 ● カメラ視野に対してより厳密にシャドウマップを作成できるため、 影の解像度確保に有利 Close Fit Shadow Projection Built-in (Close Fit) URP 105

Slide 106

Slide 106 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Close Fit Shadow Projection ● 影の距離設定が Close Fit 前提となっていた ● カスケードシャドウマップを利⽤すれば品質が上がり問題は根本解決する ○ 採⽤検討をする時間が⾜りなかった Built-in (Close Fit) URP (2 Cascades) 106

Slide 107

Slide 107 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 107 Close Fit を再現実装する

Slide 108

Slide 108 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Close Fit Shadow Projection の再現実装 1. カリング前に影の描画距離を Far Clip に設定 2. カリング後に CullingResults.GetShadowCasterBounds API を利⽤ して最⼤のシャドウキャスターバウンドを取得 3. 現在の最⼤影距離設定を考慮し、新しい影距離を計算 4. 新しい影距離でシャドウマップを描画 Built-in (Close Fit) URP (Close Fit) 108

Slide 109

Slide 109 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key シャドウまとめ ● プロジェクト設定によってはとても再現が⾯倒 ● Close Fit を採⽤している場合は注意が必要 ● 可能であればカスケードシャドウマップの採⽤を検討したほうが良い 109

Slide 110

Slide 110 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 半透明とキャラクター 110

Slide 111

Slide 111 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画構成 ● ほぼ全てが半透明描画 ○ Geometry キュー、Depth Write ON で描画 111

Slide 112

Slide 112 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画構成 ● ほぼ全てが半透明描画 ○ Geometry キュー、Depth Write ON で描画 ● アウトラインはマルチパス シェーダー(背⾯法) 112

Slide 113

Slide 113 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画構成 ● Sorting Group 機能でメッシュ 描画順を制御 113

Slide 114

Slide 114 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画構成 ● Sorting Group 機能でメッシュ 描画順を制御 ● マテリアルのレンダーキューでも 描画順制御 114

Slide 115

Slide 115 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key URP でのレンダーキュー問題 ● URP では Sorting Group が Geometry キューで動作しない ● Geometry キューは不透明オブジェクト⽤であるため、⾃然な仕様 ● 不透明背景 ● キャラクター ● キャラクターアウトライン (マルチパス) ● 半透明背景 ● エフェクト Geometry Transparent 115

Slide 116

Slide 116 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key URP での解決策 ● 半透明部分のキャラクター描画をすべて Transparent キューへ移⾏ ● 不透明背景 ● 半透明背景 ● エフェクト ● キャラクター ● キャラクターアウトライン (Renderer Feature) Geometry Transparent 116

Slide 117

Slide 117 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key URP での解決策 ● 半透明部分のキャラクター描画をすべて Transparent キューへ移⾏ ● マルチパスシェーダーの描画順序が変わってしまった ○ アウトラインを全キャラクター描画終了後のカスタムパスに移動 ● 不透明背景 ● 半透明背景 ● エフェクト ● キャラクター ● キャラクターアウトライン (Renderer Feature) Geometry Transparent 117

Slide 118

Slide 118 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Opaque Texture とキャラクター ● 半透明の描画順制御の影響で副作⽤が発⽣ 118

Slide 119

Slide 119 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Opaque Texture とキャラクター ● 半透明の描画順制御の影響で副作⽤が発⽣ ● Opaque Texture で再現が出来ない 119

Slide 120

Slide 120 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Opaque Texture とキャラクター Opaque Texture を使った描画に問題が発⽣ 120

Slide 121

Slide 121 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key URP の Opaque Texture 機能 不透明 画⾯キャプチャ 半透明 Camera Color Opaque Texture 121

Slide 122

Slide 122 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題 Camera Color 不透明 122

Slide 123

Slide 123 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題 Camera Color Opaque Texture 不透明 画⾯キャプチャ 123

Slide 124

Slide 124 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題 キャラクター + 鏡 Opaque Texture にキャラクターが映らない Camera Color Opaque Texture 不透明 画⾯キャプチャ 半透明 124

Slide 125

Slide 125 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題(修正後) 不透明 半透明 (Before Capture) 画⾯キャプチャ 半透明 (Transparent) 125

Slide 126

Slide 126 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題(修正後) 不透明 半透明 (Before Capture) 画⾯キャプチャ 半透明 (Transparent) キャラクター Camera Color 126

Slide 127

Slide 127 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題(修正後) 不透明 半透明 (Before Capture) 画⾯キャプチャ 半透明 (Transparent) キャラクター Camera Color Opaque Texture 127

Slide 128

Slide 128 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題(修正後) 不透明 半透明 (Before Capture) 画⾯キャプチャ 半透明 (Transparent) 鏡 キャラクター 128 Camera Color Opaque Texture

Slide 129

Slide 129 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key キャラクター描画との相性問題(修正後) 不透明 半透明 (Before Capture) 画⾯キャプチャ 半透明 (Transparent) 鏡 キャラクター キャラクターが写った Opaque Texture を⽣成できるようになった 129 Camera Color Opaque Texture

Slide 130

Slide 130 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポストプロセス 130

Slide 131

Slide 131 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● Post Processing Stack v2 (PPSv2) を採⽤していた ポストプロセス 131

Slide 132

Slide 132 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● Post Processing Stack v2 (PPSv2) を採⽤していた ● URP の実装は PPSv2 と異なる ○ ハイエンド向けの機能が無い ポストプロセス 132

Slide 133

Slide 133 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポストプロセス 133 ● URP では再現できない機能‧⾒た⽬が⼤きく変わる機能を利⽤していた ○ ⾃動露出、Bloom、⾊収差

Slide 134

Slide 134 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポストプロセス 134 ● URP の実装を変更して対応することを検討 ● しかし、今回の開発期間では難しいと判断

Slide 135

Slide 135 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポストプロセス ● PPSv2 を URP のポストプロセスとして使えるように改造 ● 以前は URP でも利⽤可能であったため、昔の公式実装例を参考に組み込み ● ポストプロセスをそのまま再現 135

Slide 136

Slide 136 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ポストプロセスまとめ ● PPSv2 をそのまま利⽤することで、既存ポストプロセス設定を維持可能 ● URP の標準ポストプロセスは利⽤不可 ● RenderGraph への移⾏時に⼤幅改修が必要 136

Slide 137

Slide 137 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 複数カメラ 137

Slide 138

Slide 138 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 複数カメラ描画 3D カメラ1 3D カメラ2 アップスケール UI オフスクリーンレンダリング 138

Slide 139

Slide 139 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 複数カメラ描画 カメラスタック1 オフスクリーンレンダリング カメラスタッキングと Renderer Feature で簡単に再現 Base Camera Overlay Camera Base Camera Overlay Camera カメラスタック2 3D カメラ1 3D カメラ2 アップスケール UI 139

Slide 140

Slide 140 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key アセットマイグレーション 140

Slide 141

Slide 141 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key アセットマイグレーション 141 ● コード変更のみで対応できず、データ修正も必要だった ○ プログラムでバッチ修正する

Slide 142

Slide 142 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key アセットマイグレーション 142 ● コード変更のみで対応できず、データ修正も必要だった ○ プログラムでバッチ修正する ● 対象アセット ○ マテリアル ○ プレハブ ○ シーン

Slide 143

Slide 143 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key レンダーキューのマッピング処理 ● 全マテリアルの描画キューの移動が発⽣ 143

Slide 144

Slide 144 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key レンダーキューのマッピング処理 ● 全マテリアルの描画キューの移動が発⽣ ● マテリアルをテキスト解釈し、 レンダーキュー設定を抽出、置き換え 144

Slide 145

Slide 145 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key レンダーキューのマッピング処理 ● 全マテリアルの描画キューの移動が発⽣ ● マテリアルをテキスト解釈し、 レンダーキュー設定を抽出、置き換え ● ⼿動でマッピングを作成 145

Slide 146

Slide 146 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 複雑なアセット修正 ● Odin Validator を利⽤して Unity 上で実装 ○ Unity アセットのバリデーション フレームワーク 146

Slide 147

Slide 147 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 複雑なアセット修正 ● Odin Validator を利⽤して Unity 上で実装 ○ Unity アセットのバリデーション フレームワーク ● アセットの問題を検出し、⼀覧表⽰ 147

Slide 148

Slide 148 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 複雑なアセット修正 ● Odin Validator を利⽤して Unity 上で実装 ○ Unity アセットのバリデーション フレームワーク ● アセットの問題を検出し、⼀覧表⽰ ● 問題の検知と修正を同時に記述 148

Slide 149

Slide 149 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key バリデーション処理 public static class ShaderUsage { public static bool RepairMaterial(Material material, bool isDryRun) } [assembly: RegisterValidationRule(typeof(MaterialValidator))] public class MaterialValidator : RootObjectValidator { protected override void Validate(ValidationResult result) { if (!ShaderUsage.RepairMaterial(Object, true)) { var errorInfo = new ResultItem("マテリアルの設定修正が必要です", ValidationResultType.Error); var fix = Fix.Create("設定修正", () => { ShaderUsage.RepairMaterial(Object, false); }); result.Add(errorInfo).WithFix(fix); } } } 149

Slide 150

Slide 150 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key バリデーション処理 150 public static class ShaderUsage { public static bool RepairMaterial(Material material, bool isDryRun) } [assembly: RegisterValidationRule(typeof(MaterialValidator))] public class MaterialValidator : RootObjectValidator { protected override void Validate(ValidationResult result) { if (!ShaderUsage.RepairMaterial(Object, true)) { var errorInfo = new ResultItem("マテリアルの設定修正が必要です", ValidationResultType.Error); var fix = Fix.Create("設定修正", () => { ShaderUsage.RepairMaterial(Object, false); }); result.Add(errorInfo).WithFix(fix); } } }

Slide 151

Slide 151 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key バリデーション処理 public static class ShaderUsage { public static bool RepairMaterial(Material material, bool isDryRun) } [assembly: RegisterValidationRule(typeof(MaterialValidator))] public class MaterialValidator : RootObjectValidator { protected override void Validate(ValidationResult result) { if (!ShaderUsage.RepairMaterial(Object, true)) { var errorInfo = new ResultItem("マテリアルの設定修正が必要です", ValidationResultType.Error); var fix = Fix.Create("設定修正", () => { ShaderUsage.RepairMaterial(Object, false); }); result.Add(errorInfo).WithFix(fix); } } } 151

Slide 152

Slide 152 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key バリデーション処理 public static class ShaderUsage { public static bool RepairMaterial(Material material, bool isDryRun) } [assembly: RegisterValidationRule(typeof(MaterialValidator))] public class MaterialValidator : RootObjectValidator { protected override void Validate(ValidationResult result) { if (!ShaderUsage.RepairMaterial(Object, true)) { var errorInfo = new ResultItem("マテリアルの設定修正が必要です", ValidationResultType.Error); var fix = Fix.Create("設定修正", () => { ShaderUsage.RepairMaterial(Object, false); }); result.Add(errorInfo).WithFix(fix); } } } 152

Slide 153

Slide 153 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key バリデーション処理 public static class ShaderUsage { public static bool RepairMaterial(Material material, bool isDryRun) } [assembly: RegisterValidationRule(typeof(MaterialValidator))] public class MaterialValidator : RootObjectValidator { protected override void Validate(ValidationResult result) { if (!ShaderUsage.RepairMaterial(Object, true)) { var errorInfo = new ResultItem("マテリアルの設定修正が必要です", ValidationResultType.Error); var fix = Fix.Create("設定修正", () => { ShaderUsage.RepairMaterial(Object, false); }); result.Add(errorInfo).WithFix(fix); } } } 153

Slide 154

Slide 154 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● マテリアル差し替え ○ Receive Shadow 設定の反映 アセット修正例 154 Built-in URP

Slide 155

Slide 155 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key アセット修正例 155 レンズフレアやハローを独⾃実装の物に置換

Slide 156

Slide 156 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key マルチレイヤー UI ブラー⽤コンポーネントの構成修正 アセット修正例 156

Slide 157

Slide 157 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 運営開発ブランチを URP ブランチにマージした場合に競合が発⽣する マイグレーションと競合解決 運営ブランチ URP ブランチ ファイル A を追加 マージ ファイル A を編集 マージ 157 ファイル A を マイグレーション ファイル A が 競合!

Slide 158

Slide 158 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 運営開発ブランチを URP ブランチにマージした場合に競合が発⽣する ● 運営開発ブランチを優先して解決する ○ 最悪のケースでは何度も同⼀のアセットに対して修正をする必要がある マイグレーションと競合解決 運営ブランチ URP ブランチ ファイル A を追加 マージ ファイル A を編集 マージ 158 ファイル A を マイグレーション ファイル A が 競合!

Slide 159

Slide 159 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⾃動マイグレーションと競合解決 ● マイグレーションプログラムを組み込む ● マージからマイグレーションまで完全⾃動化 運営ブランチ URP ブランチ マージ マージ 159 運営ブランチを 優先解決 ファイル A を マイグレーション ファイル A を追加 ファイル A を編集 ファイル A を マイグレーション

Slide 160

Slide 160 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ⾃動マイグレーションと競合解決 ● 何度も同⼀アセットをマイグレーションしても差分が発⽣しないようにする ● Jenkins で⾃動実⾏ 運営ブランチ URP ブランチ マージ マージ 160 運営ブランチを 優先解決 ファイル A を マイグレーション ファイル A を追加 ファイル A を編集 ファイル A を マイグレーション

Slide 161

Slide 161 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 実際の運⽤ 1⽉ 2⽉ 3⽉ 4⽉ 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ マイグレーションツール開発 URP ブランチにマージ シェーダー移植 ライティング カメラ‧ポスプロ VFX PBR UI 161

Slide 162

Slide 162 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 実際の運⽤ 1⽉ 2⽉ 3⽉ 4⽉ 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ マイグレーションツール開発 半⾃動化 ⾃動化 QA リリース作業 運営ブランチにマージ URP ブランチにマージ シェーダー移植 ライティング カメラ‧ポスプロ VFX PBR シャドウ 最適化 UI 162

Slide 163

Slide 163 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 実際の運⽤ 1⽉ 2⽉ 3⽉ 4⽉ 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ マイグレーションツール開発 半⾃動化 ⾃動化 QA リリース作業 運営ブランチにマージ URP ブランチにマージ シェーダー移植 ライティング カメラ‧ポスプロ VFX PBR シャドウ 最適化 UI 163

Slide 164

Slide 164 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 実際の運⽤ 1⽉ 2⽉ 3⽉ 4⽉ 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ マイグレーションツール開発 半⾃動化 ⾃動化 QA リリース作業 運営ブランチにマージ URP ブランチにマージ シェーダー移植 ライティング カメラ‧ポスプロ VFX PBR シャドウ 最適化 UI 164

Slide 165

Slide 165 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 実際の運⽤ 1⽉ 2⽉ 3⽉ 4⽉ 5⽉ 6⽉ 7⽉ 8⽉ 9⽉ マイグレーションツール開発 半⾃動化 ⾃動化 QA リリース作業 運営ブランチにマージ URP ブランチにマージ シェーダー移植 ライティング カメラ‧ポスプロ VFX PBR シャドウ 最適化 UI 165

Slide 166

Slide 166 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Quality Assurance 166

Slide 167

Slide 167 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 根本的に描画プログラムが変わっているため範囲が広い Quality Assurance 167

Slide 168

Slide 168 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 根本的に描画プログラムが変わっているため範囲が広い ● ⾃動化システム構築の時間が確保できなかったため⼈⼒で対応 Quality Assurance 168

Slide 169

Slide 169 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Quality Assurance ● 根本的に描画プログラムが変わっているため範囲が広い ● ⾃動化システム構築の時間が確保できなかったため⼈⼒で対応 ● QA チームが描画⽐較チェックを実施 ○ イベントを含んだ全コンテンツ ○ iOS/Android/Windows ○ 全キャラクター ○ 全スキルカットシーン 169

Slide 170

Slide 170 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Quality Assurance ● 根本的に描画プログラムが変わっているため範囲が広い ● ⾃動化システム構築の時間が確保できなかったため⼈⼒で対応 ● QA チームが描画⽐較チェックを実施 ○ イベントを含んだ全コンテンツ ○ iOS/Android/Windows ○ 全キャラクター ○ 全スキルカットシーン ● モバイルは複数のチップセットでテスト 170

Slide 171

Slide 171 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Quality Assurance ● Built-in と URP のパフォーマンス⽐較 ○ メモリ不⾜によるクラッシュ ○ ヒッチ ○ ロード時間 171

Slide 172

Slide 172 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key Quality Assurance ● Built-in と URP のパフォーマンス⽐較 ○ メモリ不⾜によるクラッシュ ○ ヒッチ ○ ロード時間 ● フィードバックを元に最適化 ○ 結果的に Built-in よりもパフォーマンスが向上 172

Slide 173

Slide 173 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key チェック体制 ● プログラマーも全コンテンツの描画⽐較を⽬視で確認 ● スキルカットシーンは動画出⼒し、横並びで再⽣ ○ バッチ動画出⼒するツールを活⽤ 173

Slide 174

Slide 174 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 作業⽤ビルドパイプラインを⽤意 バグ修正対応 174

Slide 175

Slide 175 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 作業⽤ビルドパイプラインを⽤意 ● 地道に描画差分を修正 バグ修正対応 175

Slide 176

Slide 176 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 作業⽤ビルドパイプラインを⽤意 ● 地道に描画差分を修正 ● シェーダー修正 = アセットのフルビルド ○ 1ビルド20時間 バグ修正対応 176

Slide 177

Slide 177 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 作業⽤ビルドパイプラインを⽤意 ● 地道に描画差分を修正 ● シェーダー修正 = アセットのフルビルド ○ 1ビルド20時間 ● ビルド担当者に⼤きな負担 バグ修正対応 177

Slide 178

Slide 178 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ● 作業⽤ビルドパイプラインを⽤意 ● 地道に描画差分を修正 ● シェーダー修正 = アセットのフルビルド ○ 1ビルド20時間 ● ビルド担当者に⼤きな負担 ● シェーダーに修正が必要な場合はビルド担当者に連絡 バグ修正対応 178

Slide 179

Slide 179 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key バグ修正対応 ● Unity 本体のバージョンアップも対応しているためグラフィックス以外の バグも多数発⽣ ○ 運営チームのサポートが発⽣ 179

Slide 180

Slide 180 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 危険なシェーダープロパティ名 ● ⼀部の Android 端末でシェーダー コンパイルエラーが発⽣ ● 「__」で始まるプロパティ名が問 題 ● GLES の仕様では意図しない動作を することがあるため注意 [HideInInspector]__dirty("", Int) = 1 180

Slide 181

Slide 181 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 完成 181 ● ⾒た⽬に変化なし! ● 地味です Built-in URP

Slide 182

Slide 182 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 良かった点‧反省点 182

Slide 183

Slide 183 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 良かった点 ● 致命的な不具合はなかった 183

Slide 184

Slide 184 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 良かった点 ● 致命的な不具合はなかった ● キャラクターシェーダーが ASE に移植されたため、アーティストによる改良 が進んだ 184

Slide 185

Slide 185 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 良かった点 ● 致命的な不具合はなかった ● キャラクターシェーダーが ASE に移植されたため、アーティストによる改良 が進んだ ● SRP Batcher の効果が⾼く、Static Batching をオフに出来た ○ メモリ消費量の削減 185

Slide 186

Slide 186 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 良かった点 ● 致命的な不具合はなかった ● キャラクターシェーダーが ASE に移植されたため、アーティストによる改良 が進んだ ● SRP Batcher が効果が⾼く、Static Batching をオフに出来た ○ メモリ消費量の削減 ● URP しか知らないプログラマーでも拡張がやりやすくなった 186

Slide 187

Slide 187 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 反省点 ● 既存のシェーダー名が変わってしまっており、ツールが誤作動 187

Slide 188

Slide 188 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 反省点 ● 既存のシェーダー名が変わってしまっており、ツールが誤作動 ● 新規アセットのみで発⽣する上、不具合の影響が分かりづらい 188

Slide 189

Slide 189 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 反省点 ● 既存のシェーダー名が変わってしまっており、ツールが誤作動 ● 新規アセットのみで発⽣する上、不具合の影響が分かりづらい ● 理想的にはツールの QA が必要だが、ワークフローが確⽴していなかった 189

Slide 190

Slide 190 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 反省点 ● 新規制作中のシーンのみ⾒た⽬の問題が発⽣ ○ リリース後の制作で問題が発⽣するケースの発⾒が通常のゲームの QA では難しい 190

Slide 191

Slide 191 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key 反省点 ● 新規制作中のシーンのみ⾒た⽬の問題が発⽣ ○ リリース後の制作で問題が発⽣するケースの発⾒が通常のゲームの QA では難しい ● Unity Source Code の契約を検討すべきだった ○ 検証と推測には限界がある 191

Slide 192

Slide 192 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key まとめ ● 最終的にうまくいったが険しい道だった ● 難しい選択を迫られる ○ 描画を再現するためのコストと、得られるものを常に天秤にかけていた ● グラフィックス改良の準備が整った 192

Slide 193

Slide 193 text

©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key ご清聴ありがとうございました ©WFS Developed by WRIGHT FLYER STUDIOS ©VISUAL ARTS/Key