Introducción a las capas del motor de juegos

Arquitectura en capas del motor de juego (de arriba hacia abajo)

Capa de herramientas
En un motor de juego moderno, lo primero que vemos puede que no sean códigos complejos, sino varios editores. Con estos editores podemos crear y diseñar niveles, personajes, animaciones, etc. Contenido del juego, esta serie de editores constituye la parte superior capa del motor: la capa de herramientas.
Insertar descripción de la imagen aquí
Capa de función

  • El proceso de convertir un mundo virtual tridimensional en una imagen bidimensional cuadro por cuadro requiere el uso de un sistema de renderizado (Rendering);
  • Para hacer que los modelos estacionarios se muevan y realicen movimientos realistas para formar una imagen continua, necesitamos usar el sistema de animación (Animación);
  • Las colisiones físicas y la acción de diversas fuerzas acercan el movimiento de los objetos al mundo real, necesitamos utilizar el sistema físico (Física);
  • Cada mundo de juego tiene sus propias reglas, y también hay NPC para enriquecer la jugabilidad del juego, lo que requiere el uso de scripts (Script), máquinas de estado (FSM) e IA;

El funcionamiento de cualquier juego es inseparable de la interacción persona-ordenador, lo que implica una serie de funciones. Las funciones anteriores combinadas forman la capa funcional del motor del juego.
Insertar descripción de la imagen aquí
El juego Resource Layer
contiene no solo líneas de código fuente, sino también archivos multimedia en varios formatos, como archivos PSD de PhotoShop y archivos MAX de 3DSMAX, que cargan y administran esta serie de gráficos, imágenes, audio, archivos de video y otros datos. tareas de la capa de recursos. La capa de recursos está ubicada debajo de la capa funcional y proporciona datos continuamente a la capa funcional. Es como un pintor pintando arriba, y la capa de recursos proporciona pintura continuamente debajo.
Insertar descripción de la imagen aquí
Capa central
La capa más central e importante del motor del juego es la capa central. La capa central es responsable de responder a llamadas frecuentes de las capas superiores y proporcionar varias funciones básicas, como gestión de memoria, asignación de contenedores, cálculo de datos, creación de subprocesos múltiples, etc.
Insertar descripción de la imagen aquí
Capa de plataforma
La capa de plataforma es la capa que más fácilmente se pasa por alto. Un juego o motor puede lanzarse en diferentes plataformas y tener diferentes interfaces gráficas, y diferentes usuarios pueden usar diferentes dispositivos de hardware, como teclado, mouse y controlador. Adaptarse a diferentes plataformas es tarea de la capa de plataforma. Insertar descripción de la imagen aquí
El middleware de bibliotecas de terceros
y las bibliotecas de terceros se convierten en forma de SDK (kit de desarrollo de software) o formato de archivo.
Insertar descripción de la imagen aquí
¿Por qué arquitectura en capas?

Insertar descripción de la imagen aquí
Para desacoplar el motor del juego y reducir la complejidad, cada capa completará sus propias tareas de forma independiente: la capa inferior proporciona servicios básicos a la capa superior y la capa superior llama a las herramientas subyacentes. Esta arquitectura en capas hace que la capa superior sea flexible y la capa inferior estable, lo que favorece más las actualizaciones y el desarrollo de funciones.

Capa de recursos

Los archivos PSD en Photohop, archivos MAX en 3DSMAX, etc. generalmente contienen información propia de la herramienta, una gran cantidad de datos que no tienen nada que ver con el motor y el formato de datos es relativamente complejo, y el uso directo reducirá en gran medida la eficiencia. Para mejorar la eficiencia de la programación de recursos, el motor necesita convertir diferentes recursos en archivos de activos al importar. Por ejemplo, cuando usamos archivos de textura en el motor, podemos importar archivos en formatos JPG y PNG, sin embargo, los algoritmos de compresión de estos dos archivos no son eficientes para la GPU, usarlos directamente en la GPU desperdiciará rendimiento, por lo que son generalmente se convierte a dds y luego el formato se almacena en la memoria de video.
Insertar descripción de la imagen aquí
Para cualquier personaje del juego, como el pequeño robot en la imagen de arriba, es posible que deba vincular los materiales, texturas, cuadrículas, animaciones y otros recursos correspondientes, definir un archivo de activos compuestos para asociar estos recursos, como archivos XML, y usar GUID. (Símbolo de identificador único global) para la gestión de identificación.
Insertar descripción de la imagen aquí
Cuando realmente se ejecuta, el juego también necesita usar Asset Manager (Runtime Asset Manager), que administra los activos de acuerdo con el ciclo de vida de los activos (Asset Life Cycle), la carga y descarga de activos en tiempo real, la asignación de recursos y la recolección de basura. (GC), carga retrasada, etc.

capa funcional

Insertar descripción de la imagen aquí
El uso de la capa funcional hace que el mundo virtual del juego avance cada vez que pasa un tic. Dentro de un tick, las funciones tickLogic () y tickRender () se ejecutan respectivamente. El tickLogic () lógico generalmente se ejecuta primero y se usa principalmente para simular el mundo del juego, incluido el procesamiento de entrada y salida, la transformación de la posición de la perspectiva de la cámara, la detección de colisiones, Etc. Operación: tickRender() se utiliza para dibujar el mundo renderizado en función de la posición de cada activo calculada por tickLogic().
Insertar descripción de la imagen aquí
La capa funcional es muy compleja y grande, especialmente cuando se trata de programación de redes, por lo que generalmente se requiere computación multiproceso. El subproceso múltiple convencional actual consiste en dividir tareas que se pueden calcular en paralelo y colocarlas en varios subprocesos para el cálculo. Sin embargo, si hay tareas que no son adecuadas para la computación en paralelo, sus fallas quedarán expuestas. En el futuro, el motor dividirá cada tarea en unidades ejecutables muy pequeñas y asignará cada tarea atómica a múltiples subprocesos para su ejecución, haciendo un uso más eficiente de los recursos.
Insertar descripción de la imagen aquí

capa central

La capa central proporciona una base para toda la lógica de la capa superior: proporciona bibliotecas matemáticas (como operaciones matriciales), estructuras de datos y contenedores (como árboles binarios), gestión de memoria y otras herramientas. Debido a que todo en el motor se centra en la eficiencia, al realizar operaciones matemáticas, puede usar operaciones aproximadas o SIMD (una sola instrucción, múltiples flujos de datos, ejecutando la misma instrucción al mismo tiempo de manera sincrónica) para mejorar la eficiencia informática; en cuanto a Datos estructuras y contenedores. Las estructuras de datos que vienen con los lenguajes de programación pueden causar algunos problemas. Por ejemplo, el espacio de almacenamiento abierto por Vector en C++ aumentará exponencialmente al agregar objetos. Después de agregar una gran cantidad de objetos, no podremos utilizar el espacio de almacenamiento. Se sabe que pueden ocurrir agujeros de memoria, y la estructura de datos en el motor es más conveniente para la administración de la memoria y mejora la eficiencia del acceso. La administración de la memoria del motor es muy similar a la del sistema operativo. El principio básico se puede resumir en: almacenar datos juntos tanto como sea posible y acceder a ellos fácilmente Acceso en secuencia, procesamiento en lotes
Insertar descripción de la imagen aquí

capa de plataforma

La capa de plataforma permite que el juego sea compatible con diferentes plataformas como Xbox, Mac y Windows, así como con diferentes dispositivos como controladores, teclados y ratones. La capa de plataforma utiliza Render Hardware Interface (RHI) para eliminar las diferencias entre diferentes API de gráficos (como DirectX11, DirectX12, OpenGL), de modo que la capa superior no necesita preocuparse por los problemas que pueden surgir al usar diferentes API.
Insertar descripción de la imagen aquí

capa de herramienta

Insertar descripción de la imagen aquí
La capa de herramientas generalmente se presenta en forma de un editor (editor de planos, editor de materiales, etc.) y se puede desarrollar utilizando diferentes lenguajes de programación (C++, C#, Html5, etc.) Se prioriza la eficiencia del desarrollo. para permitir que diferentes usuarios creen contenido de juego. Debido a que muchos activos digitales de juegos se crean en diferentes DCC (Blender, MAYA, etc.), la capa de herramientas generalmente contiene herramientas de importación y exportación para importar y exportar recursos de juegos.

Supongo que te gusta

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