Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RENDERING 最適化「禍つヴァールハイト」

55 views

Published on

KLab福岡Meetup
「RENDERING 最適化「禍つヴァールハイト」」
GPUのProfiling方法とRenderの最適化

Published in: Technology
  • Be the first to comment

  • Be the first to like this

RENDERING 最適化「禍つヴァールハイト」

  1. 1. Fernandez Francisco(フェルナンデス フランシスコ) KLabGames事業本部 Technical Artist RENDERING 最適化 『禍つヴァールハイト』
  2. 2. RENDERING 最適化『禍つヴァールハイト』 ゲームのターゲット 30 FPS ポストエフェクト 端末のターゲット Q3 2015> ● Sony Xperia Performance ● Aquos SHV34 ● Samsung Galaxy S7 ● Iphone 6+ メモリ700 MB プロフィールターゲットを決める BOTTLENECK 端末でテスト 100 キャラクター !
  3. 3. RENDERING 最適化『禍つヴァールハイト』 FPS 平均9 FPS。 最大20 FPS。 カットシーンでも平均は8-9 FPSぐらい。 解像度: 1280 x 720。 プロフィールターゲットを決める BOTTLENECK 端末でテスト ! !
  4. 4. RENDERING 最適化『禍つヴァールハイト』 プロフィールツール SnapDragon Profiler / Mali Graphic Profiler / XCode レンダリング: 30 FPS = 1 FPS 33.3 MS (GPU 25.7 MS) ゲーム= 30%(7.7MS) ポストエフェクト/影 = 70% (18 MS) プロフィールターゲットを決める BOTTLENECK 端末でテスト !
  5. 5. RENDERING 最適化『禍つヴァールハイト』 Unity Post Process Stack v2 ● モバイル向きではない。 ● かなり重い。 ● シェーダーの効率が悪い。 ● 追加するとUnityが自動的に Native Size render textureを作る。(Offにしても) Unity Blog とARM プロフィールターゲットを決める BOTTLENECK 端末でテスト !
  6. 6. RENDERING 最適化『禍つヴァールハイト』 Unity Post Process Stack v2 ● Multiple Render Texture. ● Main Cameraの設定をForce into RTになっている。 ● GPUのメモリからロードする。 ! プロフィールターゲットを決める BOTTLENECK 端末でテスト
  7. 7. RENDERING 最適化『禍つヴァールハイト』 PROFILEDECIDE TARGET BOTTLENECK TEST ON DEVICE Bottleneck, Unity Post Process Unity Post Process 18 MS ● Native resolution textureを削除する。 ● GMEMロードを削除する。 ● Blitを削減する。 ● GPUのNative Depth Textureを使用する。 ● レンダリングTimeを改善。 ! ! 4 MS Original Post Process
  8. 8. RENDERING 最適化『禍つヴァールハイト』 Original Post Process ● GPUのNative Depth Textureを使用する。 ● Dual filteringでぼやけを作る。 ● Temporary Render Textureの解像度 1/4を使用する。 ● OnRenderImage, CommandBufferやめてOnPostRenderを使用 する。 プロフィールターゲットを決める BOTTLENECK 端末でテスト
  9. 9. RENDERING 最適化『禍つヴァールハイト』 Original Post Process ● OpenGL 2.0からオッケーです。 ● Android / IOS オッケー。 ● 簡単にオフをできる. ● MSを改善。 ● Depth of Field、被写界深度。 ● Post Process Fog、フォグ、霧。 ● Vignette、ヴィネット。 ● Bloom with fake HDR、ブルームと偽物 HDR。(Alpha Channelにマスクを使用す る) ● Color Correction、色補正。 ● Etc、など。 プロフィールターゲットを決める BOTTLENECK 端末でテスト 機能
  10. 10. RENDERING 最適化『禍つヴァールハイト』 30 FPSが出来ましたか? まだ. ● Frame Rateは改善しましたが、安定して30FPSは出てない。 ● 着実で30 FPSにするなら、45FPSに目標した方がいい。 ● モバイル端末は暑さと電池を守るためにCPU/GPUのスピードを制限す る。 ● Throttling. ! プロフィールターゲットを決める BOTTLENECK 端末でテスト
  11. 11. RENDERING 最適化『禍つヴァールハイト』 もう一回プロフェール ● CPU 40.85MS ● 1291 Draw Calls ● No Early Z-test ● No Texel Size ! プロフィールターゲットを決める BOTTLENECK 端末でテスト レンダリング: 30 FPS = 1 FPS 33.3 MS (GPU 25.7 MS)
  12. 12. RENDERING 最適化『禍つヴァールハイト』 Bottleneck, Draw Call / Set Pass / Batch ● 普通200 Draw Call ● 新し端末300 Draw Call (Q3 2018, 2019) プロフィールターゲットを決める BOTTLENECK 端末でテスト
  13. 13. RENDERING 最適化『禍つヴァールハイト』 Bottleneck, 背景 Draw Call / Set Pass / Batch Draw Call * No Scene Set Pass ● Meshをマージする ○ 3D Software ● Material 削減。 ● ローポリのゲームオブ ジェクトが多いほうより、 ハイポリのゲームオブ ジェクトが少ないほうが良 い ● Unityのシーンを使うなら Batching Static をチェッ クする。 ● Unityのシーンを使わない ならScriptで Combine(R/W)。 ● Dynamic Mesh Batch はCpuに重い。 ● Frustum Culling Data. ! ● シェーダーのPass数を確 認。 ● 違う render States。 Batch プロフィールターゲットを決める BOTTLENECK 端末でテスト ! !
  14. 14. RENDERING 最適化『禍つヴァールハイト』 背景のDraw Call 削減テスト ● Mesh 40.85 MS ● Dynamic Mesh 7.8 MS ● Mesh 5.1 MS ● Dynamic Mesh 0 MS 1291 Draw Call 33 Draw Call プロフィールターゲットを決める BOTTLENECK 端末でテスト Total ● CPU 40.85 MS + GPU 18 MS ● CPU 5.1 MS + GPU 4 MS
  15. 15. RENDERING 最適化『禍つヴァールハイト』 30 FPSを出来ましたか? はい、ポストエフェクトオン。 プロフィールターゲットを決める BOTTLENECK 端末でテスト
  16. 16. RENDERING 最適化『禍つヴァールハイト』 Early Z-Test Camera CullingTexture ● Opaqueのレンダリング 順番は前から後ろ。 ● Transparentのレンダリ ング順番は後ろから前。 ● Pixelsを廃棄。 (Discard) ● 変なレンダリングの順番  (+1000) 。 ● 同質なTextureサイ ズ。 ● MipMaps。 ● Frustum Culling。 ● Occlusion Culling。 ● Camera Cull 距離。 Shaders ● 重いシェーダー。 ● 2D Sampler。 ● シェーダーVariants。 ● シェーダーCompile。 ● Shader Forge など。 30 FPSを保つ ! ! Occlusion culling (Scene でBakeするのが必要)
  17. 17. RENDERING 最適化『禍つヴァールハイト』 ! Early Z-Test Camera CullingTexture Shaders 廃棄したPixelsは赤色で見える(SnapDragon)。 30 FPSを保つ FillRate/Overdraw ZReject/Early Ztest
  18. 18. RENDERING 最適化『禍つヴァールハイト』 ! ! ! 最後の画像で見えないPixelをレンダリングをしない、SkyBox注意。 Early Z-Test Camera CullingTexture Shaders 30 FPSを保つ
  19. 19. RENDERING 最適化『禍つヴァールハイト』 Textureサイズ。赤色ポイントは大きすぎる、青色ポイントは小さすぎる。 1280 x 720 Early Z-Test Camera CullingTexture Shaders 30 FPSを保つ 720 PX. キャラクター 300px. 草  32 px. etc.
  20. 20. RENDERING 最適化『禍つヴァールハイト』 1280 x 720 Frustum Cullingはいつもオンになっています。 (Camera Culling). Occlusion CullingはUnityシーンが必要  (OcclusionのデーターはシーンにBakeします)。 Camera Layer Culling (距離)。 ! Camera camera = GetComponenet<Camera>(); floot[] distances = new float[32]; distance[10] = 15; camera.layerCullDistance = distances; Early Z-Test Camera CullingTexture Shaders 30 FPSを保つ
  21. 21. RENDERING 最適化『禍つヴァールハイト』 Early Z-Test Camera CullingTexture Shaders ● Real time シェーダー Compile (Override)。 ● シェーダースピードチェック。 ● 簡単な方法で重いシェーダーを見つかる。 ● シェーダー計算No-Op注意。 ● Texture SamplerやFill Rateや Interpolations などの確認。 SnapDragon プロフェール ! 30 FPSを保つ
  22. 22. RENDERING 最適化『禍つヴァールハイト』 1280 x 720 Early Z-Test Camera CullingTexture Shaders ● Real time シェーダー Compile。 ● シェーダースピードチェック。 ● 使いやすい。 ● 重いシェーダー。 ● 比較することが出来ます。 ● Texture SamplerやFill Rate や Interpolationsなどの確 認。 XCode プロフェール ! 30 FPSを保つ !
  23. 23. RENDERING 最適化『禍つヴァールハイト』 Early Z-Test Camera CullingTexture Shaders ● 1行あたりを確認することが可 能。 ● 頂点を確認することが可能。 XCode ! 30 FPSを保つ
  24. 24. RENDERING 最適化『禍つヴァールハイト』 1280 x 720 Early Z-Test Camera CullingTexture Shaders Mali Graphic プロフェール , Offline Compiler ● Compile無しでシェーダーのスピードを確認が可能。 ● 計算やロードやtextureなど確認が可能。 ● Spilling注意 (Uniform足りない場合)。 ! 30 FPSを保つ
  25. 25. RENDERING 最適化『禍つヴァールハイト』 1280 x 720 Early Z-Test Camera CullingTexture Shaders ヒント ● 全てをhalfにする。 ● ポリゴンのバグが発生したら、 Positionを Floatにす る。 ● UV Coordinatesの確認をするならUnityの TimeScaleを100にする。バグが発生したら、UVを Floatにする。(UVScroll) ● Unity #Include を消す。(影, ライト, 霧) 必要な物だ けを使う。 ● Variantsが多くなると最適化し辛くなるのででききるか ぎり減らす。 ● IFやFORやBranchを使用しない方がおすすめ。Clip は最初にする。 ● Vertexで計算した方がいい. ● 最近GPUが早くなったのでLUTを読むよりシェーダー で計算する方が早い。 30 FPSを保つ
  26. 26. RENDERING 最適化『禍つヴァールハイト』 1280 x 720 Early Z-Test Camera CullingTexture Shaders シェーダー最適化のおすすめ ● シェーダー Variant Collectionを使用する。 ● シェーダーWarmUpを使用する。 ● MayaからなどのインポートしたFBXのMaterialとシェーダー注意。(Standard, Unlit Lightmap) ● Build In シェーダー注意。(Mobile Particlesなど) ! Shader Compile Shader Collection 30 FPSを保つ
  27. 27. RENDERING 最適化『禍つヴァールハイト』 簡単なFPS Checker (Override) FPS 確認。 12 34 5 6 7 1 2 3 4 5 6 7 シェーダー 確認。 Textureサイズ確認。 プロフェール保存する。 解像度確認。 Camera Culling確認。 メモリ確認。
  28. 28. RENDERING 最適化『禍つヴァールハイト』 Contact Francisco Fernandez fernandez-f@klab.com ありがとうございます。 Q&A https://www.klab.com/jp/ http://www.franfndz.com Memory 700 MB 100 Character Other talk.

×