Introdução às camadas do mecanismo de jogo

Arquitetura em camadas do mecanismo de jogo (de cima para baixo)

Camada de ferramentas
Em um motor de jogo moderno, a primeira coisa que vemos pode não ser códigos complexos, mas vários editores. Usando esses editores, podemos criar e projetar níveis, personagens, animações, etc. Conteúdo do jogo, esta série de editores constitui o topo camada do motor - a camada da ferramenta.
Insira a descrição da imagem aqui
Camada de Função

  • O processo de conversão de um mundo virtual tridimensional em uma imagem bidimensional quadro a quadro requer a utilização de um sistema de renderização (Rendering);
  • Para fazer com que os modelos estacionários se movam e façam movimentos realistas para formar uma imagem contínua, precisamos utilizar o sistema de animação (Animação);
  • As colisões físicas e a ação de diversas forças tornam o movimento dos objetos mais próximo do mundo real.Precisamos utilizar o sistema físico (Física);
  • Cada mundo do jogo tem suas próprias regras, e também existem NPCs para enriquecer a jogabilidade do jogo, o que requer o uso de scripts (Script), máquinas de estado (FSM) e IA;

O funcionamento de qualquer jogo é indissociável da interação humano-computador, que envolve uma série de funções. As funções acima combinadas formam a camada funcional do motor de jogo.
Insira a descrição da imagem aqui
O jogo Resource Layer
contém não apenas linhas de código fonte, mas também arquivos multimídia em vários formatos, como arquivos PSD do PhotoShop e arquivos MAX do 3DSMAX, que carregam e gerenciam esta série de gráficos, imagens, áudio, arquivos de vídeo e outros dados são os tarefas da camada de recursos. A camada de recursos está localizada abaixo da camada funcional e fornece dados continuamente para a camada funcional. É como uma pintura de um pintor acima, e a camada de recursos fornece continuamente tinta para ela abaixo.
Insira a descrição da imagem aqui
Camada Central
A camada mais central e mais importante no motor de jogo é a camada central. A camada central é responsável por responder às chamadas frequentes das camadas superiores e fornecer diversas funções básicas, como gerenciamento de memória, alocação de contêineres, cálculo de dados, criação de multithread, etc.
Insira a descrição da imagem aqui
Camada de Plataforma
A camada de plataforma é a camada mais facilmente negligenciada. Um jogo ou motor pode ser lançado em diferentes plataformas e ter diferentes interfaces gráficas; e diferentes usuários podem usar diferentes dispositivos de hardware, como teclado, mouse e controlador. Adaptar-se a diferentes plataformas é tarefa da camada de plataforma. Insira a descrição da imagem aqui
Bibliotecas de terceiros
O middleware e as bibliotecas de terceiros são convertidos na forma de SDK (Software Development Kit) ou formato de arquivo.
Insira a descrição da imagem aqui
Por que arquitetura em camadas?

Insira a descrição da imagem aqui
A fim de desacoplar o mecanismo de jogo e reduzir a complexidade, cada camada completará suas próprias tarefas de forma independente, a camada inferior fornece serviços básicos para a camada superior e a camada superior chama as ferramentas subjacentes. Essa arquitetura em camadas torna a camada superior flexível e a camada inferior estável, o que é mais propício para atualizações e desenvolvimento de funções.

Camada de recursos

Arquivos PSD no Photohop, arquivos MAX no 3DSMAX, etc. geralmente contêm informações da própria ferramenta, uma grande quantidade de dados que não têm nada a ver com o mecanismo e o formato dos dados é relativamente complexo. O uso direto reduzirá bastante a eficiência. Para melhorar a eficiência do agendamento de recursos, o mecanismo precisa converter diferentes recursos em arquivos de ativos durante a importação. Por exemplo, ao usar arquivos de textura no mecanismo, podemos importar arquivos nos formatos JPG e PNG. Porém, os algoritmos de compactação desses dois arquivos não são eficientes para a GPU. Usá-los diretamente na GPU desperdiçará desempenho, portanto eles são geralmente convertido em dds. O formato é então armazenado na memória de vídeo.
Insira a descrição da imagem aqui
Para qualquer personagem do jogo, como o pequeno robô na imagem acima, pode ser necessário vincular materiais, texturas, grades, animações e outros recursos correspondentes, definir um arquivo de ativo composto para associar esses recursos, como arquivos XML, e usar GUID (Símbolo Globally Unique Identifier)) para gerenciamento de identificação.
Insira a descrição da imagem aqui
Quando realmente estiver em execução, o jogo também precisa usar o Asset Manager (Runtime Asset Manager), que gerencia ativos de acordo com o ciclo de vida do ativo (Asset Life Cycle), carregamento e descarregamento de ativos em tempo real, alocação de recursos e coleta de lixo (GC). , carregamento atrasado, etc.

Camada funcional

Insira a descrição da imagem aqui
O uso da camada funcional faz com que o mundo virtual do jogo avance cada vez que um tick passa. Dentro de um tick, as funções tickLogic() e tickRender() são executadas respectivamente.O tickLogic() lógico geralmente é executado primeiro e é usado principalmente para simular o mundo do jogo, incluindo processamento de entrada e saída, transformação da posição da perspectiva da câmera, detecção de colisão, etc. Operação: o tickRender() usado para desenhar as renderizações do mundo com base na posição de cada ativo calculado por tickLogic().
Insira a descrição da imagem aqui
A camada funcional é muito complexa e grande, especialmente quando se trata de programação de rede, portanto, geralmente é necessária computação multithread. O multi-threading mainstream atual consiste em dividir tarefas que podem ser calculadas em paralelo e colocá-las em vários threads para cálculo.No entanto, se houver tarefas que não sejam adequadas para computação paralela, suas falhas serão expostas. No futuro, o mecanismo dividirá cada tarefa em unidades executáveis ​​​​muito pequenas e alocará cada tarefa atômica para execução em vários threads, fazendo um uso mais eficiente dos recursos.
Insira a descrição da imagem aqui

camada central

A camada central fornece uma base para toda a lógica da camada superior, fornecendo bibliotecas matemáticas (como operações de matriz), estruturas de dados e contêineres (como árvores binárias), gerenciamento de memória e outras ferramentas. Como tudo no mecanismo é centrado na eficiência, ao realizar operações matemáticas, você pode usar operações aproximadas ou SIMD (fluxos de dados múltiplos de instrução única, executando a mesma instrução ao mesmo tempo de maneira síncrona) para melhorar a eficiência da computação; como para Dados estruturas e contêineres. As estruturas de dados que vêm com linguagens de programação podem causar alguns problemas. Por exemplo, o espaço de armazenamento aberto pelo Vector em C++ aumentará exponencialmente ao adicionar objetos. Depois de adicionar um grande número de objetos, não seremos capazes para usar o espaço de armazenamento. Sabe-se que podem ocorrer falhas de memória, e a estrutura de dados no mecanismo é mais conveniente para o gerenciamento de memória e melhora a eficiência de acesso. O gerenciamento de memória do mecanismo é muito semelhante ao do sistema operacional. O O princípio fundamental pode ser resumido como: armazenar dados juntos tanto quanto possível e acessá-los facilmente. Acesso em sequência, processamento em lotes
Insira a descrição da imagem aqui

camada de plataforma

A camada de plataforma permite que o jogo seja compatível com diferentes plataformas, como Xbox, Mac e Windows, bem como com diferentes dispositivos, como controladores, teclados e mouses. A camada de plataforma usa Render Hardware Interface (RHI) para remover as diferenças entre diferentes APIs gráficas (como DirectX11, DirectX12, OpenGL), para que a camada superior não precise se preocupar com os problemas que podem ser causados ​​pelo uso de diferentes APIs.
Insira a descrição da imagem aqui

camada de ferramenta

Insira a descrição da imagem aqui
A camada de ferramentas geralmente é apresentada na forma de um editor (editor de blueprint, editor de materiais, etc.) e pode ser desenvolvida utilizando diferentes linguagens de programação (C++, C#, Html5, etc.). A eficiência do desenvolvimento é priorizada. Ela precisa para permitir que diferentes usuários criem conteúdo de jogo. Como muitos ativos digitais de jogos são criados em diferentes DCCs (Blender, MAYA, etc.), a camada de ferramentas geralmente contém ferramentas de importação e exportação para importar e exportar recursos de jogos.

Acho que você gosta

Origin blog.csdn.net/gghhb12/article/details/136437631
Recomendado
Clasificación