O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Guia para Otimização de Projetos

Iniciado por Corvo, 29/01/2022 às 20:07

29/01/2022 às 20:07 Última edição: 29/01/2022 às 20:15 por Corvo
GUIA para OTIMIZAÇÃO de PROJETOS
De tempos em tempos é bom lembrar: se está com 100MB é porque cabe em 15.


PROPOSTA
Vamos direto ao ponto. Este tópico é uma coletânea de outros tópicos espalhados pelo fórum com algumas adições. Veremos algumas técnicas para otimizar ao máximo o tamanho final de um projeto. Veja bem, tamanho. Cobriremos a otimização da performance em outra oportunidade. Isto posto, também é necessário frizar o tipo específico de projeto que poderá tirar os melhor proveito deste conteúdo. Jogos 2D em geral, com semelhança ou referências em jogos da era 16bits. Não cobriremos jogos cujo visual ou trilha sonora esteja adaptado àos moldes HD atuais. Prontos?



1. REMOVENDO DADOS INÚTEIS
Quando iniciamos um projeto em engines como o RPG Maker, é normal que uma gorda camada de conteúdo pré-configurado esteja presente para facilitar o trabalho de usuários iniciantes, além de servir como exemplo ou modelos. No entanto, raramente utilizamos (nem deveríamos) este conteúdo. E se ele não é utilizado, é um peso extra que deve ser removido. Assim que criar seu projeto você pode começar removendo a dependência do RTP¹. Além da redução óbvia no tamanho, você resolve o problema dos seus jogadores que precisariam do pacote de recursos instalado para poder jogar.


O RTP do RPG Maker VX Ace, por exemplo, possui sozinho mais de 200MB.

Feito isso, o próximo passo é limpar os bancos de dados do jogo. Apague todas as pré-definições: personagens, classes, itens, armaduras, inimigos, habilidades, animações, estados, termos e opções da interface, absolutamente tudo. Neste ponto você já terá algum planejamento de seu projeto, então é correto afirmar que você sabe quais sistemas serão utilizados. Aproveitando o momento, você pode começar a remover o código extra em seu jogo. Por exemplo, se em seu projeto você não utiliza a loja de itens padrão nem mesmo como modelo para uma loja personalizada, não faz sentido que as classes à ela referentes continuem no projeto. Nas versões MV/MZ você ainda tem a opção de comprimir o código restante.

[box2 class=titlebg title=ATENÇÃO]
TENHA CUIDADO! Esta etapa pode causar problemas. Se não souber exatamente o que está fazendo, estude bem sobre a estrutura do código do projeto e/ou peça ajuda à um programador. E sempre tenha backups de seu projeto atualizados diáriamente!
[/box2]

¹Para versões do RPG Maker anteriores ao MV.



2. OTIMIZANDO RECURSOS GRÁFICOS
Recursos gráficos são uma das partes que mais consomem espaço em um projeto por questões óbvias. Há algum tempo, Geraldo de Rívia escreveu este excelente artigo explicando como e porquê reduzir ao máximo o tamanho de recursos visuais. Leia o texto depois retorne para este tópico, porque falaremos agora de um problema que não foi diretamente coberto naquela discussão: o tratamento dos arquivos antes da compressão.

Uma imagem de tilesets, por exemplo, é composta de dezenas de objetos. No entanto, nem sempre utilizamos todos eles em nossos cenários. Os objetos extras ocupam espaço não somente no tamanho do jogo, mas também na memória durante a execução, pois a imagem será carregada sempre que o tileset for usado para desenhar um mapa. Logo, podemos remover da imagem os objetos que não utilizamos e substituí-los por objetos úteis, mesmo que de outros ambientes. Assim podemos ter um menor número de arquivos na pasta do jogo.

[hs width=300 height=300]https://i.imgur.com/VjhqKZH.png[/hs]
Este exemplo é uma mescla das imagens Inside_B e Inside_C do RTP. Os erros nos cortes são um oferecimento do meu mouse quebrado, mas deu pra entender.

Além do espaço dentro da própria imagem, podemos dar alguma atenção ao número de cores. Encontre o equilíbrio entre este número e o aspecto do objeto. Por fim, tenha em mente que as dicas apresentadas aqui se aplicam à toda a parte gráfica de seu projeto: personagens, tilesets, arquivos do sistema, etc.


À esquerda, frame original. 33 cores, 9kb. À direita, imagem reduzida à 17 cores, 1.4kb. Ambas ainda sem compressão. Ignorem a qualidade porque não sei fazer pixel art, mas serve como exemplo.



3. OTIMIZANDO RECURSOS SONOROS
Na matéria citada acima, o Geraldo já falou um pouco sobre a escolha dos formatos corretos. Também vale citar que você não precisa de uma trilha sonora de seis minutos se a cena onde ela é usada dura quinze segundos. Você também tem a opção de criar trechos modulares, pequenas frases, que podem ser combinadas em ordens diferentes para criar trilhas sonoras distintas. É um dos métodos mostrados no vídeo abaixo, onde uma equipe conta como foi o processo para otimizar um jogo em 40kb:



Quanto aos efeitos sonoros, o mesmo se aplica com algumas adições. Às vezes, um mesmo arquivo pode ser usado em situações diferentes alterando-se apenas a tonalidade do som durante a execução. Além disto, se o seu projeto é ainda mais retrô, você pode preferir gerar efeitos sonoros programaticamente, os famosos beeps. Com bastante paciência, até músicas podem ser criadas desta forma:





4. MAPAS E CENAS
É comum em nossos jogos, certas situações que alteram completamente o visual de um mapa. Cidades sendo destruídas são um exemplo comum. Normalmente, os desenvolvedores apenas alteram o mapa para um novo arquivo. No entanto, em algumas ocasiões onde as mudanças não sejam completas, podemos utilizar o comando Alterar Tileset para fazer a mudança. No item 2 deste tópico, aprendemos como podemos ter controle total sobre nossos tilesets, o que facilita bastante o trabalho aqui.

Quanto às cenas, também é comum que alguns desenvolvedores criem mapas exclusivos para elas. Ou, em casos específicos, uma animação em vídeo. Evite tais práticas sempre que possível. Caso resolva seu problema, incluir uma série de imagens e animá-las manualmente pode ocupar menos espaço do que um único arquivo de vídeo dentro do projeto.



5. FINALIZANDO
Sim, vai dar trabalho. Muito. É por isto que o tamanho final de um projeto reflete todo o cuidado com o qual o desenvolvedor trabalhou e, portanto, o que você pode esperar durante a jogatina. Conforme a tecnologia avança e nossas máquinas tem cada vez mais recursos disponíveis, tendemos à nos aproveitar das novas opções nos esquecendo de otimizar os projetos por falta de necessidade. Porém, não é porque a máquina do jogador final possui estes recursos que eles estão disponíveis para o seu projeto. Você não sabe quais outras aplicações estarão em execução ao mesmo tempo. Sem falar na parte de segurança. Quanto menor sua aplicação, quanto menos ela exigir, menores as chances de algum problema mais grave aparecer. Além de tudo isso, é uma boa prática prezar pela maior qualidade possível de seu produto final, o jogo.

E então? Me esqueci de alguma coisa? Quais destas práticas vocês já estão utilizando? Alguma dúvida sobre como otimizar ainda mais um projeto?

Muito bom o texto.
É engraçado pensar que o áudio é sempre uma pedra no caminho dos desenvolvedores pela dificuldade de otimizar pequenas faixas de áudio. Hoje o que a gente conhece por soundfont nada mais é do que uma tentativa de reduzir ao máximo o tamanho dos arquivos de áudio. Cada console das antigas gerações tinha seu próprio sistema, extensão e limites de soundfonts, que era uma forma de fazer caber tantos beeps num cartucho com kbs de memória.
Hoje, um efeito sonoro wave de boa qualidade tem quase o tamanho de uma trilha inteira dessa época.
Me ajude a continuar produzindo!

Todo incentivo e ajuda são bem-vindos!
Quem quiser e puder me ajudar ► Compre-me um café! :coffee:
Você vai estar me ajudando demais!

Citação de: Zaggojhon online 29/01/2022 às 20:36
[...]

Pior é que não encontrei muita coisa sobre quando pesquisei. No máximo uns textos sobre MIDI e afins. Pra jogos pixelados, resolve. O problema é pro pessoal que ter uma qualidade sonora maior. Tu conhece algum formato que seja relativamente pequeno e consiga entregar uma sonoridade razoável?

Citação de: Corvo online 30/01/2022 às 10:41
Tu conhece algum formato que seja relativamente pequeno e consiga entregar uma sonoridade razoável?
Bom, depende bastante de onde vai utilizar esses arquivos. O midi é quase universal, e é muito leve, mas ainda assim carrega bastante informação que seria desnecessária em alguns usos.
Falando sobre os formatos que existiram, o mais otimizado (em questão tamanho e qualidade) sem dúvida é o do Snes. A nintendo bolou um formato SFC que leria samples extremamente pequenos (o que possibilitava a gravação de samples externos, daí temos até vozes em alguns jogos) e através de efeitos em cima desse você consegue timbrar o som de uma forma relativamente fidedigna.
A partir da era 64 bits já não temos formatos tão otimizados, já que mais espaço no disco também dava mais "liberdade" de formatos. Agora, esses formatos codificados dos consoles modernos são mais questão de segurança do que otimização.
Ainda vou fazer uns tópicos qualquer dia desses pra falar sobre SFC  :e.e:
Me ajude a continuar produzindo!

Todo incentivo e ajuda são bem-vindos!
Quem quiser e puder me ajudar ► Compre-me um café! :coffee:
Você vai estar me ajudando demais!

Citação de: Zaggojhon online 30/01/2022 às 11:08
[...]

Não se esqueça, a humanidade precisa deste conhecimento.  :o:):

Passei só pra postar um utilitário que o Syureri me mostrou outro dia: pngquant. Serve para comprimir imagens com pouquíssima perda de qualidade. Não vou postar exemplos porque o site do programa já tem alguns muito bons. Recomendo darem uma espiada.  :ok: