Motor Unigine
Comencemos con la versión Unigine. Estamos usando la versión 2.11, lanzada esta primavera, a partir de la cual apareció una licencia gratuita en el motor. Por el momento 2.12 está disponible y 2.13 se espera pronto.
Lo que generalmente vale la pena saber sobre Unigine es un motor de juego Tomsk que se usa a menudo para evaluaciones comparativas y simulaciones. A lo largo de los años, ha lanzado juegos como Oil Rush, Cradle y aquí, por ejemplo, el relativamente reciente mmo Dual Universe.
En el interior, se utilizan muchas soluciones interesantes y prometedoras, ofrece una imagen bastante hermosa y puede ser bastante atractivo para los artistas, especialmente si modelan en un paquete 3D separado, y no por medio del motor en sí.
El terreno está ahí fuera de la caja, así como el agua, las nubes, los volumétricos, los proyectores y otras cosas útiles. Varias máscaras se superponen en la parte superior del terreno para detallar y otras cosas, una herramienta muy buena para crear paisajes, aunque en términos de usabilidad hay margen de mejora.
Como herramienta para un desarrollador de juegos, aquí, en principio, se puede aplicar la experiencia de usar C # en Unity, aunque Unigine no tiene la misma variedad de soluciones de componentes listas para usar. Sin embargo, se implementan algunas cosas básicas y la documentación le ayudará a escribir el resto. C ++ tampoco ha ido a ninguna parte.
El motor aún no es adecuado para una plataforma móvil, así como para el desarrollo sin programación (aunque está previsto desarrollarlo también en estas áreas). Requisitos de hardware en el nivel de consulta de Unreal, el tamaño mínimo del archivo de la aplicación es bastante grande. Pero es agradable y está bien optimizado.
Pero volvamos al prototipo del juego. En la versión Unigine, las principales dificultades estaban asociadas con el diseño visual de la física para una máquina de escribir, porque la documentación sugiere hacerlo todo a ciegas, a través del código, además, todo tipo de configuraciones físicas se encuentran dispersas en diferentes lugares del editor y no se describe la tubería de ensamblaje visual en sí. Es decir, no había ningún ejemplo trivial prefabricado que pudiera modificarse sin sumergirse en todos los matices. En 2.12, apareció una demostración con un tractor cavando el suelo, pero, tal vez, nuevamente se está ensamblando por código, no vi este momento.
Sea como fuere, monté más o menos la máquina, centrándome en la documentación. Sobre lo que escribí anteriormente el artículo correspondiente: Cómo recopilé la física de ruedas en Unigine .
En términos de jugabilidad, en Unigine, a diferencia de Unity y Godot, por ejemplo, resultó bastante fácil cambiar la física del automóvil sobre la marcha, no solo la visual, sino también la ubicación / tamaño de las ruedas. Sin inventar trucos adicionales para no caer por el suelo y sin reconstruir el modelo. Aunque, existe alguna posibilidad de caer en la textura, pero en situaciones completamente diferentes, y no a la hora de cambiar de máquina de escribir.
El concepto de un vehículo único que simplemente cambia de forma, se transforma, se adapta, ve lo que pasa en otras dimensiones y así encaja bien con todo esto. Al menos la jugabilidad principal podría basarse en tales cambios, aunque no necesariamente.
Lo triste del motor es el ensamblaje de la interfaz de usuario desde el editor: todo es de alguna manera engorroso, con scripts separados para cada elemento interactivo. Aunque aquí solo edité la implementación que estaba en los ejemplos, no entendí mucho, además, no descubrí de inmediato cómo mostrar la capa de interfaz gráfica de usuario para ver la representación visual en el editor.
Por otro lado, si nos referimos a un juego que está más orientado a la consola, con una jugabilidad atada a una pequeña cantidad de botones, con un uso mínimo de la interfaz y con un mínimo de elementos de interfaz, entonces esto ya no es un problema notable.
Otra cosa deprimente, simples animaciones grabadas en un instrumento interno: un rastreador. Sí, es poderoso a su manera, pero de alguna manera está demasiado anidado para usarlo. Además, la animación grabada de esta manera solo se puede reproducir utilizando el lenguaje UnigineScript obsoleto. Esto es mientras que en Unity o Godot puedes animar literalmente todo alrededor del perímetro. Sí, puede importar animación de huesos, pero eso es un poco diferente (además, todavía no he probado este método y no sé cómo es).
Si, nuevamente, lo miras desde el otro lado, entonces el motor aún está más enfocado en simulaciones e interacciones físicas, entonces ¿por qué no usar esto en lugar de hornear algunas animaciones preestablecidas allí, es decir, hacer algún tipo de emisores, interruptores, interactuar estructuras, aplicar fuerzas, utilizar la gravedad, etc. Por lo tanto, puede prescindir de un animador interno, pero si se implementó correctamente, esto también es un gran problema, aunque solo sea en términos de dirección: con unos pocos clics puede grabar un vuelo de cámara a través del escenario con todo tipo de elementos interactivos, y aquí tiene una película terminada. Además, con tales oportunidades para una imagen cinematográfica.
En cuanto a mi proyecto, en este momento, después de varias iteraciones, finalmente he compilado y publicado una demostración más o menos sólida que se puede probar.
El archivo para Win64 se puede descargar aquí (peso 687Mb): DROPBOX
o en la página itch.io : NEWANGERS
en forma descomprimida toma 3Gb
Qué hay allí:
- La construcción tiene tres modos de visualización principales: "día" y "noche" (con ajustes preestablecidos de alta configuración de gráficos) y modo "a la comic" (con configuraciones de gráficos más bajas).
- Para cambiar entre los modos, debe presionar Esc para que aparezca el cursor del mouse y seleccionar la opción deseada en el menú en la parte superior izquierda.
- Hay objetos interactivos en los niveles: portales azules en forma de estrella, a través de los cuales el automóvil se transfiere a otros mundos y puede regresar conduciendo hacia el portal desde ese lado.
- Muchos objetos del nivel son permeables, pero algunos tienen colisionadores y los niveles mismos están más o menos rodeados por muros de bloqueo.
- , , WASD. Q E. , , , R. Tab , , , .
- , .
- 1,2,3,4,5,6,7 — . .
- , «» .
- PgUp , . PgDown — .
- P — , L — .
Un amigo publicó las fuentes anteriores de este prototipo en su página, junto con algunas ediciones de la física de las ruedas de la versión original: GITLAB .
Motor Godot
Pasando al siguiente motor de nuestra lista. Una solución compacta de código abierto con enormes capacidades (Blender del mundo de los motores de juegos), pero, nuevamente, sigue siendo inferior a Unity en términos de variedad de componentes listos para usar. Aunque ya se han escrito bastantes soluciones no oficiales, así como ejemplos con códigos fuente para Godot, y debido a la relativa simplicidad / velocidad de implementación de la nueva funcionalidad, no puedo decir que este sea algún tipo de problema en este momento.
Godot tiene una mejor reputación como motor 2D, gracias a la variedad de herramientas bien desarrolladas específicamente para 2D, pero son una ventaja adicional para 3D: es mucho más fácil crear la interfaz de usuario de un juego. Incluso más fácil que en Unity, en lo que a mí respecta. Por el momento, Godot en su desarrollo ha alcanzado la versión estable 3.2.3 (pero todos están esperando 4 debido al volcán, optimizaciones, etc.). Ensamblajes inestables de los cuatro, por cierto, ya puedes probar, al menos evaluar la imagen).
El motor no requiere un hardware potente para gráficos 3D y produce una imagen bastante decente. No hay una gran cantidad de herramientas tridimensionales listas para usar, pero se han implementado algunas de las más necesarias, útiles y universales. Lo mismo ocurre con las optimizaciones. Por ejemplo, el motor implementa la selección de frustrum habitual, que elimina la geometría del campo de visión de la cámara. Eliminación de oclusión (para no contar los objetos cerrados por paredes), tendrás que idear la implementación tú mismo (lo cual no es tan difícil, especialmente en algunos lugares, y no en todos los juegos que lo necesites). Además, fuera de la caja en el motor, no hay lotes de geometría (aunque hay parcialmente para gles2) y terreno, pero esto no es un problema, solo necesita optimizar algo manualmente: unir algunas mallas, dividir la geometría en partes pequeñas o usar trozos, etc. Más lejos.Puede encontrar algún tipo de implementación en una pequeña tienda local, por ejemplo, agregar una solución de terreno ya hecha a su proyecto.
La interfaz del motor, por cierto, es bastante reflexiva y personalizable (aunque hay algunos elementos inflexibles). Generalmente es conveniente de usar. Hay suficientes idiomas compatibles para diferentes niveles de inmersión. Hay tanto C ++ como C # y un GDScript interno bastante conveniente que se ejecuta directamente dentro del editor sin necesidad de ejecutar un entorno separado. Las secuencias de comandos visuales también están presentes, por lo que sin conocimientos de programación en Godot también es muy posible vivir, diseñar una lógica mínima, animar algo (Godot tiene una herramienta simple y genial para grabar animaciones).
El bajo peso de la aplicación, la naturaleza multiplataforma, la velocidad de desarrollo, la facilidad de implementación de varias soluciones de terceros también son ventajas importantes del motor. Hay dos opciones de renderizado, gles2 y gles3, ambas soportan 3D, pero en la primera es más simple y en general es más adecuada para 2D y teléfonos móviles. Gles3 proporciona un nivel de gráficos más avanzado, algunas partes de los dispositivos móviles también lo admiten.
Pasemos a un prototipo de juego basado en este motor. En Godot, un modelo de vehículo físico simple sale casi de fábrica, por lo que traer sus autos aquí fue bastante fácil.
Con lo que surgieron algunos problemas: no es tan fácil intervenir en un objeto físico lanzado, por ejemplo, para teletransportarlo de un punto a otro o para cambiar la ubicación del volante del automóvil sobre la marcha. Por lo tanto, aquí un truco como en Unigine no funciona y, según tengo entendido, en Godot es más fácil recrear un objeto que cambiar la configuración física o algo así sobre la marcha. Pero, de hecho, todo esto no es particularmente necesario, y en este prototipo acabo de regresar a la idea estándar del juego, cuando conduces para diferentes autos, cambiando de uno a otro en algún lugar en lugares especiales separados.
Godot tiene herramientas interesantes como objetos CGS y multi-mallas. Escribí con más detalle sobre las características de su uso en el artículo: Godot, 1000 pequeñas cosas
El prototipo del Nevanger en este motor recibió un nombre separado:Locomotoras salvajes . En general, me sale una especie de familia de proyectos similares, unidos por el concepto de coches extraños viajando por mundos extraños. Y como nombre colectivo de trabajo, solía llamarlos Nevangers, hasta que surge un nombre más específico. El prototipo de Godot ahora tiene su propio nombre, la versión suspendida en la versión 0.9 de Unity (que lo inició todo) también tiene un nombre diferente, pero llegará a eso más tarde, si hay tiempo para volver a él.
Al principio, no tenía una visión especial de lo que me gustaría implementar en la demostración de Wild Engines, solo hice bocetos de niveles, tratando de entender cómo implementar mejor el terreno y qué oportunidades me gustaría ver. Entonces se me ocurrió la idea de hacer que la cámara se moviera detrás del mouse y fue posible realizar un apuntar del arma más controlado que en otras versiones. Por lo tanto, este prototipo probablemente se centrará más en el uso de disparos.
En el camino, comencé a ensamblar un nivel a partir de plataformas que constaban de pequeños bloques, probando varios enfoques de optimización y medición del rendimiento. Optimización por optimizaciones, pero en algún momento ya llené tanto el área visible para la cámara con geometría que el editor dejó de arrastrar toda la escena en ejecución, cayendo con errores. Lo cual se solucionó al incluir más memoria en la configuración. Luego llevé más la generación de la plataforma al código, dejando solo bloques dimensionales simplificados con identificadores en el escenario, que ellos mismos cargaron la plataforma necesaria en ellos mismos cuando se inició el juego. Luego redujo la cantidad de memoria utilizada a un valor más bajo y aumentó el nivel varias veces más sin ningún problema. Además, con tal implementación, siempre existe la opción de reutilizar plataformas ya cargadas, moviéndolas a otros lugares del nivel,cuando la máquina va en esa dirección para poder dibujar el espacio llano con ellos prácticamente hasta el infinito con los mismos recursos y sin transiciones.
De manera similar, luego recopilé bocetos de un nivel similar en Unigine, solo que allí el editor inmediatamente extrae toda la escena sin la necesidad de cargar plataformas en bloques a través del código (pero para Unigine, se usa una computadora mucho más poderosa).
Como resultado, en la versión demo de Wild Engines hay 4 autos, uno de los cuales debe seleccionarse para comenzar, y dos niveles pequeños (Nivel A y Nivel B). También quedaron un par de mapas iniciales (Niveles 0 y 1), pero son aún más de prueba y el paisaje allí no está optimizado.
El modo de pantalla completa y las sombras se pueden activar / desactivar en el menú.
Los botones 1, 2 y 3 cambian la posición de la cámara. El mouse apunta y gira la cámara, cuanto más lejos está el cursor del centro.
WASD - muévete. PgDown - saltar. Q - impulso aleatorio.
Botón izquierdo del ratón - disparo.
Al entrar, aparece una pista sobre el control y un botón para volver al menú principal, donde puede cambiar la máquina / nivel.
Versión Win64 (42 Mb): DROPBOX wildengines_x64
Versión Linux (44 Mb): DROPBOX wildengines_linux
Prima
Y aquí está uno de los nuevos mechas emergentes, el Nigromante:
Puedes montarlo en la versión Unigine.
Otro nuevo mechos, rosa con retroiluminación azul, Debag, está aquí y allá.
También había un cartucho viejo por ahí ... ¿qué piensas, clones de los juegos de ocho bits que podrían ocultarse con ese nombre en un cartucho chino, si Vangers fuera una franquicia mundialmente famosa en aquellos tiempos lejanos?