otimização em unity: fazendo seu jogo rodar no pc da sua avó

56
Otimização em Unity Fazendo seu jogo rodar no PC da sua avó

Upload: bruno-ferreira

Post on 09-Jul-2015

1.780 views

Category:

Engineering


2 download

DESCRIPTION

Palestra sobre otimização em Unity e dicas gerais para criação de assets para jogos extraindo o máximo de performance.

TRANSCRIPT

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

Otimização em UnityFazendo seu jogo rodar no PC da sua avó

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

Otimização em UnityFazendo seu jogo rodar no PC da sua avó

(e no celular da sua avó)

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

Como?E quais os problemas mais comuns?

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

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

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

Nível 1Aproveitando o que a Unity tem a oferecer

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

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

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

Lightmaps & Light Probes• Light probes

• Aproximação de luz global paraobjetos 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

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

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

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

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

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

Nível 2Otimização na criação de Assets

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

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

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

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

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

Shader Model 2.0

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

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

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

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

Page 20: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 21: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 22: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 23: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó

Nível 3Otimização de tamanho de arquivo

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

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

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

Asset bundles!

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

Trick Question• Qual o tamanho desta textura

no build?

• 512x512

• Diffuse + Normal

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

Trick Question• 2MB?

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

Trick Question• 2MB?• 1MB?

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

Trick Question• 2MB?• 1MB?• 512KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?• 64KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?• 64KB?• 32KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?• 64KB?• 32KB?• 16KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?• 64KB?• 32KB?• 16KB?• 8KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?• 64KB?• 32KB?• 16KB?• 8KB?• 4KB?

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

Trick Question• 2MB?• 1MB?• 512KB?• 256KB?• 128KB?• 64KB?• 32KB?• 16KB?• 8KB?• 4KB?

3,72KB

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

~20MB

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

~20MB (quase tudo lightmap)

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

Nível 4Soluções criativas

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

Sombras dinâmicas?

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

Sombras dinâmicas?Nope, Chuck Testa

Page 46: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 47: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 48: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 49: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 50: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 51: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó
Page 52: Otimização em Unity: fazendo seu jogo rodar no PC da sua avó

Nível 4Cuidados com programação

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

Armadilhas na API da Unity• FindObject[OfType]

• GetComponent[s]InChildren

• GetComponent

• renderer.material

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

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…

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

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

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

Perguntas?Bruno “Tinnus” [email protected]@aquiris.com.br