Otimização de scripts por Coroutines
2 participantes
Página 1 de 1
Otimização de scripts por Coroutines
Marcos blz?
Gostaria muito que você fizesse quando possível um tutorial sobre como otimizar scripts utilizando Coroutines, pois vi que a maioria dos métodos acabamos por padrão definindo sua execução através de chamada no método Update, que ocorre a cada frame e isso acaba pesando muito, tendo em vista que se um jogo estiver rodando em média a 60 Frames por segundo, o método então seria checado ou executado 60x por segundo, fazendo a performance cair bastante e já por meio de coroutines é possível determinar o tempo de execução, tipo 1x por segundo ou a cada 5 segundos, etc. Andei vendo alguns exemplos, mas sei que existem inúmeras formas de utilizá-las, como em métodos void.
Gostaria de uma explicação melhor com exemplos se possível. Não creio que isso irá gerar um vídeo muito longo ou complexo de se fazer.
Grato!
Gostaria muito que você fizesse quando possível um tutorial sobre como otimizar scripts utilizando Coroutines, pois vi que a maioria dos métodos acabamos por padrão definindo sua execução através de chamada no método Update, que ocorre a cada frame e isso acaba pesando muito, tendo em vista que se um jogo estiver rodando em média a 60 Frames por segundo, o método então seria checado ou executado 60x por segundo, fazendo a performance cair bastante e já por meio de coroutines é possível determinar o tempo de execução, tipo 1x por segundo ou a cada 5 segundos, etc. Andei vendo alguns exemplos, mas sei que existem inúmeras formas de utilizá-las, como em métodos void.
Gostaria de uma explicação melhor com exemplos se possível. Não creio que isso irá gerar um vídeo muito longo ou complexo de se fazer.
Grato!
perinaldoc- Membro
- PONTOS : 3417
REPUTAÇÃO : 9
Respeito as regras :
Re: Otimização de scripts por Coroutines
A tempos planejo fazer um vídeo sobre isso... só falta eu programar o roteiro.
O problema é que não trata-se apenas de substituir Update por Coroutines... isto na verdade não ajuda em quase nada. O que pesa é usar Update para fazer checagens que nem precisariam estar ativadas, muitos instantiates, Utilizar setagem de GetComponent com o próprio comando GetComponent no Update, entre muitas outras coisas... O principal que deixa os jogos pesados ainda é a demasia de particulas, modelos tridimensionais com muitos tris, luzes em realTime ou que poderiam ter bake más estão sem, etc, etc...
Por isso tenho que preparar um roteiro para otimização, além de explicar algumas coisas como o oclusion que é muito util...
O problema é que não trata-se apenas de substituir Update por Coroutines... isto na verdade não ajuda em quase nada. O que pesa é usar Update para fazer checagens que nem precisariam estar ativadas, muitos instantiates, Utilizar setagem de GetComponent com o próprio comando GetComponent no Update, entre muitas outras coisas... O principal que deixa os jogos pesados ainda é a demasia de particulas, modelos tridimensionais com muitos tris, luzes em realTime ou que poderiam ter bake más estão sem, etc, etc...
Por isso tenho que preparar um roteiro para otimização, além de explicar algumas coisas como o oclusion que é muito util...
Re: Otimização de scripts por Coroutines
MarcosSchultz escreveu:A tempos planejo fazer um vídeo sobre isso... só falta eu programar o roteiro.
O problema é que não trata-se apenas de substituir Update por Coroutines... isto na verdade não ajuda em quase nada. O que pesa é usar Update para fazer checagens que nem precisariam estar ativadas, muitos instantiates, Utilizar setagem de GetComponent com o próprio comando GetComponent no Update, entre muitas outras coisas... O principal que deixa os jogos pesados ainda é a demasia de particulas, modelos tridimensionais com muitos tris, luzes em realTime ou que poderiam ter bake más estão sem, etc, etc...
Por isso tenho que preparar um roteiro para otimização, além de explicar algumas coisas como o oclusion que é muito util...
Pois é Marcos, estou tendo diversos problemas de otimização em meu jogo, pois sempre fui muito crítico quanto a gráficos dos jogos que eu jogo e apesar de estar fazendo um jogo pela primeira vez, estou buscando próximo ao realismo em meus cenários e isso está me custando em processamento. Possuo uma máquina robusta com processador Octa-core rodando e uma placa de vídeo GTX970 de 4GB e ainda assim, testando meu jogo que ainda está longe de terminar, pois ainda restam muitas texturas a serem aplicadas e objetos a serem inseridos na cena, bem como scripts ainda a serem implementados e ele já possui partes em que o FPS chega a cair a 5, 9 e em outras partes chega acima de 60! Então vejo pelo Stats do Unity que a maior parte dos problemas se dá justamente por conta de inúmeros batches que o processador tem que processar bem como tris que os renders acredito devam jogar pra VGA. Em alguns momentos os tris chegam a mais de 40.000 em pontos da casa. Estou desenvolvendo um jogo de Survival Horror que se passa em uma mansão. Já estou com ela toda modelada e quase toda mobiliada (ela foi criada através do Sketchup), mas tem partes que possuem muitos vertices. Só consegui importá-la decentemente utilizando formato obj. Sei que as texturas não ficam no Unity e eu tenho que texturizar tudo de novo, mas tive problemas com DAE mesmo fazendo como vc disse no tutorial.
Por acaso tem alguma forma de melhorar a questão de muitos meshes? Percebi que box colliders são melhores do que mesh collider em alguns casos se encapsular tudo num GameObject vazio e colocar tudo de um mesmo objeto dentro dele.
perinaldoc- Membro
- PONTOS : 3417
REPUTAÇÃO : 9
Respeito as regras :
Re: Otimização de scripts por Coroutines
Existem várias coisas que melhoram significativamente o desempenho como
- Usar shaders do tipo diffuse
- Usar sempre modelos com o minimo de triangulos possível
- Usar texturas com baixa resolução sempre que possível
- Usar o mínimo de luzes ativas em cena se possível...
- Sempre que der, trocar luzes em real Time por Bake de luzes
- Desativar cenarios completos distantes sempre ajuda a diminuir DrawCalls... pode fazer isto com base neste vídeo:
Obviamente este sistema não é nem de perto algo top... tudo isto poderia ser feito com uma "coroutines" a cada 2 segundos por exemplo... deixaria bem mais leve do que ficar checando em tempo real.
-Outra coisa que ajuda muito é deixar objetos fixos como estáticos... facilitará muito para sua engine calcular luzes e físicas.
- Sempre que der, opte por BoxCollider... é melhor do que tudo que é colisor existente... é a geometria mais leve e menos bugada que a unity traz
- Use o mínimo possível de física ativa no seu jogo... se algum objeto necessita ter física em um certo momento, tente manter suas propriedades de física apenas quando este momento chegar... depois tente deixa-lo como kinemático, ou desativar o objeto.
- Tente utilizar um modelo único em vez de vários modelos separados... por exemplo, algumas pessoas criam as paredes e os pilares separados, e depois juntam... eu modelo tudo junto e depois importo como um único modelo. Isto ajuda a reduzir os DrawCalls
e por ai vai. E como eu disse, pode usar oclusion culling para ajudar
- Usar shaders do tipo diffuse
- Usar sempre modelos com o minimo de triangulos possível
- Usar texturas com baixa resolução sempre que possível
- Usar o mínimo de luzes ativas em cena se possível...
- Sempre que der, trocar luzes em real Time por Bake de luzes
- Desativar cenarios completos distantes sempre ajuda a diminuir DrawCalls... pode fazer isto com base neste vídeo:
Obviamente este sistema não é nem de perto algo top... tudo isto poderia ser feito com uma "coroutines" a cada 2 segundos por exemplo... deixaria bem mais leve do que ficar checando em tempo real.
-Outra coisa que ajuda muito é deixar objetos fixos como estáticos... facilitará muito para sua engine calcular luzes e físicas.
- Sempre que der, opte por BoxCollider... é melhor do que tudo que é colisor existente... é a geometria mais leve e menos bugada que a unity traz
- Use o mínimo possível de física ativa no seu jogo... se algum objeto necessita ter física em um certo momento, tente manter suas propriedades de física apenas quando este momento chegar... depois tente deixa-lo como kinemático, ou desativar o objeto.
- Tente utilizar um modelo único em vez de vários modelos separados... por exemplo, algumas pessoas criam as paredes e os pilares separados, e depois juntam... eu modelo tudo junto e depois importo como um único modelo. Isto ajuda a reduzir os DrawCalls
e por ai vai. E como eu disse, pode usar oclusion culling para ajudar
Tópicos semelhantes
» Duvida sobre otimização e scripts.
» Coroutines Loop
» sugestões de otimização?
» Otimização
» Otimização
» Coroutines Loop
» sugestões de otimização?
» Otimização
» Otimização
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos