taming performance within unity...company introduction 7 студий 250 000 000 игроков 15...
TRANSCRIPT
TAMING PERFORMANCE WITHIN UNITY
Данил Гошко
SPEAKER INTRODUCTION
Techniсal Artist в Action Games Department)
ДАНИЛ ГОШКО
2Taming Performance Within Unity
COMPANY INTRODUCTION
7 студий
250 000 000 игроков
15
проектов150 стран
www.developers.plarium.com
3Taming Performance Within Unity
ART CODE
4Taming Performance Within Unity
5Taming Performance Within Unity
• Составляющие эффективной работы с движком Unity
• Объективный анализ данных.
• Проблемы и методы оптимизации:
• звука,
• физики,
• Графики,
• UnityUI.
• Поиск решений для поставленных задач
О ЧЕМ БУДЕМ ГОВОРИТЬ?
6Taming Performance Within Unity
Удобство/ скорость работы с редактором
Работа с проектом
Работа с подсистемами Unity
Поиск решений
СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY
7Taming Performance Within Unity
УДОБСТВО/ СКОРОСТЬ РАБОТЫ С РЕДАКТОРОМ
Работа с проектом
Работа с подсистемами Unity
Поиск решений
СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY
8Taming Performance Within Unity
Custom: Ctrl+g
Custom: Ctrl+Shift+a
MenuItem(“Tools/Item %g“)]
private static void NewNestedOption()
{
}
[MenuItem(“Tools/New Option %#a“)]
private static void NewMenuOption()
{
}
ИСПОЛЬЗОВАНИЕ СУЩЕСТВУЮЩИХ И СОЗДАНИЕ СОБСТВЕННЫХ HOTKEYS
https://docs.unity3d.com/Manual/UnityHotkeys.htmlЭкономия времени при взаимодействии с редактором
9Taming Performance Within Unity
КАСТОМИЗАЦИЯ РАБОЧЕГО ПРОСТРАНСТВА
https://docs.unity3d.com/Manual/CustomizingYourWorkspace.htmlЭкономия времени при взаимодействии с редактором
10Taming Performance Within Unity
СОЗДАНИЕ CUSTOM INSPECTORS, CUSTOM EDITOR MENUS
https://docs.unity3d.com/Manual/ExtendingTheEditor.htmlЭкономия времени при взаимодействии с редактором, автоматизация механических задач
11Taming Performance Within Unity
КОНТРОЛЬ ИМПОРТА АССЕТОВ
public class MyPostProcessor: AssetPostprocessor { public void OnPreprocessModel() { ModelImporter modelImporter = (ModelImporter)assetImporter;
if(modelImporter.isReadable { modelImporter.isReadable = false; modelImporter.SaveAndReimport(); } } }
Контроль дефолтных настроек импорта ассетовhttps://docs.unity3d.com/ScriptReference/AssetPostprocessor.html
12Taming Performance Within Unity
ИСПОЛЬЗУЙТЕ CACHE SERVER
https://docs.unity3d.com/Manual/CacheServer.htmlЭкономия времени при импорте и синхронизации графических ассетов
13Taming Performance Within Unity
ИСПОЛЬЗУЙТЕ CLOUD BUILD
Source control
HOW CLOUD BUILD WORKS
Build in the cloud
Detect commits
Install & test
https://unity3d.com/ru/unity/features/cloud-buildЭкономия времени при получение сборки на целевом устройстве
14Taming Performance Within Unity
ИСПОЛЬЗУЙТЕ UNITY REMOTE
https://docs.unity3d.com/Manual/UnityRemote5.htmlОценка целесообразности элемента для целевого устройства
15Taming Performance Within Unity
УДОБСТВО/СКОРОСТЬ РАБОТЫ С РЕДАКТОРОМ
Building custom inspector by Unity
CustomEditors by Prime31
Intro to Cloud Build by Unity
Editor scripting for nOObs
https://unity3d.com/ru/learn/tutorials/topics/interface-essentials/building-custom-inspector
https://www.youtube.com/watch?v=WlGwBmM-dfA
https://unity3d.com/ru/learn/tutorials/topics/cloud-build/introduction-unity-cloud-build
https://www.youtube.com/watch?v=9bHzTDIJX_Q
16Taming Performance Within Unity
СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY
Удобство/ скорость работы
с редактором
РАБОТА С ПРОЕКТОМ
Работа с подсистемами Unity
Поиск решений
17Taming Performance Within Unity
ФИЛОСОФИЯ АНАЛИЗА ДАННЫХ
PROFILE ANALYZE
FPS MS
TWEAK
18Taming Performance Within Unity
ФИЛОСОФИЯ АНАЛИЗА ДАННЫХ
19Taming Performance Within Unity
ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА
ЧЕГО МЫ ХОТИМ?
ВЫБРАТЬ ЦЕЛЕВОЙ ДЕВАЙС
20Taming Performance Within Unity
ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА
TIER: LOW TIER: HIGHTIER: MIDDLE
21Taming Performance Within Unity
ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА
22Taming Performance Within Unity
ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА
TIER: LOW TIER: HIGHTIER: MIDDLE
23Taming Performance Within Unity
ТРЕБУЕМЫЙ ПОКАЗАТЕЛЬ FPS
45+30
24Taming Performance Within Unity
QUALITY TIERS
https://docs.unity3d.com/Manual/class-GraphicsSettings.html
25Taming Performance Within Unity
QUALITY SETTINGS
https://docs.unity3d.com/Manual/class-QualitySettings.html
26Taming Performance Within Unity
ВЫЯВЛЕНИЕ ПРОБЛЕМ ПРОИЗВОДИТЕЛЬНОСТИ
27Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ UNITY
Unity Profiler
Unity Memory Profiler
Unity Frame Debugger
https://bitbucket.org/Unity-Technologies/memoryprofiler
28Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ UNITY
Unity Hardware Stats
Unity view modes
29Taming Performance Within Unity
СЭМПЛИРОВАНИЕ ФРАГМЕНТА ИЗ PROFILER
30Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ ДЕКСТОПНЫХ СИСТЕМ
31Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ ДЕКСТОПНЫХ СИСТЕМ
Xcode
Nvidia Insight
Intel GPA
Renderdoc
https://developer.apple.com/xcode/
https://developer.nvidia.com/nvidia-nsight-visual-studio-edition
https://software.intel.com/en-us/gpa
https://renderdoc.org/builds
32Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ МОБИЛЬНЫХ СИСТЕМ
33Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ МОБИЛЬНЫХ СИСТЕМ
Mali graphics debugger
Adreno GPU profiler
PowerVR SDK
Nvidia Tegra development
https://developer.arm.com/products/software-development-tools
https://developer.qualcomm.com/software/adreno-gpu-profiler
https://community.imgtec.com/developers/powervr/
https://developer.nvidia.com/tegra-development
34Taming Performance Within Unity
ТИПЫ РЕСУРСОЗАВИСИМОСТЕЙ
Подготовка Draw Calls Пропускная способность
Физика GPU-код (шейдеры)
Скрипты Разрешение
Память
...
Освещение
CPU GPU
35Taming Performance Within Unity
УТОПИЯ
Как же хорошо, когда все хорошо
36Taming Performance Within Unity
GPU PROFILING IS NOT SUPPORTED
37Taming Performance Within Unity
ЧТО ДАЛЬШЕ?
Четко сформулируйте проблему
Минимум шума
Фокус на решении
38Taming Performance Within Unity
СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY
Удобство/ скорость работы с редактором
Работа с проектом
РАБОТА С ПОДСИСТЕМАМИ UNITY
Поиск решений
39Taming Performance Within Unity
ГРАФИКАОсновная задача
Минимизация затрат на отрисовку кадра, время загрузки сцены, использование памяти
40Taming Performance Within Unity
UNITY RENDERING PATH
Forward
Deferred
Legacy Deferred
Vertex-Lit
https://docs.unity3d.com/Manual/RenderingPaths.html
41Taming Performance Within Unity
Количество пикселей
OVERDRAW+ =+ Инструкции в шейдере
FILL RATE
using UnityEngine;
public class NewResolution: MonoBehaviour { void Start() { // Switch to 640 x 480 fullscreen Screen.SetResolution(640, 480, true); } }
FILL RATE И РАЗРЕШЕНИЕ ЭКРАНА
42Taming Performance Within Unity
APPLICATION
RENDER STATE
COMMANDBUFFER
DRAW CALL
- Vertex shader
- Pixel shader
- Texture
- Lighting
RENDER STATE
DRAW CALL
DRAW CALL BA
TC
H
RAM VRAM
.OBJ
.FBX
.OTHER
SIMPLE RENDERING PIPELINE
CPU GPU
43Taming Performance Within Unity
STATIC
DYNAMIC
BATCHING
https://docs.unity3d.com/Manual/DrawCallBatching.html
44Taming Performance Within Unity
STATIC DYNAMIC
Memory array Vertex buffer
GPU GPU
On scene Startup
DYNAMIC OVERHEAD
300 MESHES/BATCH
900 VERTEX ATTRS
300 VERTS/MESHRuntime
BATCHING
DRAWCALLSCPU
DRAWCALLSCPU
MEMORY!TRANSFORM
!REALTIME SHADOWS !SKINNED MESH
! -TRANSFORM!MULTIPASS SHADERS
45Taming Performance Within Unity
using UnityEngine; using System.Collections;
[RequireComponent(typeof(MeshFilter))] [RequireComponent(typeof(MeshRenderer))] public class ExampleClass : MonoBehaviour { void Start() { MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] combine = new CombineInstance[meshFilters.Length]; int i = 0; while (i < meshFilters.Length) { combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = meshFilters[i].transform.localToWorldMatrix; meshFilters[i].gameObject.active = false; i++; } transform.GetComponent<MeshFilter>().mesh = new Mesh(); transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine); transform.gameObject.active = true; } }
ИСПОЛЬЗОВАНИЕ СУЩЕСТВУЮЩИХ И СОЗДАНИЕ СОБСТВЕННЫХ HOTKEYS
https://docs.unity3d.com/ScriptReference/Mesh.CombineMeshes.html
46Taming Performance Within Unity
SHADER
TEXTURE
MATERIAL MESH
КОНЦЕПТ «МАТЕРИАЛ» В UNITY
https://docs.unity3d.com/Manual/Materials.html
47Taming Performance Within Unity
КОНЦЕПТ «ШЕЙДЕР» В UNITY
https://unity3d.com/ru/learn/tutorials/topics/graphics/gentle-introduction-shaders
48Taming Performance Within Unity
УСКОРЕНИЕ ЗАГРУЗКИ ШЕЙДЕРОВ В UNITY
49Taming Performance Within Unity
ОБЩИЕ ОПТИМИЗАЦИИ
Изучите функции из .cginc от Unity Учитывайте модель освещения
Аккуратнее с alphatestСнижайте степень точности: half, fixed
Предоставляйте доступ только к нужным property
Вычисления переменных перед формированием вектора
Старайтесь перенести вычисления в vertex-функцию
Старайтесь избегать логических проверок (if-else)
Для LOD используйте упрощенные версии шейдера
Исключите сложные функции (pow, exp, log, cos, sin, tan)
Избегайте изменения степени точности в момент swizzling:
float4 indexer = (1.0, 3.0, 2.0, 1.0);fixed2 newValue_01 = indexer.xy;
Меньше времени на отрисовку кадра GPU
50Taming Performance Within Unity
РАБОТА СО СВЕТОМ
51Taming Performance Within Unity
ОБЩАЯ КОНЦЕПЦИЯ
LIGHT
REALTIME BAKED MIXED
ILLUMINATION/DIFFUSION
SHADOW
52Taming Performance Within Unity
ВОЗДЕЙСТВИЕ СВЕТА
53Taming Performance Within Unity
LIGHT LAYER CULLING
54Taming Performance Within Unity
ТЕНИ
ENLIGHTEN
LIGHTMAPPING
PROGRESSIVE (PREVIEW)
CUSTOMBAKEDREALTIME
55Taming Performance Within Unity
ВРЕМЯ ПЕЧЬ КАРТЫ
56Taming Performance Within Unity
РЕКОМЕНДАЦИИ ПЕРЕД ЗАПЕКАНИЕМ КАРТ
Стоит ли все элементы делать static?
Используйте Light Probes
57Taming Performance Within Unity
LIGHT PROBES
https://docs.unity3d.com/Manual/LightProbes.html
58Taming Performance Within Unity
РЕКОМЕНДАЦИИ ПЕРЕД ЗАПЕКАНИЕМ КАРТ
Прототипирование в низком
разрешении для повышения
скорости итераций
Больше места на Lightmap для
major-объектов и объектов,
близких к камере
Final gather, увеличение
количества лучей в самом конце
Сжимайте Lightmap
для экономии памяти
АЛГОРИТМ ДЕЙСТВИЙ
59Taming Performance Within Unity
UV CHARTS & CLUSTERS
60Taming Performance Within Unity
ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ МОБИЛЬНЫХ СИСТЕМ
Precomputed realtime GI
Bake it ‘til you make it
https://unity3d.com/ru/learn/tutorials/topics/graphics/introduction-precomputed-realtime-gi
https://www.youtube.com/watch?v=u5RTVMBWabg
61Taming Performance Within Unity
РАБОТА С ТРЕХМЕРНЫМИ МОДЕЛЯМИ
62Taming Performance Within Unity
КОРРЕКТНЫЙ ИМПОРТ
ЭКСПОРТ — ФОРМАТЫ ПРОПРИЕТАРНЫЕ ФОРМАТЫ
https://docs.unity3d.com/Manual/3D-formats.html
MAYA
MAX
BLENDER
...
63Taming Performance Within Unity
LEVEL OF DETAILS (LOD)
https://docs.unity3d.com/Manual/LevelOfDetail.html
64Taming Performance Within Unity
OVERDRAW
https://github.com/Nordeus/Unite2017/blob/master/OverdrawMonitor
65Taming Performance Within Unity
OCCLUSION CULLING
https://docs.unity3d.com/Manual/OcclusionCulling.htmlУменьшает overdraw, увеличивает потребление RAM
66Taming Performance Within Unity
ОБЩИЕ РЕКОМЕНДАЦИИ
Контролируйте количество Hard Edge в модели
Минимизируйте количество UV-каналов и UV-швов
Определите «бюджет» полигонов в кадре
67Taming Performance Within Unity
РАБОТА С АНИМАЦИЯМИ
68Taming Performance Within Unity
КОРРЕКТНЫЙ ИМПОРТ
https://docs.unity3d.com/Manual/class-AnimationClip.html
69Taming Performance Within Unity
OPTIMIZE TRANSFORM HIERARCHY
http://www.strichnet.com/how-to-improve-the-performance-of-unity3d-animations/Уменьшает Animator Overhead
70Taming Performance Within Unity
УМЕНЬШЕНИЕ ВЕСА АНИМАЦИЙ
71Taming Performance Within Unity
OPTIMIZE TRANSFORM HIERARCHY
Около 30% экономии памяти
72Taming Performance Within Unity
GPU SKINNING
Снижает нагрузку на CPU, повышает нагрузку на GPU
CPU
CPU
Трансформ костей
Трансформ вертексов
+
73Taming Performance Within Unity
ОБЩИЕ ОПТИМИЗАЦИИ
Количество SkinnedMesh: 1
Используйте Cull Completely
Используйте Mecanim, если нужен blending/transition. В другом случае — legacy/аналог
Не дублируйте, используйте Retargeting
Минимизируйте количество костей в SkinnedMesh
Разделяйте Forward/Inverse кинематики
Старайтесь избегать сложных transform-иерархий
Избегайте scale-анимаций в SkinnedMesh AnimationClip
Используйте BodyMask для отсекания элементов (пальцы и т.д.)
Используйте Hash вместо String при скриптинге Mecanim
74Taming Performance Within Unity
РАБОТА С ТЕКСТУРАМИ И СПРАЙТАМИ
75Taming Performance Within Unity
КОРРЕКТНЫЙ ИМПОРТ
https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
76Taming Performance Within Unity
АТЛАСИРОВАНИЕ И УПАКОВКА ТЕКСТУР
77Taming Performance Within Unity
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour
{ public Texture2D[] newAtlas; public Rect[] rects; void Start() { Texture2D atlas = new Texture2D(8192, 8192); rects = atlas.PackTextures(newAtlas, 2, 8192); }}
АТЛАСИРОВАНИЕ ТЕКСТУР
https://docs.unity3d.com/ScriptReference/Texture2D.PackTextures.html
78Taming Performance Within Unity
АТЛАСИРОВАНИЕ СПРАЙТОВ
https://docs.unity3d.com/Manual/SpritePacker.html
79Taming Performance Within Unity
АТЛАСИРОВАНИЕ ТЕКСТУР
Уменьшает overhead при смене текстур/спрайтов
Уменьшает overhead при работе с текстурами в памяти
Будьте внимательны с Read/Write Enabled (двойная аллокация памяти). По умолчанию — отключать.
Уменьшает количество материалов на сцене, DrawCalls
80Taming Performance Within Unity
РАБОТА С СИСТЕМАМИ ЧАСТИЦ
81Taming Performance Within Unity
ОБЩИЕ РЕКОМЕНДАЦИИ
ПАРАМЕТР WITHCHILDREN == FALSE
КЭШИРУЙТЕ МАССИВ СИСТЕМ ЧАСТИЦ CUSTOM CULLING
82Taming Performance Within Unity
MODULE PERFORMANCE
6000
5000
4000
3000
2000
1000
0
Co
llisi
on
Cu
sto
m D
ata
Ext
ern
al F
orc
es
Forc
es
Ove
r Li
feti
me
Inh
eri
t Ve
loci
ty
Lig
hts
Lim
it V
elo
city
O
ver
Life
tim
e
Min/Max perfomance based on module settings
No
ise
Ro
tati
on
By
Spe
ed
Ro
tati
on
Ove
r Li
feti
me
Shap
e
Size
By
Spe
ed
Size
Ove
r Li
feti
me
Sub
Em
itte
r
Trai
l
Trig
ge
r
Ve
loci
ty O
ver
Life
tim
e
83Taming Performance Within Unity
SHAPE MODULE
1.4
1.2
1
0.8
0.6
0.4
0.2
0
Edg
e
Tim
e (M
S)
Bo
x
Bo
x Sh
ell
Bo
x Ed
ge
Do
nu
t
Co
ne
Vo
lum
e
He
mis
ph
ere
Me
sh (V
ert
ex)
Me
sh (T
rian
gle
)
Me
sh (E
dg
e)
84Taming Performance Within Unity
MINMAXCURVE
Scal
ar
Tim
e (M
S)
Two
Sca
lars
Cu
rve
Two
Cu
rve
s
Cu
rve
Slo
w
Two
Cu
rve
s Sl
ow
3000
2500
2000
1500
1000
500
0
85Taming Performance Within Unity
MINMAXGRADIENT
Co
lor
Tim
e (M
S)
Two
Co
lors
Co
lor
List
Gra
die
nt
Two
Co
lors
Lis
t
Two
Gra
die
nts
3000
2500
2000
1500
1000
500
0
86Taming Performance Within Unity
СИСТЕМЫ ЧАСТИЦ
The Unity particle system: tips, tricks
Particle Systems
UnityTips Particle System Performance
https://www.youtube.com/watch?v=_N4iL0SQ9q8
https://docs.unity3d.com/Manual/ParticleSystems.html
https://blogs.unity3d.com/ru/2016/12/20/unitytips-particlesystem-performance-culling/
87Taming Performance Within Unity
ФИЗИКАОСНОВНАЯ ЗАДАЧА
БАЛАНС МЕЖДУ ТОЧНОСТЬЮ РАСЧЕТА ФИЗИКИ И ЗАТРАТАМИ РЕСУРСОВ
88Taming Performance Within Unity
БИБЛИОТЕКИ ОБРАБОТКИ ФИЗИКИ
2D 3D
89Taming Performance Within Unity
ЧАСТОТА ПРОСЧЕТА ФИЗИКИ
https://docs.unity3d.com/Manual/class-TimeManager.html
90Taming Performance Within Unity
ВЗАИМОДЕЙСТВИЕ С ФИЗИЧЕСКИМ ДВИЖКОМ
FixedUpdate() Update()
OnTrigger***() Coroutines
OnCollision***()
https://docs.unity3d.com/Manual/ExecutionOrder.html
91Taming Performance Within Unity
ТИПЫ КОЛЛАЙДЕРОВ
Rigidbody
STATIC
Rigidbody
DYNAMIC
Rigidbody
KINEMATIC
Is Kinematic
https://docs.unity3d.com/Manual/CollidersOverview.html
92Taming Performance Within Unity
МАТРИЦА СТОЛКНОВЕНИЙ
https://docs.unity3d.com/Manual/CollidersOverview.html
93Taming Performance Within Unity
ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ STATIC COLLIDER
Runtime Transform
Не добавляйте/удаляйте в Runtime
WARNING!
Статическая геометрия
Unity формирует отдельный batch для static colliders, упрощаются операции просчета
94Taming Performance Within Unity
ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ DYNAMIC COLLIDERS
Discrete Continuous
Collision with static colliders
Collision with every collider
ContinuousDynamic
CPU Usage
Change position
Check collision
Linear interpolation + collision check
Priority
95Taming Performance Within Unity
СОСТОЯНИЯ RIGIDBODY
Active Sleeping
https://docs.unity3d.com/Manual/class-PhysicsManager.html
96Taming Performance Within Unity
ОПТИМИЗАЦИЯ ИСПОЛЬЗОВАНИЯ RAYCAST
Контролируйте длину Raycast
Активно используйте Layer Mask
Старайтесь избегать Raycast в mesh collider
Используйте NonAlloc methods (RaycastNonAlloc etc.)
https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
97Taming Performance Within Unity
ОБЩИЕ ОПТИМИЗАЦИИ
Стремитесь к Scale 1:1:1
Стремитесь к Pivot 0:0:0
Отключайте/удаляйте Ragdoll, который не используется
Уменьшайте Solver Iterations для Unity joints
Значение массы держите в пределах [0.1;10]Присваивайте степень точности Discrete
Активно используйте LayerMaskУвеличивайте Timestep
Увеличивайте Sleeping thresholdЕсли не требуется моментальная синхронизация всех объектов, отмечайте Rigidbody — IsKinematic
Старайтесь использовать Primitive Colliders чаще, Mesh Colliders реже
Если высокая точность/частота вычислений не требуется
98Taming Performance Within Unity
РАБОТА С ПОДСИСТЕМОЙ ФИЗИКИ
Physics best practices
PhysX in Unity 5.0
High performance physics in Unity 5
https://unity3d.com/ru/learn/tutorials/topics/physics/physics-best-practices
https://www.slideshare.net/AnthonyYakovlev/unite14-physics
https://blogs.unity3d.com/ru/2014/07/08/high-performance-physics-in-unity-5/
99Taming Performance Within Unity
АУДИООсновная задача
Баланс между нагрузкой CPU и использованием памяти
100Taming Performance Within Unity
ПОДСИСТЕМА AUDIO
Audio Clip
Audio Source Native Plugins SDK
Audio Mixer
Audio Listener
Audio Filter
Reverb Zone
ОСНОВА УНИФИКАЦИЯ НАСТРОЙКА
https://docs.unity3d.com/Manual/AudioMixerNativeAudioPlugin.html
101Taming Performance Within Unity
ИМПОРТ АУДИОКЛИПОВ
CPU Usage
Memory usage
Decompress On Load
Использовать в большинстве случаев
Большие файлы/есть проблемы с ОЗУ
Background music
Compressed In Memory
Streaming
https://docs.unity3d.com/ru/530/Manual/class-AudioClip.html
102Taming Performance Within Unity
ЧАСТЫЕ ПРОБЛЕМЫ
Большое количество AudioSource
Использование CPU
Большое количество референсов к AudioClips
Занимает память во время работы сцены
Если PreloadAudioData == True
https://docs.unity3d.com/ru/530/Manual/class-AudioClip.html
103Taming Performance Within Unity
БОЛЬШОЕ КОЛИЧЕСТВО AUDIOSOURCE
Жесткое ограничение
количества активных
AudioSource (Pooling/Culling)
Жесткое ограничение
количества обращений
к одному и тому же AudioClip
Экономим использование CPU
104Taming Performance Within Unity
_loadedAudioAsset = Resources.Load(resourcePath) as AudioClip;
Resources.UnloadAsset(_loadedAudioAsset);
АТЛАСИРОВАНИЕ ТЕКСТУР
Загружаем нужный AudioClip вручную
Assets/Resources...
Выгружаем из памяти ненужный AudioClip
Экономим память
105Taming Performance Within Unity
РЕКОМЕНДАЦИЯ: НЕ ДУБЛИРУЙТЕ, ИСПОЛЬЗУЙТЕ AUDIO MIXER
https://docs.unity3d.com/Manual/CollidersOverview.htmlЭкономим память
106Taming Performance Within Unity
ИМПОРТ АУДИОКЛИПОВ
107Taming Performance Within Unity
РЕКОМЕНДАЦИЯ: БАЛАНС МЕЖДУ CPU/RAM
108Taming Performance Within Unity
РАБОТА С ПОДСИСТЕМОЙ АУДИО
Simple Audio Manager
Creating a flexible audio system in Unity
Tips & Tricks for Unity Audio Memory
http://www.jonathanpalmergd.com/2015/04/05/unity-simple-audiomanager/
http://overdevelop.blogspot.com/2014/04/creating-flexible-audio-system-in-unity.html
http://overdevelop.blogspot.com/2014/04/creating-flexible-audio-system-in-unity.html
109Taming Performance Within Unity
UnityUIОсновная задача
Формирование оптимальной структуры для отрисовки UI
110Taming Performance Within Unity
БАЗОВАЯ СТРУКТУРА, ПОРЯДОК ОТРИСОВКИ UI-ЭЛЕМЕНТОВ
Alpha Blending,Transparent
Graphic
Drawable Geometry
Batch\ReBatch
Rect Transform
Layout
CANVAS CANVAS UPDATE REGISTRY
111Taming Performance Within Unity
ВИЗУАЛЬНАЯ ЧИСТОТА ОБМАНЧИВА: OVERDRAW
Каждый UI-элемент прозрачен
112Taming Performance Within Unity
КАТЕГОРИИ ПРОБЛЕМ, ПРОФИЛИРОВАНИЕ
Время CPU на генерацию геометрии (например, текст)
Время CPU на формирование Canvas Batch
Затраты CPU на ReBatch за счет Dirty Canvas
«Дорогие» шейдеры для обработки GPU
Unity UI Profiler
113Taming Performance Within Unity
ПЕРВОСТЕПЕННАЯ ОПТИМИЗАЦИЯ
СОЗДАНИЕ SUBCANVAS
МИНИМАЛЬНОЕ КОЛИЧЕСТВО RAYCAST TARGET
POOLING ДЛЯ SCROLLVIEW- ЭЛЕМЕНТО И АНАЛОГОВ
Canvas
SubCanvas_01 SubCanvas_02
114Taming Performance Within Unity
ПЕРВОСТЕПЕННАЯ ОПТИМИЗАЦИЯ
Dirty Layouts не рождаются, ими становятся
Animator помечает Canvas Dirty в КАЖДОМ кадре. (даже если визуально ничего не происходит)
• OnEnable/OnDisable
• Reparenting
• OnDidApplyAnimationProperties
• OnRectTransformDimensionsChanged
• … to be continued
Старайтесь избегать Layout Groups, используйте Anchors
115Taming Performance Within Unity
«ДОРОГИЕ» ШЕЙДЕРЫ ДЛЯ ОБРАБОТКИ GPU
Multipass?
Z-Write?
...
https://gist.github.com/ArturoNereu/9ef65eba9c3c4bd63062cbe408e4f81a
116Taming Performance Within Unity
ПЕРВОСТЕПЕННАЯ ОПТИМИЗАЦИЯ
Проведите аудит анимаций в UI. «Красоту» распределяем по уровням Quality Settings
Максимальный merge типовых элементов (иконка+товар, воин+иконка класса и т. д.)
Отключаем Camera output, который рендерится за UI
Нужен WorldSpace Canvas? Кэшируем ссылку на камеру (иначе происходит вызов функции)
Отключаем «перекрытые» UI-элементы
Используем Best Fit и Pixel Perfect если ОЧЕНЬ нужно, иначе деактивируем
Если требуется отрисовка 3D объектов, используем Render Texture
Вместо onEnable/Disable отключаем/включаем компонент Canvas
117Taming Performance Within Unity
РАБОТА С UnityUI
A guide to optimizing Unity UI
Enhanced Scroller
https://unity3d.com/ru/learn/tutorials/temas/best-practices/guide-optimizing-unity-ui
https://www.assetstore.unity3d.com/en/#!/content/36378
118Taming Performance Within Unity
СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY
Удобство/ скорость работы с редактором
Работа с проектом
Работа с подсистемами Unity
ПОИСК РЕШЕНИЙ
119Taming Performance Within Unity
УЧИТЕ ТЕОРИЮ
Софт меняется, принципы остаются
120Taming Performance Within Unity
УЧИТЕ ТЕОРИЮ (НЕ ТАК)
121Taming Performance Within Unity
ОТВЕТЫ НА ВОПРОСЫ
GitHub
UnityAnswers
#unity3d
#gamedev
http://answers.unity3d.com
122Taming Performance Within Unity
НОВАЯ ИНФОРМАЦИЯ КАЖДЫЙ ДЕНЬ
123Taming Performance Within Unity
БУДЬТЕ ОТКРЫТЫ К ОБЩЕНИЮ
Просите feedback Делитесь опытом
Посещайте мероприятия Пробуйте новые подходы, техники, инструменты
124Taming Performance Within Unity
Научиться можно только тому, что любишь
И. Гёте
125Taming Performance Within Unity
THANK YOU!QUESTIONS?
126Taming Performance Within Unity