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

126
TAMING PERFORMANCE WITHIN UNITY Данил Гошко

Upload: others

Post on 04-Apr-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

TAMING PERFORMANCE WITHIN UNITY

Данил Гошко

Page 2: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

SPEAKER INTRODUCTION

Techniсal Artist в Action Games Department)

ДАНИЛ ГОШКО

2Taming Performance Within Unity

Page 3: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

COMPANY INTRODUCTION

7 студий

250 000 000 игроков

15

проектов150 стран

www.developers.plarium.com

3Taming Performance Within Unity

Page 4: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ART CODE

4Taming Performance Within Unity

Page 5: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

5Taming Performance Within Unity

Page 6: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

• Составляющие эффективной работы с движком Unity

• Объективный анализ данных.

• Проблемы и методы оптимизации:

• звука,

• физики,

• Графики,

• UnityUI.

• Поиск решений для поставленных задач

О ЧЕМ БУДЕМ ГОВОРИТЬ?

6Taming Performance Within Unity

Page 7: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

Удобство/ скорость работы с редактором

Работа с проектом

Работа с подсистемами Unity

Поиск решений

СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY

7Taming Performance Within Unity

Page 8: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УДОБСТВО/ СКОРОСТЬ РАБОТЫ С РЕДАКТОРОМ

Работа с проектом

Работа с подсистемами Unity

Поиск решений

СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY

8Taming Performance Within Unity

Page 9: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 10: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КАСТОМИЗАЦИЯ РАБОЧЕГО ПРОСТРАНСТВА

https://docs.unity3d.com/Manual/CustomizingYourWorkspace.htmlЭкономия времени при взаимодействии с редактором

10Taming Performance Within Unity

Page 11: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СОЗДАНИЕ CUSTOM INSPECTORS, CUSTOM EDITOR MENUS

https://docs.unity3d.com/Manual/ExtendingTheEditor.htmlЭкономия времени при взаимодействии с редактором, автоматизация механических задач

11Taming Performance Within Unity

Page 12: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КОНТРОЛЬ ИМПОРТА АССЕТОВ

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

Page 13: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИСПОЛЬЗУЙТЕ CACHE SERVER

https://docs.unity3d.com/Manual/CacheServer.htmlЭкономия времени при импорте и синхронизации графических ассетов

13Taming Performance Within Unity

Page 14: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИСПОЛЬЗУЙТЕ 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

Page 15: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИСПОЛЬЗУЙТЕ UNITY REMOTE

https://docs.unity3d.com/Manual/UnityRemote5.htmlОценка целесообразности элемента для целевого устройства

15Taming Performance Within Unity

Page 16: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УДОБСТВО/СКОРОСТЬ РАБОТЫ С РЕДАКТОРОМ

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

Page 17: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY

Удобство/ скорость работы

с редактором

РАБОТА С ПРОЕКТОМ

Работа с подсистемами Unity

Поиск решений

17Taming Performance Within Unity

Page 18: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ФИЛОСОФИЯ АНАЛИЗА ДАННЫХ

PROFILE ANALYZE

FPS MS

TWEAK

18Taming Performance Within Unity

Page 19: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ФИЛОСОФИЯ АНАЛИЗА ДАННЫХ

19Taming Performance Within Unity

Page 20: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА

ЧЕГО МЫ ХОТИМ?

ВЫБРАТЬ ЦЕЛЕВОЙ ДЕВАЙС

20Taming Performance Within Unity

Page 21: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА

TIER: LOW TIER: HIGHTIER: MIDDLE

21Taming Performance Within Unity

Page 22: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА

22Taming Performance Within Unity

Page 23: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОПРЕДЕЛЕНИЕ ЦЕЛЕВОГО УСТРОЙСТВА

TIER: LOW TIER: HIGHTIER: MIDDLE

23Taming Performance Within Unity

Page 24: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ТРЕБУЕМЫЙ ПОКАЗАТЕЛЬ FPS

45+30

24Taming Performance Within Unity

Page 25: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

QUALITY TIERS

https://docs.unity3d.com/Manual/class-GraphicsSettings.html

25Taming Performance Within Unity

Page 26: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

QUALITY SETTINGS

https://docs.unity3d.com/Manual/class-QualitySettings.html

26Taming Performance Within Unity

Page 27: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ВЫЯВЛЕНИЕ ПРОБЛЕМ ПРОИЗВОДИТЕЛЬНОСТИ

27Taming Performance Within Unity

Page 28: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ UNITY

Unity Profiler

Unity Memory Profiler

Unity Frame Debugger

https://bitbucket.org/Unity-Technologies/memoryprofiler

28Taming Performance Within Unity

Page 29: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ UNITY

Unity Hardware Stats

Unity view modes

29Taming Performance Within Unity

Page 30: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СЭМПЛИРОВАНИЕ ФРАГМЕНТА ИЗ PROFILER

30Taming Performance Within Unity

Page 31: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ ДЕКСТОПНЫХ СИСТЕМ

31Taming Performance Within Unity

Page 32: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ ДЕКСТОПНЫХ СИСТЕМ

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

Page 33: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ МОБИЛЬНЫХ СИСТЕМ

33Taming Performance Within Unity

Page 34: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ МОБИЛЬНЫХ СИСТЕМ

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

Page 35: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ТИПЫ РЕСУРСОЗАВИСИМОСТЕЙ

Подготовка Draw Calls Пропускная способность

Физика GPU-код (шейдеры)

Скрипты Разрешение

Память

...

Освещение

CPU GPU

35Taming Performance Within Unity

Page 36: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УТОПИЯ

Как же хорошо, когда все хорошо

36Taming Performance Within Unity

Page 37: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

GPU PROFILING IS NOT SUPPORTED

37Taming Performance Within Unity

Page 38: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ЧТО ДАЛЬШЕ?

Четко сформулируйте проблему

Минимум шума

Фокус на решении

38Taming Performance Within Unity

Page 39: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY

Удобство/ скорость работы с редактором

Работа с проектом

РАБОТА С ПОДСИСТЕМАМИ UNITY

Поиск решений

39Taming Performance Within Unity

Page 40: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ГРАФИКАОсновная задача

Минимизация затрат на отрисовку кадра, время загрузки сцены, использование памяти

40Taming Performance Within Unity

Page 41: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

UNITY RENDERING PATH

Forward

Deferred

Legacy Deferred

Vertex-Lit

https://docs.unity3d.com/Manual/RenderingPaths.html

41Taming Performance Within Unity

Page 42: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

Количество пикселей

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

Page 43: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 44: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

STATIC

DYNAMIC

BATCHING

https://docs.unity3d.com/Manual/DrawCallBatching.html

44Taming Performance Within Unity

Page 45: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 46: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 47: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

SHADER

TEXTURE

MATERIAL MESH

КОНЦЕПТ «МАТЕРИАЛ» В UNITY

https://docs.unity3d.com/Manual/Materials.html

47Taming Performance Within Unity

Page 48: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КОНЦЕПТ «ШЕЙДЕР» В UNITY

https://unity3d.com/ru/learn/tutorials/topics/graphics/gentle-introduction-shaders

48Taming Performance Within Unity

Page 49: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УСКОРЕНИЕ ЗАГРУЗКИ ШЕЙДЕРОВ В UNITY

49Taming Performance Within Unity

Page 50: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОБЩИЕ ОПТИМИЗАЦИИ

Изучите функции из .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

Page 51: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА СО СВЕТОМ

51Taming Performance Within Unity

Page 52: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОБЩАЯ КОНЦЕПЦИЯ

LIGHT

REALTIME BAKED MIXED

ILLUMINATION/DIFFUSION

SHADOW

52Taming Performance Within Unity

Page 53: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ВОЗДЕЙСТВИЕ СВЕТА

53Taming Performance Within Unity

Page 54: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

LIGHT LAYER CULLING

54Taming Performance Within Unity

Page 55: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ТЕНИ

ENLIGHTEN

LIGHTMAPPING

PROGRESSIVE (PREVIEW)

CUSTOMBAKEDREALTIME

55Taming Performance Within Unity

Page 56: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ВРЕМЯ ПЕЧЬ КАРТЫ

56Taming Performance Within Unity

Page 57: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РЕКОМЕНДАЦИИ ПЕРЕД ЗАПЕКАНИЕМ КАРТ

Стоит ли все элементы делать static?

Используйте Light Probes

57Taming Performance Within Unity

Page 58: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

LIGHT PROBES

https://docs.unity3d.com/Manual/LightProbes.html

58Taming Performance Within Unity

Page 59: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РЕКОМЕНДАЦИИ ПЕРЕД ЗАПЕКАНИЕМ КАРТ

Прототипирование в низком

разрешении для повышения

скорости итераций

Больше места на Lightmap для

major-объектов и объектов,

близких к камере

Final gather, увеличение

количества лучей в самом конце

Сжимайте Lightmap

для экономии памяти

АЛГОРИТМ ДЕЙСТВИЙ

59Taming Performance Within Unity

Page 60: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

UV CHARTS & CLUSTERS

60Taming Performance Within Unity

Page 61: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИНСТРУМЕНТЫ ПРОФИЛИРОВАНИЯ МОБИЛЬНЫХ СИСТЕМ

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

Page 62: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С ТРЕХМЕРНЫМИ МОДЕЛЯМИ

62Taming Performance Within Unity

Page 63: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КОРРЕКТНЫЙ ИМПОРТ

ЭКСПОРТ — ФОРМАТЫ ПРОПРИЕТАРНЫЕ ФОРМАТЫ

https://docs.unity3d.com/Manual/3D-formats.html

MAYA

MAX

BLENDER

...

63Taming Performance Within Unity

Page 64: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

LEVEL OF DETAILS (LOD)

https://docs.unity3d.com/Manual/LevelOfDetail.html

64Taming Performance Within Unity

Page 65: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

OVERDRAW

https://github.com/Nordeus/Unite2017/blob/master/OverdrawMonitor

65Taming Performance Within Unity

Page 66: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

OCCLUSION CULLING

https://docs.unity3d.com/Manual/OcclusionCulling.htmlУменьшает overdraw, увеличивает потребление RAM

66Taming Performance Within Unity

Page 67: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОБЩИЕ РЕКОМЕНДАЦИИ

Контролируйте количество Hard Edge в модели

Минимизируйте количество UV-каналов и UV-швов

Определите «бюджет» полигонов в кадре

67Taming Performance Within Unity

Page 68: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С АНИМАЦИЯМИ

68Taming Performance Within Unity

Page 69: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КОРРЕКТНЫЙ ИМПОРТ

https://docs.unity3d.com/Manual/class-AnimationClip.html

69Taming Performance Within Unity

Page 70: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

OPTIMIZE TRANSFORM HIERARCHY

http://www.strichnet.com/how-to-improve-the-performance-of-unity3d-animations/Уменьшает Animator Overhead

70Taming Performance Within Unity

Page 71: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УМЕНЬШЕНИЕ ВЕСА АНИМАЦИЙ

71Taming Performance Within Unity

Page 72: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

OPTIMIZE TRANSFORM HIERARCHY

Около 30% экономии памяти

72Taming Performance Within Unity

Page 73: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

GPU SKINNING

Снижает нагрузку на CPU, повышает нагрузку на GPU

CPU

CPU

Трансформ костей

Трансформ вертексов

+

73Taming Performance Within Unity

Page 74: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОБЩИЕ ОПТИМИЗАЦИИ

Количество SkinnedMesh: 1

Используйте Cull Completely

Используйте Mecanim, если нужен blending/transition. В другом случае — legacy/аналог

Не дублируйте, используйте Retargeting

Минимизируйте количество костей в SkinnedMesh

Разделяйте Forward/Inverse кинематики

Старайтесь избегать сложных transform-иерархий

Избегайте scale-анимаций в SkinnedMesh AnimationClip

Используйте BodyMask для отсекания элементов (пальцы и т.д.)

Используйте Hash вместо String при скриптинге Mecanim

74Taming Performance Within Unity

Page 75: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С ТЕКСТУРАМИ И СПРАЙТАМИ

75Taming Performance Within Unity

Page 76: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КОРРЕКТНЫЙ ИМПОРТ

https://docs.unity3d.com/Manual/class-TextureImporterOverride.html

76Taming Performance Within Unity

Page 77: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

АТЛАСИРОВАНИЕ И УПАКОВКА ТЕКСТУР

77Taming Performance Within Unity

Page 78: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 79: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

АТЛАСИРОВАНИЕ СПРАЙТОВ

https://docs.unity3d.com/Manual/SpritePacker.html

79Taming Performance Within Unity

Page 80: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

АТЛАСИРОВАНИЕ ТЕКСТУР

Уменьшает overhead при смене текстур/спрайтов

Уменьшает overhead при работе с текстурами в памяти

Будьте внимательны с Read/Write Enabled (двойная аллокация памяти). По умолчанию — отключать.

Уменьшает количество материалов на сцене, DrawCalls

80Taming Performance Within Unity

Page 81: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С СИСТЕМАМИ ЧАСТИЦ

81Taming Performance Within Unity

Page 82: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОБЩИЕ РЕКОМЕНДАЦИИ

ПАРАМЕТР WITHCHILDREN == FALSE

КЭШИРУЙТЕ МАССИВ СИСТЕМ ЧАСТИЦ CUSTOM CULLING

82Taming Performance Within Unity

Page 83: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 84: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 85: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 86: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Page 87: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СИСТЕМЫ ЧАСТИЦ

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

Page 88: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ФИЗИКАОСНОВНАЯ ЗАДАЧА

БАЛАНС МЕЖДУ ТОЧНОСТЬЮ РАСЧЕТА ФИЗИКИ И ЗАТРАТАМИ РЕСУРСОВ

88Taming Performance Within Unity

Page 89: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

БИБЛИОТЕКИ ОБРАБОТКИ ФИЗИКИ

2D 3D

89Taming Performance Within Unity

Page 90: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ЧАСТОТА ПРОСЧЕТА ФИЗИКИ

https://docs.unity3d.com/Manual/class-TimeManager.html

90Taming Performance Within Unity

Page 91: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ВЗАИМОДЕЙСТВИЕ С ФИЗИЧЕСКИМ ДВИЖКОМ

FixedUpdate() Update()

OnTrigger***() Coroutines

OnCollision***()

https://docs.unity3d.com/Manual/ExecutionOrder.html

91Taming Performance Within Unity

Page 92: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ТИПЫ КОЛЛАЙДЕРОВ

Rigidbody

STATIC

Rigidbody

DYNAMIC

Rigidbody

KINEMATIC

Is Kinematic

https://docs.unity3d.com/Manual/CollidersOverview.html

92Taming Performance Within Unity

Page 93: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

МАТРИЦА СТОЛКНОВЕНИЙ

https://docs.unity3d.com/Manual/CollidersOverview.html

93Taming Performance Within Unity

Page 94: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ STATIC COLLIDER

Runtime Transform

Не добавляйте/удаляйте в Runtime

WARNING!

Статическая геометрия

Unity формирует отдельный batch для static colliders, упрощаются операции просчета

94Taming Performance Within Unity

Page 95: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ 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

Page 96: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СОСТОЯНИЯ RIGIDBODY

Active Sleeping

https://docs.unity3d.com/Manual/class-PhysicsManager.html

96Taming Performance Within Unity

Page 97: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОПТИМИЗАЦИЯ ИСПОЛЬЗОВАНИЯ RAYCAST

Контролируйте длину Raycast

Активно используйте Layer Mask

Старайтесь избегать Raycast в mesh collider

Используйте NonAlloc methods (RaycastNonAlloc etc.)

https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

97Taming Performance Within Unity

Page 98: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ОБЩИЕ ОПТИМИЗАЦИИ

Стремитесь к 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

Page 99: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С ПОДСИСТЕМОЙ ФИЗИКИ

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

Page 100: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

АУДИООсновная задача

Баланс между нагрузкой CPU и использованием памяти

100Taming Performance Within Unity

Page 101: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ПОДСИСТЕМА 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

Page 102: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИМПОРТ АУДИОКЛИПОВ

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

Page 103: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ЧАСТЫЕ ПРОБЛЕМЫ

Большое количество AudioSource

Использование CPU

Большое количество референсов к AudioClips

Занимает память во время работы сцены

Если PreloadAudioData == True

https://docs.unity3d.com/ru/530/Manual/class-AudioClip.html

103Taming Performance Within Unity

Page 104: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

БОЛЬШОЕ КОЛИЧЕСТВО AUDIOSOURCE

Жесткое ограничение

количества активных

AudioSource (Pooling/Culling)

Жесткое ограничение

количества обращений

к одному и тому же AudioClip

Экономим использование CPU

104Taming Performance Within Unity

Page 105: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

_loadedAudioAsset = Resources.Load(resourcePath) as AudioClip;

Resources.UnloadAsset(_loadedAudioAsset);

АТЛАСИРОВАНИЕ ТЕКСТУР

Загружаем нужный AudioClip вручную

Assets/Resources...

Выгружаем из памяти ненужный AudioClip

Экономим память

105Taming Performance Within Unity

Page 106: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РЕКОМЕНДАЦИЯ: НЕ ДУБЛИРУЙТЕ, ИСПОЛЬЗУЙТЕ AUDIO MIXER

https://docs.unity3d.com/Manual/CollidersOverview.htmlЭкономим память

106Taming Performance Within Unity

Page 107: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ИМПОРТ АУДИОКЛИПОВ

107Taming Performance Within Unity

Page 108: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РЕКОМЕНДАЦИЯ: БАЛАНС МЕЖДУ CPU/RAM

108Taming Performance Within Unity

Page 109: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С ПОДСИСТЕМОЙ АУДИО

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

Page 110: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

UnityUIОсновная задача

Формирование оптимальной структуры для отрисовки UI

110Taming Performance Within Unity

Page 111: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

БАЗОВАЯ СТРУКТУРА, ПОРЯДОК ОТРИСОВКИ UI-ЭЛЕМЕНТОВ

Alpha Blending,Transparent

Graphic

Drawable Geometry

Batch\ReBatch

Rect Transform

Layout

CANVAS CANVAS UPDATE REGISTRY

111Taming Performance Within Unity

Page 112: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ВИЗУАЛЬНАЯ ЧИСТОТА ОБМАНЧИВА: OVERDRAW

Каждый UI-элемент прозрачен

112Taming Performance Within Unity

Page 113: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

КАТЕГОРИИ ПРОБЛЕМ, ПРОФИЛИРОВАНИЕ

Время CPU на генерацию геометрии (например, текст)

Время CPU на формирование Canvas Batch

Затраты CPU на ReBatch за счет Dirty Canvas

«Дорогие» шейдеры для обработки GPU

Unity UI Profiler

113Taming Performance Within Unity

Page 114: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ПЕРВОСТЕПЕННАЯ ОПТИМИЗАЦИЯ

СОЗДАНИЕ SUBCANVAS

МИНИМАЛЬНОЕ КОЛИЧЕСТВО RAYCAST TARGET

POOLING ДЛЯ SCROLLVIEW- ЭЛЕМЕНТО И АНАЛОГОВ

Canvas

SubCanvas_01 SubCanvas_02

114Taming Performance Within Unity

Page 115: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ПЕРВОСТЕПЕННАЯ ОПТИМИЗАЦИЯ

Dirty Layouts не рождаются, ими становятся

Animator помечает Canvas Dirty в КАЖДОМ кадре. (даже если визуально ничего не происходит)

• OnEnable/OnDisable

• Reparenting

• OnDidApplyAnimationProperties

• OnRectTransformDimensionsChanged

• … to be continued

Старайтесь избегать Layout Groups, используйте Anchors

115Taming Performance Within Unity

Page 116: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

«ДОРОГИЕ» ШЕЙДЕРЫ ДЛЯ ОБРАБОТКИ GPU

Multipass?

Z-Write?

...

https://gist.github.com/ArturoNereu/9ef65eba9c3c4bd63062cbe408e4f81a

116Taming Performance Within Unity

Page 117: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

ПЕРВОСТЕПЕННАЯ ОПТИМИЗАЦИЯ

Проведите аудит анимаций в UI. «Красоту» распределяем по уровням Quality Settings

Максимальный merge типовых элементов (иконка+товар, воин+иконка класса и т. д.)

Отключаем Camera output, который рендерится за UI

Нужен WorldSpace Canvas? Кэшируем ссылку на камеру (иначе происходит вызов функции)

Отключаем «перекрытые» UI-элементы

Используем Best Fit и Pixel Perfect если ОЧЕНЬ нужно, иначе деактивируем

Если требуется отрисовка 3D объектов, используем Render Texture

Вместо onEnable/Disable отключаем/включаем компонент Canvas

117Taming Performance Within Unity

Page 118: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

РАБОТА С 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

Page 119: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

СОСТАВЛЯЮЩИЕ ЭФФЕКТИВНОЙ РАБОТЫ С ДВИЖКОМ UNITY

Удобство/ скорость работы с редактором

Работа с проектом

Работа с подсистемами Unity

ПОИСК РЕШЕНИЙ

119Taming Performance Within Unity

Page 120: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УЧИТЕ ТЕОРИЮ

Софт меняется, принципы остаются

120Taming Performance Within Unity

Page 121: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

УЧИТЕ ТЕОРИЮ (НЕ ТАК)

121Taming Performance Within Unity

Page 122: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

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

Twitter

GitHub

UnityAnswers

#unity3d

#gamedev

http://answers.unity3d.com

122Taming Performance Within Unity

Page 123: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

НОВАЯ ИНФОРМАЦИЯ КАЖДЫЙ ДЕНЬ

123Taming Performance Within Unity

Page 124: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

БУДЬТЕ ОТКРЫТЫ К ОБЩЕНИЮ

Просите feedback Делитесь опытом

Посещайте мероприятия Пробуйте новые подходы, техники, инструменты

124Taming Performance Within Unity

Page 125: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

Научиться можно только тому, что любишь

И. Гёте

125Taming Performance Within Unity

Page 126: TAMING PERFORMANCE WITHIN UNITY...COMPANY INTRODUCTION 7 студий 250 000 000 игроков 15 проектов 150 стран Taming Performance Within Unity 3 • Составляющие

THANK YOU!QUESTIONS?

126Taming Performance Within Unity