SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida Very Happy
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Rigidbody2D AddForce - Como adicionar uma força oneshot.
duvida
Em breve Ilhas Multiplayer, sobrevivencia PVP E PVM
Text multiplayer
[TUTORIAL] Avião Script
Duvida sobre o Unet
Colocar Gifs em uma UI Unity 5?
Como faço para a musica continuar tocando quando muda de cena?
MANTER TELA DO CELULAR LIGADA
Tirar Fotos no Unity 5 FPS
[TUTORIAL] Luz Principal,Luz de Freio,Piscas para Carro,Moto,Caminhão,Ônibus,Etc...
como posso colocar tempo em qualquer script?
Machado PBR | 3D Axe with PBR textures.
SCRIPT ISOMETRICO PARA ROTACIONAR O PLAYER COM MOUSE
Mesmo material mas objeto mais claro
MEU JOGO DE TERROR EM DESENVOLVIMENTO E BLOGGUER
Alguém pode fazer um rig pra mão do meu personagem?
Verificar quantos objetos tem a seguinte tag na scena
visualizador de ritmo
the ŞỮŘVƗVΔŁ ƗŞŁΔŇĐ [Lançamento]
Time
Unity Banco de Dados
Grave no Som da Unity!
ESSE EO MEU JOGO QUE EU ESTOU DESENVOLVENDO (VERSAO ALPHA)
Assesar Script De Outra Script
Camera FPS atravessa paredes
R7 - GOOH (resident evil 7)
Formação de equipa para o Jogo Until the last
Suspensão carro com raycast
como criar um botao dentro do if() (em C# pq quero padronizar tudo na mesma linguagem)
Arquivos de Expanssão OBB
Formação de equipe para jogo estilo Rust/DayZ
[DUVIDA]como girar sprite somente no eixo X em direção do mouse
GRAVIDADE não é compatível com Camera.main.ScreenToViewportPoint ?
[DEVLOG] Projeto - Girl Blade (download Pré-Alpha)
[SUPER ATUALIZAÇÃO] - Android - Night Hunter RPG, Faça um teste e avalie! Alpha #5
✖ Projeto HOSPICE Horror Game !! ✖
Recrutamento para jogo de sobrevivencia estilo DayZ/Rust/H1Z1
-[SCRIPT DE POSIÇÕES ]-
[Duvida] Unity5 - Physics2D.Raycast não obedece distância máxima.
[____APOIE O FÓRUM E O CANAL E GANHE RECOMPENSAS____]
como posso fazer sons dos passos do inimigo
Unity - Car engine sound - Primeiro teste
Dúvida sobre particulas
[RESOLVIDO] Executar animação após um X segundos
Como indentificar que estou escrevendo [Unity.UI inputField]
[RESOLVIDO] Blender - Mesh com ossos bugados
[RESOLVIDO] OntriggerEnter Bugado
[RESOLVIDO] Problema com o Reimport e atualização do modelo
Como fazer o raycast ignorar a primeira colisao?
[RESOLVIDO] Animações no script
Transição de Cores Entre Cenas!
Sistema de corrida
Como Detectar toques e destruir objetos no jogo
Terreno procedural com blocos para baixo
alguem poderia me ajudar??
[TUTORIAL] Spawn de objetos aleatorios em lugares aleatorios
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
alguem sabe um sistema/ideia/tutorial de nicknames/indentificaçao para NETWORK local???
Jogo na Play Store e atualmente tem 40 downloads.
Translate.rotate ( 0, 0, Erro )
[Duvida] Time.TimeScale em jogo multiplayer
Aplicativo Reseta o Banco de Dados - Sqlite
7 erros no script conectar
Audio Player C#
Divulgaçao de Battle of Worlds
Duvida sobre Screenshot e share
Sistema de Buscar o Inimigo Mais Perto
[TUTORIAL] Criar um Array ( lista de objetos )
Casa do CJ Remake unity 2017 + Blender
Fazer um objeto brilhar
criação de terreno realista
Navmesh em mapa gerado aleatoriamente existe?
Linkar Objetos FIlhos!
Seguir um raio no raycast a partir do ponto da tela clicado
Destruir Objetos Filhos
Como fazer um jogo Isometrico com Unity ?
[Duvida] Prefab instanciado não esta indo na direção correta
Sistema De dois Players
Formação de uma equipe pequena
Terreno Procedural
quero instanciar um obj vazio como faço?
[Dúvida] Bugs nos tiros de um jogo 2d
[Dúvida] Cena ficando escura
[RESOLVIDO] Destacar objetos com uma outline
[RESOLVIDO] Algum modo de usar a câmera do android
[RESOLVIDO] Limitar visão em um cenário 2d
Link Torrent Unity 5
Erro CS0118 e CS0131 em script de save.
[____ADMINISTRAÇÃO____] PRECISO DE AJUDA [DICA PARA SER AJUDADO]
[RESOLVIDO]Flip network
Erro em script do Photon Voice
erro de build do jogo
unity ele nao carrega os assets
[____ADMINISTRAÇÃO____] Problemas ao se cadastrar no fórum
[TUTORIAL]fazer os vidros quebrarem!
[RESOLVIDO]Animação importada do 3d Max muda de lugar na Unity
[TUTORIAL] Derrubar arvores e dropar madeiras dela
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Hoje à(s) 8:05 pm
Hoje à(s) 5:48 pm
Hoje à(s) 5:27 pm
Hoje à(s) 4:26 pm
Hoje à(s) 3:08 pm
Hoje à(s) 1:44 pm
Hoje à(s) 12:52 pm
Hoje à(s) 10:38 am
Hoje à(s) 10:36 am
Hoje à(s) 10:07 am
Hoje à(s) 9:44 am
Hoje à(s) 6:53 am
Hoje à(s) 1:44 am
Hoje à(s) 12:53 am
Ontem à(s) 9:14 pm
Ontem à(s) 9:00 pm
Ontem à(s) 8:42 pm
Ontem à(s) 8:35 pm
Ontem à(s) 8:17 pm
Ontem à(s) 7:23 pm
Ontem à(s) 7:05 pm
Ontem à(s) 6:36 pm
Ontem à(s) 6:06 pm
Ontem à(s) 5:59 pm
Ontem à(s) 5:41 pm
Ontem à(s) 5:08 pm
Ontem à(s) 4:57 pm
Ontem à(s) 4:11 pm
Ontem à(s) 4:04 pm
Ontem à(s) 3:29 pm
Ontem à(s) 2:44 pm
Ontem à(s) 1:59 pm
Ontem à(s) 1:42 pm
Ontem à(s) 1:37 pm
Ontem à(s) 1:21 pm
Ontem à(s) 1:18 pm
Ontem à(s) 1:07 pm
Ontem à(s) 12:44 pm
Ontem à(s) 11:25 am
Ontem à(s) 10:03 am
Ontem à(s) 9:19 am
Ontem à(s) 9:19 am
Ontem à(s) 9:09 am
Ontem à(s) 8:23 am
Ontem à(s) 1:39 am
Ontem à(s) 11:57 pm
Ontem à(s) 11:30 pm
Sab Out 14, 2017 7:07 pm
Sab Out 14, 2017 6:01 pm
Sab Out 14, 2017 5:55 pm
Sab Out 14, 2017 4:25 pm
Sab Out 14, 2017 12:50 pm
Sab Out 14, 2017 12:46 pm
Sex Out 13, 2017 11:58 pm
Sex Out 13, 2017 11:05 pm
Sex Out 13, 2017 9:21 pm
Sex Out 13, 2017 9:20 pm
Sex Out 13, 2017 8:27 pm
Sex Out 13, 2017 5:45 pm
Sex Out 13, 2017 5:37 pm
Sex Out 13, 2017 3:31 pm
Sex Out 13, 2017 2:59 pm
Sex Out 13, 2017 2:02 pm
Sex Out 13, 2017 11:17 am
Sex Out 13, 2017 9:27 am
Sex Out 13, 2017 2:17 am
Qui Out 12, 2017 11:57 pm
Qui Out 12, 2017 11:26 pm
Qui Out 12, 2017 11:23 pm
Qui Out 12, 2017 8:32 pm
Qui Out 12, 2017 7:23 pm
Qui Out 12, 2017 2:58 pm
Qui Out 12, 2017 12:51 pm
Qui Out 12, 2017 11:58 am
Qui Out 12, 2017 6:49 am
Qua Out 11, 2017 11:37 pm
Qua Out 11, 2017 10:01 pm
Qua Out 11, 2017 3:52 pm
Qua Out 11, 2017 12:45 pm
Qua Out 11, 2017 12:42 pm
Qua Out 11, 2017 8:38 am
Qua Out 11, 2017 12:31 am
Ter Out 10, 2017 11:43 pm
Ter Out 10, 2017 11:42 pm
Ter Out 10, 2017 11:39 pm
Ter Out 10, 2017 11:31 pm
Ter Out 10, 2017 11:29 pm
Ter Out 10, 2017 11:24 pm
Ter Out 10, 2017 11:12 pm
Ter Out 10, 2017 11:10 pm
Ter Out 10, 2017 11:06 pm
Ter Out 10, 2017 10:37 pm
Ter Out 10, 2017 9:06 pm
Ter Out 10, 2017 7:56 pm
Ter Out 10, 2017 7:42 pm
Ter Out 10, 2017 6:11 pm
Ter Out 10, 2017 11:03 am
Ter Out 10, 2017 10:24 am
Ter Out 10, 2017 7:45 am
ScorpionG4mer
Fagner
Unidade3d5
richerd
Matrirxp
Phph09
Callyde Jr
colosso16
colosso16
Encracker
Joao07
Callyde Jr
Dom3000
EvertonSantos
Fagner
EvertonSantos
Ghosthy
felipehobs1
Weslley
MRX
Callyde Jr
Callyde Jr
Duarte
glauco
luis gustavo
Encracker
thales.ulisses
heliab125
marcelinodns
luis gustavo
Duarte
CodeZone
contaska
contaska
MRX
dstaroski
dstaroski
thales.ulisses
Weslley
dimmuo
dstaroski
glauco
dstaroski
Phph09
eusouoglaydson
Weslley
Fagner
alxgames
Fagner
Fagner
MRX
Callyde Jr
Callyde Jr
TrevorCrazy
luizmauro123
Madness
natanael.olimpio
glauco
luiz12345
Fagner
Felipe Costa
Phph09
ubroly
PatifeCraft
dstaroski
Dom3000
raulframos
fecirineu
fecirineu
MateusWTP
Phph09
PatifeCraft
luizmauro123
Duarte
Phph09
dimmuo
EvertonSantos
BRGC
Callyde Jr
fecirineu
PatifeCraft
Dom3000
PauloFR
PauloFR
PauloFR
PauloFR
PauloFR
TylerDurden
PauloFR
PauloFR
PauloFR
PatifeCraft
felipehobs1
ryan55br
MarcosSchultz
fabriciorsz34
Claudio Ferreira
PatifeCraft
John Rambo

[TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

TUTORIAL [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por marcos4503 em Seg Jun 19, 2017 1:46 pm

Oi galera. Há um tempo atrás eu prometi que iria criar um tópico com muitas dicas de otimização para jogos mobile. Mais estava andando sem tempo, e pra ajudar eu exclui sem querer o arquivo em que eu guardava essas dicas. Bom.. Eu precisei de um tempo pra pesquisar e ir refazendo a lista, e tambem um tempo pra criar o tópico. Essas dicas são baseadas em MUITA pesquisa nos pontos mais obscuros e profundos da internet, e tambem são baseadas na minha experiencia de desenvolvimento Android. Trabalho com o Android a pouco mais de 1 ano.

Vale a pena dizer tambem, que sempre testo meus jogos em vários e vários dispositivos, conheço muito bem os Hardwares de dispositivos móveis, e tenha certeza de que essas dicas, se bem executadas, podem aumentar drasticamente a gama de aparelhos que seu jogo suportará.

Bom. Chega de enrrolação e vamos para o que interessa. Colocarei tudo em spoilers pra não deixar o tópico gigante.

PS: Prepare-se para ler um textão. Já aviso que aqui não tem aquelas dicas bobinhas que voce encontra a cada 20 de 10 sites que você visita.

1 - Forçar OpenGL ES 2.0
Spoiler:
OpenGL é a API gráfica que os dispositivos usam pra rodar jogos. E bom. Dispositivos Android variam imensamente na quantidade de Hardwares, e consequentemente alguns dispositivos tambem possuem versões mais avançadas desse OpenGL, variando entre OpenGL 3 e 2. A diferença é que versões superiores do OpenGL possuem recursos mais poderosos e que deixam o jogo mais bonito, com um baixo custo de processamento. Por exemplo, o OpenGL 3.0, suporta uma quatidade enorme de Shaders, e a CPU quase não sente enquanto executa alguns desses Shaders. Já o OpenGL 2.0 sofre uma queda drastica de desempenho quando executa Shaders. Bom. Felizmente para nós, TODOS os celulares Android, suportam o OpenGL 2.0. A questão aqui, é que iremos forçar o nosso jogo a rodar em OpenGL 2.0, mesmo em dispositivos 3.0, para assim aumentar o desempenho do nosso game.

Para fazer isso, é bem simples. Vá em Build Settings > Player Settings > Other Settings. Desmarque a caixa "Auto Graphics API". Agora irá aparecer uma caixinha com as API's "Vulcan", "OpenGL 3.0" e "OpenGL 2.0". Remova a Vulcan e a OpenGL 3.0. Deixe apenas a 2.0.

2 - Ativar Multithread Rendering
Spoiler:
Multithread rendering nada mais é do que ativar o uso de multiplos núcleos do processador do dispositivo. Ativando isso, você permitira que a Unity separe um núcleo do processador apenas para ler scripts e etc, e um outro nucleo para renderização.

Note que ativar isso pode reduzir a compatibilidade do seu jogo com uma pequena quantidade de dispositivos. Testei isso em MUITOS aparelhos, e nunca tive problemas com isso. A Unity sempre esta melhorando esse recurso a cada atualização. Comecei a usa-lo desde a Unity 5.2, e a melhora até hoje (5.6.1) é simplesmente insana. Se ativar isso, você notará que o desempenho do seu jogo irá aumentar bastante.

Para ativar, vá até Player Settings > Other Settings. Marque a caixinha "Multithread Rendering".

3 - Usar a compressão ETC1 em todas as texturas de seu jogo
Spoiler:
Bom. ETC1 é um formato de compressão suportado pelo OpenGL 2.0, é um formato leve e se o OpenGL 2.0 suporta, quer dizer que TODOS os dispositivos suportam essa compressão. Se você usar um formato de compressão feito para o OpenGL3.0 ou superior, fará com que o celular tenha que recompactar isso em um formato que ele suporte e em seguida descompacte novamente, tudo isso em tempo real, fazendo com que o desempenho caia drasticamente e até faça o jogo Crashar.

Para usar esse formato de compressão, é só clicar na sua textura, em seguida marcar a caixa "Override for Android", em seguida ir até a caixinha "Format" e alterar para "RGB Compressed ETC 4 Bits". Isso se sua textura não tiver Alpha. Esse formato não suporta texturas transparentes. Se sua textura for transparente, é só trocar a compressão para "RGBA 16 Bit", é um formato leve e que tambem é suportado por todos os dispositivos.

4 - Usar LOD
Spoiler:
LOD (Level Of Detail) nada mais é do que um componente nativo da Unity que faz modelos 3D terem um detalhe menor a medida que são afastados da Camera, assim reduzindo a quantidade de poligonos e consequentemente reduzindo a quantidade de calculos necessarios para sua renderização.

É muito simples de usar e o Marcos tem um vídeo ensinando.


5 - Usar Occlusion Culling
Spoiler:
Occlusion Culling apenas calcula objetos que não estão visiveis pela camera, que estão obstruidos por outros objetos, e então desativa a malha deles, fazendo a renderização ser mais rapida e deixando o desempenho do jogo mais Estável. O Marcos tambem tem um vídeo ensinando como usar este recurso da Unity.



Tome cuidado, se você possui uma cena que tem muitos Objetos, o Occlusion pode fazer o inverso. Ao invés de otimizar ele pode deixar a renderização mais pesada. Já aconteceu diversas vezes de eu ter uma cena rodando a 55 FPS e quando uso o Occlusion esse desempenho cair para 36 FPS. Então, sempre teste este recurso antes de implanta-lo.

6 - Ajustar o FOV (Field of View)
Spoiler:

Apenas ajuste a distancia de renderização da sua camera, fazendo isso você pode reduzir a quantidade de elementos que o dispositivo tem que processar. Para isso, vá até sua camera, e mude o campo "Far" em "Clipping Planes".


7 - Evitar o máximo possivel scripts com muitas linhas
Spoiler:
Evite criar scripts com muitas linhas (Por exemplo 500 linhas),  isso sobrecarrega a CPU e a faz ficar mais tempo do que o necessario lendo aquele Script. Uma ótima saida pra isso, é criar vários scripts. Por exemplo. Digamos que você tenha um inimigo. Ao inves de colocar o script de Movimento, Ataque, Path Finding tudo em um só, você pode separa-los em outros scripts, cada um com 100 linhas por exemplo. Isso facilita a organização do seu projeto e tambem aumenta o desempenho do seu jogo.


8 - Desativar Scripts e Objetos que não estão sendo usados no momento
Spoiler:
Essa. É mais uma dica de ouro. Sério. Se você seguiu a ultima dica, você tambem ganha o beneficio de por exemplo, poder desativar Scripts. Digamos que em seu inimigo, você tenha 3 Scripts. 1 para movimento do NavMesh, outro para Atacar e outro para controlar suas animações. Mais esse inimigo esta longe do player e não o esta atacando, então pra que deixar o Script de ataque ativo? Simples! Ative-o somente quando o inimigo for Atacar de verdade o personagem.

9 - Evitar de colocar muitos objetos na cena
Spoiler:
Digamos que seu Player esta olhando para o horizonte. Nesse horizonte, tem 600 Arvores. Cara. Não tem necessidade disso. Isso fará o desempenho do seu game cair, ao inves de aglomerar todas essas arvores juntas, divida elas pela cena, assim quando o Player olhar para o Horizonte, ele vera umas 50 Arvores, mais se ele olhar tambem para outras partes do mapa, ele vera arvores tambem, e continuarão dando a mesma beleza que aquelas arvores aglomeradas davam.


10 - Evitar de ter muitos triangulos na Cena.
Spoiler:
Triangulos é só uma forma de identificação de detalhes nos modelos. Por exemplo, um modelo de prédio possui 200 triangulos, isso quer dizer que ele possui um nivel de detalhe  baixo. Bom, você pode monitorar a quantidade de triangulos que estão sendo renderizados no momento apenas clicando no Botão "Stats" na Aba "Game". Os triangulos são representados pelo campo "Tris". Uma boa maneira de reduzir os triangulos sem sacrificar a beleza do cenario, é usando os LOD's cuja o mesmo expliquei anteriormente.

A quantidade de tris recomendados para mobile varia de acordo com o seu Projeto. Mais uma quantidade recomendada é manter abaixo de 12~15k.

11 - Ter um numero baixo de SetPass Calls
Spoiler:
SetPass Calls é um numero que exibe a quantidade de Draw Calls feitas pelo jogo. Draw Calls é a quantidade de chamadas de renderização que o jogo utiliza. Sempre que o jogo tem que renderizar um material de algum modelo, ele gera 1 Draw Call. Você pode monitorar as SetPass Calls na mesma aba "Stats".

Um bom numero de Draw Calls para mobile é abaixo de 90.

12 - Usar Dinamic Batching
Spoiler:
Dinamic Batching combina os modelos que usam o mesmo material em uma única Draw Call. Exemplo. Digamos que existem 6 arvores na cena. Cada arvore usa o mesmo material. Sem o Dinamic, essa arvores vão gerar 6 Draw Calls. Com o Dinamic essas arvores vão gerar apenas 1 Draw Call.

Atenção: O Dinamic Batching consome um pouco da CPU, e só é executada em objetos Dinamicos (Que se movem), e tambem é ativada automaticamente para todo modelo que possui menos de 900 Vertices.


13 - Usar o Static Batching
Spoiler:
Esse aqui funciona igual o Dinamic Batching mais ele tem o diferencial de que só funciona em objetos que NÃO se movem. E tambem não possui limite de vertices para funcionar. Para usa-lo é só clicar no modelo, e na parte superior direita do Inspector, marque a caixa "Batching Static".



Tenha em mente que ativar isso, fará com que seu modelo fique completamente imóvel. Mesmo que scripts tentem move-lo, ele não irá mover pois é estatico.

14 - Manter um baixo numero de Batches
Spoiler:
Bom. Já que expliquei anteriormente sobre os Batchs. Tente manter o numero de Batchs o mais baixo possivel. Cada Batch, é um calculo a mais para a CPU. Você pode monitorar a quantidade de Batchs pelo botãozinho "Stats" na Aba "Game".

Um bom numero de Batchs para mobile, gira abaixo de 90. 

15 - Cuidado com o uso de MSAA (Multi Sampling Anti Alliasing)
Spoiler:
Usar o anti serrilhado é bom? É. Deixa o jogo lindo? Deixa. MÁS ele infelizmente não se da bem com muitas GPUs mobile. O Anti-Alliasing é muito bem suportado por algumas GPU's como Adreno, Tegra, Mali e outras, mais infelizmente, faz o desempenho cair drasticamente em outras GPU's como a Power VR. Cada GPU possui seus pontos fortes e pontos fracos. Você deve conhecer pelo menos a maioria.


16 - Evitar muitas luzes dinamicas na Cena
Spoiler:
Qualquer Luz do Unity, é uma Luz dinamica. Sempre tome cuidado com a quantidade de Luzes que estão sendo renderizadas no momento.
As luzes aumentam imensamente a quantidade de SetPass Calls e Batchs, fazendo o numero de calculos aumentar bastante.

Para mobile tente manter as Luzes igual ou abaixo de 3.

17  - Usar Shaders bem simples
Spoiler:
Essa é uma dica linda tambem. Em mobile sempre opte pelo Shader "Diffuse" ou "Bumped Diffuse" se sua textura possui um Normal Map. Esses são os shaders mais simples e mais bonitos que existem até o momento em mobile. Para alterar é só clicar no Material, e então mudar a caixa 'Shader" na parte de cima da aba "Inspector".


18 - Evitar uso de Post-Processing (O famoso efeito de pós processamento)
Spoiler:
Vai doer em você ter que deixa-los.. Mais chega um momento na vida de todo homen.. em que ele deve dizer Adeus.. kkkkkkkk

Mais sério cara. Como eu disse acima, se você quer fazer seu jogo rodar até no tablet da XUXA de 1'' de tela, tu tem que largar os efeitos de pos processamento. Infelizmente eles usam uma quantidade ABSURDA de processamento. Alguns são até leves e outros... Só Deus. Mais se você manja, você pode criar efeitos leves para seu jogo. Varia de projeto para projeto essa necessidade, mais é sempre bom testar afinal de contas.


19 - Usar o Profiller
Spoiler:
Profiler: Achou que eu tava brincando é? Quando você estiver usando um monte de particulas. EU VOU ESTAR LÁ.
Quando você tiver com 10 de FPS, EU VOU ESTAR LÁ.


gnlkdjihntwijntijotjnwroitnjwirojt

Ok. Cara. É sério, tenta usar o Profiller o maximo possivel desde o Inicio do seu projeto, nele você pode monitorar a quantidade de memória que seu jogo usa, o tempo que seu jogo leva para processar scripts e renderizações, e pode até ver qual script ta mais usando a CPU. Para ativa-lo é só ir na Aba "Window" > "Profiler". Só isso.

Aqui você pode dar uma estudada nele, pelo site da Unity (Em ingles)
https://docs.unity3d.com/Manual/ProfilerWindow.html

Mais se ta com preguiça, eu vou dar uma resumida básica no que significa cada componente (daí é só você analisar o gráfico né)
Rendering: Tempo de renderização que a CPU gasta
Scripts: Tempo de renderização que a CPU gasta lendo scripts
Physics: Tempo de renderização que a CPU gasta processando a fisica do jogo (RigidBodys, Character Controlers e por aí vai)
Garbage Collector: Tempo que o jogo leva deletando objetos que não estão sendo mais usados pelo jogo
VSync: Tempo que a Unity leva tentando sincronizar a CPU com a GPU, isso é útil para estabilizar o FPS.
Gi: Tempo que a Unity leva processando a iluminação global
Batches: Quantidade de Batches no momento
SetPass Calls: Quantidade de Draw Calls no momento
Triangles: Quantidade de triangulos sendo renderizados pela camera no momento
Vertices: Quantidade de vertices sendo renderizadas pela camera no momento
GC Allocated: Quantidade de objetos alocados no Garbage Collector (Explicarei mais abaixo)
Material Count: Exibe a quantidade de materiais sendo processados no momento
Total Audio CPU: Processamento gasto em audios no momento

Esses foram alguns dos mais importantes.


20 - Usar o Frame Debbuger
Spoiler:
O Frame Debbuger é similar ao Profiller mais ele só analiza o frame que você quer. Para usa-lo é só ir na aba "Window" e clicar em "Frame Debbuger", daí é só rodar o jogo e clicar em Enable. Ele vai exibir os objetos da cena e o seus custos de processamento.


21 - Preocupar-se com a otimização desde o ínicio
Spoiler:
Se você começou seu game, e só foi se preocupar com otimização quando você notou que o FPS estava muito baixo, você ja começou errado. A otimização é algo que deve ser levado em consideração a cada vez que você adiciona ou remove um objeto na cena. Nem que seja um modelosinho de nada. A dica que eu passo é que sempre que você adiciona algumas coisas na cena, teste em seu dispositivo, vá testando sempre. Assim você vai tendo noção do que esta reduzindo o desempenho, e se depois de terminar a cena o desempenho estiver baixo, aí entra em ação o famoso Downgrade, que é começar a remover as coisas da cena com o objetivo de reduzir o numero de calculos e aumentar o desempenho.


22 - Cuidado com a quantidade de Particulas e como você as usa
Spoiler:
Outra coisa que infelizmente é bem pesado em mobile. Mais não é tão pesado a ponto de se tornar inutil para nós. Evite de usar muitas particulas, por exemplo, numa fogueira, não tem necessidade da chama dela usar 100 particulas, sendo que apenas 3 ou 5 fazem um bom trabalho, então, é sempre bom ir testando a beleza das particulas e ir reduzindo o maximo possivel. As vezes até remover completamente elas.

Outra coisa, é evitar o uso de Particle Colliders e similares. Eles pesam imensamente em mobile.


23 - Usar LightMaps
Spoiler:
Um outro recursozinho da Unity que na minha opinião eu acho bem fraquinho.. Talvez eu que não saiba usa-lo, mais é sempre bom marca-lo. Bom, o lightmap é um recurso que simula sombras fake, e para isso você deve marcar o objeto desejado com "LightMap Static"


Bom, eu prefiro não usa-lo porque sempre que uso, ele reduz o desempenho do meu game e aumenta muito o tamanho da Build... Mais né.. Só to falando dele como uma menção honrosa..


24 - Cuidado com o uso de Mesh Colliders
Spoiler:
Mesh Colliders ou colisores de malha, fazem um colisor do tamanho perfeito do objeto 3d. Vários jogos triple A por aí usam esse colisor, mais não vou entrar muito em detalhes se não o tópico ficará do tamanho da china. Bom, o que importa é que eles são pesados, então prefira usar colisores simples como o Box, Capsule, Sphere e por aí vai.


25 - Cuidado com a quantidade de Rigidbody's na cena
Spoiler:
Que o rigidbody simula fisica todo mundo já sabe, mais evite usar muitos rigidbody's na cena. Se você vai usa-lo em um objeto por exemplo, apenas para detectar colisão, ative o "Is Kinematic" do rigidbody. Isso fará com que a Unity deixe de calcular fisica para aquele objeto, e detecte apenas colisões.


26 - Evite fazer calculos muito pesados em Shaders ou Scripts
Spoiler:
Tente fazer calculos simples durante os scripts ou shaders. Se um calculo é estatico e não tem necessidade de ser calculado a cada frame, é só voce fazer o calculo e armazenar o resultado numa variavel de consulta e só!


27 - Usar o Garbage Collector
Spoiler:
O Garbage Collector, é o coletor de lixo da Unity. Sempre que algum objeto não é mais usado ou referenciado por nada na cena, ele é deletador, por exemplo, sempre que você seta uma variavel como nula, e o objeto já não é mais referenciado, o coletor entra em ação e destroy aquele objeto, para que ele não ocupe mais espaço na RAM.

você pode usa-lo manualmente no script chamando essa linha:
System.GC.Collect();

Tenha em mente que a cada vez que ele é chamado o desempenho cai drasticamente por alguns milesimos de segundos (ou até segundos dependendo do caso).

28 - Cuidado com o Instantiate ou Destroy
Spoiler:
Instanciar e destruir objetos repetidas vezes faz com que o desempenho seja reduzido ao longo da jogatina e até mesmo faz o jogo crashar. Ao inves de destruir e instanciar objetos, tente criar objetos já colocados na cena, mais desativados, e sempre que os mesmos precisarem aparecer, é só você ativar o objeto que precisa e posiciona-lo no local onde quer. Daí quando deixarem de ser uteis, é só desativa-los.


29 - Importar corretamente arquivos de áudio
Spoiler:
é bem simples isso até. para configurar seu arquivo de áudio, basta clicar no clip de audio e veras um monte de opções e etc. Irei explicar o que cada uma faz.

Mais antes de tudo saiba que:
WAV - Formato de som sem compressão. Perfeito para efeitos sonoros como tiro, que devem ser repetidos varias vezes e são pequenos (50kb por exemplo).
MP3/OGG - Formato com compressão e bom para músicas.

Ok. Então vamos lá

Load in Background: Se marcado faz o audio ser carregado durante a Gameplay

Marque a caixa "Override for Android"

Se seu audio é um som de passo, ou tiro etc, use a configuração abaixo:

Load type: Decompress on memory - Faz o audio ser carregado para a RAM, assim o acessando mais rapidamente. É otimo para sons pequenos.
Preload audio data: Marque isso - Faz o audio ser carregado e armazenado na memoria, durante o loading da cena
Compression format: ADPCM - É um formato que usa pouca CPU e é bom para arquivos pequenos;

Se seu audio for uma musica, use a configuração abaixo:

Load Type: Streamming - Faz o audio ser descomprimido e reproduzido em tempo real (Como um youtube mesmo, só que pra audio) Assim o audio não é armazenado na memoria RAM, e reduz o consumo de memoria, já que musicas geralmente são pesadas. Isso consome uma pequena quantia de processamento.
Comrpession Format: Vorbis ou Mp3 - Vorbis possui uma compressão maior, mais possui menos qualidade (Eu nunca notei a diferença de qualidade entre os dois, mais isso varia de musica pra musica.)
Quality: Ajusta a qualidade da musica, recomendo que deixe em 50%. É um balanceamento entre tamanho e qualidade da musica em si.

30 - Não use a void Update se você não precisa dela naquele Script
Spoiler:
Só de declarar a void Update, você ja faz com que a Unity tenha que processar aquele script. Se ela esta em branco, apenas a apague.


31 - Usar Coroutines
Spoiler:
Aaaah.... As coroutines(ou rotinas).. São tão.. tesudas kkkkkkkkkk

Cara, se você tem que executar uma serie de coisas no script por exemplo: O personagem anda pra esquerda, direita e para frente, mais isso não precisa ser repetido a todo frame, então, use as rotinas. Elas são muito leves e só são executadas uma vez, isso quer dizer que só são executadas quando você necessita, assim seu script fica mais leve. O Marcos tem um video ensinando como usa-las.


Coroutines = IENumerator.


32 - Cuidado com o uso de GameObjects.Find e similares
Spoiler:
Se você executa comandos assim uma vez ou outra, sem ser a todos os frames, não tem problema, agora se executa eles a todo frame.. Cara.. Toma cuidado. Uma boa saida pra isso é usar o FindGameObjectsWithTag, que é mais leve. Tambem tem os famosos GetComponent, sempre que você usa o GetComponent em si, ou um Transform.Translate, qualquer comando que chame um outro componente do objeto, você gera uma chamada de Draw Call. Então cuidado.


33 - Compartilhe o mesmo material no maximo de objetos possiveis
Spoiler:
Como já expliquei acima na parte do Batch, tente usar um mesmo material no maximo de objetos possiveis. Como no exemplo da Arvore.


34 - Prefira tamanhos de textura, quadrados, por potencia de 2
Spoiler:
As GPU's tem um certo tesão por texturas com tamanho na potencia de 2 (32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024 e por ai vai). Tamanhos de textura, quadrados tem mais facilidade de serem processados pelas GPU's. Você pode usar a Override for Android pra redimensior a textura pelo Unity mesmo.


35 - Evite usar o Terrain do Unity
Spoiler:
Terrain da Unity, é super pesado pra Mobile. É serio. A quantidade de vertices que ele usa, pesa até no meu PC, imagina num celular. Então é isso. Procure outras alternativas como assets, ou até mesmo criar seu modelo de terreno no blender e importa-lo para o Unity.Mais atenção com a quantidade de vertices e triangulos.


36 - Evitar uso de sombras em tempo real e projetores
Spoiler:
Achou que eu não iria falar delas? Pois é. Desative as sombras do Unity em seu projeto. Só isso. Elas pesam MUITO em mobile. Uma alternativa se você quer mesmo ter sombras, é usar assets de sombra leve, ou até mesmo criar sombras fake com sprites etc.. Use sua criatividade.

Outra coisa que pesa tambem são os projetores.


37 - Ficar atento a quantidade de memoria RAM que seu jogo utiliza
Spoiler:
Hoje em dia grande maioria dos celulares vendidos já possuem 1GB de RAM ou mais, o fato aqui, é que no Android, pelo menos no momento, a RAM é compartilhada entre a CPU e GPU, portanto não temos uma VRAM no Android, como nos PC's. Então fique sempre atento a quanto de RAM seu jogo esta utilizando. Vários fatores contribuem para o aumento do consumo, mais os maiores fatores são: Tamanho da cena, tamanho das texturas, tamanho dos sons.

Tente manter abaixo de 120MB


38 - Reduzir a resolução de renderização que o jogo vai rodar
Spoiler:
Essa daqui é uma dica bem apelona. Se você esta tendo desempenho baixo em celulares com resoluções monstras (como 1920x1080), você pode usar o comando abaixo para reduzir a resolução de renderização para a que você quer. Isso ajuda em momentos de desespero. e em celulres bem RUINS. Sério. Ajuda MUITO.

Código:
Screen.SetResolution(640, 480, true);


39 - Atenção ao tamanho das texturas que usa
Spoiler:
Tenha cuidado com o tamanho das texturas que usa em seu jogo. Tente usar texturas com tamanho maximo de 512x512. Mais que isso podem ser muito pesadas para mobile.


40 - Cuidado com o uso de Coroutines em excesso
Spoiler:
Se você invoca uma coroutine, por exemplo, 1 de cada vez, é bem ok, super de boa, mais vamos ao supor que você fique invocando coroutines a cada frame, muitas vezes, chega uma hora que até 1000 coroutines são chamadas ai o jogo morre. Sempre chame a mesma coroutine uma por vez. Evite deixar o StartCoroutine livre no Void Update. Sempre crie um metodo para parar a invocação das coroutines.


41 - Alterar esquema de iluminação para Vertex Lit
Spoiler:
Clique na camera e em "Rendering Path" altere para "Vertex Lit Legacy", tenha em mente que esse é um esquema mais leve, mais algumas coisas podem se comportar de maneira estranha, como o FOG e etc. Ele tambem não suporta sombras.


42 - Quantidade de cameras na cena
Spoiler:
A quantidade de cameras ativas ao mesmo tempo, tambem abaixa o desempenho drasticamente. Tente ter no maximo 2 cameras ativas, e remova os componentes da camera secundaria, deixando apenas o componente "Camera".


43 - Desabilitar o Realtime GI
Spoiler:
Se tem "Realtime" no nome, saiba que vai pesar em mobile. Sério, até uma brisinha mais forte que tem, pesa em mobile. Então va até a janela "Lighting" e depois desabilite a caixa "Realtime GI". Isso fara com que a luz global deixe de ser calculada em tempo real.


Bom galera. Por enquanto é só. Essas foram todas as dicas que consegui me lembrar. Isso deu trabalho pra caramba pra fazer, então espero que ajude muito vocês. Outra dica bonus: Se esforce para otimizar, e não pare nunca com a otimização, não importa se o celular é da NASA, continue otimizando, e mais uma coisa. Otimização é um processo chato pra caramba, mais é muito gratificante ver seu jogo rodando em outros dispositivos sem travar.

Essas dicas não fazem milagre, você ainda tem que fazer o possivel para otimizar seus modelos e scripts, aí sim essas dicas funcionam. E elas ajudam seu jogo a rodar no maximo possivel de aparelhos. Agora se quer fazer um projeto destinado a aparelhos superiores, você tambem pode se basear aqui!

É isso galera! Valeu falou e sucesso!
avatar
marcos4503
Instrutor

Masculino PONTOS : 2205
REPUTAÇÃO : 455
Idade : 18
Áreas de atuação : Desenvolvimento Android
Básico de Design
Básico Blender
Unity
Programação em C#
Outras linguas.
Respeito as regras :

Ver perfil do usuário http://www.windsoft.pe.hu

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por dstaroski em Seg Jun 19, 2017 1:51 pm

Muito bom cara! Parabéns! vai ajudar e muito a galera!

Flw!
avatar
dstaroski
Instrutor

Masculino PONTOS : 2117
REPUTAÇÃO : 527
Idade : 28
Áreas de atuação : Téc. Hardware e Redes, Programação C#, Daz3D and Gimp

Respeito as regras :

Ver perfil do usuário https://www.daz3d.com/gallery/users/1575361

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por marcos4503 em Seg Jun 19, 2017 1:57 pm

Eu prometi que ia trazer isso pro fórum! Eu pesquisei muito e muito mesmo, e acho que esse é o tópico mais completo de otimização que já vi. Tambem o fórum é carente de conteudo mobile, então eu faço o que posso pra mudar isso!

Todas essas dicas eu to usando no meu game, e ta funcionando muito bem.

Valeu!
avatar
marcos4503
Instrutor

Masculino PONTOS : 2205
REPUTAÇÃO : 455
Idade : 18
Áreas de atuação : Desenvolvimento Android
Básico de Design
Básico Blender
Unity
Programação em C#
Outras linguas.
Respeito as regras :

Ver perfil do usuário http://www.windsoft.pe.hu

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por DuViDoSo em Seg Jun 19, 2017 2:21 pm

Poxa, muito bom. Poderia trazer um completao pra PC tbm?
avatar
DuViDoSo
Modelador

Masculino PONTOS : 1017
REPUTAÇÃO : 142
Idade : 18
Áreas de atuação : Modelagem LowPoly, Cozinha Daqui de Casa.
Respeito as regras :

Ver perfil do usuário http://www.naotenho.com.br

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por marcos4503 em Seg Jun 19, 2017 2:46 pm

Pra PC não vai ser possivel.. Eu só to trabalhando com Android no momento, mais da pra se basear aqui nessas dicas para repetir no PC, a diferença é que o PC é mais potente então até torna a otimização mais fácil.
avatar
marcos4503
Instrutor

Masculino PONTOS : 2205
REPUTAÇÃO : 455
Idade : 18
Áreas de atuação : Desenvolvimento Android
Básico de Design
Básico Blender
Unity
Programação em C#
Outras linguas.
Respeito as regras :

Ver perfil do usuário http://www.windsoft.pe.hu

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por zZAndersonZz em Seg Jun 19, 2017 5:43 pm

Tutorial mais que completo, vai ajudar muitos que precisam melhorar o desempenho.
avatar
zZAndersonZz
Avançado
Avançado

Masculino PONTOS : 575
REPUTAÇÃO : 117
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por MarcosSchultz em Ter Jun 20, 2017 1:33 pm

Esse tutorial vale ouro
avatar
MarcosSchultz
Administrador

Masculino PONTOS : 9737
REPUTAÇÃO : 1678
Idade : 21
Áreas de atuação : Administrador do fórum
Respeito as regras :

Ver perfil do usuário http://www.schultzgames.com

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por glauco em Ter Jun 20, 2017 1:48 pm

vlw muito mano! vai ajudar bastante no me projeto que esta travando muito 
MUITO OBRIGADO!!! Razz
avatar
glauco
Avançado
Avançado

Masculino PONTOS : 521
REPUTAÇÃO : 47
Idade : 17
Áreas de atuação : unity 3D...
deixando de ser "NOOB"
aprendendo c#
aprendendo modelagem
se aperfeiçoando na unity 3D
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por marcos4503 em Ter Jun 20, 2017 2:54 pm

Valeu pessoal!! Quando eu puder eu trago mais coisas assim e pá!
avatar
marcos4503
Instrutor

Masculino PONTOS : 2205
REPUTAÇÃO : 455
Idade : 18
Áreas de atuação : Desenvolvimento Android
Básico de Design
Básico Blender
Unity
Programação em C#
Outras linguas.
Respeito as regras :

Ver perfil do usuário http://www.windsoft.pe.hu

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por thzin em Ter Jun 20, 2017 11:19 pm

tutorial simplesmente fodástico, ele vale muito mais que ouro.

thzin
MembroAvançado

Masculino PONTOS : 295
REPUTAÇÃO : 17
Idade : 15
Áreas de atuação : Básico 3ds Max
Básico Maya
Básico Photoshop
Intermediário Blender
Intermediário Unreal Engine
Interm
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por Chilinger em Sex Jun 30, 2017 8:37 am

Tenho duvidas sobre shader poderia me dar um help sobre elas nao so sobre mobile mas no geral e o que seria os shader simples.

Chilinger
MembroAvançado

Masculino PONTOS : 1405
REPUTAÇÃO : 32
Idade : 23
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por marcos4503 em Sex Jun 30, 2017 11:31 am

A gente tem 2 tipo de shader (até onde eu sei né) o shader do material, que é o shader que da aquele brilho no modelo e o que renderiza a textura no modelo, e o outro tipo de shader é o post-processing effect (efeito de pós processamento), quando eu me referia a Shader Simples, eu me referia ao Bumped Diffuse, que é o shader mais simples da Unity, e que alem de bonito é leve para mobile.



Essa é a aba onde você modifica o shader do material do seu modelo, ali em cima esta escrito "Shader" e esta selecionado o "Standard" que é o shader basico da Unity. É ali que você troca o shader..
avatar
marcos4503
Instrutor

Masculino PONTOS : 2205
REPUTAÇÃO : 455
Idade : 18
Áreas de atuação : Desenvolvimento Android
Básico de Design
Básico Blender
Unity
Programação em C#
Outras linguas.
Respeito as regras :

Ver perfil do usuário http://www.windsoft.pe.hu

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por Chilinger em Sex Jun 30, 2017 4:11 pm

Entao acho que voce nao me entendeu estou falando de escrever o shader igual um script.

Chilinger
MembroAvançado

Masculino PONTOS : 1405
REPUTAÇÃO : 32
Idade : 23
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por marcos4503 em Sex Jun 30, 2017 4:26 pm

Ah, sim.. Bom, eu sei que é possivel mais nunca cheguei a explorar isso. Deve ter tutoriais disso na net (nem cheguei a procurar isso tambem kkk)
avatar
marcos4503
Instrutor

Masculino PONTOS : 2205
REPUTAÇÃO : 455
Idade : 18
Áreas de atuação : Desenvolvimento Android
Básico de Design
Básico Blender
Unity
Programação em C#
Outras linguas.
Respeito as regras :

Ver perfil do usuário http://www.windsoft.pe.hu

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] 43 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)

Mensagem por Gabriel César O em Sab Jul 01, 2017 3:00 am

marcos4503 escreveu:Oi galera. Há um tempo atrás eu prometi que iria criar um tópico com muitas dicas de otimização para jogos mobile. Mais estava andando sem tempo, e pra ajudar eu exclui sem querer o arquivo em que eu guardava essas dicas. Bom.. Eu precisei de um tempo pra pesquisar e ir refazendo a lista, e tambem um tempo pra criar o tópico. Essas dicas são baseadas em MUITA pesquisa nos pontos mais obscuros e profundos da internet, e tambem são baseadas na minha experiencia de desenvolvimento Android. Trabalho com o Android a pouco mais de 1 ano.

Vale a pena dizer tambem, que sempre testo meus jogos em vários e vários dispositivos, conheço muito bem os Hardwares de dispositivos móveis, e tenha certeza de que essas dicas, se bem executadas, podem aumentar drasticamente a gama de aparelhos que seu jogo suportará.

Bom. Chega de enrrolação e vamos para o que interessa. Colocarei tudo em spoilers pra não deixar o tópico gigante.

PS: Prepare-se para ler um textão. Já aviso que aqui não tem aquelas dicas bobinhas que voce encontra a cada 20 de 10 sites que você visita.

1 - Forçar OpenGL ES 2.0
Spoiler:
OpenGL é a API gráfica que os dispositivos usam pra rodar jogos. E bom. Dispositivos Android variam imensamente na quantidade de Hardwares, e consequentemente alguns dispositivos tambem possuem versões mais avançadas desse OpenGL, variando entre OpenGL 3 e 2. A diferença é que versões superiores do OpenGL possuem recursos mais poderosos e que deixam o jogo mais bonito, com um baixo custo de processamento. Por exemplo, o OpenGL 3.0, suporta uma quatidade enorme de Shaders, e a CPU quase não sente enquanto executa alguns desses Shaders. Já o OpenGL 2.0 sofre uma queda drastica de desempenho quando executa Shaders. Bom. Felizmente para nós, TODOS os celulares Android, suportam o OpenGL 2.0. A questão aqui, é que iremos forçar o nosso jogo a rodar em OpenGL 2.0, mesmo em dispositivos 3.0, para assim aumentar o desempenho do nosso game.

Para fazer isso, é bem simples. Vá em Build Settings > Player Settings > Other Settings. Desmarque a caixa "Auto Graphics API". Agora irá aparecer uma caixinha com as API's "Vulcan", "OpenGL 3.0" e "OpenGL 2.0". Remova a Vulcan e a OpenGL 3.0. Deixe apenas a 2.0.

2 - Ativar Multithread Rendering
Spoiler:
Multithread rendering nada mais é do que ativar o uso de multiplos núcleos do processador do dispositivo. Ativando isso, você permitira que a Unity separe um núcleo do processador apenas para ler scripts e etc, e um outro nucleo para renderização.

Note que ativar isso pode reduzir a compatibilidade do seu jogo com uma pequena quantidade de dispositivos. Testei isso em MUITOS aparelhos, e nunca tive problemas com isso. A Unity sempre esta melhorando esse recurso a cada atualização. Comecei a usa-lo desde a Unity 5.2, e a melhora até hoje (5.6.1) é simplesmente insana. Se ativar isso, você notará que o desempenho do seu jogo irá aumentar bastante.

Para ativar, vá até Player Settings > Other Settings. Marque a caixinha "Multithread Rendering".

3 - Usar a compressão ETC1 em todas as texturas de seu jogo
Spoiler:
Bom. ETC1 é um formato de compressão suportado pelo OpenGL 2.0, é um formato leve e se o OpenGL 2.0 suporta, quer dizer que TODOS os dispositivos suportam essa compressão. Se você usar um formato de compressão feito para o OpenGL3.0 ou superior, fará com que o celular tenha que recompactar isso em um formato que ele suporte e em seguida descompacte novamente, tudo isso em tempo real, fazendo com que o desempenho caia drasticamente e até faça o jogo Crashar.

Para usar esse formato de compressão, é só clicar na sua textura, em seguida marcar a caixa "Override for Android", em seguida ir até a caixinha "Format" e alterar para "RGB Compressed ETC 4 Bits". Isso se sua textura não tiver Alpha. Esse formato não suporta texturas transparentes. Se sua textura for transparente, é só trocar a compressão para "RGBA 16 Bit", é um formato leve e que tambem é suportado por todos os dispositivos.

4 - Usar LOD
Spoiler:
LOD (Level Of Detail) nada mais é do que um componente nativo da Unity que faz modelos 3D terem um detalhe menor a medida que são afastados da Camera, assim reduzindo a quantidade de poligonos e consequentemente reduzindo a quantidade de calculos necessarios para sua renderização.

É muito simples de usar e o Marcos tem um vídeo ensinando.


5 - Usar Occlusion Culling
Spoiler:
Occlusion Culling apenas calcula objetos que não estão visiveis pela camera, que estão obstruidos por outros objetos, e então desativa a malha deles, fazendo a renderização ser mais rapida e deixando o desempenho do jogo mais Estável. O Marcos tambem tem um vídeo ensinando como usar este recurso da Unity.



Tome cuidado, se você possui uma cena que tem muitos Objetos, o Occlusion pode fazer o inverso. Ao invés de otimizar ele pode deixar a renderização mais pesada. Já aconteceu diversas vezes de eu ter uma cena rodando a 55 FPS e quando uso o Occlusion esse desempenho cair para 36 FPS. Então, sempre teste este recurso antes de implanta-lo.

6 - Ajustar o FOV (Field of View)
Spoiler:

Apenas ajuste a distancia de renderização da sua camera, fazendo isso você pode reduzir a quantidade de elementos que o dispositivo tem que processar. Para isso, vá até sua camera, e mude o campo "Far" em "Clipping Planes".


7 - Evitar o máximo possivel scripts com muitas linhas
Spoiler:
Evite criar scripts com muitas linhas (Por exemplo 500 linhas),  isso sobrecarrega a CPU e a faz ficar mais tempo do que o necessario lendo aquele Script. Uma ótima saida pra isso, é criar vários scripts. Por exemplo. Digamos que você tenha um inimigo. Ao inves de colocar o script de Movimento, Ataque, Path Finding tudo em um só, você pode separa-los em outros scripts, cada um com 100 linhas por exemplo. Isso facilita a organização do seu projeto e tambem aumenta o desempenho do seu jogo.


8 - Desativar Scripts e Objetos que não estão sendo usados no momento
Spoiler:
Essa. É mais uma dica de ouro. Sério. Se você seguiu a ultima dica, você tambem ganha o beneficio de por exemplo, poder desativar Scripts. Digamos que em seu inimigo, você tenha 3 Scripts. 1 para movimento do NavMesh, outro para Atacar e outro para controlar suas animações. Mais esse inimigo esta longe do player e não o esta atacando, então pra que deixar o Script de ataque ativo? Simples! Ative-o somente quando o inimigo for Atacar de verdade o personagem.

9 - Evitar de colocar muitos objetos na cena
Spoiler:
Digamos que seu Player esta olhando para o horizonte. Nesse horizonte, tem 600 Arvores. Cara. Não tem necessidade disso. Isso fará o desempenho do seu game cair, ao inves de aglomerar todas essas arvores juntas, divida elas pela cena, assim quando o Player olhar para o Horizonte, ele vera umas 50 Arvores, mais se ele olhar tambem para outras partes do mapa, ele vera arvores tambem, e continuarão dando a mesma beleza que aquelas arvores aglomeradas davam.


10 - Evitar de ter muitos triangulos na Cena.
Spoiler:
Triangulos é só uma forma de identificação de detalhes nos modelos. Por exemplo, um modelo de prédio possui 200 triangulos, isso quer dizer que ele possui um nivel de detalhe  baixo. Bom, você pode monitorar a quantidade de triangulos que estão sendo renderizados no momento apenas clicando no Botão "Stats" na Aba "Game". Os triangulos são representados pelo campo "Tris". Uma boa maneira de reduzir os triangulos sem sacrificar a beleza do cenario, é usando os LOD's cuja o mesmo expliquei anteriormente.

A quantidade de tris recomendados para mobile varia de acordo com o seu Projeto. Mais uma quantidade recomendada é manter abaixo de 12~15k.

11 - Ter um numero baixo de SetPass Calls
Spoiler:
SetPass Calls é um numero que exibe a quantidade de Draw Calls feitas pelo jogo. Draw Calls é a quantidade de chamadas de renderização que o jogo utiliza. Sempre que o jogo tem que renderizar um material de algum modelo, ele gera 1 Draw Call. Você pode monitorar as SetPass Calls na mesma aba "Stats".

Um bom numero de Draw Calls para mobile é abaixo de 90.

12 - Usar Dinamic Batching
Spoiler:
Dinamic Batching combina os modelos que usam o mesmo material em uma única Draw Call. Exemplo. Digamos que existem 6 arvores na cena. Cada arvore usa o mesmo material. Sem o Dinamic, essa arvores vão gerar 6 Draw Calls. Com o Dinamic essas arvores vão gerar apenas 1 Draw Call.

Atenção: O Dinamic Batching consome um pouco da CPU, e só é executada em objetos Dinamicos (Que se movem), e tambem é ativada automaticamente para todo modelo que possui menos de 900 Vertices.


13 - Usar o Static Batching
Spoiler:
Esse aqui funciona igual o Dinamic Batching mais ele tem o diferencial de que só funciona em objetos que NÃO se movem. E tambem não possui limite de vertices para funcionar. Para usa-lo é só clicar no modelo, e na parte superior direita do Inspector, marque a caixa "Batching Static".



Tenha em mente que ativar isso, fará com que seu modelo fique completamente imóvel. Mesmo que scripts tentem move-lo, ele não irá mover pois é estatico.

14 - Manter um baixo numero de Batches
Spoiler:
Bom. Já que expliquei anteriormente sobre os Batchs. Tente manter o numero de Batchs o mais baixo possivel. Cada Batch, é um calculo a mais para a CPU. Você pode monitorar a quantidade de Batchs pelo botãozinho "Stats" na Aba "Game".

Um bom numero de Batchs para mobile, gira abaixo de 90. 

15 - Cuidado com o uso de MSAA (Multi Sampling Anti Alliasing)
Spoiler:
Usar o anti serrilhado é bom? É. Deixa o jogo lindo? Deixa. MÁS ele infelizmente não se da bem com muitas GPUs mobile. O Anti-Alliasing é muito bem suportado por algumas GPU's como Adreno, Tegra, Mali e outras, mais infelizmente, faz o desempenho cair drasticamente em outras GPU's como a Power VR. Cada GPU possui seus pontos fortes e pontos fracos. Você deve conhecer pelo menos a maioria.


16 - Evitar muitas luzes dinamicas na Cena
Spoiler:
Qualquer Luz do Unity, é uma Luz dinamica. Sempre tome cuidado com a quantidade de Luzes que estão sendo renderizadas no momento.
As luzes aumentam imensamente a quantidade de SetPass Calls e Batchs, fazendo o numero de calculos aumentar bastante.

Para mobile tente manter as Luzes igual ou abaixo de 3.

17  - Usar Shaders bem simples
Spoiler:
Essa é uma dica linda tambem. Em mobile sempre opte pelo Shader "Diffuse" ou "Bumped Diffuse" se sua textura possui um Normal Map. Esses são os shaders mais simples e mais bonitos que existem até o momento em mobile. Para alterar é só clicar no Material, e então mudar a caixa 'Shader" na parte de cima da aba "Inspector".


18 - Evitar uso de Post-Processing (O famoso efeito de pós processamento)
Spoiler:
Vai doer em você ter que deixa-los.. Mais chega um momento na vida de todo homen.. em que ele deve dizer Adeus.. kkkkkkkk

Mais sério cara. Como eu disse acima, se você quer fazer seu jogo rodar até no tablet da XUXA de 1'' de tela, tu tem que largar os efeitos de pos processamento. Infelizmente eles usam uma quantidade ABSURDA de processamento. Alguns são até leves e outros... Só Deus. Mais se você manja, você pode criar efeitos leves para seu jogo. Varia de projeto para projeto essa necessidade, mais é sempre bom testar afinal de contas.


19 - Usar o Profiller
Spoiler:
Profiler: Achou que eu tava brincando é? Quando você estiver usando um monte de particulas. EU VOU ESTAR LÁ.
Quando você tiver com 10 de FPS, EU VOU ESTAR LÁ.


gnlkdjihntwijntijotjnwroitnjwirojt

Ok. Cara. É sério, tenta usar o Profiller o maximo possivel desde o Inicio do seu projeto, nele você pode monitorar a quantidade de memória que seu jogo usa, o tempo que seu jogo leva para processar scripts e renderizações, e pode até ver qual script ta mais usando a CPU. Para ativa-lo é só ir na Aba "Window" > "Profiler". Só isso.

Aqui você pode dar uma estudada nele, pelo site da Unity (Em ingles)
https://docs.unity3d.com/Manual/ProfilerWindow.html

Mais se ta com preguiça, eu vou dar uma resumida básica no que significa cada componente (daí é só você analisar o gráfico né)
Rendering: Tempo de renderização que a CPU gasta
Scripts: Tempo de renderização que a CPU gasta lendo scripts
Physics: Tempo de renderização que a CPU gasta processando a fisica do jogo (RigidBodys, Character Controlers e por aí vai)
Garbage Collector: Tempo que o jogo leva deletando objetos que não estão sendo mais usados pelo jogo
VSync: Tempo que a Unity leva tentando sincronizar a CPU com a GPU, isso é útil para estabilizar o FPS.
Gi: Tempo que a Unity leva processando a iluminação global
Batches: Quantidade de Batches no momento
SetPass Calls: Quantidade de Draw Calls no momento
Triangles: Quantidade de triangulos sendo renderizados pela camera no momento
Vertices: Quantidade de vertices sendo renderizadas pela camera no momento
GC Allocated: Quantidade de objetos alocados no Garbage Collector (Explicarei mais abaixo)
Material Count: Exibe a quantidade de materiais sendo processados no momento
Total Audio CPU: Processamento gasto em audios no momento

Esses foram alguns dos mais importantes.


20 - Usar o Frame Debbuger
Spoiler:
O Frame Debbuger é similar ao Profiller mais ele só analiza o frame que você quer. Para usa-lo é só ir na aba "Window" e clicar em "Frame Debbuger", daí é só rodar o jogo e clicar em Enable. Ele vai exibir os objetos da cena e o seus custos de processamento.


21 - Preocupar-se com a otimização desde o ínicio
Spoiler:
Se você começou seu game, e só foi se preocupar com otimização quando você notou que o FPS estava muito baixo, você ja começou errado. A otimização é algo que deve ser levado em consideração a cada vez que você adiciona ou remove um objeto na cena. Nem que seja um modelosinho de nada. A dica que eu passo é que sempre que você adiciona algumas coisas na cena, teste em seu dispositivo, vá testando sempre. Assim você vai tendo noção do que esta reduzindo o desempenho, e se depois de terminar a cena o desempenho estiver baixo, aí entra em ação o famoso Downgrade, que é começar a remover as coisas da cena com o objetivo de reduzir o numero de calculos e aumentar o desempenho.


22 - Cuidado com a quantidade de Particulas e como você as usa
Spoiler:
Outra coisa que infelizmente é bem pesado em mobile. Mais não é tão pesado a ponto de se tornar inutil para nós. Evite de usar muitas particulas, por exemplo, numa fogueira, não tem necessidade da chama dela usar 100 particulas, sendo que apenas 3 ou 5 fazem um bom trabalho, então, é sempre bom ir testando a beleza das particulas e ir reduzindo o maximo possivel. As vezes até remover completamente elas.

Outra coisa, é evitar o uso de Particle Colliders e similares. Eles pesam imensamente em mobile.


23 - Usar LightMaps
Spoiler:
Um outro recursozinho da Unity que na minha opinião eu acho bem fraquinho.. Talvez eu que não saiba usa-lo, mais é sempre bom marca-lo. Bom, o lightmap é um recurso que simula sombras fake, e para isso você deve marcar o objeto desejado com "LightMap Static"


Bom, eu prefiro não usa-lo porque sempre que uso, ele reduz o desempenho do meu game e aumenta muito o tamanho da Build... Mais né.. Só to falando dele como uma menção honrosa..


24 - Cuidado com o uso de Mesh Colliders
Spoiler:
Mesh Colliders ou colisores de malha, fazem um colisor do tamanho perfeito do objeto 3d. Vários jogos triple A por aí usam esse colisor, mais não vou entrar muito em detalhes se não o tópico ficará do tamanho da china. Bom, o que importa é que eles são pesados, então prefira usar colisores simples como o Box, Capsule, Sphere e por aí vai.


25 - Cuidado com a quantidade de Rigidbody's na cena
Spoiler:
Que o rigidbody simula fisica todo mundo já sabe, mais evite usar muitos rigidbody's na cena. Se você vai usa-lo em um objeto por exemplo, apenas para detectar colisão, ative o "Is Kinematic" do rigidbody. Isso fará com que a Unity deixe de calcular fisica para aquele objeto, e detecte apenas colisões.


26 - Evite fazer calculos muito pesados em Shaders ou Scripts
Spoiler:
Tente fazer calculos simples durante os scripts ou shaders. Se um calculo é estatico e não tem necessidade de ser calculado a cada frame, é só voce fazer o calculo e armazenar o resultado numa variavel de consulta e só!


27 - Usar o Garbage Collector
Spoiler:
O Garbage Collector, é o coletor de lixo da Unity. Sempre que algum objeto não é mais usado ou referenciado por nada na cena, ele é deletador, por exemplo, sempre que você seta uma variavel como nula, e o objeto já não é mais referenciado, o coletor entra em ação e destroy aquele objeto, para que ele não ocupe mais espaço na RAM.

você pode usa-lo manualmente no script chamando essa linha:
System.GC.Collect();

Tenha em mente que a cada vez que ele é chamado o desempenho cai drasticamente por alguns milesimos de segundos (ou até segundos dependendo do caso).

28 - Cuidado com o Instantiate ou Destroy
Spoiler:
Instanciar e destruir objetos repetidas vezes faz com que o desempenho seja reduzido ao longo da jogatina e até mesmo faz o jogo crashar. Ao inves de destruir e instanciar objetos, tente criar objetos já colocados na cena, mais desativados, e sempre que os mesmos precisarem aparecer, é só você ativar o objeto que precisa e posiciona-lo no local onde quer. Daí quando deixarem de ser uteis, é só desativa-los.


29 - Importar corretamente arquivos de áudio
Spoiler:
é bem simples isso até. para configurar seu arquivo de áudio, basta clicar no clip de audio e veras um monte de opções e etc. Irei explicar o que cada uma faz.

Mais antes de tudo saiba que:
WAV - Formato de som sem compressão. Perfeito para efeitos sonoros como tiro, que devem ser repetidos varias vezes e são pequenos (50kb por exemplo).
MP3/OGG - Formato com compressão e bom para músicas.

Ok. Então vamos lá

Load in Background: Se marcado faz o audio ser carregado durante a Gameplay

Marque a caixa "Override for Android"

Se seu audio é um som de passo, ou tiro etc, use a configuração abaixo:

Load type: Decompress on memory - Faz o audio ser carregado para a RAM, assim o acessando mais rapidamente. É otimo para sons pequenos.
Preload audio data: Marque isso - Faz o audio ser carregado e armazenado na memoria, durante o loading da cena
Compression format: ADPCM - É um formato que usa pouca CPU e é bom para arquivos pequenos;

Se seu audio for uma musica, use a configuração abaixo:

Load Type: Streamming - Faz o audio ser descomprimido e reproduzido em tempo real (Como um youtube mesmo, só que pra audio) Assim o audio não é armazenado na memoria RAM, e reduz o consumo de memoria, já que musicas geralmente são pesadas. Isso consome uma pequena quantia de processamento.
Comrpession Format: Vorbis ou Mp3 - Vorbis possui uma compressão maior, mais possui menos qualidade (Eu nunca notei a diferença de qualidade entre os dois, mais isso varia de musica pra musica.)
Quality: Ajusta a qualidade da musica, recomendo que deixe em 50%. É um balanceamento entre tamanho e qualidade da musica em si.

30 - Não use a void Update se você não precisa dela naquele Script
Spoiler:
Só de declarar a void Update, você ja faz com que a Unity tenha que processar aquele script. Se ela esta em branco, apenas a apague.


31 - Usar Coroutines
Spoiler:
Aaaah.... As coroutines(ou rotinas).. São tão.. tesudas kkkkkkkkkk

Cara, se você tem que executar uma serie de coisas no script por exemplo: O personagem anda pra esquerda, direita e para frente, mais isso não precisa ser repetido a todo frame, então, use as rotinas. Elas são muito leves e só são executadas uma vez, isso quer dizer que só são executadas quando você necessita, assim seu script fica mais leve. O Marcos tem um video ensinando como usa-las.


Coroutines = IENumerator.


32 - Cuidado com o uso de GameObjects.Find e similares
Spoiler:
Se você executa comandos assim uma vez ou outra, sem ser a todos os frames, não tem problema, agora se executa eles a todo frame.. Cara.. Toma cuidado. Uma boa saida pra isso é usar o FindGameObjectsWithTag, que é mais leve. Tambem tem os famosos GetComponent, sempre que você usa o GetComponent em si, ou um Transform.Translate, qualquer comando que chame um outro componente do objeto, você gera uma chamada de Draw Call. Então cuidado.


33 - Compartilhe o mesmo material no maximo de objetos possiveis
Spoiler:
Como já expliquei acima na parte do Batch, tente usar um mesmo material no maximo de objetos possiveis. Como no exemplo da Arvore.


34 - Prefira tamanhos de textura, quadrados, por potencia de 2
Spoiler:
As GPU's tem um certo tesão por texturas com tamanho na potencia de 2 (32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024 e por ai vai). Tamanhos de textura, quadrados tem mais facilidade de serem processados pelas GPU's. Você pode usar a Override for Android pra redimensior a textura pelo Unity mesmo.


35 - Evite usar o Terrain do Unity
Spoiler:
Terrain da Unity, é super pesado pra Mobile. É serio. A quantidade de vertices que ele usa, pesa até no meu PC, imagina num celular. Então é isso. Procure outras alternativas como assets, ou até mesmo criar seu modelo de terreno no blender e importa-lo para o Unity.Mais atenção com a quantidade de vertices e triangulos.


36 - Evitar uso de sombras em tempo real e projetores
Spoiler:
Achou que eu não iria falar delas? Pois é. Desative as sombras do Unity em seu projeto. Só isso. Elas pesam MUITO em mobile. Uma alternativa se você quer mesmo ter sombras, é usar assets de sombra leve, ou até mesmo criar sombras fake com sprites etc.. Use sua criatividade.

Outra coisa que pesa tambem são os projetores.


37 - Ficar atento a quantidade de memoria RAM que seu jogo utiliza
Spoiler:
Hoje em dia grande maioria dos celulares vendidos já possuem 1GB de RAM ou mais, o fato aqui, é que no Android, pelo menos no momento, a RAM é compartilhada entre a CPU e GPU, portanto não temos uma VRAM no Android, como nos PC's. Então fique sempre atento a quanto de RAM seu jogo esta utilizando. Vários fatores contribuem para o aumento do consumo, mais os maiores fatores são: Tamanho da cena, tamanho das texturas, tamanho dos sons.

Tente manter abaixo de 120MB


38 - Reduzir a resolução de renderização que o jogo vai rodar
Spoiler:
Essa daqui é uma dica bem apelona. Se você esta tendo desempenho baixo em celulares com resoluções monstras (como 1920x1080), você pode usar o comando abaixo para reduzir a resolução de renderização para a que você quer. Isso ajuda em momentos de desespero. e em celulres bem RUINS. Sério. Ajuda MUITO.

Código:
Screen.SetResolution(640, 480, true);


39 - Atenção ao tamanho das texturas que usa
Spoiler:
Tenha cuidado com o tamanho das texturas que usa em seu jogo. Tente usar texturas com tamanho maximo de 512x512. Mais que isso podem ser muito pesadas para mobile.


40 - Cuidado com o uso de Coroutines em excesso
Spoiler:
Se você invoca uma coroutine, por exemplo, 1 de cada vez, é bem ok, super de boa, mais vamos ao supor que você fique invocando coroutines a cada frame, muitas vezes, chega uma hora que até 1000 coroutines são chamadas ai o jogo morre. Sempre chame a mesma coroutine uma por vez. Evite deixar o StartCoroutine livre no Void Update. Sempre crie um metodo para parar a invocação das coroutines.


41 - Alterar esquema de iluminação para Vertex Lit
Spoiler:
Clique na camera e em "Rendering Path" altere para "Vertex Lit Legacy", tenha em mente que esse é um esquema mais leve, mais algumas coisas podem se comportar de maneira estranha, como o FOG e etc. Ele tambem não suporta sombras.


42 - Quantidade de cameras na cena
Spoiler:
A quantidade de cameras ativas ao mesmo tempo, tambem abaixa o desempenho drasticamente. Tente ter no maximo 2 cameras ativas, e remova os componentes da camera secundaria, deixando apenas o componente "Camera".


43 - Desabilitar o Realtime GI
Spoiler:
Se tem "Realtime" no nome, saiba que vai pesar em mobile. Sério, até uma brisinha mais forte que tem, pesa em mobile. Então va até a janela "Lighting" e depois desabilite a caixa "Realtime GI". Isso fara com que a luz global deixe de ser calculada em tempo real.


Bom galera. Por enquanto é só. Essas foram todas as dicas que consegui me lembrar. Isso deu trabalho pra caramba pra fazer, então espero que ajude muito vocês. Outra dica bonus: Se esforce para otimizar, e não pare nunca com a otimização, não importa se o celular é da NASA, continue otimizando, e mais uma coisa. Otimização é um processo chato pra caramba, mais é muito gratificante ver seu jogo rodando em outros dispositivos sem travar.

Essas dicas não fazem milagre, você ainda tem que fazer o possivel para otimizar seus modelos e scripts, aí sim essas dicas funcionam. E elas ajudam seu jogo a rodar no maximo possivel de aparelhos. Agora se quer fazer um projeto destinado a aparelhos superiores, você tambem pode se basear aqui!

É isso galera! Valeu falou e sucesso!
UOU! SUCESSO MANIN!  affraid
avatar
Gabriel César O
Programador

Masculino PONTOS : 1407
REPUTAÇÃO : 210
Idade : 16
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum