Notas de estudo (11): Arquitetura do motor de jogo

No decorrer do blogueiro original, esta série é um resumo geral do conteúdo do motor do jogo, mas também um resumo bastante abrangente da tecnologia de desenvolvimento de jogos.
Conforme mencionado no início das notas de estudo, o estudo da arquitetura do motor de jogo nos ajuda a construir uma compreensão global do jogo.

A seguir está uma explicação simples de cada conceito de baixo para cima na ordem do vídeo, consulte o último diagrama de arquitetura no texto (a versão em inglês e a versão em chinês podem ser comparadas).
1. Mecanismo de jogo
Assim como os caracteres chineses foram originalmente compostos por padrões, o mecanismo de jogo era apenas um jogo separado desde o início. Quando as pessoas continuam a fazer novos jogos, elas descobrem que muitas funções são universais e não há necessidade de repetir o conteúdo. Portanto, as pessoas começaram a abstrair e resumir as funções do jogo, de forma que os resultados anteriores possam ser usados ​​diretamente no desenvolvimento de novos jogos, o que economiza tempo e evita muitas armadilhas encontradas por pessoas anteriores.
Um sistema abstraído da experiência e das conquistas do desenvolvimento anterior de jogos é o motor do jogo. Um motor de jogo maduro deve ser usado tão universalmente quanto possível para todos os tipos de produção de jogos e fornecer um processo de produção completo. Cada grande empresa de jogos geralmente tem seu próprio mecanismo de jogo, e outras pequenas empresas geralmente usam mecanismos de jogos comerciais, como Unity e UE4.

2. Arquitetura
Arquitetura é um esboço de um sistema, descrevendo os componentes abstratos que compõem o sistema e as relações entre eles. Qualquer sistema de software um pouco mais complexo requer uma arquitetura adequada e, claro, é ainda mais necessária para um mecanismo de jogo tão complexo.

3. Kits de desenvolvimento de software de terceiros,
que geralmente são chamados de bibliotecas de terceiros, incluindo bibliotecas estáticas e bibliotecas dinâmicas. A biblioteca de código empacotada escrita por terceiros pode ser chamada diretamente após a introdução.

4. Camada independente de plataforma
O conteúdo aqui não quer dizer que não tenha nada a ver com a plataforma, mas que sua lógica básica é praticamente a mesma em cada plataforma e quase todas devem ser usadas. A diferença é adaptada a várias plataformas por meio de adaptadores.

5. Tipos atômicos e operações atômicas
Isso é tendencioso para o nível do sistema operacional, os chamados átomos são inseparáveis. Na parte inferior do sistema operacional, geralmente apenas bool, int e outros tipos podem ser reconhecidos por cada sistema. As classes que escrevemos em linguagens de alto nível serão convertidas em dados atômicos para operação na parte inferior do sistema.

6. Cronômetro O cronômetro no
jogo é um conteúdo muito importante, e muita lógica do jogo é necessária, como restaurar 10 pontos de vida a cada 2 segundos. Para melhorar a precisão do jogo, é necessário fornecer um cronômetro de alta precisão.

7. Wrappers gráficos
camada de abstração de gráficos wrappers gráficos, comutação dinâmica DX / OpenGL

8. Módulo Moudule O
motor do jogo é bastante complexo, precisamos dividi-lo em módulos para facilitar nosso entendimento e uso. Como módulo de renderização, módulo físico, módulo de efeito de som, módulo de animação, etc. Mecanismos diferentes têm designs de módulo diferentes.

9. Strings
Vemos que dentro da arquitetura do sistema central, as strings são retiradas separadamente para provar sua exclusividade. A complexidade das strings reside principalmente na codificação. Diferentes codificações do mesmo conteúdo têm diferentes dados binários. Temos que enfrentar esse problema quando localizamos (internacionalizamos). Além disso, string hash significa converter uma string em um valor numérico, que geralmente é usado na autenticação do servidor.
Explicações relacionadas sobre codificação:
Qual é a diferença entre Unicode e UTF-8? https://www.zhihu.com/question/23374078
Explicação detalhada do conjunto de caracteres (você pode entender a série rapidamente) http://blog.csdn.net/u012999985/article/details/77619368

10. A depuração
geralmente é dividida em depuração de ponto de interrupção e depuração de saída de log. Bons métodos de depuração podem localizar problemas rapidamente. Ele será descrito com mais detalhes na próxima seção.

11. O analisador de sintaxe
pode realmente ser entendido como um analisador de arquivos, como XML, para que possamos usar XML para descrever objetos do jogo e fazer configurações relacionadas

12. Análise de desempenho O
mecanismo geral fornecerá ferramentas de análise de desempenho relacionadas, como o Profiler embutido do irreal. Claro, também podemos escolher algumas outras ferramentas, como o vtune da Intel.

13. Configuração do motor
Existem muitos parâmetros no motor de jogo que precisamos configurar, como modificar a configuração e aplicá-la convenientemente? Um método comum é o arquivo ini. Simplesmente modificando o conteúdo no arquivo de configuração, você pode ajustar algumas opções integradas quando o mecanismo é iniciado, como precisão de iluminação, controle de jogo e assim por diante. Arquivos de configuração são freqüentemente usados ​​em muitos projetos de jogos.

14. Curvas Os
amigos que estudaram gráficos devem estar familiarizados com eles.Curvas comuns incluem B-spline e curva de Bezier. Quando a câmera se move em nosso jogo, as curvas são usadas em várias interpolações de renderização.

15.RTTI, reflexão, serialização

  • RTTI é o reconhecimento de tipo em tempo de execução, o conceito básico de C ++. Simplificando, é possível determinar o tipo de um objeto em tempo de execução.
  • A reflexão é fornecer informações mais detalhadas sobre a aula com base no RTTI.
  • A serialização serve para salvar o objeto de classe em disco e carregá-lo e restaurá-lo posteriormente.

16. Identificador exclusivo
Geralmente usado na rede, como adicionar um identificador exclusivo a um player da rede e adicionar um identificador exclusivo a um objeto de sincronização, geralmente chamado de GUID.

17. Ativos do jogo Um
entendimento simples é de todos os tipos de arquivos, arquivos de recursos de animação, arquivos de imagens, arquivos de fontes, arquivos de mapas e assim por diante. Claro, tantos tipos de arquivos precisam de gerenciamento e análise unificados, o gerenciamento de recursos também é um módulo muito complexo, um pouco como um pequeno sistema operacional.

18. Material e textura
Link de referência direta: Qual é a diferença entre textura, textura e material?

19. Câmera
A posição da câmera determina o que é renderizado

20.
Conteúdo do núcleo de física : dinâmica e colisões
Outro conteúdo: detecção de raios, geralmente em motores com física, toda a detecção de raios é baseada na física. A detecção radiográfica é muito fácil de usar. Geralmente, nossos disparos de munição não viva e detecção de obstáculo requerem detecção radiográfica.

21.
Árvore BSP Quais são as vantagens e desvantagens da árvore BSP e octree, e quais são os aplicativos? https://www.zhihu.com/question/29739023

22. Sobre a seleção.
Renderizar nosso valor renderiza apenas a parte visível do jogador, e outras eliminações. Para alguns objetos grandes, carregamos apenas os que estão próximos ao player e removemos os outros.

23. Lightmap
A iluminação dinâmica consome muito cpu e gpu, a fim de reduzir o custo. Podemos anexar mapas de luz estáticos a objetos em vez de cuidados dinâmicos.

24. Sombra dinâmica
http://www.cppblog.com/shadow/archive/2005/12/23/1991.aspx

25. O decalque
é colar um remendo em um modelo designado para mostrar novos efeitos de padrão, como buracos de bala atingidos por balas no chão. O decalque é um modelo padronizado criado temporariamente quando acionado, não desenhado diretamente no modelo original.

26.HDR e pós-processamento A
parte de renderização anterior é explicada http://blog.csdn.net/u012999985/article/details/79090657

27. Mapeamento de ambiente O mapeamento de ambiente
é melhor traduzido em mapeamento de ambiente aqui, que é uma tecnologia usada para simular o reflexo de uma superfície lisa para o ambiente circundante. O mapa do ambiente geralmente se refere ao CUBEMAP, que pertence à implementação básica do mapeamento do ambiente.

28.
PRT PRT refere-se a Transferência de Radiância Pré-computada, pré-cálculo de transmissão de radiação óptica. Armazene os coeficientes dos harmônicos esféricos pré-gerados (SH) da transmissão de emissividade (incluindo a relação entre sombra e reflexão mútua) em várias texturas (mapa de luz SH). Em seguida, armazene o SH da sonda de luz estática ou dinamicamente A fonte de luz é gerada em SH, e após o produto escalar, o efeito de iluminação global incluindo iluminação ambiente, sombras e reflexos mútuos podem ser obtidos. [Citado por saber [resposta de Milo Yip]

] (https://www.zhihu.com/question/264405382) Simplificando, é para realizar a iluminação global.

29. Anexo de objeto hierárquico
Esta tradução para o chinês é um pouco confusa. Na verdade, a intenção original é a associação de ossos, podemos anexar qualquer objeto a qualquer osso. Os ossos são hierárquicos e o objeto anexado seguirá este osso e não será afetado pelos ossos deste.

30. MatchMaking está
relacionado ao modo de jogo dos jogos online e envolve o jogo direto no lobby do jogo, ou salas separadas, e como fazer a correspondência. Geralmente, o motor fornecerá interfaces relacionadas para encaixe, mas muitos detalhes precisam ser escritos pelo projeto do jogo.

31. O áudio é
geralmente dividido em efeitos sonoros e música.Os efeitos sonoros são sons breves de alguns segundos e a música geralmente é música de fundo tocada por um longo tempo. O mecanismo deve fornecer gradação, mixagem e outros efeitos, e o mecanismo de jogo 3D também deve fornecer um modelo de áudio tridimensional.

32. FrontEnd FrontEnd
Esta parte refere-se principalmente à interface do usuário, incluindo HUD e GUI embutido.
O IGC disse que usa o conteúdo do jogo para gravar animações em tempo real.Muitas cutscenes fazem isso, o que economiza muito custo do que CG.

33. Elementos estáticos e dinâmicos
Geralmente no mundo do jogo, os elementos que não se movem durante todo o jogo são elementos estáticos, como edifícios, terreno e vegetação. Elementos dinâmicos, como NPCs, animais, etc., podem interagir com o jogador. Claro, isso não é absoluto.Você pode fazer qualquer coisa dinâmico em teoria, mas é óbvio que há uma grande diferença na realização dos dois.

34. Carregamento do mundo
Todos os objetos na cena do jogo precisam ser carregados do disco rígido para a memória para serem executados.Este processo é Carregamento do mundo. Existem muitas tecnologias envolvidas no carregamento de cena, como carregamento de streaming, que pode ser usado para carregamento dinâmico de cenas no grande mundo.

35. Script O
script é conveniente para modificação do programa e pode ser atualizado rapidamente no programa como um recurso.

36. Subsistemas dedicados ao jogo
Isso se refere aos nossos módulos de lógica de jogo comuns, como módulos de prop, sistemas de armas, sistemas de conquistas, etc. Obviamente, a engine do jogo não precisa implementar esses conteúdos, pois eles pertencem à lógica do projeto do jogo. No entanto, uma vez que a maioria dos engines são baseados em projetos de jogos, diferentes engines irão construir diferentes frameworks GamPlay. Por exemplo, o framework do Unreal 4 é baseado em FPS, o que é muito adequado para o desenvolvimento de projetos de jogos FPS.

37. Mecanismo do jogador
Este blogueiro acha que também pode ser chamado de módulo de controle do personagem do jogador, que se refere a como você controla o movimento do personagem, desempenho de ação, posição da câmera, colisão e assim por diante.

38. Câmera do jogo A câmera
mencionada acima é vista na parte inferior da renderização e determina o conteúdo da renderização. Mas na lógica do jogo, nos preocupamos principalmente com a posição dele. Seja para seguir o jogador o tempo todo, ou para verificar a partir da perspectiva de Deus, tudo isso é controlado pela lógica do jogo.

39. Inteligência Artificial Em
teoria, como a popular tecnologia de IA atual, você pode usar aprendizado profundo e aprendizado de máquina para manipular o desempenho de personagens de IA. Mas, na verdade, a maioria dos personagens de IA no jogo são relativamente "de baixa energia", desde que possam encontrar caminhos simples e percepção simples. A razão é simples: posso fazer os jogadores experimentarem IA realista com a lógica mais simples, então por que se preocupar em torná-la tão complicada.
Claro, isso não é uma necessidade de explorar a IA do jogo em profundidade.Ainda há muitas pessoas no campo de jogo explorando esse aspecto.

40. Ferramentas de desenvolvimento comuns
IDE de desenvolvimento de mecanismo:
Gerenciamento de versão do Visual Studio : SVN, Git

41. As
principais diferenças entre Depurar e Liberar são as seguintes:

  1. O programa não está otimizado no modo de depuração e pode ser quebrado
  2. Muitos códigos no modo Debug farão mais detecção, como array fora dos limites. Como resultado, às vezes na posição em que Debug tem uma interrupção de asserção, não há problema ao mudar para Release.
  3. O programa compilado no modo Debug é muito maior do que Release e pode ser executado muito mais lentamente.

42. A composição principal do software O
entendimento do palestrante no vídeo é: algoritmo + estrutura de dados + padrão de design

43. Conhecimento matemático comumente usado no desenvolvimento de jogos.
Operações de vetor, funções trigonométricas, operações de matriz, quatérnios, números aleatórios, operações do sistema de coordenadas (sistema de coordenadas cartesianas, sistema de coordenadas polares, sistema de coordenadas esféricas), transformação do espaço e outras geometrias (A distância do ponto à superfície, se o ponto está na geometria, etc.), cálculo

44. O gerenciamento de
memória envolve fragmentação de memória, alocação de memória, vazamentos de memória, conteúdo virtual, etc. Você pode encontrar um livro do sistema operacional para aprender essa parte do conteúdo.

45. Containers
são as estruturas de dados que costumamos dizer, incluindo heaps, stacks, arrays, listas vinculadas, árvores, gráficos, filas, etc. Preste atenção às suas características e cenários de uso, como se é memória contínua, se muda de tamanho dinamicamente, etc.

46.
E / S E / S significa entrada / saída, geralmente se refere a E / S de disco e E / S de cache. Quando lemos e gravamos, podemos precisar gravar o conteúdo do disco na memória, gravar a memória no cache e gravar o cache no registrador.Geralmente, essas operações são demoradas. Portanto, a CPU não pode esperar enquanto o IO, ela passará a tarefa para o DMA para processamento, de modo que o consumo de todo o IO na CPU seja bastante reduzido. Mesmo assim, ele consome tempo da CPU ao alternar para cima e para baixo, por isso é necessário reduzir o número de IOs.

47. Loop de jogo e loop de renderização
Na verdade, o jogo inteiro é essencialmente um programa de loop infinito e toda a lógica é processada no loop.
Da mesma forma, o próprio módulo de renderização também é um loop, que atualizará a câmera, atualizará os elementos da cena, iniciará a renderização e enviará para a tela.

48. Modelo de componente de objeto
Muitos motores de jogo usam este modo para construir objetos de jogo.O modelo de componente pode ser montado ou desmontado livremente empacotando funções múltiplas em componentes separados. Um bom efeito de desacoplamento é obtido e a versatilidade e flexibilidade dos componentes são aumentadas.

Escreva a descrição da imagem aqui
Escreva a descrição da imagem aqui
Postado novamente a partir do link (indique se foi reimpresso): http://blog.csdn.net/u012999985/article/details/79090524

Acho que você gosta

Origin blog.csdn.net/qq_43801020/article/details/109016188
Recomendado
Clasificación