SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

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

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
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
 
Hadoop - TDC 2012
Hadoop - TDC 2012Hadoop - TDC 2012
Hadoop - TDC 2012wchevreuil
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....tdc-globalcode
 

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

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
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Hadoop - TDC 2012
Hadoop - TDC 2012Hadoop - TDC 2012
Hadoop - TDC 2012
 
TIC
TICTIC
TIC
 
TIC
TICTIC
TIC
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
 

Último

Aula de classificação de rolamentos norma DIN
Aula de classificação de rolamentos norma DINAula de classificação de rolamentos norma DIN
Aula de classificação de rolamentos norma DINFabioFranca22
 
Eletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante TamandaréEletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante TamandaréGuilhermeLucio9
 
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
 
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
 
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
 
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animal
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animalFISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animal
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animalPauloHenrique154965
 
Treinamento de Proteção Auditiva 2023.pp
Treinamento de Proteção Auditiva 2023.ppTreinamento de Proteção Auditiva 2023.pp
Treinamento de Proteção Auditiva 2023.ppssuser238e8f
 
Estatística aplicada à experimentação animal
Estatística aplicada à experimentação animalEstatística aplicada à experimentação animal
Estatística aplicada à experimentação animalleandroladesenvolvim
 
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
 
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
 
MODELO LAUDO AVALIAÇÃO MÁQUINAS EQUIPAM
MODELO LAUDO AVALIAÇÃO MÁQUINAS  EQUIPAMMODELO LAUDO AVALIAÇÃO MÁQUINAS  EQUIPAM
MODELO LAUDO AVALIAÇÃO MÁQUINAS EQUIPAMCassio Rodrigo
 

Último (11)

Aula de classificação de rolamentos norma DIN
Aula de classificação de rolamentos norma DINAula de classificação de rolamentos norma DIN
Aula de classificação de rolamentos norma DIN
 
Eletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante TamandaréEletricista instalador - Senai Almirante Tamandaré
Eletricista instalador - Senai Almirante Tamandaré
 
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
 
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
 
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
 
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animal
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animalFISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animal
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animal
 
Treinamento de Proteção Auditiva 2023.pp
Treinamento de Proteção Auditiva 2023.ppTreinamento de Proteção Auditiva 2023.pp
Treinamento de Proteção Auditiva 2023.pp
 
Estatística aplicada à experimentação animal
Estatística aplicada à experimentação animalEstatística aplicada à experimentação animal
Estatística aplicada à experimentação animal
 
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
 
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
 
MODELO LAUDO AVALIAÇÃO MÁQUINAS EQUIPAM
MODELO LAUDO AVALIAÇÃO MÁQUINAS  EQUIPAMMODELO LAUDO AVALIAÇÃO MÁQUINAS  EQUIPAM
MODELO LAUDO AVALIAÇÃO MÁQUINAS EQUIPAM
 

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

Notas do Editor

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