taming performance within unity...company introduction 7 студий 250 000 000 игроков 15...

Post on 04-Apr-2020

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

ОТВЕТЫ НА ВОПРОСЫ

Twitter

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

top related