sábado, 14 de abril de 2018

Problemas crônicos do jogo: a precisão dos números float na Unity

Um comentário do João Victor Lucas no grupo do Proton no Facebook me chamou a atenção, por questionar algo que pouca gente observou. Vamos lá:

Esses bugs persistem desde umas versões mais antigas do jogo. Talvez não dê para alterar tudo agora, mas se for possível, agradeço.

Mi2M continua com o pontilhado no lado direito do parabrisa, perto da divisória.


As manchas vermelhas e verdes no modelo do Mi2M reduziram drasticamente, embora persista algum ranço verde na tampa interna do itinerário e nos pneus. Um detalhe curioso é que quanto mais qualidade eu ponho nas configurações, mais essas manchas reduzem e vice-versa.


O Invisibus está com controles estranhos, tem chaves de manual e botões de automático misturados. E não mostra a velocidade dele quando se desloca.


O N do câmbio manual funciona mesmo, pois o veículo segue numa velocidade constante. Já o N do automático faz o veículo reduzir a velocidade e parar num ritmo bem lento (não sei se na vida real é assim, mas enfim).


Na câmera interna traseira do MiBRTS, quando dou a volta usando as setas, ela "atravessa" um pedaço da carroceria... Tá, eu sei que o carro tem balanço traseiro curto, mas os outros Mis do jogo também têm, nem por isso acontece com eles.


Minha resposta:

---------

Algumas das coisas citadas são meio crônicas, de difícil solução... Teremos que conviver com elas por um bom tempo. São coisas pertinentes que acho que não comentei amplamente ainda, vamos lá:

Trechos verde ou rosa no Mi2M


Isso ocorre mais ao jogar com qualidade baixa. A textura é menor nesse modo, os quadros das cores pintados nele ficam mais próximos e a GPU perde precisão na seleção, assim acaba pegando as bordas do quadro ao lado. Ele usa uma textura cheia de quadrinhos com cores, quanto menor a qualidade, menores eles ficam, ficando bem apertados... Fiz um experimento nele usando uma textura só para todo o interior exceto as coisas que acendem, o resultado não foi tão bom quanto o esperado, provavelmente é algo que não vou repetir nos demais (usar poucas texturas sim, sempre é bom, mas sem a intenção de usar uma só para todo o interior).



Invisbus problemático


O invisbus acabou não recebendo algumas alterações dos demais (não testei mais), provavelmente ele será removido. Usava ele para testar o desempenho do jogo quando não tinha certeza sobre até que ponto posso ou não detalhar os demais. Mas já tiramos conclusões, os outros detalhados funcionam bem na maioria dos aparelhos, já deu para ter uma base.

O neutro não funciona como deveria


O câmbio manual usa um código bem complexo, ele é mais realista em vários sentidos, ainda que algumas coisas não estejam bem ajustadas porque não entendi (caso da embreagem). O automático é bem simples, fica mais tipo um arcade ou GTA, o neutro nele se tornou apenas uma forma de não ir pra frente nem dar ré. Não é e nem tem como ser tão realista. Futuramente usarei algum outro código para os automáticos.

A câmera não mostra as coisas próximas / fica vazada ao girar



E o problema da câmera interna ao girar... Esse é um que quase me fez desistir do jogo há uns anos.

É porque a distância mínima de renderização da câmera está configurada em 0.3 metros (ela não pega nada mais perto do que 30cm). Isso é uma eterna encrenca com mapas grandes na Unity, por conta da precisão dos números que ela usa para os posicionamentos dos objetos... Quero fazer mapas para percorrer vários km e a engine não oferece um meio nativo para isso. Se a distância da câmera for menor que 30cm a perda da precisão dos números quando está longe (depois de ter andado bastante) faz com que a câmera fique piscando, as sombras, luzes e tudo fora de lugar... Isso é perceptível ao ficar dirigindo sem parar, dá pra ver bem na rodovia, depois de 10km percorridos as coisas ficam tremendo. Ao parar o ônibus ele move tudo pro ponto central e o problema é "corrigido" (até os próximos 10km). Se eu deixar a distância da câmera menor (10cm ou menos, como seria o ideal) as piscadas começam a acontecer muito mais cedo, logo depois de 1km, em vez de 10. Isso acontece porque ela usa apenas sete dígitos para guardar as posições dos objetos, movendo a vírgula entre os 7 dígitos. Ao passar de 1km ou seja 1000 unidades, ficam 3 casas decimais (dá para ter uma precisão de milímetros). Ao passar de 10km, ou 10.000 metros, sobram só duas casas decimais. Aí a coisa fica feia, o jogo fica com precisão nos centímetros, coisas muito próximas e pequenas ficam tremendo, fora de lugar, a sombra pisca também etc. A solução "gambiarra" encontrada foi mover tudo para o ponto 0,0,0 quando o jogador passa de algumas centenas de metros, antes de chegar a 1km. Mas se faço isso com o ônibus em movimento ele girava e saía do controle, zoando toda a física... Então configurei para mover e resetar a origem só ao parar. É naquela hora que o GPS dá uma "bugada" (ele move tudo, o GPS mostra a posição anterior e é refeito).

Essa limitação da Unity por várias vezes quase me fez desistir do jogo, mas decidi encarar assim mesmo, sofrendo as consequências (tendo que ter essa distância grande na câmera e mover o jogador para o 0,0,0 quando ele passar de 999 metros). Por isso outros games sofrem também, caso do HBS/HTS que param tudo pra carregar cenário (além do peso de ter tudo carregado de uma vez, tem o problema da precisão dos números float). Eu não quis fazer mapas pequenos com pausas para carregar, decidi encarar um mapa grande mesmo com esses contratempos.

Se eu aumentar a distância mínima da câmera para 1m a coisa melhora de um lado na questão do mapa grande (não precisaria mover a cada 10km, mas sim a cada 100)... Mas prum jogo de direção com câmera interna não dá pra manter a câmera renderizando só de um metro pra frente de onde está o jogador, iria pular muita coisa.

É um tema complexo, não sei se deu pra entender rs mas se tiver interesse pesquise por floating point precision na Unity ou em games em geral.

Para fins de testes internos, aquele DO que aparece nas mensagens ao mostrar os fps é a distância da origem, a distância da câmera ao ponto 0,0,0. Quando ela passa de 999 fica com 3 casas decimais, aí começa a tremedeira. Aí ao parar move tudo pro 0,0,0 (dá um pequeno travamento) e o problema é resolvido por mais 999 metros.

sábado, 7 de abril de 2018

Erro DX11 could not switch resolution (800x600 fs=1 hz=0)

Algumas pessoas enfrentaram este erro ao abrir o jogo no Windows:

Switching to resolution 800x600 failed, trying lower one
Switching to resolution 800x600 failed, trying lower one
All resolution switches have failed
Screen: DX11 could not switch resolution (800x600 fs=1 hz=0) 

Pesquisando na web vi este erro é comum em outros jogos, não é algo específico do Proton. No meu PC não aconteceu, mas seguindo relatos de outros jogadores que passaram por isso em outros jogos, vale fazer estas tentativas:

Use outra API gráfica


  • A versão PC para Windows é oferecida com outras APIs gráficas suportadas pela Unity. O ideal na plataforma é se manter no DirectX, mas se o problema persistir, experimente usar o Vulkan ou OpenGL (na pasta do jogo há atalhos para iniciar ele nesses modos). O Vulkan é suportado somente em placas de vídeo mais recentes, enquanto que o OpenGL funciona com muitas outras. Dependendo da placa de vídeo e/ou dos drivers, o jogo pode apresentar artefatos gráficos ou comportamento inesperado. Sempre mantenha seus drivers de vídeo atualizados, bem como o sistema operacional. Experimente os atalhos que vieram na pasta para ver qual funciona melhor no seu computador.

Rode no modo janela

  • Outra tentativa é marcar o modo Windowed na primeira tela do jogo, aí ele roda em modo janela (pode ser maximizada).


Tentativa no Windows 7:

  • Certifique-se de ter o Windows e os drivers de vídeo atualizados.
    Seu Windows é atualizado? As versões mais velhas podem ter problemas que já foram solucionados nas mais novas, veja no Windows Update se está tudo em dia. Vi em alguns fóruns o pessoal recomendando esta atualização da Microsoft caso use o Windows 7:
    https://www.microsoft.com/en-us/download/details.aspx?id=36805

Alternativa que talvez pegue:

Na primeira tela de seleção do jogo, marque o modo Windowed (janela). O jogo não abrirá em tela cheia assim, mas talvez pelo menos abra. Você pode maximizar a janela ou redimensioná-la livremente.

Tentativa mais fácil:
  • Clique com o botão direito no ícone do jogo, vá em Propriedades, aba Compatibilidade, e marque a opção Desabilitar otimizações de tela inteira:


    Será necessário fazer isso de novo caso você baixe uma atualização do jogo ou extraia ele novamente depois.

Tentativa com placa de vídeo da Nvidia:
  • Abra o painel de controle da Nvidia clicando com o botão direito na área de trabalho, depois vá em Monitor > Ajustar o tamanho e a posição da área de trabalho > Marque o item Sem Escala, clique no botão Aplicar... E tente abrir o jogo novamente. Veja na imagem:

  • Outra tentativa é marcar também a opção "Substituir o modo de escala definido por jogos e programas" na mesma tela acima.


É bom notar que o Proton Bus requer uma placa de vídeo com suporte a DirectX 11 (exigências da engine). Ele não vai funcionar nas placas mais antigas que só aceitavam o DirectX 9, nem nas integradas muito fracas. Quem não tem placa de vídeo até consegue rodar o jogo se o processador tiver uma GPU integrada boa (os recentes têm), mas notebooks e PCs fracos de uns anos atrás podem sofrer mais ou nem conseguir abrir.

Outra tentativa é usar a API gráfica Vulkan, se suportada pela sua placa de vídeo. Nesse caso, para abrir o jogo use o atalho .bat que tem Vulkan no nome, ele estará próximo ao ícone dele. Aparecerá uma janela preta do prompt de comando mas é normal. Você pode usar o parâmetro -force-vulkan ao executável, se quiser criar um atalho personalizado desta forma. Note que dependendo da placa de vídeo o desempenho pode ser pior ou melhor, ou nem funcionar.

terça-feira, 27 de março de 2018

Lista de bugs e recursos


Compartilho aqui uma lista de bugs e tarefas que tenho para o projeto. Esta lista é resumida, em detalhes há mais de 500 itens... Algumas coisas levarão bastante tempo, lembrando que o jogo tem alguns anos de desenvolvimento pela frente (entre 2 a 4, ou mais, se precisar).

Lista sujeita a alterações sem aviso prévio, é provável que algumas coisas citadas serão substituídas por outras depois.

Estas mudanças devem ocorrer de 1 a 3, 4 anos ou mais. Não espere tudo em 2018 nem 2019 não. Só depois de programar toda essa base é que darei atenção aos mapas definitivos realistas que pretendo ;)
  • Os automáticos estão rebaixados na dianteira (bug já identificado no centro da massa)
  • Passageiros se mexendo quando parados (indesejável, tem que desativar como era antes)
  • Posicionamento 3D dos sons, e redução de volume (setas, portas etc)
  • Fundo do T07 interno e pés dos bancos faltando no VIP4 (virão quando forem animados)
  • Passageiros com as costas para trás dos bancos (TGV e outros)
  • Skins não aparecem em alguns ônibus do tráfego ou estacionados (ficam brancos)
  • Android: ao voltar das telas de opções às vezes não salva (bug reproduzido porém não identificado, só vi no Moto G1, nos mais novos não deu aqui... parece treta de desempenho)
  • Bug gráfico na GPU Mali T830-MP2 (J7 Prime e similares, bug bem louco e difícil de achar o que causou =/)
  • Reduzir uso do GC.Collect nas funções das luzes dos ônibus (meta/sonho: zerar o GC um dia)
  • Som de freio raspando às vezes toca em momentos inadequados
  • Embreagem desregulada em todos os manuais (vai demorar até entender/estabilizar, recomendo jogar sem embreagem)
  • Fumaça do escape: configurar cor por ônibus (mais novos = mais fraca)
  • Passageiros que travam na porta do meio ao ficar um de frente pro outro (bug difícil de resolver, é mais perceptível na porta do meio)
  • Passageiros devem ir pra calçada depois de descer e continuarem caminhando (depende de infraestrutura na via)
  • Passageiros devem parar pro ônibus do jogador passar nas faixas/cruzamentos (colisor frontal talvez)
  • Articulado no tráfego (com possibilidade de carretas etc...? Talvez dependerá do tráfego com física, pode demorar muito)
  • Melhor deteção do tráfego caso o jogador esteja perto (otimizar vendo a distância, usar triggers na dianteira, impedindo que o ônibus entre na curva por cima do ônibus do jogador... uma esfera grande na dianteira deve resolver)
  • Suavizar freagem e aceleração do tráfego
  • Opção para não desligar a seta automaticamente
  • Suporte a controles de volante baratos (talvez uma opção de inverter valores nos pedais deve resolver)
  • Suporte a controles de joystick no PC e Android
  • Câmera livre no Android
  • Ciclo dia noite no Android (complexidade pelo peso e intregração com as demais áreas)
  • Relógios no cenário
  • Temperatura simulada (para o relógio estilo SP)
  • Controle de ar condicionado funcional nos ônibus (aumentar/reduzir, passageiros reclamando etc)
  • Efeitos gráficos no Android (não sei se vai funcionar bem, é só pra aparelhos tops)
  • Trocar sons dos carros do tráfego para algo melhor (mais variações = mais RAM, ir com cautela)
  • Boneco do cobrador aleatório (randomizar motorista também, quem sabe)
  • Mais passageiros na versão PC (de 100 a 1000 bonecos diferentes)
  • Mais carros na versão PC (de 50 a 1000 veículos diferentes)
  • Otimizar função Update dos objetos repetidos, pessoas, carros, passageiros (chamando um só pra tirar o overhead dos updates)
  • Outros ônibus estacionados e no tráfego, configuração para skin individual neles aleatória (futuramente será por linha... talvez a configuração será feita via arquivo na pasta, é muita tela para criar)
  • Carros estacionados na faixa exclusiva no sentido contra fluxo
  • Taxistas no corredor e em faixas exclusivas
  • Velocidade mais alta para polícia e ambulância (sonho inatingível a curto prazo: ultrapassagem)
  • Ônibus quebrado no caminho, para pegar os passageiros deles (e às vezes não, só quebrado mesmo)
  • Sons de veículos do tráfego (polícia, ambulância, bombeiro, carro do ovo, pamonha, churros, gás, etc)
  • Colisão básica no tráfego (complexa para evitar acidentes causados pelo AI)
  • Tráfego mais realista com física (colisões nas rodas, giro suave etc)
  • Ônibus parando nos pontos e pegando passageiros (depende do tráfego estável nas curvas)
  • Ônibus fazendo rotas específicas (com letreiro e tal)
  • Opção de GPS no painel (útil na versão PC, já que a tela do Android tem os montes de controles mesmo)
  • Opções de letreiros digitáveis e/ou mais fases (não prioritário, prefiro que aprendam a usar as pastas)
  • Opção para inserir letreiro pelo número, sem precisar passar por todos (provavelmente terá um painel próprio do Proton para isso, alternando os personalizados e os do mapa)
  • Ônibus e carros que somem na junção dos terrenos na Radial/Aricanduva (simples na teoria, na prática continuou bugado)
  • Opção para passar todos os letreiros do mapa pelo controle no ônibus
  • Opção de rolar letreiro de lona, quem sabe (vai ser difícil, não é prioritário)
  • Melhorias locais no mapa Aricanduva (áreas faltando prédios, muros, passarelas, aumentar a qualidade)
  • Mais detalhes no Aricanduva (bancas, postes com fios, lixos, passarelas etc)
  • Calçada vazada na guia no Metrô Carrão
  • Asfalto molhado em mais mapas (complexo, cada um foi feito de um jeito e o piso de um não pega no outro)
  • Seta indicativa no GPS em curvas antecipadas (na entrada do Carrão)
  • Garagem decente no Aricanduva
  • Estudar uma ligação de um mapa no outro com tela de carregamento (segurar o ônibus com quem estiver dentro e colocar no outro mapa)
  • Opção de alterar o destino ao chegar no final, com tela perguntando ou aviso discreto (caso a linha tenha rota de volta, sugerir inverter TS-TP)
  • Tentativa no PC: ligar um mapa no outro no modo contínuo, ignorando o tamanho dos tiles, com distância personalizada na desativação (já que serão maiores do que 3km2).
  • Animais no mapa Longeee e em áreas adequadas (peso++)
  • Pequenos mapas de desafios (curvas na neve, balizas etc)
  • Analisar possibilidade de embarque traseiro sem passar na catraca, para terminais e áreas de pré embarque (não prioritário, dará um trabalhão fazer para todos os ônibus por conta dos caminhos)
  • Vozes dos passageiros: reclamar em curvas e subidas na calçada (detectar variações bruscas de altura entre um frame e outro... pode dar zica em baixos fps)
  • Vozes dos passageiros: editar e incluir as que estão salvas aguardando (processo demorado)
  • Refatorar scripts de controle, unificando todos eles (deixar um controlador só, com câmera, tráfego, passageiros, pools diversos etc... ou não!)
  • Isolar pool de carros e pessoas do mapa, para carregar no início do jogo e reaproveitar depois (reduzirá o tempo de loading com cenas persistentes, sem ter que carregar todos os carros de novo na abertura do mapa, por exemplo)
  • Versão PC: mapa de teste com o City Scape (ideal pro Expresso Tiradentes)
  • Mais árvores 3D detalhadas, configurar no Aricanduva
  • Talvez unir o mapa do Term Shaze ao mapa continuo (ele usaria 2 tiles só... o do corredor fica inviável pela falta de cruzamentos e forma de construção das peças)
  • Mapa do Expresso Tiradentes
  • Mapa conceito com o BRT da Radial
  • Sistema de mods dos ônibus (complexo, o tempo total será variável...)
  • Gerador de strings para as placas dos carros (RAM++, pode ser dispensável)
  • Em pontos finais, terminais etc os passageiros não devem reclamar de velocidade lenta.
  • Pedestres: randomizar um pouco para lá ou para cá, um certo raio dos waypoints originais... Para dar maior dinamismo nos movimentos. E então fazer no caminho inverso também.

quarta-feira, 21 de março de 2018

Nova configuração do anti-aliasing na tela Extras

Na próxima versão de PC terá um item para escolha do tipo de anti-aliasing (anti-serrilhado) desejado ao usar os gráficos avançados. Isso deve aliviar o "borrão" que algumas pessoas enfrentaram nas últimas versões do jogo para PC. No modo com gráficos extras o anti-aliasing tradicional via hardware não pode ser usado (o MSAA não funciona no modo Deferred da Unity, mas não liga pros termos ténicos não...). O modo TAA (Temporal) estava ativado de forma fixa. Nos vários testes aqui ele foi o que mostrou a melhor qualidade. Porém ele pode deixar os objetos em movimento um pouco borrados. Agora com a escolha dará para reverter ao FXAA, que deve funcionar melhor nesses casos, apesar de não suavizar tão bem quanto o temporal faz em algumas linhas. Esta configuração não ficará disponível no celular por não ter tanta serventia, visto que os efeitos não são usados no celular - fizemos inúmeros testes no ano passado e em todos os casos a tela ficava branca, ou rosa, ou toda borrada. No celular valerá a configuração MSAA já que usa a renderização no modo Forward. Ela depende de suporte do hardware, em alguns aparelhos baratos não funciona, mas também não causa nenhum problema. Espero que algum dia seja possível ativar os efeitos nos celulares para igualar os gráficos, quem sabe...

domingo, 4 de fevereiro de 2018

Chega de ônibus! Calma, eu explico rs

O desejo de cada um é ter o ônibus que passa na porta de casa, mas no mundo real nenhum jogo tem como atender a isso, são infinitas variações... Se um desenho em papel já é difícil e demorado para fazer, imagine um em 3D e todo animado?! Desde o início do projeto coloquei uma meta para mim mesmo de ter uns TRINTA ônibus, aproximadamente. É um número bem acima da média de outros jogos, considerando que são ônibus detalhados e todos terão que ser animados. O OMSI foi lançado com meia dúzia de modelos quase todos iguais, outros jogos também fazem por aí... Vindo com apenas alguns modelos. Outros colocam dois grátis e todo o restante pago, via addons... O Proton terá uns 30 gratuitos! Todos os demais serão via mods futuros, para não comprometer o game. Pois bem... As 30 vagas já foram preenchidas. Alguma até pode ser remanejada ou trocada, mas não poderei abrir muitas exceções novas. Ficará assim: Cerca de 10 ônibus em padrões variados (boa parte dos atuais, modelados no padrão da cidade do modelador). É o caso do VIP II e IV, Torino 2007 e 2014, Padron Rio, Urbanuss Pluss, etc... E dos que estão na fila de edição/otimização para virem no decorrer do ano (Millennium BRT Scania, Senior midi, UrbanusS e Urbanus 94, S21, etc). Cerca de 5 ônibus estrangeiros (provavelmente Solaris, Lions City, Citaro...). Futuramente conforme for eles serão separados num jogo à parte, mas no começo ficarão integrados ao Proton. Cerca de 15 ônibus de São Paulo (incluindo os que já tem no jogo e alguns outros, com mais articulados e alguns biarticulados). Totalizando então os 30. Não muito mais do que isso. Os modelos serão anunciados gradualmente, não temos como confirmar todos agora porque alguns ainda não começaram a ser feitos (serão para daqui um ou dois anos). Cada ônibus adicionado gera um "peso" no arquivo do jogo e no processo de edição. A cada alteração da engine ou da física, gráficos etc, eles precisam ser testados em todas as suas variações (manual, automático, completo e lite). E ainda tem as animações. Nenhum jogo no mundo vai ter 100 ônibus com qualidade... Se aumentarmos o número teríamos que tirar animações e pioraria a qualidade geral do projeto. Não é por aí. Ainda tem a parte sonora, que precisará ser melhor trabalhada nos anos seguintes... Já temos muitos ônibus pendentes para editar, não podemos colocar novos na fila pois não teria como garantir a inclusão no jogo. A médio e longo prazo o mapa padrão terá vários corredores no estilo SP, ganhando uma identidade maior. Então todos os próximos, ou grande parte deles, deverão atender ao padrão de São Paulo. Os ônibus em outros padrões foram colocados numa época em que tinha poucos, então foram bem vindos! Mas agora precisamos focar melhor nas definições. O Proton terá suporte a mods de ônibus, é um recurso difícil de fazer e demorado, mas virá, pensando nos PCs e nos celulares do futuro (em alguns anos teremos modelos de 4 GB de RAM mais populares, espero...). Aí qualquer um poderá editar e colocar o modelo que quiser (não articulado, pelo menos... mods de articulados ainda não são confirmados). Enfim, diante deste texto acho que fica explicado porque paramos de responder a perguntas sobre modelos. Vai ter esse? Coloca aquele outro? Se eu fizer um você coloca no jogo?! Não dá. A resposta padrão agora é esta, não por mal, mas por ser inviável. A meta dos 30 está sendo atingida bem mais rápido do que o esperado! Outros modelos populares que não encontrarem espaço nessas 30 vagas talvez virão futuramente em atualizações, quando tivermos mais tempo e o jogo já estiver formado. Eu mesmo adoraria poder colocar mais de 30, mas seria loucura e comprometeria a idealização do projeto, aumentando radicalmente o custo e o tempo de edição. Quem gosta de editar e está aprendendo, ótimo! Os modelos serão muito bem vindos quadno tiver o suporte a mods. Não tem previsão de quando virá efetivamente porque os aparelhos atuais teriam dificuldades no carregamento, mas assim que possível terá um teste inicial deles. Então é isso pessoal! Além dos já amplamente divulgados oficialmente, não esperem tantos ônibus em padrões variados agora. A maioria dos demais será no padrão SP. Terá tanto de portas dos dois lados como só na direita, a maioria padrons (motor traseiro) e mais alguns articulados e biarticulados. É isso! :)

quarta-feira, 31 de janeiro de 2018

Mais atualizações de teste em breve: mais progresso!

Mais testes em breve! Textão, mas é legal para quem gosta de entender o que rola nos bastidores da programação do jogo.

Depois dos últimos testes na 146 e 146X, chegamos a conclusões importantes! Muito obrigado a todos os que ajudaram a testar e relataram o desempenho! <3

O jogo funciona BEM MELHOR usando recursos recentes, no caso marcando a escolha de API gráfica automática e com a renderização em múltiplos núcleos ativada na engine. Quase todos os celulares são quad core hoje em dia, ou dual core no mínimo... Nesse modo enquanto um núcleo lida com a programação do jogo e sincronização das tarefas, o outro cuida mais da parte gráfica. Isso permitiu obter melhores taxas de FPS, variando de 10 a 100% dependendo do aparelho! Alguns obtiveram 30% de ganho, outros 50%, em alguns modernos a taxa de FPS chegou a dobrar!

Esta opção infelizmente se mostrou problemática em alguns aparelhos com uma GPU específica, muito usada pela Samsung em alguns modelos do Galaxy J7 e A5 (entre outros, mas não todos!). Perto do número de aparelhos disponíveis mundialmente é pouca coisa, não é justo sacrificar o desempenho de quase todo mundo por conta de meia dúzia de aparelhos.

A opção moderna se tornará a padrão na Play Store, ao que tudo indica (aquele da tela verde, com o X). Quem possui estes aparelhos onde há a corrupção gráfica precisará baixar um APK do jogo que será disponibilizado à parte, e desativar a atualização automática no Proton na Play Store (só para o Proton, não precisa ser para tudo), para evitar que ela substitua o jogo. Tentaremos colocar um aviso na tela do jogo nesses aparelhos. É o melhor caminho encontrado por agora.

Futuramente temos fé que a Unity corrigirá este bug nativamente. Iremos juntar relatórios dos bugs, prints e informações dos modelos e enviar para os desenvolvedores da Unity, sugerindo forçar o uso do OpenGL ES 2 nestas GPUs específicas. Quem sabe faremos uma listagem do jogo separado na Play Store, mas no momento isto é inviável porque não dá para unir as colaborações nos dois - o downlaod será por APK isolado mesmo.

Nos celulares da maioria das pessoas a versão com o X rendeu ganho considerável de FPS, é boa demais pra ser deixada de lado, como vinha sendo deixada desde o ano passado. Melhorando o desempenho podemos ter um controle mais estável, aumentar um pouco as configurações (sem exagerar, é claro) e curtir melhor o game! Nada nada, no celular 5 FPS ganhos já é muito, quando se joga a 15, 20...

Diante destes testes, nesta semana faremos mais um, desta vez mudando a versão da engine Unity. Novas versões geralmente trazem benefícios, melhorias, correções diversas, muitas otimizações. Na versão 5.x a Unity melhorou muito! Se ficássemos na versão 4.x com medo de atualizar, o jogo estaria bem pior, infinitamente mais lento. Desta vez ocorre algo parecido. Estamos usando a versão 2017.1 da engine, lançada no começo do ano passado. De lá para cá ela teve duas grandes atualizações, a 2017.2 e 2017.3. Elas trazem melhorias de performance em algumas áreas. A 2018 está em beta, não iremos utilizá-la até estar estável. Mas o jogo será atualizado para a 2017.3 pelo menos, que é a versão oficial do ano passado. Este processo de atualização será necessário cedo ou tarde, visto que com a engine antiga chegará uma hora em que a Play Store não aceitará mais o jogo. Então tentaremos fazer agora.

Diante disto, teremos que fazer um teste amplo com os jogadores para ver se não aparecem bugs colaterais inesperados, jogando por alguns dias com a futura 147 e 147X. Ambas serão com o mesmo conteúdo, porém compiladas com a engine mais nova.

No Windows iremos incluir a API OpenGL como opcional, algo que por padrão não estava presente. Ficará várias opções e o jogador escolhe a que rodar melhor. No Android infelizmente isto não é possível, por isso temos que gerar dois APKs.

A Unity 2017.3 removeu suporte ao DirectX 9, o que impacta o Windows XP, que é um sistema bem velho. Como o jogo já tem dificuldades para rodar em GPUs muito antigas (tela rosa, ou baixos FPS), isto não será problema, ainda mais considerando que é um projeto em desenvolvimento pensando nos próximos 2, 3, 4 anos. Não ficaremos presos ao passado em detrimento das tecnologias que o jogo pode implementar hoje, pensando no amanhã.

Em termos de conteúdo, em fevereiro chegará pelo menos mais um ônibus, e provavelmente um novo mapa temático, daqueles comprados prontos. As correções no Longeee foram adiadas diante destes bugs. Ainda há centenas de e-mails de vozes para responder, correrias atrás de sons e animações de passageiros nos novos ônibus, etc. Esperamos a compreensão de todos.

Há usuários que não param de mandar mensagem perguntando quando terá atualização, o que vem, etc... Desde o início do jogo fomos bem transparentes: NÃO HÁ PREVISÃO, o que se sabe é que virão. Muito raramente fica mais de 30 dias sem atualizar, e quando fica é porque algo realmente necessário está sendo feito. Desenvolver um projeto desse não é coisa de uma semana, é de meses, anos! Alguns recursos simplesmente exigem mais tempo mesmo. Foi o caso do mapa contínuo no ano passado. Demorou uns dois meses para ficar pronto, sem ele não teríamos linhas longas no jogo, no mapa Aricanduva! Todas elas seriam pequenas demais num mapa isolado, não contínuo...

Enfim, esperamos a compreensão, lembrem-se que o projeto está em desenvolvimento e é um BETA, logo, tem bugs, e terá muitos bugs ainda até ficar pronto. Não adianta ficar pressionando por atualização, novas rotas, isso e aquilo, sendo que estamos trabalhando arduamente todos os dias no jogo.

Os mapas temáticos comprados prontos ajudam a suprir em parte a falta de rotas (Test Track, Longeee e em breve um novo). Novas rotas no mapa Aricanduva ainda dependem da definição da ferramenta de ruas, que não está pronta totalmente - queremos ruas mais naturais, curvas e subidas, não só as ruas chatas do jogo atualmente. Então tenham paciência, ou vão jogando outros jogos disponíveis no mercado enquanto este não agrada, se for o caso ;)

É isso, pessoal! Muitos progressos virão em breve. Agradecemos imensamente a quem ajuda a testar as versões isoladas disponibilizadas aqui na página, o feedback de vocês é fundamental para continuar fazendo o jogo fluir bem.

terça-feira, 23 de janeiro de 2018

Mais otimizações em estudos: renderizar a uma resolução menor e escalar; e LOD nas pessoas!

Estudando mais otimizações... Tenho duas em mente: renderizar a uma resolução menor, aplicar anti-aliasing e escalar para o tamanho da tela. Isso pode poupar o trabalho de GPUs mais fracas, especialmente em aparelhos baratos de tela grande (onde há mais pixels, forçando mais a GPU). Assim como a redução da resolução que já tem, não vi diferença no Moto G5S nem no Moto G, mas talvez isto poderá ser sentido melhor nos Samsung mais baratos - visto que são os modelos que mais geram reclamações. Bem como nos tops de linha com alta densidade de pixels, reduzindo o peso na renderização. Infelizmente não tenho nenhum aqui para testar para ver se ajuda mesmo... Frente à alteração da resolução atual isto terá benefícios: dá para usar o anti-serrilhamento, deixando a imagem um pouco mais suave do que apenas mudar a resolução. Em tempo, mudar a resolução para 50% lá nas opções gráticas melhorou o desempenho para você? Se sim, é provável que este recurso ajudará! Deixe nos comentários seu relato, informando também o aparelho em uso. Outro aspecto que considero é usar LOD nos pedestres e passageiros. Eles já são bem low poly, mas com LOD ficariam bem mais leves quando estão ao longe. Basicamente o jogo mostra um modelo parecido, porém bem mais simples, quando as pessoas estão distantes. E troca o modelo para um mais detalhado quando vão chegando perto da câmera. Isto reduz o número de triângulos que a GPU precisa processar nas cenas com vários passageiros e pedestres. O meu "medo" é a otimização não surtir efeito, porque a transição entre os LODs parece exercer uma certa carga também. Precisarei fazer testes com bastante calma. Sei que a diferença ao usar os passageiros e pedestres "feios" para os detalhados é brutal (aquela opção na tela Extras). Então acredito que isto terá benefícios. Novamente, mais um recurso "pago", tendo que adquirir uma ferramenta para automatizar a produção de LODs. Para quem acha que o jogo tem que ser todo grátis só porque a Unity e o Blender são de graça... rs É o que digo: o game só vai para frente tendo uma parte comercial. O modelo atual é "perfeito", digamos: mantemos a versão grátis, quem colabora joga com algumas coisas antecipadamente e no final todos se beneficiam. Se fosse só grátis o jogo estaria bem mais atrasado e incompleto. Se fosse só pago seria bem chato, e também estaria atrasado, visto que não teríamos jogadores em quantidade suficiente para pagar por algo incompleto. O modelo atual de "acesso antecipado" une o melhor dos dois mundos! <3