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

A simple CW transmitter and reciever
A simple CW transmitter and recieverA simple CW transmitter and reciever
A simple CW transmitter and recievergodfrey35
 
EE201 - Chapter 3 (BJT)
EE201 - Chapter 3 (BJT)EE201 - Chapter 3 (BJT)
EE201 - Chapter 3 (BJT)ruhiyah
 
Concept of Power Electronics
Concept of Power ElectronicsConcept of Power Electronics
Concept of Power ElectronicsDr.Raja R
 
Netty Notes Part 3 - Channel Pipeline and EventLoops
Netty Notes Part 3 - Channel Pipeline and EventLoopsNetty Notes Part 3 - Channel Pipeline and EventLoops
Netty Notes Part 3 - Channel Pipeline and EventLoopsRick Hightower
 
CMOS analog IC Design presentation.pptx
CMOS analog IC Design presentation.pptxCMOS analog IC Design presentation.pptx
CMOS analog IC Design presentation.pptxAkash588342
 
DAC-digital to analog converter
DAC-digital to analog converterDAC-digital to analog converter
DAC-digital to analog converterShazid Reaj
 

Tendances (20)

iButton PPT By Afigith.S
iButton PPT By Afigith.SiButton PPT By Afigith.S
iButton PPT By Afigith.S
 
Arduino Projects
Arduino ProjectsArduino Projects
Arduino Projects
 
Arduino presentation
Arduino presentationArduino presentation
Arduino presentation
 
Arduino
ArduinoArduino
Arduino
 
Network Security Goals
Network Security GoalsNetwork Security Goals
Network Security Goals
 
A simple CW transmitter and reciever
A simple CW transmitter and recieverA simple CW transmitter and reciever
A simple CW transmitter and reciever
 
EE201 - Chapter 3 (BJT)
EE201 - Chapter 3 (BJT)EE201 - Chapter 3 (BJT)
EE201 - Chapter 3 (BJT)
 
Schottky diode
Schottky diodeSchottky diode
Schottky diode
 
Virtual ground
Virtual groundVirtual ground
Virtual ground
 
Buck converter
Buck converterBuck converter
Buck converter
 
Thyristors
ThyristorsThyristors
Thyristors
 
Concept of Power Electronics
Concept of Power ElectronicsConcept of Power Electronics
Concept of Power Electronics
 
DoS or DDoS attack
DoS or DDoS attackDoS or DDoS attack
DoS or DDoS attack
 
stepper motor
stepper motorstepper motor
stepper motor
 
Netty Notes Part 3 - Channel Pipeline and EventLoops
Netty Notes Part 3 - Channel Pipeline and EventLoopsNetty Notes Part 3 - Channel Pipeline and EventLoops
Netty Notes Part 3 - Channel Pipeline and EventLoops
 
MOSFETs
MOSFETsMOSFETs
MOSFETs
 
DDOS ATTACK - MIRAI BOTNET
DDOS ATTACK - MIRAI BOTNET DDOS ATTACK - MIRAI BOTNET
DDOS ATTACK - MIRAI BOTNET
 
CMOS analog IC Design presentation.pptx
CMOS analog IC Design presentation.pptxCMOS analog IC Design presentation.pptx
CMOS analog IC Design presentation.pptx
 
DAC-digital to analog converter
DAC-digital to analog converterDAC-digital to analog converter
DAC-digital to analog converter
 
Crystal Microphone
Crystal MicrophoneCrystal Microphone
Crystal Microphone
 

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
 

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