SlideShare une entreprise Scribd logo
1  sur  56
Otimização em Unity 
Fazendo seu jogo rodar no PC da sua avó
Otimização em Unity 
Fazendo seu jogo rodar no PC da sua avó 
(e no celular da sua avó)
Como? 
E quais os problemas mais comuns?
Problemas de otimização 
• Abuso de iluminação dinâmica 
• Muitas draw calls 
• Muitos objetos na cena 
• Muitos vértices e polígonos por 
objeto 
• Texturas com resolução muito 
alta 
• Shaders pesados 
• Muitas texturas diferentes 
• Muitas malhas diferentes 
• Tamanho final do build muito 
grande 
• Abuso de features gráficas: 
sombras, pós-processamento 
• Scripts lentos
Nível 1 
Aproveitando o que a Unity tem a oferecer
Lightmaps & Light Probes 
• Lightmaps 
• Cálculo de luz em tempo de projeto 
• Prós 
• Número arbitrário de luzes 
• Permite efeitos complexos 
• Custo baixíssimo em runtime 
• Contras 
• Só funciona em objetos estáticos
Lightmaps & Light Probes 
• Light probes 
• Aproximação de luz global para 
objetos dinâmicos 
• Prós 
• Melhora iluminação em objetos dinâmicos 
• Funciona com shaders padrão e é fácil de 
adicionar nos seus shaders 
• Contras 
• Menos preciso 
• Informação de luz de baixa frequência
Static & Dynamic batching 
• Batching: combina objetos que utilizam mesmo material em uma 
única draw call 
• Static batching 
• Combinação em tempo de projeto para objetos estáticos 
• Dynamic batching 
• Funciona automagicamente em runtime com todos os objetos 
• Porém, tem um custo mais alto de CPU
Occlusion culling 
• Desliga o rendering de objetos que estão totalmente ocludidos por 
outros na cena 
• Requer pré-cálculo e ajuste em tempo de projeto 
• Oclusores precisam ser estáticos, mas ocludidos podem ser dinâmicos
Nível 2 
Otimização na criação de Assets
Cuidados constantes na criação 
• Contagem de polígonos e vértices 
• Personagens e cenário 
• Escolher onde gastar seu “orçamento” 
• Trade-offs entre complexidade na malha e no shader 
• Malha usada na física 
• Resolução de texturas 
• Memória de vídeo é limitada 
• Escolher, de novo, onde gastar o orçamento 
• Tamanho da textura exibida na tela 
• Detalhes de alta frequência são uma ideia perigosa
Complexidade de shaders 
• Considerar o shader certo para cada situação 
• Aquela peça de decoração não precisa de 5 mapas de detalhe + normal + 
specular + cubemap + AO 
• Colocar um target estrito e baixo nos shaders… 
• Por exemplo, Shader Model 2.0 
• Garante um custo baixo 
• Incentiva programação bem otimizada
Shader Model 2.0
Texture Atlas 
• Assets que utilizam o mesmo 
shader podem compartilhar o 
material… 
• Se suas texturas forem combinadas 
em uma só 
• Extremamente importante 
• Static & Dynamic Batching
Reutilização de assets 
• Model & texture once, use everywhere 
• Reduz o custo de criação e de runtime 
• Menos malhas e texturas únicas 
• Menos memória 
• Especialmente relevante em mobile… 
• Reutilização criativa evita a repetição
Nível 3 
Otimização de tamanho de arquivo
Utilizando assets com inteligência 
• Texturas 
• Resolução 
• Compressão 
• Som 
• Sample rate 
• Formato 
• Bitrate 
• Malhas 
• Compressão 
• Remoção de polígonos inúteis 
• Animações 
• Compressão 
• Reutilização 
• Layers 
• Mixing Transforms 
• Animações aditivas
Asset bundles!
Trick Question 
• Qual o tamanho desta textura 
no build? 
• 512x512 
• Diffuse + Normal
Trick Question 
• 2MB?
Trick Question 
• 2MB? 
• 1MB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB? 
• 64KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB? 
• 64KB? 
• 32KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB? 
• 64KB? 
• 32KB? 
• 16KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB? 
• 64KB? 
• 32KB? 
• 16KB? 
• 8KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB? 
• 64KB? 
• 32KB? 
• 16KB? 
• 8KB? 
• 4KB?
Trick Question 
• 2MB? 
• 1MB? 
• 512KB? 
• 256KB? 
• 128KB? 
• 64KB? 
• 32KB? 
• 16KB? 
• 8KB? 
• 4KB? 
3,72KB
~20MB
~20MB (quase tudo lightmap)
Nível 4 
Soluções criativas
Sombras dinâmicas?
Sombras dinâmicas? 
Nope, Chuck Testa
Nível 4 
Cuidados com programação
Armadilhas na API da Unity 
• FindObject[OfType] 
• GetComponent[s]InChildren 
• GetComponent 
• renderer.material
Cuidados gerais 
• Não refazer cálculos quando as entradas não mudam 
• Calcule a primeira vez, guarde para consulta 
• Não refazer o mesmo cálculo em vários lugares 
• Centralize o cálculo (por exemplo em um Manager) 
• Distribuir cálculo pesado por vários frames 
• Exemplo: determinar visibilidade entre todos os jogadores 
• Tradeoff: desempenho X precisão 
• Quase sempre a precisão não precisa ser de um frame…
Mais alternativas 
• Desligar objetos “inúteis” para evitar gastar CPU 
• Update, FixedUpdate 
• Física 
• Culling 
• Multithreading para computação pesada 
• !!CUIDADO!! – API da Unity *NÃO* é thread-safe 
• Mas um bom isolamento de código vai longe 
• Exemplo clássico: IA
Perguntas? 
Bruno “Tinnus” Ferreira 
tinnus@gmail.com 
bruno.ferreira@aquiris.com.br

Contenu connexe

Tendances

An Introduction of Graphics Design
An Introduction of Graphics DesignAn Introduction of Graphics Design
An Introduction of Graphics DesignAbhishek Enterprise
 
Graphics display-devicesmod-1
Graphics display-devicesmod-1Graphics display-devicesmod-1
Graphics display-devicesmod-1Praveen Kumar
 
Graphic Design for Dummies
Graphic Design for DummiesGraphic Design for Dummies
Graphic Design for DummiesYousra Beddaou
 
Graphic Design Elements and Principles - Tips and inspiration
Graphic Design Elements and Principles - Tips and inspirationGraphic Design Elements and Principles - Tips and inspiration
Graphic Design Elements and Principles - Tips and inspirationShahria Hossain
 
Photoshop intro to basics
Photoshop intro to basicsPhotoshop intro to basics
Photoshop intro to basicsNatalie Hurd
 
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 ...Unity Technologies
 
History Of Electronic Game Design
History Of Electronic Game DesignHistory Of Electronic Game Design
History Of Electronic Game DesignRoy Kimmins
 
Game Engine Overview
Game Engine OverviewGame Engine Overview
Game Engine OverviewSharad Mitra
 
Intro to Adobe Photoshop
Intro to Adobe PhotoshopIntro to Adobe Photoshop
Intro to Adobe PhotoshopDUSPviz
 
Adobe Illustrator: 6 Essential Tips and Tools
Adobe Illustrator: 6 Essential Tips and ToolsAdobe Illustrator: 6 Essential Tips and Tools
Adobe Illustrator: 6 Essential Tips and ToolsNguyet Minh
 
LAFS Game Design 7 - Prototyping
LAFS Game Design 7 - PrototypingLAFS Game Design 7 - Prototyping
LAFS Game Design 7 - PrototypingDavid Mullich
 
Typography presentation
Typography presentationTypography presentation
Typography presentationGreg Sarles
 
Designing with illustrator
Designing with illustratorDesigning with illustrator
Designing with illustratorLesley Baumann
 
Design principles
Design principles  Design principles
Design principles Eman Magdi
 
Top 10 photoshop tools that you need to master photoshop
Top 10 photoshop tools that you need to master photoshopTop 10 photoshop tools that you need to master photoshop
Top 10 photoshop tools that you need to master photoshopWitsel Carry
 

Tendances (20)

Photoshop ders notları
Photoshop ders notlarıPhotoshop ders notları
Photoshop ders notları
 
Unity 3D, A game engine
Unity 3D, A game engineUnity 3D, A game engine
Unity 3D, A game engine
 
An Introduction of Graphics Design
An Introduction of Graphics DesignAn Introduction of Graphics Design
An Introduction of Graphics Design
 
Graphics display-devicesmod-1
Graphics display-devicesmod-1Graphics display-devicesmod-1
Graphics display-devicesmod-1
 
Unity
UnityUnity
Unity
 
Graphic Design for Dummies
Graphic Design for DummiesGraphic Design for Dummies
Graphic Design for Dummies
 
Graphic Design Elements and Principles - Tips and inspiration
Graphic Design Elements and Principles - Tips and inspirationGraphic Design Elements and Principles - Tips and inspiration
Graphic Design Elements and Principles - Tips and inspiration
 
Photoshop intro to basics
Photoshop intro to basicsPhotoshop intro to basics
Photoshop intro to basics
 
AndroidManifest
AndroidManifestAndroidManifest
AndroidManifest
 
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 ...
 
History Of Electronic Game Design
History Of Electronic Game DesignHistory Of Electronic Game Design
History Of Electronic Game Design
 
Game Engine Overview
Game Engine OverviewGame Engine Overview
Game Engine Overview
 
Intro to Adobe Photoshop
Intro to Adobe PhotoshopIntro to Adobe Photoshop
Intro to Adobe Photoshop
 
Adobe Illustrator: 6 Essential Tips and Tools
Adobe Illustrator: 6 Essential Tips and ToolsAdobe Illustrator: 6 Essential Tips and Tools
Adobe Illustrator: 6 Essential Tips and Tools
 
LAFS Game Design 7 - Prototyping
LAFS Game Design 7 - PrototypingLAFS Game Design 7 - Prototyping
LAFS Game Design 7 - Prototyping
 
Typography presentation
Typography presentationTypography presentation
Typography presentation
 
Designing with illustrator
Designing with illustratorDesigning with illustrator
Designing with illustrator
 
Photoshop 101
Photoshop 101Photoshop 101
Photoshop 101
 
Design principles
Design principles  Design principles
Design principles
 
Top 10 photoshop tools that you need to master photoshop
Top 10 photoshop tools that you need to master photoshopTop 10 photoshop tools that you need to master photoshop
Top 10 photoshop tools that you need to master photoshop
 

Similaire à Otimização em Unity: fazendo seu jogo rodar no PC da sua avó

Construção de jogos com o motor unity3 d
Construção de jogos com o motor unity3 dConstrução de jogos com o motor unity3 d
Construção de jogos com o motor unity3 dEduardo Bonfandini
 
Otimizando fragment shaders
Otimizando fragment shadersOtimizando fragment shaders
Otimizando fragment shadersVinicius Vecchi
 
Fotografia digital basico
Fotografia digital basicoFotografia digital basico
Fotografia digital basicoiturriet
 
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...Thiago Curvelo
 
O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?OpenBossa
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
Aula 003 - Imagem, resolução e formatos
Aula 003 - Imagem, resolução e formatosAula 003 - Imagem, resolução e formatos
Aula 003 - Imagem, resolução e formatosOsmar Rios
 
Adobe After Effects CS6 Classroom in a Book
Adobe After Effects CS6 Classroom in a BookAdobe After Effects CS6 Classroom in a Book
Adobe After Effects CS6 Classroom in a BookSandra Abalde
 
TinyML - IoT e Machine Learning
TinyML -  IoT e Machine LearningTinyML -  IoT e Machine Learning
TinyML - IoT e Machine LearningAlvaro Viebrantz
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Mozart Diniz
 
Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013José Farias
 
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)Marcelo Barros de Almeida
 
Mobile Game Case: Bboy in Heaven´s Mission
Mobile Game Case: Bboy in Heaven´s MissionMobile Game Case: Bboy in Heaven´s Mission
Mobile Game Case: Bboy in Heaven´s Missionelliando dias
 
Producao Grafica - Fundamentos
Producao Grafica - FundamentosProducao Grafica - Fundamentos
Producao Grafica - Fundamentosdualpixel
 
Portando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma MaemoPortando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma MaemoEduardo Lima
 
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no GoTDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Gotdc-globalcode
 
[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQLCleber Dantas
 

Similaire à Otimização em Unity: fazendo seu jogo rodar no PC da sua avó (20)

Construção de jogos com o motor unity3 d
Construção de jogos com o motor unity3 dConstrução de jogos com o motor unity3 d
Construção de jogos com o motor unity3 d
 
Otimizando fragment shaders
Otimizando fragment shadersOtimizando fragment shaders
Otimizando fragment shaders
 
Fotografia digital basico
Fotografia digital basicoFotografia digital basico
Fotografia digital basico
 
Fotografia digital basico
Fotografia digital basicoFotografia digital basico
Fotografia digital basico
 
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...
 
O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?O que há de novo no Plasma Netbook?
O que há de novo no Plasma Netbook?
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
Aula 003 - Imagem, resolução e formatos
Aula 003 - Imagem, resolução e formatosAula 003 - Imagem, resolução e formatos
Aula 003 - Imagem, resolução e formatos
 
Adobe After Effects CS6 Classroom in a Book
Adobe After Effects CS6 Classroom in a BookAdobe After Effects CS6 Classroom in a Book
Adobe After Effects CS6 Classroom in a Book
 
TinyML - IoT e Machine Learning
TinyML -  IoT e Machine LearningTinyML -  IoT e Machine Learning
TinyML - IoT e Machine Learning
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
Dicas de otimização para aplicações Qt
Dicas de otimização para aplicações QtDicas de otimização para aplicações Qt
Dicas de otimização para aplicações Qt
 
Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013
 
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
 
Mobile Game Case: Bboy in Heaven´s Mission
Mobile Game Case: Bboy in Heaven´s MissionMobile Game Case: Bboy in Heaven´s Mission
Mobile Game Case: Bboy in Heaven´s Mission
 
Producao Grafica - Fundamentos
Producao Grafica - FundamentosProducao Grafica - Fundamentos
Producao Grafica - Fundamentos
 
Portando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma MaemoPortando Aplicações Para a Plataforma Maemo
Portando Aplicações Para a Plataforma Maemo
 
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no GoTDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
TDC2018SP | Trilha Go - Entendendo alocacao de memoria no Go
 
Gerenciamento de cor - parte 2 da aula
Gerenciamento de cor - parte 2 da aulaGerenciamento de cor - parte 2 da aula
Gerenciamento de cor - parte 2 da aula
 
[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL[MinhaVida TechDay] NoSQL
[MinhaVida TechDay] NoSQL
 

Dernier

Treinamento de NR06 Equipamento de Proteção Individual
Treinamento de NR06 Equipamento de Proteção IndividualTreinamento de NR06 Equipamento de Proteção Individual
Treinamento de NR06 Equipamento de Proteção Individualpablocastilho3
 
Eletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante TamandaréEletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante TamandaréGuilhermeLucio9
 
DESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICA
DESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICADESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICA
DESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICAPabloVinicius40
 
A Importância dos EPI's no trabalho e no dia a dia laboral
A Importância dos EPI's no trabalho e no dia a dia laboralA Importância dos EPI's no trabalho e no dia a dia laboral
A Importância dos EPI's no trabalho e no dia a dia laboralFranciscaArrudadaSil
 
Tecnólogo em Mecatrônica - Universidade Anhanguera
Tecnólogo em Mecatrônica - Universidade AnhangueraTecnólogo em Mecatrônica - Universidade Anhanguera
Tecnólogo em Mecatrônica - Universidade AnhangueraGuilhermeLucio9
 
LEAN SIX SIGMA - Garantia da qualidade e segurança
LEAN SIX SIGMA - Garantia da qualidade e segurançaLEAN SIX SIGMA - Garantia da qualidade e segurança
LEAN SIX SIGMA - Garantia da qualidade e segurançaGuilhermeLucio9
 
Livro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdf
Livro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdfLivro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdf
Livro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdfSamuel Ramos
 

Dernier (7)

Treinamento de NR06 Equipamento de Proteção Individual
Treinamento de NR06 Equipamento de Proteção IndividualTreinamento de NR06 Equipamento de Proteção Individual
Treinamento de NR06 Equipamento de Proteção Individual
 
Eletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante TamandaréEletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante Tamandaré
 
DESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICA
DESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICADESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICA
DESTRAVANDO O NOVO EDITAL DA CAIXA ECONOMICA
 
A Importância dos EPI's no trabalho e no dia a dia laboral
A Importância dos EPI's no trabalho e no dia a dia laboralA Importância dos EPI's no trabalho e no dia a dia laboral
A Importância dos EPI's no trabalho e no dia a dia laboral
 
Tecnólogo em Mecatrônica - Universidade Anhanguera
Tecnólogo em Mecatrônica - Universidade AnhangueraTecnólogo em Mecatrônica - Universidade Anhanguera
Tecnólogo em Mecatrônica - Universidade Anhanguera
 
LEAN SIX SIGMA - Garantia da qualidade e segurança
LEAN SIX SIGMA - Garantia da qualidade e segurançaLEAN SIX SIGMA - Garantia da qualidade e segurança
LEAN SIX SIGMA - Garantia da qualidade e segurança
 
Livro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdf
Livro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdfLivro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdf
Livro Vibrações Mecânicas - Rao Singiresu - 4ª Ed.pdf
 

Otimização em Unity: fazendo seu jogo rodar no PC da sua avó

  • 1. Otimização em Unity Fazendo seu jogo rodar no PC da sua avó
  • 2. Otimização em Unity Fazendo seu jogo rodar no PC da sua avó (e no celular da sua avó)
  • 3.
  • 4.
  • 5. Como? E quais os problemas mais comuns?
  • 6. Problemas de otimização • Abuso de iluminação dinâmica • Muitas draw calls • Muitos objetos na cena • Muitos vértices e polígonos por objeto • Texturas com resolução muito alta • Shaders pesados • Muitas texturas diferentes • Muitas malhas diferentes • Tamanho final do build muito grande • Abuso de features gráficas: sombras, pós-processamento • Scripts lentos
  • 7. Nível 1 Aproveitando o que a Unity tem a oferecer
  • 8. Lightmaps & Light Probes • Lightmaps • Cálculo de luz em tempo de projeto • Prós • Número arbitrário de luzes • Permite efeitos complexos • Custo baixíssimo em runtime • Contras • Só funciona em objetos estáticos
  • 9. Lightmaps & Light Probes • Light probes • Aproximação de luz global para objetos dinâmicos • Prós • Melhora iluminação em objetos dinâmicos • Funciona com shaders padrão e é fácil de adicionar nos seus shaders • Contras • Menos preciso • Informação de luz de baixa frequência
  • 10.
  • 11. Static & Dynamic batching • Batching: combina objetos que utilizam mesmo material em uma única draw call • Static batching • Combinação em tempo de projeto para objetos estáticos • Dynamic batching • Funciona automagicamente em runtime com todos os objetos • Porém, tem um custo mais alto de CPU
  • 12.
  • 13. Occlusion culling • Desliga o rendering de objetos que estão totalmente ocludidos por outros na cena • Requer pré-cálculo e ajuste em tempo de projeto • Oclusores precisam ser estáticos, mas ocludidos podem ser dinâmicos
  • 14. Nível 2 Otimização na criação de Assets
  • 15. Cuidados constantes na criação • Contagem de polígonos e vértices • Personagens e cenário • Escolher onde gastar seu “orçamento” • Trade-offs entre complexidade na malha e no shader • Malha usada na física • Resolução de texturas • Memória de vídeo é limitada • Escolher, de novo, onde gastar o orçamento • Tamanho da textura exibida na tela • Detalhes de alta frequência são uma ideia perigosa
  • 16. Complexidade de shaders • Considerar o shader certo para cada situação • Aquela peça de decoração não precisa de 5 mapas de detalhe + normal + specular + cubemap + AO • Colocar um target estrito e baixo nos shaders… • Por exemplo, Shader Model 2.0 • Garante um custo baixo • Incentiva programação bem otimizada
  • 18. Texture Atlas • Assets que utilizam o mesmo shader podem compartilhar o material… • Se suas texturas forem combinadas em uma só • Extremamente importante • Static & Dynamic Batching
  • 19. Reutilização de assets • Model & texture once, use everywhere • Reduz o custo de criação e de runtime • Menos malhas e texturas únicas • Menos memória • Especialmente relevante em mobile… • Reutilização criativa evita a repetição
  • 20.
  • 21.
  • 22.
  • 23. Nível 3 Otimização de tamanho de arquivo
  • 24. Utilizando assets com inteligência • Texturas • Resolução • Compressão • Som • Sample rate • Formato • Bitrate • Malhas • Compressão • Remoção de polígonos inúteis • Animações • Compressão • Reutilização • Layers • Mixing Transforms • Animações aditivas
  • 26.
  • 27. Trick Question • Qual o tamanho desta textura no build? • 512x512 • Diffuse + Normal
  • 29. Trick Question • 2MB? • 1MB?
  • 30. Trick Question • 2MB? • 1MB? • 512KB?
  • 31. Trick Question • 2MB? • 1MB? • 512KB? • 256KB?
  • 32. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB?
  • 33. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB? • 64KB?
  • 34. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB? • 64KB? • 32KB?
  • 35. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB? • 64KB? • 32KB? • 16KB?
  • 36. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB? • 64KB? • 32KB? • 16KB? • 8KB?
  • 37. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB? • 64KB? • 32KB? • 16KB? • 8KB? • 4KB?
  • 38. Trick Question • 2MB? • 1MB? • 512KB? • 256KB? • 128KB? • 64KB? • 32KB? • 16KB? • 8KB? • 4KB? 3,72KB
  • 39.
  • 40. ~20MB
  • 41. ~20MB (quase tudo lightmap)
  • 42. Nível 4 Soluções criativas
  • 43.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52. Nível 4 Cuidados com programação
  • 53. Armadilhas na API da Unity • FindObject[OfType] • GetComponent[s]InChildren • GetComponent • renderer.material
  • 54. Cuidados gerais • Não refazer cálculos quando as entradas não mudam • Calcule a primeira vez, guarde para consulta • Não refazer o mesmo cálculo em vários lugares • Centralize o cálculo (por exemplo em um Manager) • Distribuir cálculo pesado por vários frames • Exemplo: determinar visibilidade entre todos os jogadores • Tradeoff: desempenho X precisão • Quase sempre a precisão não precisa ser de um frame…
  • 55. Mais alternativas • Desligar objetos “inúteis” para evitar gastar CPU • Update, FixedUpdate • Física • Culling • Multithreading para computação pesada • !!CUIDADO!! – API da Unity *NÃO* é thread-safe • Mas um bom isolamento de código vai longe • Exemplo clássico: IA
  • 56. Perguntas? Bruno “Tinnus” Ferreira tinnus@gmail.com bruno.ferreira@aquiris.com.br

Notes de l'éditeur

  1. https://www.youtube.com/watch?v=UQ7KfSYvQIo&feature=youtu.be