Chunking / cache de grandes níveis em um jogo singleplayer

8

Faz sentido tentar descarregar um grande nível não-linear em blocos baseados em arquivos e carregá-los sob demanda? Implementamos chunking de nível para melhorar o desempenho da renderização, mas ainda todos os objetos de nível são persistentes na RAM.

Se sim, então como mantemos a ilusão de um mundo que vive / muda? Como o nível não é linear, mas como um mundo em si, não podemos simplesmente fingir que o que quer que tenha passado passou para sempre.

É uma idéia melhor tornar os níveis complexos o suficiente, mas também otimizados o suficiente para serem sempre persistentes na memória, mas implementar pontos de salto micro / macro que permitem saltar para um ponto totalmente distante (ou seja, um nível totalmente novo), esquecendo assim sobre a consistência do mundo e a ilusão de um mundo em mudança. Além disso, isso nos permitiria seguir uma história um pouco linear em um mundo aparentemente não linear. Seria possível aplicar um novo estado ao estado existente de um nível "distante", se quisermos trazer o jogador de volta para ele.

user802232
fonte

Respostas:

6

Criar pedaços é realmente uma boa ideia, mas você precisa usá-lo com sabedoria. existem muitos títulos grandes que usam a mesma idéia para dar a ilusão de um mundo muito grande. por exemplo, você pode mencionar Spore ou Oblivion.

Primeiro, vamos falar sobre esporos, já que na fase galáctica você pode ver facilmente como as coisas funcionam:

existem muitos planetas na galáxia, mas nem todos estão na memória ao mesmo tempo. sempre que você se aproxima de um planeta, o jogo carrega automaticamente uma textura para esse planeta a partir do disco rígido. Então, se você chegar perto o suficiente, poderá entrar no planeta e fazer algumas alterações. enquanto você estiver dentro de um planeta, quase todos os dados sobre o espaço sideral serão desalocados. E você pode fazer qualquer mudança no planeta que quiser. então você pode retornar à visualização do espaço. Desta vez, o jogo recarrega os dados de outros planetas e salva as alterações que você fez naquele planeta. por exemplo, se você criou uma montanha lá, todas as alterações de malha e textura são salvas novamente em arquivos. também existem alguns eventos salvos em arquivos. como quando você coloca o dispositivo que ajuda criaturas a evoluir em planetas. esses eventos permanecem ativos até você ficar muito longe do planeta que os desencadeou.

No esquecimento, as coisas são um pouco diferentes, embora a ideia base seja a mesma. quando você anda selvagem, o jogo está constantemente carregando e descarregando áreas. se você tentou jogar esquecimento no PS3, esse processo produziu alguns pequenos atrasos na área de transição (ou pelo menos ouvi dizer que sim). existem também algumas áreas que param completamente o jogo e você vê uma tela de carregamento como quando entra em cavernas que você abriga. usando esse método, eles facilmente reduziram a complexidade e o uso de memória nas cidades. pense em quantas casas há em uma cidade e quanta memória elas consumiriam se quisessem carregá-las. Observe também que se eles quisessem usar o mesmo sistema de carregamento e descarregamento sempre que você chegasse perto das casas, eles precisariam de quase toda a largura de banda do disco rígido, e isso poderia danificá-lo.

Para concluir minha resposta, sugiro que você use o mesmo método no seu jogo para grandes áreas. você também precisa salvar as alterações feitas pelo jogador em uma área enquanto a descarrega. Este método oferece uma experiência muito agradável de explorar o mundo real aos jogadores. Mas para áreas com muitos objetos e você acha que pode precisar da maior parte da largura de banda de armazenamento para transmissão de dados, use um método tradicional com uma tela de carregamento.

Ali1S232
fonte