Todos os jogos não poderiam evitar o carregamento pós-início?

23

Assim como jogos gigantes do mundo aberto carregam mapas maciços dinamicamente, não é possível carregar mapas, menus e praticamente qualquer interface ou configuração 3D via esse mesmo método de carregamento dinâmico? Sem alterar o ambiente, parece que interfaces e vários locais dentro do jogo podem ser carregados dinamicamente da mesma forma que mapas de mundo aberto maciços são carregados enquanto você os percorre.

Por que isso não é feito? Eu vejo tantos jogos modernos em que você precisa esperar um minuto ou mais enquanto a partida / mapa / nível está carregando. Eu sei que há uma latência envolvida na conexão de pares, mas isso não leva mais do que alguns momentos na minha experiência. Quais problemas existem com esse conceito para impedir que ele seja usado para eliminar o tempo de carregamento envolvido no carregamento de dados de mapa / nível / interface?

Viziionary
fonte
16
Note-se que em 'perfeita' muitos jogos de mundo aberto, não são tempos de carregamento quando o jogador move-se para uma localização imprevisível. Pode-se caminhar de um extremo a outro de Nova York na Divisão sem exibir uma tela de carregamento - enquanto a viagem rápida para um local exige carregamento. É tudo sobre saber o que carregar em seguida.
Felsir
2
@Felsir Dungeon Siege fez da mesma maneira.
Mason Wheeler
Como exemplo, Batman Arkham Origins usa telas de carregamento pouco antes das cenas e ao entrar em áreas totalmente novas. Sua natureza progressiva, orientada para a história, presta-se bem e oferece ao usuário uma pausa natural. Isso funciona especialmente bem devido às áreas muito amplas com ativos de alta definição. Seria muito demorado codificar e testar esse recurso com pouco benefício.
Casey Kuball
traga sua memória RAM de até 128 gb. Crie uma unidade de RAM de 64GB ou mais, carregue seu jogo na unidade de RAM. Os tempos de carregamento serão tão rápidos que você nem notará. Atualizei para um SSD e a maior parte do tempo de carregamento diminui drasticamente. Atualizando a placa de vídeo, especialmente para mais RAM de vídeo.
cybernard
O carregamento assíncrono leva tempo, que pode variar com base na CPU e na velocidade do disco. Você nem sempre pode ter certeza de que as coisas serão carregadas quando você precisar.
27716 Alan Wolfe

Respostas:

31

A resposta é sim, isso pode ser feito, na maioria dos casos, pelo menos até certo ponto.

As razões pelas quais isso não é feito são muitas:

  • Requer tempo e dinheiro para fazer o certo.
  • A quantidade de erros que passam no teste será maior
  • Os tempos de carregamento são aceitos pelos usuários.
  • Pode haver outros motivos para o tempo de carregamento, como balancear a carga do servidor.
  • Soluções genéricas que podem ser compradas prontamente são mais compatíveis com "carregar tudo de uma vez".
Peter - Unban Robert Harvey
fonte
Como acompanhamento do ponto de 'balanceamento de carga do servidor', muitos jogos on-line que chegam ao mercado hoje apresentam uma área central de 'hub' exclusiva para você e que ninguém mais pode acessar. Freqüentemente, essas áreas são colocadas atrás de uma zona de carga ou de uma área de caminhada lenta (por exemplo, a BOO em 'The Division') para que eles possam com segurança tirá-lo da instância em que você estava anteriormente e colocá-lo em sua própria instância privada .
SGR 27/04
7
Há também a questão da memória. Pode não ser possível carregar um nível existente mantendo a atual na memória (particularmente para consoles ou dispositivos portáteis), então você tem que usar uma tela de carregamento
Jezzamon
@Jezzamon Acho que a totalidade do mapa de Skyrim nunca é mantida na memória a qualquer momento. Talvez eu esteja errado? Mas, se não, por que qualquer outra situação seria inaplicável às estratégias de carregamento dinâmico de enormes mapas de jogos em mundo aberto?
Viziionary
Praticamente ninguém mais usa seu próprio mecanismo de jogo. Eles compram um mecanismo (Unreal, Unity, CryEngine) e um monte de middleware e o colam. Os mecanismos básicos geralmente não são configurados para transmitir conteúdo continuamente ou para reiniciar sem recarregar. Pense em quantas vezes você morreu em um jogo apenas para enfrentar um tempo de carregamento de 60 segundos, apesar do fato de os ativos e o nível já estarem carregados. Os motivos que a @Peter deu também são os motivos pelos quais você não vê jogos que permitem começar a jogá-los enquanto você baixa os ativos com muita frequência.
Tom B
2
Os níveis @Viziionary normalmente reutilizam muito as texturas, e um nível diferente usa um conjunto diferente de texturas. Um nível de calabouço usará muitas texturas de paredes de calabouço, um nível de deserto usará texturas de areia e rochas do deserto, um nível de montanha usará texturas de rocha, grama e neve, etc. Para jogos onde isso é verdade, descarregando meio nível quando o mesmo as texturas usadas em todo o nível liberarão apenas uma pequena fração da memória usada (ou descarregará as texturas que você ainda precisa).
precisa
10

Se seus menus tiverem uma tonelada de ativos, eles levarão um tempo para serem carregados. Você também não tem idéia de qual ordem as pessoas navegam no seu menu. Eles poderiam clicar em opções -> voltar -> créditos ou créditos -> voltar -> iniciar o jogo em rápida sucessão. Portanto, não há uma estratégia de streaming razoável.

Em um jogo de mundo aberto, você sabe que o jogador não se moverá mais rápido do que uma certa velocidade; portanto, não precisará carregar as versões detalhadas de locais distantes até que eles se aproximem deles.

Almo
fonte
Por que não priorizar o carregamento de menus pesados ​​/ com acesso frequente? Em qualquer RPG, se eu abrir o menu, é 90% do tempo para equipar algo que encontrei ou usar um item. Você pode começar pelo menu. Ou comece com o menu que leva 5 minutos para carregar e descarte o carregamento se o usuário sair do menu.
precisa saber é o seguinte
1
@DrakaSAN Mas isso geralmente é otimizado. Até o Diablo original mostrou o inventário na hora em que ele caiu. A abordagem "espere por tudo" parece ter tido um grande ressurgimento dos consoles modernos, que eram muito limitados em memória em comparação com um PC. E como muitos jogos que estão no PC e no console são portados para console-> PC, algumas limitações do console são herdadas no processo. Compare Diablo III ou Divinity com Skyrim ou Dark Souls - as diferenças são bastante óbvias.
Luaan
2
Os menus de carregamento lento são um problema real nos jogos? Não
Alan B
@ AlanB apenas se a única maneira de acessar consumíveis for através desse menu. Veja Destiny no Xbox 360 / PS3 e quanto tempo leva para usar um pacote de munição em comparação com as versões XB1 / PS4.
SGR 27/04
1
@SGR Eu estava prestes a usar Destiny no PS4 como um exemplo de menu com tempos de carregamento inaceitavelmente longos, não consigo imaginar o quanto é pior nos últimos consoles de geração.
precisa saber é o seguinte
5

Um grande fator na viabilidade de uma solução desse tipo é a previsibilidade do que precisa ser carregado. Se o jogador carrega níveis inteiramente novos, sem meios de antecipar o que escolherá, simplesmente não é possível uma solução completamente perfeita. Por exemplo, quando o jogador pode selecionar qualquer nível no jogo para jogar ou se ele tem liberdade para se teletransportar para áreas completamente diferentes em jogos de mundo aberto.

Alguns jogos de Halo começam a carregar o nível selecionado em segundo plano ao configurar jogos multiplayer. Isso reduz o tempo de espera quando os jogadores estão prontos para começar e é provavelmente o mais próximo possível de uma solução quando o jogador pode escolher livremente níveis diferentes com ativos completamente diferentes.

É claro que você disse "sem mudar o ambiente", mas eu só queria trazer o exemplo do Halo , pois é algo que eu gostaria de ver mais.

Em uma campanha contínua, ou sempre que o desenvolvedor tem muito controle sobre a localização do jogador, essa solução é certamente viável, exatamente como você diz. Naughty Dog gosta de acabar com os tempos de carregamento, com Jak e Daxter famosos sem tempo de carregamento no PS2, e os jogos Uncharted com um único tempo de carregamento no início.

No entanto, para muitos, o tempo de carregamento simplesmente não é um problema que precisa ser resolvido . Ou é um problema muito baixo nas prioridades dos desenvolvedores, quando há sempre mais a ser feito entre agora e a data de lançamento .

Jibb Smart
fonte
3
Jak e Daxter têm tempos de carregamento. Eles estão apenas escondidos atrás de portas, em um método semelhante aos elevadores ME1 e como eles ocultam os tempos de carregamento.
Nzall 27/04
2
Mas os tempos de carregamento escondido atrás de salas de S-curva e que tal não se sentir como os tempos de carregamento.
Almo 27/04
Se eu entendi direito, mapas de mundo aberto como o Skyrim não estão carregados na memória, apenas as peças que o usuário precisa ver imediatamente, então você não pode carregar previamente em pequenas porções iniciais de todos os mapas (20?)? Com a otimização adequada dos dados do mapa, parece que a RAM real usada não é um grande problema em termos de quantidade de RAM moderna, mesmo em dispositivos móveis. É o poder de renderização da placa de vídeo que afunila a maioria dos jogos, acho. Parece que você pode carregar as áreas iniciais de todos esses mapas de auréola para o usuário e renderizar o selecionado enquanto tira o resto da memória.
Viziionary
1
Os mapas não são o que leva uma eternidade para carregar - são as enormes texturas, arquivos de modelo, programas de sombreamento, etc., específicos de um nível ou área.
Tom B
3

Tempo.

Você precisa de tempo para economizar tempo. Ou você precisa de dinheiro para compensar a falta de tempo. De qualquer forma, "Sem tempo de carregamento!" é um recurso que apenas aqueles que têm o luxo de pagar podem oferecer. É preciso um planejamento muito cuidadoso, e você precisa entender muito bem o que está fazendo e nem todos os desenvolvedores de jogos têm os recursos necessários.

Vaillancourt
fonte
2

Por fim, são recursos limitados.

Os jogos de mundo aberto e, especialmente, os MMOs são fortemente criados para a previsibilidade - você sempre sabe quais dados precisam carregar com antecedência. Você pode ver isso na arquitetura dos mundos - sempre que há muitos recursos que precisam ser carregados, há uma maneira de impedir que o usuário veja o que ainda não foi carregado. A maneira mais comum são os portões e entradas que bloqueiam sua visualização na próxima área pelos poucos segundos cruciais necessários para o carregamento. A maioria dos MMOs também usa modelos e texturas menos detalhados, o que reduz consideravelmente o tempo de carregamento.

Algumas coisas ainda são imprevisíveis, mesmo com design cuidadoso. Por exemplo, pode haver banners personalizados usados ​​pelos players, que são mostrados apenas quando os dados relevantes foram enviados para o seu computador pela rede. Obviamente, a maioria dos jogos tenta limitar isso para torná-lo mais barato (por exemplo, os banners do Diablo III são composições simples, fáceis de enviar como poucos bytes de dados). Mas, em última análise, às vezes você apenas precisa aguardar a chegada dos dados. E você precisa mostrar alguma coisa enquanto o carregamento está em andamento - em muitos jogos, isso pode causar uma quebra de imersão quando você vê um modelo cinza com poucos detalhes enquanto aguarda o carregamento dos dados.

E com tudo isso, carregar dessa maneira é um problema resolvido (TM), mas isso não facilita. Custa muitos recursos e tempo, tanto na otimização dos recursos quanto na sua utilização para garantir uma experiência de reprodução suave e no próprio código - o código assíncrono é difícil. Também pode significar uma experiência de jogo reduzida, mesmo que tudo dê certo - significa que você precisa garantir que não ultrapasse os recursos de largura de banda do seu menor denominador comum; portanto, é necessário diminuir a qualidade dos modelos e texturas ou torná-los menos variada, e a geometria de seus mundos é severamente limitada. Caso contrário, o jogo será bastante impossível de jogar - enquanto eu lembro de pessoas que jogaram jogos que levaram 10 minutos (ou até mais!) Para carregar um mapa, simplesmente porque o computador deles não estava preparado para a tarefa, o jogo por si só corre bem depois disso. Se tivesse um carregamento contínuo, o jogo congelaria ou mostraria texturas e modelos feios o tempo todo enquanto aguardava o carregamento dos dados. O carregamento diferido não é um ganha-ganha, é um trade-off, como a maioria das coisas em engenharia :)

Luaan
fonte
2

Um dos motivos pelos quais o carregamento dinâmico nem sempre é a solução ideal que outras respostas realmente não consideraram, acho que também é pop-in e outros artefatos gráficos.

A previsão do que carregar e do que não carregar geralmente falha, e pode ser uma experiência prejudicial quando ocorre. Um dos piores exemplos disso foi no Rage by id Software. Pelo menos nas versões iniciais, os sistemas de megatextura faziam com que até mesmo algo como girar muito rapidamente produzisse quantidades enormes de textura e até artefatos de geometria aparecessem antes de desaparecer lentamente.

Esses problemas simplesmente não são um problema, está tudo pré-carregado.

Algo a considerar não é necessariamente o que carregar, mas o que descarregar. Quando você tem tanto orçamento para espaço, quando carrega coisas novas, quais são as antigas a serem removidas? Você tem certeza de que esses ativos não serão utilizados nos próximos segundos? Estes são problemas difíceis de resolver.

Se cada estado de jogo é pequeno o suficiente para caber dentro de um orçamento comum do sistema, então todas as vantagens são aparentes, em vez de carregar, você simplesmente entra em um nível e as coisas desaparecem ao jogar. Mas, como as principais respostas sugerem, o tempo de carregamento de um jogo pequeno não seria muito extenso para se preocupar.

Acho que vale a pena pensar no motivo pelo qual os sistemas de carregamento dinâmico foram criados originalmente, sendo que você sabe que vários de seus estados de jogo podem ser muito grandes para um sistema comum e um jogo desse tamanho simplesmente não é possível pré-carregar completamente.

Waddles
fonte
2

Um motivo comum é que nem sempre é fácil determinar se um recurso será necessário no futuro próximo.

Como você usou a paginação do terreno como exemplo, continuarei com isso.

É perfeitamente razoável se você estiver em uma determinada grade de mapa carregar todas as grades adjacentes em segundo plano. Você sabe que o usuário pode, na melhor das hipóteses, inserir um deles. Quando o fazem, você pode descarregar os que não estão mais adjacentes e carregar os que estão agora. Isso você anotou.

Agora imagine viagens rápidas. Não há absolutamente nenhuma maneira de prever para onde o usuário pode optar por ir. Eles têm (geralmente) quase todo o mapa para escolher. O pré-carregamento de todos os locais de viagem rápidos possíveis exigiria muita memória (você também pode carregar todo o mapa na memória) e muito tempo (supondo que você não tivesse o mapa inteiro pré-carregado). Quando isso aconteceria? Quando eles abrem a caixa de diálogo de viagem rápida? O problema só se tornaria várias vezes pior!

É por isso que mesmo a maioria dos jogos com paginação de terreno "sem carga" ainda tem telas de carga em viagens rápidas. Também é por isso que, se você se move rápido o suficiente, às vezes pode acionar o carregamento de telas em jogos mesmo com mapas sem carga (lembro de ter feito isso no TES Oblivion).

Agora imagine isso aplicado aos recursos do jogo em geral, onde os relacionamentos geralmente não são óbvios. Você precisará carregar todas as opções possíveis ou começar a adivinhar o que o usuário fará. Adivinhar é caro (tanto no desenvolvimento quanto na CPU) e uma bagunça complexa para programar. Exemplos específicos:

  • Salvar arquivos: você precisaria carregar todos os arquivos salvos antes que o usuário chegue à tela de salvamento ou adivinhe qual arquivo eles podem carregar (5 mais recentes, etc.).
  • Interface do usuário: muitos jogos de estratégia alteram a interface do usuário, dependendo da sua facção. Você precisaria carregar todos os designs de interface do usuário possíveis antes de o usuário iniciar o jogo.
  • Mundo do jogo: em jogos gerados proceduralmente, como Minecraft ou RTS como Civilization, o mundo não existe até ser visto, em graus variados. Pré-carregar isso é impossível, pois eles não existiam para começar; pré-calculá-los poderia, na melhor das hipóteses, ser feito da mesma forma que pré-carregamento, e não é aplicável no caso do RTS.

Pode haver maneiras de contornar alguns desses problemas, mas isso custa dinheiro da vida real para descobrir. A maioria dos jogadores aceita telas de carregamento razoáveis ​​e, se alguma coisa, tende a gastar mais em hardware para atenuá-las. É visto como um problema de hardware , não um jogo , a menos que seja excessivamente excessivo ou perturbador (como carregar no meio dos níveis).

E lembre-se, o carregamento em segundo plano não é gratuito. Geralmente, há um impacto mínimo do uso moderno de terrenos com carregamento em segundo plano e de alguns arquivos de modelo, mas se você repentinamente adivinhar muitos recursos diferentes, especialmente se não possui métricas confiáveis ​​e precisa descarregar muitos recursos e carregar outros supérfluos , você pode moer o sistema em pó.

A idéia do carregamento em segundo plano é usar os ciclos mortos para um uso melhor, mas existem apenas tantos ciclos mortos para usar. O mesmo vale para a memória - o pré-carregamento pode aumentar substancialmente o uso de memória de um jogo. Com uma tela de carregamento, você pode despejar os recursos existentes. Não existe esse luxo com o carregamento em segundo plano, o que significa que poderia dobrar os requisitos de memória do jogo apenas com base nisso.


fonte
1

Esse é um problema comum decorrente do fato de que os jogos são produtos em tempo real suave, em que uma entrega tardia de conteúdo não é tão útil quanto uma entrega pontual (em contraste com a dura em tempo real, como os carros em computadores, onde uma entrega tardia não pode ser melhor do que nenhuma entrega). Você precisa decidir o que carregar e onde.

Às vezes, as entregas tardias são particularmente ruins. Por exemplo, se você tem permissão para correr em um mundo antes de todas as paredes serem carregadas, você pode ficar atrás de uma parede que você nunca poderia ter ficado atrás se o jogo carregasse as paredes antes de permitir que você se movesse. Nem sempre é fácil saber quando você pode se safar com um carregamento "lento" de conteúdo e quando precisa garantir que o conteúdo esteja totalmente carregado.

O carregamento dinâmico também é muito mais complicado. Você sempre deve considerar o que fazer se o recurso ainda não tiver sido carregado. Esta é uma drenagem dos recursos de desenvolvimento. É muito mais fácil desenvolver quando você pode confiar nos recursos existentes.

As latências também nem sempre são aceitáveis. Ouvi falar de casos no Starcraft em que você "aquecia" seu jogo carregando um mapa que tem o efeito colateral de armazenar em cache todos os modelos / imagens carregados dinamicamente. Você sairia e jogaria o jogo normalmente. Para os jogadores de elite, isso minimizou a gagueira da GUI que realmente afetou sua jogabilidade. Tentar provar quais latências serão aceitáveis ​​para os usuários e quais não serão complicadas.

Cort Ammon - Restabelecer Monica
fonte