Qual é a lógica por trás das cenas de 'Carregamento' nos jogos?


8

Estou fazendo meu primeiro jogo, é um tipo de jogo de defesa de torre, usando o mecanismo de jogo Unity e tomando Fieldrunners como referência. Gostaria de saber mais sobre a funcionalidade por trás das cenas de 'Carregamento' nos jogos.

Até agora estou instanciando / criando objetos em tempo de execução e não estou enfrentando nenhum atraso ou problemas semelhantes ao fazê-lo. Então, para que servem as cenas de 'Carregamento' em outros jogos? Existe alguma funcionalidade ou instanciação de objetos específicos para a próxima rodada ou estágio? Se sim, por que preciso deles se não estou recebendo atrasos?


6
Os recursos exigidos por outros jogos podem ser muito maiores do que as suas próprias necessidades. Portanto, as cenas de carregamento são necessárias para mascarar o período em que esses recursos são carregados (talvez de um disco rígido lento).
Deceleratedcaviar

2
A que "todos os jogos" você está se referindo? Existem muitos jogos que não têm telas de carregamento.
Nicol Bolas

Respostas:


10

Basicamente, eu diria que durante o processo "Loading" o jogo tenta carregar e precomputar todas as operações que não podem ser feitas em tempo de execução. Por exemplo, recuperar imagens (para serem usadas como texturas) para o disco rígido geralmente é um processo lento. Na etapa "Carregando", essas imagens podem ser copiadas para a memória RAM, o que facilita muito o armazenamento, permitindo acesso em tempo real às imagens em tempo de execução.


1

Uma tela de carregamento também pode ser usada como uma "cena" (http://en.wikipedia.org/wiki/Cutscene) para dar ao usuário a chance de recuperar o fôlego, para aprender mais sobre a história e os recursos do jogo, ou para tentar vender a eles uma versão paga / compra no aplicativo


1

Eu acho que os jogos modernos deveriam ter conseguido se livrar das telas de carregamento.

Suponho que a verdadeira razão pela qual ainda temos telas de carregamento é que a maioria dos jogos foi projetada para rodar no hardware do Xbox 360. Como tal, eles serão limitados na quantidade de aríete em que podem carregar as coisas e em quanto eles podem fazer rosqueamento. Se você não tiver memória RAM suficiente, será necessário retirar muitas coisas da memória e recarregá-las do disco. Também é mais fácil carregar tudo de uma vez.

Também há momentos em que coisas como o disco rígido podem parar. O que acontece se o usuário estiver executando antivírus em segundo plano. Se você não estiver pré-carregando o material, poderá ser necessário que o jogo pause enquanto aguarda o carregamento dessa malha ou a exibição espontânea de coisas.

Jogos como Skyrim podem fornecer a você um mundo aberto que você pode percorrer o quanto quiser, mas assim que abre uma porta para carregar uma masmorra relativamente pequena, você fica preso em uma tela de carregamento.

O único motivo pelo qual pude ver a tela de carregamento de masmorra sendo necessária é se eles usam alguma iluminação pré-cozida extra pesada usada para cenas internas que são razoavelmente grandes para carregar (feitas de uma malha gigante ou possuem mapas de luz detalhados) ou precisam de alguns cálculos para serem feitos em tempo de execução. Eu acredito que as masmorras de Skyrim são construídas a partir de malhas modulares em vez de uma malha gigante (pelo menos eu acho que o Oblivion é onde).

Não há motivo real para carregar mais do que as coisas que você realmente pode ver ao entrar no nível. Da mesma forma que os jogos não renderizam coisas que você pode ver, você pode selecionar o que realmente precisa ser carregado imediatamente. Você também pode colocar muitos objetos fictícios no espaço reservado. Em seguida, você pode usar o encadeamento para carregar de forma assíncrona objetos nas áreas circundantes, suas malhas, texturas e assim por diante, à medida que o reprodutor se move pelo ambiente.

A maneira como eu abandonaria as telas de carregamento é a seguinte:

  1. Carregue as propriedades básicas do mundo do jogo. Scripts globais.

  2. Carregue a posição do jogador.

  3. Carregue o nó da célula de grade / BSP dessa posição.

  4. Carregue apenas as caixas delimitadoras dos objetos nessa célula.

  5. Calcule o que realmente seria renderizado (testes nas caixas delimitadoras, talvez testes de renderização por oclusão)

  6. Carregue as malhas do material que é renderizado.

  7. Carregue os materiais das texturas das malhas.

  8. Faça mais testes para ver se mais regiões estão visíveis e precisam ser carregadas (ou seja, consulte uma renderização de uma célula da grade inteira como um cubo gigante).

  9. Depois que tudo visível estiver carregado, inicie a renderização.

  10. Carregue o restante das coisas nas células e Carregue mais, conforme necessário. Carregue regiões próximas e faça algumas previsões básicas sobre os movimentos dos jogadores para escolher quais regiões precisam ser carregadas primeiro. Continue até a memória ficar cheia.

Existem outras coisas que precisam ser levadas em consideração. Por exemplo, algumas coisas precisam ser carregadas, mesmo que não sejam visíveis. Por exemplo, um inimigo que está atrás do jogador fora da região precisaria estar ativo para poder correr em direção ao jogador e atacá-lo. Possivelmente, o material de teste de oclusão não é essencial, pois você imediatamente desejará carregar qualquer coisa próxima, para que esteja lá quando o jogador se mover e se tornar visível, mas pode demorar um segundo para ir direto para a renderização (mas se o tempo estiver tão próximo, você estará provável que tenha problemas com o material aparecendo).

Se possível, essas etapas devem ser iniciadas antes de serem necessárias, encadeadas em segundo plano. Por exemplo, se você estiver no menu principal do jogo, ele deverá começar a pré-carregar a área inicial, depois que você escolher "Novo Jogo" (ou assim que o menu aparecer) e a última gravação para continuar. Outras gravações podem ser pré-carregadas quando você move o mouse sobre elas. À medida que você se aproxima de uma porta de masmorra, ela deve começar a carregar o próximo nível (embora se você puder fazer isso, não precisará de uma porta de masmorra especial, pois elas realmente são apenas para acionar uma tela de carregamento). Carregue em segundo plano enquanto o vídeo é reproduzido. Dessa forma, você nem precisaria de uma pequena tela de carregamento inicial.

Você pode pular muito disso se não se importar com as coisas que estão surgindo. Algo como o Second Life apenas deixa você com coisas aparecendo, já que, sendo recuperado da internet, não há muito o que fazer sobre isso. O credo de assassino tem esse efeito em que coisas entram em cena, para que você possa se safar por motivos artísticos.


2
Infelizmente, isso não é viável para muitos jogos. Uma única área pode ter texturas suficientes para caber na memória de vídeo de uma GPU de gama média, para que você não possa pré-carregar a área inicial e a última área salva (e quanto a outras salvas que o usuário possa selecionar?). Mesmo com streaming de mundos contínuos, como no Skyrim, o que acontece com portais ou scripts que apenas teletransportam o jogador para outra área? Com 8 GB de dados compactados - muitos dos quais são dados de textura - nem mesmo os PCs modernos de jogos de ponta podem pré-carregar tudo.
5138 Sean Middleditch

11
Além do mais, eu argumentaria que os jogos têm um grande interesse em não conseguir carregar várias áreas na memória; isso os impede de colocar o máximo de conteúdo possível em cada área. Para muitos jogos, isso não é um problema, mas para títulos de mundo aberto que desejam proporcionar uma experiência tão rica quanto possível, qualquer circunstância em que você não esteja enfrentando suas limitações é aquela em que você não está entregando tanto. o jogador como você poderia ser.
Steven Stadnicki

0

No Unity, as cenas são uma combinação de vários objetos do jogo. Portanto, se você não deseja especificar todos os seus objetos de jogo separadamente e carregá-los um por um, basta carregar uma cena completa .

Ao carregar uma cena no Unity, os objetos já existentes são descartados e, portanto, um novo nível é carregado. Você pode indicar quais objetos deseja manter com o método DontDestroyOnLoad .

Nas suas configurações de compilação ao publicar um jogo, você também pode indicar quais cenas são usadas no seu jogo e incluí-las na sua compilação atual . Isso torna possível fazer uma distinção entre várias plataformas que contêm níveis diferentes, mas a mesma lógica de código.

Perguntas específicas sobre o Unity também podem ser feitas no fórum de respostas do Unity . Esses usuários são mais especificados para o Unity, em vez de perguntas gerais sobre mecanismos de jogos.


Esta resposta não parece responder à pergunta: não "como carrego níveis?", Mas "por que o jogador vê 'Carregando ...'?"
Kevin Reid

@ KevinReid Ah sim, você provavelmente está correto sobre isso. Provavelmente não entendi bem os pontos de interrogação.
Marnix

0

Uma cena gráfica 3D leva tempo para ser configurada e a manutenção pode levar o computador além dos seus limites. O conteúdo requer memória extensiva. O conteúdo visível requer muito tempo. E à medida que o observador diminui o zoom e olha para o horizonte, uma enorme quantidade do conteúdo total pode se tornar visível. (Você já reparou como alguns jogos funcionam melhor se você não diminuir o zoom? Você já reparou como alguns jogos não permitem diminuir o zoom ou olhar para o horizonte?)

A solução é configurar cenas individuais com conteúdo limitado. Agora o jogo funciona bem até o observador deixar uma cena para outra. Nesse ponto, a cena antiga é descartada e uma nova cena é configurada, o que leva tempo (e uma tela de carregamento para tentar impedir o usuário de ficar entediado). Os mecanismos 3D geralmente tentam fazer o máximo de trabalho possível durante a configuração para tornar os gráficos o mais suave possível mais tarde.

Eu já vi jogos que parecem permitir movimentos rápidos e livres e ampliam o mundo inteiro. Provavelmente há muita genialidade e muita programação e arte trabalhosas lá; eles não apenas baixaram alguns softwares gráficos gratuitos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.