Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Copy of Otimização de jogos para dispositivos móveis com Unity3D

No description
by

Adriano Pereira Rezende

on 19 June 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Copy of Otimização de jogos para dispositivos móveis com Unity3D

OTIMIZAÇÃO DE JOGOS PARA DISPOSITIVOS MÓVEIS COM UNITY3D
Adriano Pereira Rezende
Orientador: Kleber de Oliveira Andrade
Tópicos
A real necessidade de otimização
“Um dos problemas mais comuns encontrados na criação de jogos de computador é o desempenho. Questões como o acesso ao disco, o desempenho da GPU, o desempenho da CPU, as condições de corrida, e largura de banda de memória (ou a falta dela) pode causar lentidão ou atrasos que podem transformar um jogo de trinta quadros por segundo em um jogo de nove quadros por segundo”. (HEINEMAN, 2008, tradução nossa).
"Nos dispositivos móveis o problema de desempenho se agrava um pouco mais, devido ao fato de existirem diversos modelos de celulares e tablets com configurações de hardware completamente diferentes uns dos outros". (RABAS, 2011, tradução nossa).
A partir dessas afirmações, é possível chegar as seguintes conclusões:
O desempenho de um jogo em execução está relacionado ao hardware que o executa, e um jogo não tão bem projetado pode sofrer consequências como perda de desempenho.
Determinando o orçamento do jogo
Orçamento do jogo é um artefato produzido a partir da análise do hardware visado e do tipo de jogo qual se deseja fazer.
Define os limites do conteúdo a ser produzido e também os limites de recursos de hardware, que esse conteúdo poderá consumir.
"Orçamento de jogo é a planta baixa ou guia por meio do qual o conteúdo do jogo é criado. Ou seja, são os padrões que deverão ser seguidos ao criar o conteúdo para o jogo, bem como codificá-lo". (MCDERMOTT, 2012).
Orçamento da velocidade de projeção
A velocidade de projeção é determinada pelo número de quadros por segundo (ou frames per second - FPS) que o jogo deve rodar e isso depende do estilo do jogo que se pretende desenvolver.
É muito prejudicial para um jogo diminuir constantemente a taxa de quadros (MCDERMOTT, 2012).
Jogos projetados para serem rápidos, como os de tiro em primeira pessoa, corrida e etc., precisam ter o FPS alto, para passar ao jogador a sensação de resposta rápida e fluidez.
Em contrapartida, outros tipos de jogos como os de cartas, alguns de estratégia e etc., não.
Orçamento do tempo de quadro
Tempo do quadro (ou frametime) é o tempo que um quadro leva para ser renderizado.
O orçamento do quadro é o orçamento mais importante para o jogo e quase todas as otimizações a serem realizadas serão para seguir esse orçamento. (MCDERMOTT, 2012, p. 16).
frametime (ms) = 1000 / FPS
Orçamento de vértices
É o processo de decidir exatamente quantos vértices os objetos que compõem a cena irão conter.
"(...) Não se deve modelar nada sem conhecer as limitações do dispositivo visado, a velocidade de projeção visada e o orçamento geral dos vértices." (MCDERMOTT, 2012, p. 20).
Orçamento de texturas
Para a Unity o valor ideal é inferior a 10.000 vértices visíveis por quadro.
Para McDermott(2012, p. 20 - 21) o valor é relativo e deve ser balanceado com o uso de física no jogo.
Cena de teste
nº vértices
Gráficos
e renderização

Programação
Aplicando as técnicas de otimização
"(...) as principais áreas a se focar na otimização de um jogo para dispositivos móveis, em termos de arte são: as chamadas de desenho, a contagem de vértices por quadros, a quantidade de texturas em memória e os shaders". (MCDERMOTT, 2012)
Reduzindo as chamadas de desenho com batching
Chamadas de desenho
Comando que diz a GPU para processar um determinado conjunto de vértices de triângulos com um determinado estado (shaders, dados posicionais, normais e etc.).
Batching
Operação onde os objetos que compartilham o mesmo material são combinados e renderizados com uma única chamada de desenho.
Batch
Dinâmico
Batch
Estático
É aplicado automaticamente;
Objetos com até 900 vértices dependendo da complexidade do shader.
Sem limite de vértices;
Objetos devem ser estáticos;
Reduzindo a contagem de vértices
Modelagem "Low Poly", respeitando o orçamento de vértices;
Evitar as bordas duras.
Texturas
Dimensões POT e NPOT
Formatos de compressão
Mapas-Mip
Android: ETC/RGBA 16-bit
IOS: PVRTC
Texturas de objetos distantes da câmera são trocadas por versões menores e otimizadas.
Dimensões NPOT consomem mais memória e são mais lentas para serem lidas pela GPU.
Shaders
Vertex-Lit
Pixel-Lit
Calcula a iluminação com base nos vértices da malha, usando todas as luzes ao mesmo tempo.
Calcula a iluminação para cada pixel que é desenhado.
Shaders são programas com instruções de como a GPU deve renderizar certas imagens na tela (UNITY, 2013).
Shaders Vertex-Lit
e Unity Mobile.
Quanto mais a alocação de memória for evitada, menor será o trabalho do coletor de lixo e menores serão as chances da criação ou destruição de um objeto ocasionar uma queda de desempenho (UNITY, 2013).
Evitando alocação de memória
O processo de localização e liberação de memória não utilizada é conhecido como coleta de lixo.
Otimizando o coletor de lixo da Unity
Exige tempo de CPU significativo em segundo plano.
Criando um pool de objetos
Visão do jogador
(câmera)
Pool de projéteis.
Fora do campo de visão.
Conclusão
A partir da pesquisa realizada pode-se identificar os aspectos que mais pesam no desempenho de um jogo para dispositivos móveis, assim como a elaboração de um plano para a otimização, aplicando-se as técnicas necessárias para tal finalidade.
Como trabalhos futuros, evidencio a necessidade de pesquisas sobre quais técnicas podem ser utilizadas na otimização de jogos para outras plataformas com a Unity3D e até mesmo na otimização de jogos para dispositivos móveis utilizando outras engines como a Unreal.
Bibliografia
HEINEMAN, Becky. Sponsored Feature: Common Performance Issues in Game Programming, 2008. Disponível em <http://www.gamasutra.com/view/feature/3687/sponsored_feature_common_.php> Acesso em: 17 Março 2013.
A Unity3D
A real necessidade de otimização
Determinando o orçamento do jogo
Orçamento da velocidade de projeção
Orçamento do tempo de quadro
Orçamento de vértices
Orçamento de texturas
Aplicando as técnicas de otimização
Otimizando os gráficos e a renderização
Reduzindo as chamadas de desenho com batching
Batch dinâmico e batch estático
Reduzindo a contagem de vértices
Texturas
Shaders
Otimizando a programação
Otimizando o coletor de lixo da Unity
Criando um pool de objetos
Evitando alocação de memória
(MCDERMOTT, 2012, p. 22)
(MCDERMOTT, 2012, p. 31)
(PHOTONSTORM, 2011)
MCDERMOTT, Wes. Criando Arte de Jogos 3D para Iphone com Unity: usando modo e blender na linha de produção. Rio de Janeiro: Elsevier, 2012.
MICROSOFT. StringBuilder Class. 2013. Disponível em:
<http://msdn.microsoft.com/en-gb/library/system.text.stringbuilder.aspx> Acesso em: 25 Maio 2013.
RABAS, Marek. Czech developer MADFINGER Games stretches the limits of mobile development, 2011. Disponível em: <http://unity3d.com/gallery/made-with-unity/profiles/profile#madfinger-shadowgun> Acesso em: 17 Março 2013.
PHOTONSTORM, Flash Game Dev Tip #3 – Bullet Manager Part 1, 2011. Disponível em: <http://www.photonstorm.com/archives/1164/flash-game-dev-tip-3-bullet-manager-part-1> Acesso em: Junho 2013.
Obrigado
UNITY. Create the games you love with Unity. 2013. Disponível em: <http://unity3d.com/unity/> Acesso em: 09 Março 2013.
Conclusão
Full transcript