Como tornar os jogos jogáveis ​​antes de serem totalmente baixados?

75

Diablo 3 e StarCraft 2 têm um recurso interessante: posso começar a jogar antes que o jogo completo ou a atualização terminem o download.

Acho que o Diablo 3 baixa arquivos obrigatórios, como recursos da interface do usuário, e algumas malhas e texturas que são usadas primeiro em vários níveis. No entanto, ao iniciar um jogo, posso escolher qualquer nível que quiser, assumindo que tenho salvamentos apropriados. Nunca experimentei nenhum atraso com isso ao jogar - começar sempre é muito suave.

Como é que isso funciona? Como eu poderia implementar um recurso semelhante?

nikitablack
fonte
2
World of Warcraft também: P
Kroltan
3
Como as páginas da web são visíveis antes de você baixar as páginas da web inteiras? Como a pesquisa de imagens do Google apresenta uma lista infinita de imagens sem usar tempo infinito para fazer o download? Os jogos são mais sofisticados, mas são bem parecidos.
Lie Ryan
2
@LieRyan: Em relação a "Os jogos são mais sofisticados", essa frase não tem fundamento algum. Pode haver jogos mais sofisticados, da mesma forma que existem (e olhando para lojas de aplicativos, a grande maioria dos softwares que não solucionam problemas sérios) jogos que são massivamente menos sofisticados do que uma pesquisa na Web escalável que espalha milhares de servidores e lida e armazena bilhões de solicitações de usuários todos os dias. E então, a pesquisa é apenas um dos muitos recursos para essa empresa. Portanto, passe a fase da vida pensando que os jogos são inerentemente mais complexos que o software "normal".
Phresnel # 23/14
1
@jhocking: Você está falando comigo? (se assim for, é melhor usar @ <nome de usuário> para ser notificado) Nah, não muito amargo. Quando eu era mais jovem, pensei que games-dev seria o rei da colina da engenharia de software. Eu só sei melhor agora, especialmente após o lançamento de um número de código fonte de jogos comerciais :) É um equívoco comum que se repete para aparecer. O Games-Dev parece realmente o Elite, mas na realidade é apenas outra especialização do desenvolvimento de software, como Super Computação, Mecanismos de Pesquisa, Reconhecimento de Imagem, Email Marketing ou ERPs para E's grandes.
Phresnel # 23/14
1
Apenas um comentário rápido, eu tenho pouca largura de banda em casa ( custo de vida em uma área rural ), e o jogo permanece impraticável para mim, mesmo que seja "jogável". Eu tenho que esperar por "ideal". Caso contrário, eu fico esperando 5 minutos para cada tela de carregamento e o atraso é irreal, então é definitivamente o download de algumas coisas naquele momento. Provavelmente, você pode fazer mais testes por si mesmo, limitando sua largura de banda.
DoubleDouble 28/01

Respostas:

72

Recursos como som, vídeo, modelos e texturas são a maioria do download e, para cada um desses ativos, existem várias versões. Essas múltiplas versões são compatíveis com várias opções gráficas.

Enviando os recursos necessários para uma opção de gráficos baixos primeiro (que também são os menores). Você tem tudo o que precisa para jogar, apesar de ter apenas 15% ou mais do total de ativos necessários para suportar todas as opções gráficas.

Você pode testar isso reinstalando o StarCraft 2. Execute-o assim que permitir que você vá para a tela de opções gráficas. Muitas opções e configurações estarão indisponíveis.

ClassicThunder
fonte
24
Você também pode aplicar a mesma técnica a mapas ou níveis inteiros em jogos com linearidade apropriada - faça o download dos primeiros níveis primeiro ou algo assim. O Guild Wars 2 enviou apenas áreas de áudio e de partida (além de um pouco mais) no disco, por exemplo.
Josh
12
Alguns jogos (como os jogos da Blizzard) também têm a capacidade de baixar ativos sob demanda, com base na sua localização atual no jogo. Isso funciona da mesma maneira como os ativos são frequentemente transmitidos de forma assíncrona a partir do disco rígido local, mas nesse caso com um atraso maior antes que os ativos solicitados fiquem prontos.
bcrist
1
O IIRC, Diablo 3 usa o método descrito por Josh Petrie - torna-se jogável assim que os recursos (possivelmente apenas a versão de baixa qualidade, conforme descrito nesta resposta), mas apenas o Ato I é inicialmente jogável. Isto é, se você estrangular sua conexão de internet suficiente, você será forçado a parar e deixar o download apanhar depois de terminar Act I.
Aaron Dufour
1
Em outras palavras, tecnicamente o jogo pode ser executado assim que o executável estiver instalado. Isso pode ser apenas alguns megabytes de dados. O quão longe você pode entrar no jogo depende de quantos ativos estão disponíveis. Um jogo que é instalado em 20 GB possui cerca de 19.9999 GB de dados e 0,0001 GB de código executável; desde que continue carregando dados da rede, o jogo pode ser executado com menos de 1% da instalação concluída.
Phyrfox # 23/14
1
@Brian Veja o histórico de edições. Não perguntou nada disso quando escrevi a resposta.
ClassicThunder
33

Uma vez eu implementei isso para MMOs. Um fim de semana, enquanto tentava instalar o WOW para minha filha, levou 48 horas decorridas (patches, erros de download etc.), então decidi criar minha própria solução melhor.

O jogo geralmente precisa de 10 GB de dados antes de rodar. Na verdade, nem todos os arquivos são necessários imediatamente, mas os jogos costumavam esperar até que todos os arquivos estivessem presentes localmente. Minha solução foi executar o jogo localmente normalmente, mas o EXE foi enganado (usando um minifiltro de arquivo do Windows) para pensar que todos os arquivos já estavam presentes. Quando um arquivo solicitado não era local, o sistema de arquivos baixou e salvou. O jogo foi lentamente copiado localmente, conforme necessário. Quando havia largura de banda disponível, os outros arquivos ainda não necessários eram introduzidos em segundo plano. Isso funcionou com TODOS os jogos sem a necessidade de recompilar, porque meu driver de minifiltro obteve arquivos quando necessário.

A pior desvantagem foi a latência. Minha solução para isso foi criar um pequeno modelo de cadeia de Markov para prever qual arquivo seria necessário em seguida e priorizar o carregador em segundo plano. Isso funcionou como um encanto, e nosso MMO foi capaz de executar quase IMEDIATAMENTE depois que apenas o EXE e alguns arquivos de tela de carregamento estavam locais (~ 20 MB). Conseguimos clicar em um link em uma página da Web e rodar nosso jogo de mais de 10 GB em cerca de 30 segundos . Tivemos uma taxa de acerto de 99%, ou seja, quando o jogo precisava de um novo arquivo pela primeira vez, ele já estava lá!

Ficaria feliz em ajudar alguém a implementar isso.

Chris Mayer
fonte
5
+1 e Seria ótimo se você pudesse compartilhar esse driver, porque eu estava procurando por algo assim e estava prestes a criá-lo como você fez, mas, se já estiver pronto, eu o usaria com prazer.
Furkan Omay
5
Uso interessante de alguma engenharia bastante avançada. Você realmente deve escrever um post sobre isso. :) Quanto as técnicas de aprendizado de máquina realmente ajudaram? Quão bem eles poderiam prever quais arquivos eram necessários?
Paul Manta
1
@FurkanOmay tais coisas são quase sempre propriedade da empresa do empregador de alguém. Não peça às pessoas que provavelmente quebrem os termos de seus contratos.
jwenting
@jwenting Pelo que entendi, o que ele fez não foi por uma empresa, mas por sua filha e por jogos como WoW. Estou apenas educadamente perguntando, ninguém é forçado. Ele pode recusar por qualquer motivo e tudo ficará bem. Eu perguntei porque ele disse "ele ficaria feliz em ajudar alguém a implementar isso", então eu não acho que pedir pelo menos um ponto de partida não seja uma má idéia, pois eu já disse que estou disposto a implementar isso desde o início acima.
Furkan Omay 30/10
3

Também em alguns jogos, as áreas e arquivos do mundo final são atrasados, apenas as áreas obrigatórias são mantidas e também podem ser instaladas enquanto o jogo ainda está em jogo.

Chantola
fonte
2

Para resumir o que várias pessoas disseram e talvez adicionar algumas informações:

  • o download inicial é pequeno, apenas os arquivos de inicialização e o gerenciador de downloads para o resto. Seria bom incluir a criação de contas, criação de avatar e talvez as zonas de início.
  • enquanto está em execução, o usuário faz login e cria seus avatares, começa a baixar outras coisas, zonas de baixo nível e arquivos comuns primeiro (como sons e texturas básicos, você os reutiliza o máximo possível em todo o jogo)
  • à medida que o usuário avança pelos níveis, comece a fazer o pré-download das próximas zonas e outros conteúdos
  • se o usuário selecionar opções que precisam ser baixadas, faça o download das variantes de baixa resolução primeiro e, ao jogar, baixe as versões de alta resolução, conforme necessário, e substitua as versões de baixa resolução exibidas por aquelas em movimento. Dessa forma, o usuário vê alguma coisa e, gradualmente, toda a glória do jogo é revelada (se ele tiver largura de banda e potência do computador suficientes)
  • repita até que tudo seja baixado


Isso significará uma carga de rede mais alta durante o jogo, até que todo o conteúdo seja armazenado em cache localmente, mas uma carga inicial menor nos servidores e uma espera mais curta e menos frustrante para os usuários enquanto eles estão baixando o jogo.
Obviamente, se o usuário tiver uma conexão de rede lenta, ele ainda poderá receber mensagens de "por favor, aguarde, carregando conteúdo" (forneça isso) ao mudar de zona, ou talvez você queira verificar a largura de banda ao iniciar o jogo e se estiver muito baixo para fazer o download de maneira confiável e rápida, espere lá e depois pelo menos o primeiro nível inteiro (e novamente ao entrar em zonas que ainda não foram totalmente baixadas).
Isso evita que o usuário fique no meio da jogabilidade real, porque sua conexão de rede fica atolada.

jwenting
fonte