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)

先進的なルックデベロップメント
先進的なルックデベロップメント先進的なルックデベロップメント
先進的なルックデベロップメント
 
個人製作インディーゲーム”ジラフとアンニカ” のUE4 制作事例紹介 | UNREAL FEST EXTREME 2020 WINTER
個人製作インディーゲーム”ジラフとアンニカ” のUE4 制作事例紹介 | UNREAL FEST EXTREME 2020 WINTER個人製作インディーゲーム”ジラフとアンニカ” のUE4 制作事例紹介 | UNREAL FEST EXTREME 2020 WINTER
個人製作インディーゲーム”ジラフとアンニカ” のUE4 制作事例紹介 | UNREAL FEST EXTREME 2020 WINTER
 
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
 
UE4で学ぶ水中表現(UE4 Environment Art Dive)
UE4で学ぶ水中表現(UE4 Environment Art Dive)UE4で学ぶ水中表現(UE4 Environment Art Dive)
UE4で学ぶ水中表現(UE4 Environment Art Dive)
 
UE4でプロシージャル田植え(UE4 Environment Art Dive)
UE4でプロシージャル田植え(UE4 Environment Art Dive)UE4でプロシージャル田植え(UE4 Environment Art Dive)
UE4でプロシージャル田植え(UE4 Environment Art Dive)
 
猫でもわかるUnreal Engine4
猫でもわかるUnreal Engine4猫でもわかるUnreal Engine4
猫でもわかるUnreal Engine4
 
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
UE4のシーケンサーをもっともっと使いこなそう!最新情報・Tipsをご紹介!
 
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
 
[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
 
Fortniteを支える技術
Fortniteを支える技術Fortniteを支える技術
Fortniteを支える技術
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem 猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
 
非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen
 

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

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
 
+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@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
+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...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
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
 
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
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
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
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
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