Com a Xbox One a Microsoft tem vindo a falar da Cloud. E apesar de se reconhecer as devidas vantagens à sua implementação, até que ponto o Cloud Computing poderá influenciar as performances da consola?
O que é a Cloud? Bem, na realidade é algo que já existe desde sempre, um conjunto de computadores ligados à internet, e que partilham de forma comum o seu processamento.
A Azure da Microsoft é a maior Cloud do mundo, e possui mesmo as condições todas para ser a melhor do mundo durante muitos anos (foi aliás considerada recentemente como a melhor).
Mas se é certo que se reconhecem as capacidades da Cloud para servidores (sejam de jogos ou de outras situações), para fornecimento de serviços, para armazenamento de ficheiros, etc, o que se pode esperar da tão apregoada componente de computação?
Bem, baseado naquilo que é a realidade actual da internet, muito pouco. Vamos analisar a situação numa perspectiva que todos possam perceber.
Imaginemos um jogo que corre a 30 fotogramas por segundo (o mínimo aceitável, e note-se que quanto mais fotogramas o jogo tiver, pior é a situação). Isto quer dizer que cada fotograma é calculado em 33,3 milésimos de segundo.
Com uma ligação à internet em condições ideais o Ping de comunicação entre um computador e o servidor ronda em média os 37 a 45 ms. Quer isto dizer que só na deslocação de ida e volta, a informação demora mais do que na criação local de um fotograma.
Mas esta é uma situação utópica. Qualquer pessoa que jogue online sabe que as médias de ping andam entre os 70 aos 220 ms, e isto com boas ligações. E isto quer dizer que, na melhor das hipóteses, qualquer processamento realizado na web demoraria um tempo equivalente a 2 fotogramas só com a viagem. Mas claro, há depois que acrescentar o tempo perdido do lado de lá com o processamento dos dados.
Mas para piorar a situação surge um problema: Em apenas alguns milisegundos o jogador pode interagir com o mundo. E isso quer dizer, por exemplo, que entre o pedir para calcular algo na cloud e o receber dos dados, o jogador pode ter realizado uma acção algo que contrarie ou anule o pedido.
Por exemplo, imaginemos que é solicitado o cálculo da animação de uma nuvem no céu, algo que não é crítico ser realizado em tempo real. Mas nesse entretanto, enquanto o pedido vai e não chega, o jogador fecha a janela que permite ver o céu. Tivemos então aqui um calculo desnecessário e que chegou atrasado e consequentemente a nuvem nunca chegou a ser animada.
Mas dado que a maior parte das coisas é sensível ao timming e precisa de ser calculado em tempo real para ser inserido no ecrã, vamos ver o que pode e o que não pode ser calculado remotamente, isto é, aquilo que não precisa de interagir a todo o momento com o utilizador e que não é sensível às alterações que podem ocorrer a qualquer momento:
Como já vimos, a reacção à interacção de um utilizador é algo que não pode ser calculado remotamente pois mal o sistema recebe o comando, a situação necessita de se reflectir no fotograma seguinte, algo que não pode acontecer com a existência de processamento remoto na Cloud.
O processamento gráfico é igualmente critico. no espaço de tempo em que se cria um único fotograma o jogador pode já estar a olhar para outro lado, e nesse tempo os dados remotos para inserção no fotograma que já passou ainda sem sequer chegaram.
A luz dinámica é outra coisa que não só depende das acções do utilizador, mas também do local para onde ele se vira. Para além do mais a luz tem interacção com toda a geometria e não basta calcular a luz, háque calcular todo o efeito que esta possui sobre o mundo em cada fotograma, e isso implicaria o calculo remoto de todo o ecrã, enviando a geometria, texturas e propriedades dos materiais para o servidor. E isso como se pode facilmente imaginar, não é viável de ser feito em tempo útil.
A física é algo que também é crítico. Se carregas no gatilho o que esperas é que no fotograma seguinte a bala já esteja no ar. E isso tem de acontecer imediatamente e não dali a 3 ou 4 fotogramas.
A fisica de ambiente, como o abanar das arvores ao vento é algo que não é critico. Para o jogador ver a árvore a abanar agora ou dali a 3 fotogramas é algo que pouco ou nenhum interesse tem. No entanto, apesar de esta situação ser uma candidata ao processamento na Cloud, qual a tolerância que ela pode ter? Afinal se isso é uma realidade com uma árvore a abanar ao vento, uma explosão que abane a árvore tem de a fazer abanar quando a explosão ocorre e não somente dali a 3 ou mais fotogramas.
Inteligência Artificial – Dependendo da AI e do tipo de jogo a AI pode ter uma tolerância a estas variações. Mas claro, depende do jogo, sendo que isso se adequa mais a jogos de estratégia ou por turnos. Ou alguém quer num FPS um inimigo que só se tenta mover 3 fotogramas depois de ter sido alvejado?
Outra característica pouco critica é a transformação do ambiente, como com o crescimento de vegetação, etc. Mas claro depende mais uma vez do tipo de interacção. Não queremos ver uma árvore a crescer depois de deitada abaixo.
Independentemente de tudo o que foi dito em cima, e de termos visto que até haverão algumas situações que poderiam ser calculadas na Cloud, todas estas situações possuem um pequeno senão que se torna extremamente crítico. É que se qualquer uma delas for implementada o jogo torna-se dependente das internet e do servidor. E isso quer dizer que falhas na internet, seja por problemas ou ausência da mesma, ou falhas no servidor, implicam que o jogo não poderá ser jogado. E isso em jogos que não sejam multi-jogador será algo que dificilmente será bem compreendido. Não foi aliás isto que criou uma grande revolta nas políticas iniciais da Microsoft? A obrigatoriedade de internet?
O Cloud Computing poderia assim ser visto como uma reversão da reversão das políticas da Microsoft. A volta do DRM mas disfarçado de algo bom para o utilizador, quando no fundo as consequências seriam exactamente as mesmas. Sem internet… sem jogo.
Existe ainda um outro senão. O uso da Cloud implica a alocação de grandes recursos que necessitam de ser pagos. E isso quer dizer que jogos offline que recorressem a estas situações teriam de exigir pagamento do serviço Live. Afinal seria a única forma de se rentabilizar os grandes recursos disponibilizados na Cloud.
E há ainda que referir outras situações que estamos a colocar de lado na análise. É que em todos os cálculos de cima estávamos a ser extremamente OPTIMISTAS ao pensar que apenas o PING pode ser problemático. Na realidade a internet tem vários problemas adicionais.
A instabilidade do ping é naturalmente uma delas, e acima de tudo a principal. sendo que aquilo que agora pinga a 30 ms pode pingar a 500 daqui a 1 segundo.
Mas depois temos outras realidades, como a perda de pacotes. Por vezes há pacotes que se perdem na transferência, requerendo-se assim novo pedido que por sua vez também pode perder pacotes. Ou seja, não há fiabilidade nenhuma nos tempos que podemos ter para garantir a chegada dos dados em condições.
Outra situação é que os pacotes podem chegar fora de ordem, e isso requer tempos de espera e processamento local para os re-organizar. Na pior das situações, se o pacote principal chegar atrasado, tudo tem de ficar à espera.
Isto são situações conhecidas e normais que acontecem diariamente em jogos online e que revelam que dificilmente um processamento na internet pode ser feito em tempo útil de forma a interferir com o processamento em tempo real que ocorre na máquina. Basicamente tudo se resume a uma situação, LAG, o nome dado à situação que ocorre quando há um grande desfasamento entre a acção do jogador e a reacção do servidor e que não é aceitável nestes casos.
Para além do mais situações menos críticas, como por exemplo a animação do ambiente, podem ser pré-calculadas e inseridas no média, não necessitando de serem calculadas na Cloud.
Parece assim claro que as dúvidas sobre as reais capacidades do Cloud Computing são muitas, e recomendo a leitura deste artigo do Digital Foundry que se mostra igualmente relutante na aceitação de que tal situação alguma vez venha a ser relevante. Daí que a Microsoft tenha de provar o que diz com conceitos práticos e não apenas mero paleio de Marketing.
Mas dado que a computação requer milhões de acessos a dados a cada segundo, deixo-vos com um dado comparativo para a média das situações, fornecida por um utilizador do Neogaf, para que possam perceber melhor como os exemplos de cima apesar de tudo são ainda mais utópicos do que parecem:
Apenas por uma questão de perspectiva, quando os circuitos lógicos do CPU querem algum dado, eles esperam alguns nanosegundos para que ela chegue da sua cache. Se o CPU pedisse à Cloud para calcular algo, a resposta poderia na média das situações demorar algo como 100 milésimos de segundos. O que na mesma escala significaria 100 000 000 nanosegundos.
Por outras palavras, com estes atrasos, o processamento seria 100 000 000 vezes mais lento.