SlideShare a Scribd company logo
1 of 57
Download to read offline
Ian Dundore

LeadDeveloperRelationsEngineer,Unity
Optimizing Unity

SavingCPU&Memory,becauseyoucan.
What’ll we cover today?
• Primary focus will be CPU optimization.
• Transform component
• Animator
• Physics
• Finish with some tips for saving memory.
Always, always profile!
Transforms!
Not as simple as they look.
Transforms?
• Every GameObject has one.
• When they change, they send out messages.
• C++: “OnTransformChanged”
• When reparented, they send out MORE messages!
• C#: “OnBeforeTransformParentChanged”
• C#: “OnTransformParentChanged”
• Used by many internal Unity Components.
• Physics, Renderers, UnityUI…
OnTransformChanged?
• Sent every time a Transform changes.
• Three ways to cause these messages:
• Changing position, rotation or scale in C#
• Moved by Animators
• Moved by Physics
• 1 change = 1 message!
Why is this expensive?
• Message is sent to all Components on Transform & all Children
• Yes, ALL.
• Physics components will update the Physics scene.
• Renderers will recalculate their bounding boxes.
• Particle systems will update their bounding boxes.
void Update()
{
transform.position += new Vector3(1f, 1f, 1f);
transform.rotation += Quaternion.Euler(45f, 45f, 45f);
}
void Update()
{
transform.position += new Vector3(1f, 1f, 1f);
transform.rotation += Quaternion.Euler(45f, 45f, 45f);
}
X
void Update()
{
transform.SetPositionAndRotation(
transform.position + new Vector3(1f, 1f, 1f),
transform.rotation + Quaternion.Euler(45f, 45f, 45f)
);
}
Collect your transform updates!
• Many systems moving a Transform around?
• Add up all the changes, apply them once.
• If changing both position & rotation, use SetPositionAndRotation
• New API, added in 5.6
• Eliminates duplicate messages
What system has lots of
moving Transforms?
100 Unity-chans!
• Over 15,000 Transforms!
• How will it perform?
PerformanceTest (Unity 5.6)
times in ms iPad Air 2
Macbook Pro,
2017
Unoptimized 33.35 6.06
Optimized 26.96 3.37
Timings are only from Animators
“Optimized”?
What does it do?
• Reorders animation data for better multithreading.
• Eliminates extra transforms in the model’s Transform hierarchy.
• Need some, but not all? Add them to the “Extra Transforms” list!
• Allows Mesh Skinning to be multithreaded.
“Optimized”?
Physics!
What affects the cost of Physics?
• Two major operations that cost time:
• Physics simulation
• Updating Rigidbodies
• Physics queries
• Raycast, SphereCast, etc.
Scene complexity is important!
• All physics costs are affected by the complexity and density of a scene.
• The type of Colliders used has a big impact on cost.
• Box colliders & sphere colliders are cheapest
• Mesh colliders are very expensive
• Simple setup: Create some number of colliders, cast rays.
Cost of 1000 Raycasts
times in ms 10 Colliders 100 Colliders 1000 Colliders
Sphere 0.27 0.48 1.53
Box 0.34 0.42 1.67
Mesh 0.37 0.53 2.27
Objects created in a 25-meter sphere
Density is important!
times in ms 10 meters 25 meters 50 meters 100 meters
Sphere 2.13 1.28 1.08 0.78
1000 Raycasts through 1000 Spheres
Why is complexity important?
• Physics queries occur in three steps.
• 1: Gather list of potential collisions, based on world-space.
• 2: Cull list of potential collisions, based on layers.
• 3: Test each potential collision to find actual collisions.
Why is complexity important?
• Physics queries occur in three steps.
• 1: Gather list of potential collisions, based on world-space.
• Done by PhysX (“broad phase”)
• 2: Cull list of potential collisions, based on layers.
• Done by Unity
• 3: Test each potential collision to find actual collisions.
• Done by PhysX (“midphase” & “narrow phase”)
• Most expensive step
Reduce number of potential collisions!
• PhysX has an internal world-space partitioning system.
• Divides world into smaller regions, which track contents.
• Longer rays may require querying more regions in the world.
• Benefit of limiting ray length depends on scene density!
• Use maxDistance parameter of Raycast!
• Limits the world-space involved in a query.
• Physics.Raycast(myRay, 10f);
Control maxDistance!
times in ms 10 meters 25 meters 50 meters 100 meters
1 meter 1.85 1.02 0.49 0.50
10 meters 2.10 1.19 0.91 0.53
100 meters 2.11 1.36 1.07 0.77
Infinite 2.13 1.28 1.08 0.78
1000 Raycasts through 1000 Spheres
Edit the physics layers!
• Consider making special layers for special types of entities in your game
• Help the system cull unwanted results.
Trade accuracy for performance
• Reduce the physics time-step.
• Running at 30FPS? Don’t run physics at 50FPS!
• Reduces accuracy of collisions, so test changes carefully.
• Most games can accept timesteps of 0.04 or 0.08
[RequireComponent(typeof(Rigidbody))]
class MyMonoBehaviour : MonoBehaviour
{
void Update()
{
transform.SetPositionAndRotation(…);
}
}
[RequireComponent(typeof(Rigidbody))]
class MyMonoBehaviour : MonoBehaviour
{
void Update()
{
transform.SetPositionAndRotation(…);
}
}
X
[RequireComponent(typeof(Rigidbody))]
class MyMonoBehaviour : MonoBehaviour
{
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
rb.MovePosition(…);
rb.MoveRotation(…);
}
}
Common errors: Rigidbody movement
• Do not move GameObjects with Rigidbodies via their Transform
• Use Rigidbody.MovePosition, Rigidbody.MoveRotation
500 objects
MovePosition &
MoveRotation
Transform
SetPositionAndRotation
FixedUpdate 0.45 0.90
Memory time!
IL2CPP Platforms: Memory Profiler
• Available on Bitbucket
• https://bitbucket.org/Unity-Technologies/memoryprofiler
• Requires IL2CPP to get accurate information.
• Shows all UnityEngine.Objects and C# objects in memory.
• Includes native allocations, such as the shadowmap
Examining a memory snapshot
Examining a memory snapshot
Examining a memory snapshot
?!
Examining a memory snapshot
This is a shadowmap… do we need one?
Look at the HideFlags
HideAndDontSave?
• Value in the HideFlags enum.
• Includes 3 values:
• HideInHierarchy
• DontSave
• DontUnloadUnusedAsset
• Mistake: Setting in-game assets to use this HideFlag.
• Assets loaded with HideAndDontSave flag will never be unloaded!
Examining a memory snapshot
Examining a memory snapshot
Examining a memory snapshot
Check your assets!
• Common for artists to add assets in very high resolutions.
• Does Unity-chan’s hair really need three 1024x1024 textures?
• Reduce size? Achieve the same effect some other way?
Beware of Asset Duplication
• Common problem when placing Assets into Asset Bundles
• Assets in Resources & an Asset Bundle will be included in both
• Will be seen as separate Assets in Unity
• Separate copies will be loaded into memory
• Also happens when Asset Dependencies are not declared properly
Asset Dependencies
Material A Material B
Texture
(shared)
Shader A Shader B
Asset Dependencies
Material A Material B
Texture
(shared)
Shader A Shader B
Asset Dependencies
Material A Material B
Texture
(shared)
Shader A Shader B
Asset Dependencies
Material A Material B
Texture
(shared)
Shader A Shader B
Texture
(shared)
Asset Dependencies
Material A Material B
Texture
(shared)Shader A Shader B
Runtime texture creation
• Creating textures procedurally, or downloading via the web?
• Make sure your textures are non-readable!
• Read-write textures use twice as much memory!
• Use UnityWebRequest — defaults to non-readable textures
• Use WWW.textureNonReadable instead of WWW.texture
Marking textures non-readable
• Pass nonReadable as true when calling Texture2D.LoadImage
• Texture2D.LoadImage(“/path/to/image”, true);
• Call Texture2D.Apply when updates are done
• Texture2D.Apply(true, true);
• Updates mipmaps & marks as non-readable
• Texture2D.Apply(false, true);
• Does not update mipmaps, but does mark as non-readable
Thank you!

More Related Content

What's hot

shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
 

What's hot (20)

【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
 
HDR Theory and practicce (JP)
HDR Theory and practicce (JP)HDR Theory and practicce (JP)
HDR Theory and practicce (JP)
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
Unity2018/2019における最適化事情
Unity2018/2019における最適化事情Unity2018/2019における最適化事情
Unity2018/2019における最適化事情
 
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
 
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
 
今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版
今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版
今だから聞きたい 「一番新しい xRアプリの作り方」 2020年 最新版
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 

Viewers also liked

Viewers also liked (20)

【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
【Unite 2017 Tokyo】中国でAndroidアプリを出す!Xiaomiストアでのアプリリリース、収益化のためにできること
 
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
【Unite 2017 Tokyo】バグを殲滅!Unityにおける実践テスト手法
 
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
【Unite 2017 Tokyo】いかにして個人制作ゲームで生きていくか〜スマホゲームレッドオーシャンの泳ぎ方〜
 
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
【Unite 2017 Tokyo】Unity UI最適化ガイド 〜ベストプラクティスと新機能
 
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
【Unite 2017 Tokyo】セルシェーダーを使用した3Dキャラアプリの開発事例
 
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
 
【Unite 2017 Tokyo】Navmesh完全マスターへの道
【Unite 2017 Tokyo】Navmesh完全マスターへの道【Unite 2017 Tokyo】Navmesh完全マスターへの道
【Unite 2017 Tokyo】Navmesh完全マスターへの道
 
【Unity】Scriptable object 入門と活用例
【Unity】Scriptable object 入門と活用例【Unity】Scriptable object 入門と活用例
【Unity】Scriptable object 入門と活用例
 
人工知能のための哲学塾 東洋哲学篇 第零夜 資料
人工知能のための哲学塾 東洋哲学篇 第零夜 資料人工知能のための哲学塾 東洋哲学篇 第零夜 資料
人工知能のための哲学塾 東洋哲学篇 第零夜 資料
 
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
【Unite 2017 Tokyo】パフォーマンス向上のためのスクリプトのベストプラクティス
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方
 
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
【Unite 2017 Tokyo】新アセットバンドルツール詳解:アセット設定とアセットバンドルのワークフローを簡単に
 
AssetBundle (もどき) の作り方
AssetBundle (もどき) の作り方AssetBundle (もどき) の作り方
AssetBundle (もどき) の作り方
 
【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ
【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ
【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ
 
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
【Unity道場スペシャル 2017京都】トゥーンシェーダー・マニアクス2
 
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
 
【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ
【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ
【Unite 2017 Tokyo】もっと気軽に、動的なコンテンツ配信を ~アセットバンドルの未来と開発ロードマップ
 
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
 

Similar to 【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~

Making a game with Molehill: Zombie Tycoon
Making a game with Molehill: Zombie TycoonMaking a game with Molehill: Zombie Tycoon
Making a game with Molehill: Zombie Tycoon
Jean-Philippe Doiron
 
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
DATAVERSITY
 

Similar to 【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~ (20)

0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
 
Large scalecplex
Large scalecplexLarge scalecplex
Large scalecplex
 
Unity - Internals: memory and performance
Unity - Internals: memory and performanceUnity - Internals: memory and performance
Unity - Internals: memory and performance
 
CPLEX Optimization Studio, Modeling, Theory, Best Practices and Case Studies
CPLEX Optimization Studio, Modeling, Theory, Best Practices and Case StudiesCPLEX Optimization Studio, Modeling, Theory, Best Practices and Case Studies
CPLEX Optimization Studio, Modeling, Theory, Best Practices and Case Studies
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @TwitterEverything I Ever Learned About JVM Performance Tuning @Twitter
Everything I Ever Learned About JVM Performance Tuning @Twitter
 
Decima Engine: Visibility in Horizon Zero Dawn
Decima Engine: Visibility in Horizon Zero DawnDecima Engine: Visibility in Horizon Zero Dawn
Decima Engine: Visibility in Horizon Zero Dawn
 
Building Mosaics
Building MosaicsBuilding Mosaics
Building Mosaics
 
Developing and optimizing a procedural game: The Elder Scrolls Blades- Unite ...
Developing and optimizing a procedural game: The Elder Scrolls Blades- Unite ...Developing and optimizing a procedural game: The Elder Scrolls Blades- Unite ...
Developing and optimizing a procedural game: The Elder Scrolls Blades- Unite ...
 
How we optimized our Game - Jake & Tess' Finding Monsters Adventure
How we optimized our Game - Jake & Tess' Finding Monsters AdventureHow we optimized our Game - Jake & Tess' Finding Monsters Adventure
How we optimized our Game - Jake & Tess' Finding Monsters Adventure
 
SolidWorks Assignment Help
SolidWorks Assignment HelpSolidWorks Assignment Help
SolidWorks Assignment Help
 
YU CS Summer 2021 Project | TensorFlow Street Image Classification and Object...
YU CS Summer 2021 Project | TensorFlow Street Image Classification and Object...YU CS Summer 2021 Project | TensorFlow Street Image Classification and Object...
YU CS Summer 2021 Project | TensorFlow Street Image Classification and Object...
 
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
 
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
【Unite 2017 Tokyo】インスタンシングを用いた美麗なグラフィックの実現方法
 
Creating 3D neuron reconstructions from image stacks and virtual slides
Creating 3D neuron reconstructions from image stacks and virtual slidesCreating 3D neuron reconstructions from image stacks and virtual slides
Creating 3D neuron reconstructions from image stacks and virtual slides
 
Making a game with Molehill: Zombie Tycoon
Making a game with Molehill: Zombie TycoonMaking a game with Molehill: Zombie Tycoon
Making a game with Molehill: Zombie Tycoon
 
Photogrammetry and Star Wars Battlefront
Photogrammetry and Star Wars BattlefrontPhotogrammetry and Star Wars Battlefront
Photogrammetry and Star Wars Battlefront
 
Using Containers and HPC to Solve the Mysteries of the Universe by Deborah Bard
Using Containers and HPC to Solve the Mysteries of the Universe by Deborah BardUsing Containers and HPC to Solve the Mysteries of the Universe by Deborah Bard
Using Containers and HPC to Solve the Mysteries of the Universe by Deborah Bard
 
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
 
NYJavaSIG - Big Data Microservices w/ Speedment
NYJavaSIG - Big Data Microservices w/ SpeedmentNYJavaSIG - Big Data Microservices w/ Speedment
NYJavaSIG - Big Data Microservices w/ Speedment
 

More from Unity Technologies Japan K.K.

今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識 今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
Unity Technologies Japan K.K.
 

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

建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
 
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクション
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
 
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそうビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
 
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
 
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
 
FANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますFANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えます
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
 
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】
 
徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】
 
Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
 
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-
 
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識 今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
 
【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~
【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~
【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

【Unite 2017 Tokyo】Unity最適化講座 ~スペシャリストが教えるメモリとCPU使用率の負担最小化テクニック~

  • 1.
  • 4. What’ll we cover today? • Primary focus will be CPU optimization. • Transform component • Animator • Physics • Finish with some tips for saving memory.
  • 7. Transforms? • Every GameObject has one. • When they change, they send out messages. • C++: “OnTransformChanged” • When reparented, they send out MORE messages! • C#: “OnBeforeTransformParentChanged” • C#: “OnTransformParentChanged” • Used by many internal Unity Components. • Physics, Renderers, UnityUI…
  • 8. OnTransformChanged? • Sent every time a Transform changes. • Three ways to cause these messages: • Changing position, rotation or scale in C# • Moved by Animators • Moved by Physics • 1 change = 1 message!
  • 9. Why is this expensive? • Message is sent to all Components on Transform & all Children • Yes, ALL. • Physics components will update the Physics scene. • Renderers will recalculate their bounding boxes. • Particle systems will update their bounding boxes.
  • 10. void Update() { transform.position += new Vector3(1f, 1f, 1f); transform.rotation += Quaternion.Euler(45f, 45f, 45f); }
  • 11. void Update() { transform.position += new Vector3(1f, 1f, 1f); transform.rotation += Quaternion.Euler(45f, 45f, 45f); } X
  • 12. void Update() { transform.SetPositionAndRotation( transform.position + new Vector3(1f, 1f, 1f), transform.rotation + Quaternion.Euler(45f, 45f, 45f) ); }
  • 13. Collect your transform updates! • Many systems moving a Transform around? • Add up all the changes, apply them once. • If changing both position & rotation, use SetPositionAndRotation • New API, added in 5.6 • Eliminates duplicate messages
  • 14. What system has lots of moving Transforms?
  • 15.
  • 16. 100 Unity-chans! • Over 15,000 Transforms! • How will it perform?
  • 17. PerformanceTest (Unity 5.6) times in ms iPad Air 2 Macbook Pro, 2017 Unoptimized 33.35 6.06 Optimized 26.96 3.37 Timings are only from Animators
  • 19. What does it do? • Reorders animation data for better multithreading. • Eliminates extra transforms in the model’s Transform hierarchy. • Need some, but not all? Add them to the “Extra Transforms” list! • Allows Mesh Skinning to be multithreaded.
  • 22. What affects the cost of Physics? • Two major operations that cost time: • Physics simulation • Updating Rigidbodies • Physics queries • Raycast, SphereCast, etc.
  • 23. Scene complexity is important! • All physics costs are affected by the complexity and density of a scene. • The type of Colliders used has a big impact on cost. • Box colliders & sphere colliders are cheapest • Mesh colliders are very expensive • Simple setup: Create some number of colliders, cast rays.
  • 24. Cost of 1000 Raycasts times in ms 10 Colliders 100 Colliders 1000 Colliders Sphere 0.27 0.48 1.53 Box 0.34 0.42 1.67 Mesh 0.37 0.53 2.27 Objects created in a 25-meter sphere
  • 25. Density is important! times in ms 10 meters 25 meters 50 meters 100 meters Sphere 2.13 1.28 1.08 0.78 1000 Raycasts through 1000 Spheres
  • 26. Why is complexity important? • Physics queries occur in three steps. • 1: Gather list of potential collisions, based on world-space. • 2: Cull list of potential collisions, based on layers. • 3: Test each potential collision to find actual collisions.
  • 27. Why is complexity important? • Physics queries occur in three steps. • 1: Gather list of potential collisions, based on world-space. • Done by PhysX (“broad phase”) • 2: Cull list of potential collisions, based on layers. • Done by Unity • 3: Test each potential collision to find actual collisions. • Done by PhysX (“midphase” & “narrow phase”) • Most expensive step
  • 28. Reduce number of potential collisions! • PhysX has an internal world-space partitioning system. • Divides world into smaller regions, which track contents. • Longer rays may require querying more regions in the world. • Benefit of limiting ray length depends on scene density! • Use maxDistance parameter of Raycast! • Limits the world-space involved in a query. • Physics.Raycast(myRay, 10f);
  • 29. Control maxDistance! times in ms 10 meters 25 meters 50 meters 100 meters 1 meter 1.85 1.02 0.49 0.50 10 meters 2.10 1.19 0.91 0.53 100 meters 2.11 1.36 1.07 0.77 Infinite 2.13 1.28 1.08 0.78 1000 Raycasts through 1000 Spheres
  • 30. Edit the physics layers! • Consider making special layers for special types of entities in your game • Help the system cull unwanted results.
  • 31. Trade accuracy for performance • Reduce the physics time-step. • Running at 30FPS? Don’t run physics at 50FPS! • Reduces accuracy of collisions, so test changes carefully. • Most games can accept timesteps of 0.04 or 0.08
  • 32. [RequireComponent(typeof(Rigidbody))] class MyMonoBehaviour : MonoBehaviour { void Update() { transform.SetPositionAndRotation(…); } }
  • 33. [RequireComponent(typeof(Rigidbody))] class MyMonoBehaviour : MonoBehaviour { void Update() { transform.SetPositionAndRotation(…); } } X
  • 34. [RequireComponent(typeof(Rigidbody))] class MyMonoBehaviour : MonoBehaviour { Rigidbody rb; void Awake() { rb = GetComponent<Rigidbody>(); } void Update() { rb.MovePosition(…); rb.MoveRotation(…); } }
  • 35. Common errors: Rigidbody movement • Do not move GameObjects with Rigidbodies via their Transform • Use Rigidbody.MovePosition, Rigidbody.MoveRotation 500 objects MovePosition & MoveRotation Transform SetPositionAndRotation FixedUpdate 0.45 0.90
  • 37. IL2CPP Platforms: Memory Profiler • Available on Bitbucket • https://bitbucket.org/Unity-Technologies/memoryprofiler • Requires IL2CPP to get accurate information. • Shows all UnityEngine.Objects and C# objects in memory. • Includes native allocations, such as the shadowmap
  • 38. Examining a memory snapshot
  • 39. Examining a memory snapshot
  • 40. Examining a memory snapshot ?!
  • 41. Examining a memory snapshot
  • 42. This is a shadowmap… do we need one?
  • 43. Look at the HideFlags
  • 44. HideAndDontSave? • Value in the HideFlags enum. • Includes 3 values: • HideInHierarchy • DontSave • DontUnloadUnusedAsset • Mistake: Setting in-game assets to use this HideFlag. • Assets loaded with HideAndDontSave flag will never be unloaded!
  • 45. Examining a memory snapshot
  • 46. Examining a memory snapshot
  • 47. Examining a memory snapshot
  • 48. Check your assets! • Common for artists to add assets in very high resolutions. • Does Unity-chan’s hair really need three 1024x1024 textures? • Reduce size? Achieve the same effect some other way?
  • 49. Beware of Asset Duplication • Common problem when placing Assets into Asset Bundles • Assets in Resources & an Asset Bundle will be included in both • Will be seen as separate Assets in Unity • Separate copies will be loaded into memory • Also happens when Asset Dependencies are not declared properly
  • 50. Asset Dependencies Material A Material B Texture (shared) Shader A Shader B
  • 51. Asset Dependencies Material A Material B Texture (shared) Shader A Shader B
  • 52. Asset Dependencies Material A Material B Texture (shared) Shader A Shader B
  • 53. Asset Dependencies Material A Material B Texture (shared) Shader A Shader B Texture (shared)
  • 54. Asset Dependencies Material A Material B Texture (shared)Shader A Shader B
  • 55. Runtime texture creation • Creating textures procedurally, or downloading via the web? • Make sure your textures are non-readable! • Read-write textures use twice as much memory! • Use UnityWebRequest — defaults to non-readable textures • Use WWW.textureNonReadable instead of WWW.texture
  • 56. Marking textures non-readable • Pass nonReadable as true when calling Texture2D.LoadImage • Texture2D.LoadImage(“/path/to/image”, true); • Call Texture2D.Apply when updates are done • Texture2D.Apply(true, true); • Updates mipmaps & marks as non-readable • Texture2D.Apply(false, true); • Does not update mipmaps, but does mark as non-readable