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

What's hot (20)

TextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応についてTextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応について
 
UE4におけるレベル制作事例
UE4におけるレベル制作事例  UE4におけるレベル制作事例
UE4におけるレベル制作事例
 
UE4の色について v1.1
 UE4の色について v1.1 UE4の色について v1.1
UE4の色について v1.1
 
UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-UE4 LODs for Optimization -Beginner-
UE4 LODs for Optimization -Beginner-
 
【Unity道場 2017】パーティクルエフェクト実践編 ~ヒットエフェクト制作プレイクダウン~
【Unity道場 2017】パーティクルエフェクト実践編 ~ヒットエフェクト制作プレイクダウン~【Unity道場 2017】パーティクルエフェクト実践編 ~ヒットエフェクト制作プレイクダウン~
【Unity道場 2017】パーティクルエフェクト実践編 ~ヒットエフェクト制作プレイクダウン~
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
 
Plug-ins & Third-Party SDKs in UE4
Plug-ins & Third-Party SDKs in UE4Plug-ins & Third-Party SDKs in UE4
Plug-ins & Third-Party SDKs in UE4
 
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
 
Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
UE4 Volumetric Fogで 空間を演出する!
UE4 Volumetric Fogで 空間を演出する!UE4 Volumetric Fogで 空間を演出する!
UE4 Volumetric Fogで 空間を演出する!
 
Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法
 
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
 
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
 
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
 

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】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京都】最適化をする前に覚えておきたい技術
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 

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.

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の活用テクニックをハンズオンで一緒に学ぼう!
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
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ティーチャートレーニングデイ -認定アソシエイト編-
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
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
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

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
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
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
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
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
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 

【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