Hola, aquí Guilherme, el desarrollador principal detrás de Cave Engine, y estoy muy contento de escribir esta nota de lanzamiento para ustedes.
Los últimos cuatro meses han sido una locura aquí en el estudio, y hemos estado desarrollando juegos y herramientas como nunca antes. El próximo juego que estamos produciendo aquí en Uniday Studio es mucho más complicado que cualquier otro que hayamos hecho, y por eso, el motor ha evolucionado mucho. Espero que esta nota de lanzamiento muestre esto en práctica.
Cave Engine 1.4 es literalmente la mejor versión que el motor ha tenido hasta ahora. Hay innumerables mejoras y correcciones, y es mucho más estable tanto para Windows como para Linux. Esperen una mejor experiencia de usuario, mejor rendimiento, más herramientas y funciones avanzadas para que puedan crear sus juegos.
¿Qué hay de nuevo?
Intentaré destacar aquí las características más emocionantes para ustedes, así que vamos directo a explorarlas.
Nuevos tutoriales de introducción para principiantes
Esta es literalmente la mejor versión para empezar con Cave si eres nuevo. La versión 1.4 viene con un sistema de introducción con tus primeros pasos en el motor (integrado en la interfaz), para que puedas aprender a probar el juego, modificarlo e incluso exportarlo como un runtime. También he mejorado mucho los tutoriales y la documentación dentro del motor para facilitar la vida a todos.

Esto es parte de mi esfuerzo para, en vez de hacer tutoriales, hacer que el motor sea tan fácil que ni siquiera sean necesarios. :)
Nueva experiencia para la creación de proyectos
Ahora crear un nuevo proyecto en Cave es mucho más emocionante y viene con muchas funciones nuevas.

He reescrito por completo el menú de nuevo proyecto, y ahora puedes elegir entre un proyecto vacío, una plantilla de juego en primera persona, tercera persona o vista superior. Las nuevas plantillas de juego también son mucho más estables y completas. Hablaré más sobre esto a continuación. Pero antes de seguir, una función adicional para el nuevo sistema de proyectos es el pequeño botón generador de nombres aleatorios para juegos. Ahora, cada vez que no tengas ideas sobre qué juego hacer, simplemente haz clic y generará un nombre aleatorio para tu proyecto que, con suerte, te inspirará.
Nuevos activos predeterminados para proyectos
Al crear un nuevo proyecto, tendrás una variedad de opciones para elegir e inicializar tu juego con activos predeterminados. Esto incluye cosas que ya estaban presentes en Cave, tales como:
- Menú principal
- Menú de pausa
- Controlador de personaje en primera persona
- Controlador de personaje en tercera persona
- Controlador de personaje en vista superior
- Proto Personaje totalmente animado (con cinemática inversa)
- Barra de salud y sistema de fin de juego
- Sistema de finalización de nivel y siguiente nivel
- Escena predeterminada con terreno generado
- Primitivas de malla predeterminadas (Cubo, Esfera, Cilindro, Plano, Cono)
- Material de prueba predeterminado
- Textura de cielo procedural (con nubes, estrellas, sol, etc.)
- Archivo README que explica todo lo que se agregó a tu nuevo proyecto (y cómo puedes ampliarlo)
Pero ahora también obtienes:

- Generación de terreno mejorada, y ahora los objetos añadidos a la escena se alinean con él.
- Controlador de vehículo (con malla y física) con plantilla incluida.
- Plantilla de enemigo con una IA básica de patrullaje creada usando el Sistema State Machine de Cave.
- Más primitivas de malla predeterminadas, esta vez para darte algunos activos para construir con Blockmesh (paredes, puertas, ventanas, escaleras, etc.).
- Nueva malla predeterminada "Rampa".
Incontables mejoras en la interfaz y experiencia de usuario del editor
He realizado una gran cantidad de mejoras en la interfaz de usuario del editor y en la experiencia general de usuario. Intentaré resaltar las principales para que puedan explorar el resto por su cuenta.
Nueva interfaz para componentes de elementos UI

Ahora es mucho más fácil e intuitivo establecer la posición, escala y puntos de anclaje de un UIElement. También he mejorado la pestaña Comportamiento.
Mejoras en el editor de Python Script
Cuando haces clic para abrir un script Python desde el Navegador de Activos, ahora puedes editar todo el script usando el editor de altura completa directamente en la pestaña Propiedades. Esto significa que ya no necesitas hacer doble clic para abrir el script en una pestaña externa. Esto facilita mucho escribir código dentro del editor de Cave.

Ahora también tenemos una pestaña Inspeccionar para ver el contenido de tu script, y las herramientas del editor ahora tienen su propia pestaña dedicada donde puedes registrar o recargar una herramienta o ejecutar el script en el editor.
Mejoras en el editor de programas Shader
Al igual que en las mejoras del editor de scripts Python, ya no necesitas hacer clic en otro lugar para editar completamente los Programas Shader. Los shaders de vértice y fragmento aparecen directamente en la pestaña Propiedades para que los edites. Aún puedes abrirlos individualmente en otra pestaña si quieres.
Mejoras en la pestaña de consola
Ahora hay un botón para copiar todos los mensajes al portapapeles. Esto es útil cuando haces depuración o quieres compartir la salida de la consola con alguien.
Proto Personaje y Vehículo en el menú "New Entity..."

Si no has eliminado el Proto Personaje o el Vehículo que vienen por defecto en tus nuevos proyectos, aparecerán como opciones para agregarlos rápidamente a tu escena cuando presiones Shift + A para añadir una nueva entidad.
Crear un cuerpo rígido automáticamente
Al arrastrar una malla a la escena (desde el Navegador de Activos), puedes presionar Arrastrar + Ctrl para crear automáticamente un cuerpo rígido para ella.
Controles de cámara al estilo Blender (vista 3D)
Esta probablemente sea la función más solicitada desde que Cave Engine se lanzó inicialmente, y ahora finalmente está aquí. Al navegar por la vista 3D, puedes usar el botón central del ratón para orbitar alrededor de los objetos, igual que en Blender.
Esta función es experimental, así que si quieres reportar algo o sugerir mejoras, por favor avísame en nuestro servidor de Discord.
Mejoras en el Sistema State Machine

Cuando escribes el código para una transición de estado, ya no necesitas acceder a las variables locales del "estado de origen" como si fueran propiedades de un diccionario. En cambio, puedes esperarlas disponibles inmediatamente como variables locales.
Código de transición antes de esta actualización (ejemplo):
result = state.get("myVar") == 3
Después de la actualización (ejemplo):
result = myVar == 3
Mejoras en el Sistema de Componentes Path

El Path Component y la herramienta Path se añadieron como experimentales en la última versión de Cave (1.3), y desde entonces han evolucionado mucho. Para la 1.4, lo más destacado son dos nuevos métodos PathComponent: GetSampleAdvance(...) y GenerateProceduralMesh(...).
La primera función te permite proporcionar una posición y obtener la posición más cercana en un componente de path desde esa posición de entrada, además de un valor de avance. ¿Por qué es esto útil? Porque es esencialmente todo lo que necesitas para hacer que un personaje, vehículo o cualquier otra cosa siga un camino.
La segunda función, como su nombre indica, toma una malla y coloca y genera proceduralmente una nueva malla a lo largo del componente de path, permitiéndote crear carreteras, muros, edificios y mucho más.
Mejoras en el Sistema de Terreno
El sistema de terreno en Cave recibió muchas mejoras en esta versión, y ya puedo anticipar algo: ahora es mucho más rápido renderizar todo el terreno.

¡Ahora puedes DESHACER! (Ctrl + Z)
Sí, ahora FINALMENTE puedes deshacer tu esculpido (o cualquier otra cosa) que hagas en tu terreno usando la Herramienta de Terreno. Esta es una gran mejora en la calidad de vida.
Optimizaciones en el renderizado de terreno
Logré reducir el número de draw calls que usa el motor para renderizar todo el terreno en alrededor de 100 veces, acercándolo mucho al mínimo teórico. También mejoré sistemas internos para optimizar aún más el renderizado del terreno. Esperen mejor rendimiento aquí.
Nuevo modo de alineación con path
Como mencioné antes, el sistema de paths recibió muchas mejoras en esta versión. Esto también afectó al sistema de terreno porque ahora tienes un nuevo modo de alineación con path que te permite seleccionar un path en tu escena y usarlo para moldear el terreno. Esto es genial para crear carreteras y características similares.
Mejor generación de mapas de altura
La generación predeterminada de mapas de altura solía ser muy mediocre, así que la ajustamos para generar paisajes más interesantes. También corregimos un problema donde cada terreno generado usaba la misma semilla, por lo que siempre se veían idénticos.
Esto ya no ocurre, y ahora puedes establecer la semilla aleatoria mediante código. Esto también actualizará las semillas de generación de terreno en consecuencia.
Nuevo método de raycasting para terreno
Dado un origen y una posición objetivo, puedes llamar al componente de terreno para hacer raycast y verificar si colisiona con el terreno, devolviendo la posición de colisión y la normal si esto ocurre.
Mejoras en el rendimiento de renderizado
Se ha trabajado mucho en los sistemas internos de caché OpenGL para reducir la sobrecarga del controlador. Cave Engine ya tenía extensos sistemas para reducir esta sobrecarga, pero ahora esto se ha llevado a otro nivel.
En algunos casos, pude medir una reducción de casi mil veces la cantidad de sobrecarga del controlador que teníamos antes. Esto depende finalmente de tu máquina, pero si antes estabas limitado por la sobrecarga del controlador, hay muchas probabilidades de que veas mejoras de rendimiento significativas en esta versión.
Nuevas optimizaciones internas incluyen:
- Caché de enlace de programas Shader
- Caché de valores uniformes
- Lógica de invalidación de caché
Estos cambios reducen las llamadas redundantes a OpenGL y mejoran el rendimiento del renderizado.
Adicionalmente:
- Mejoras en la seguridad del enlace de uniformes
- Posible solución temporal para problemas con la limpieza de profundidad en AMD
Correcciones para la versión de Linux
También he solucionado los múltiples problemas con rutas de Python que algunos usuarios de Linux experimentaban al usar el engine, especialmente al crear un proyecto nuevo.
Nuevas APIs de Python
Con la mayoría de las características mencionadas arriba, se agregaron o actualizaron nuevas APIs de Python para darles soporte, pero hay mucho más. Aquí enlisto algunas.
VehicleComponent.SetSteering(...)
Mesh.AddMeshAsLod(...)
PathComponent.GenerateProceduralMesh(...)
PathComponent.GetSampleAdvance(...)
PathEdge.GetPointA()
PathEdge.GetPointB()
Transform.AlignAxis(...)
También se añadieron nuevas opciones para VSync y límites de FPS. Consulta los stubs de Python para ver todo lo nuevo.
Más APIs de cave.ui y mejor desarrollo de herramientas
Si te gusta o necesitas escribir herramientas personalizadas para el editor que te ayuden a crear tus juegos o asistan durante el desarrollo, tu vida acaba de mejorar. Ahora puedes revisar los stubs de la API de nuestro código cave.ui y esperar una experiencia más estable desarrollando herramientas para el editor. Las pestañas de depuración se recargan ahora cuando el juego se reinicia.
Corrección de errores
Las siguientes correcciones se incluyeron en esta versión:
- Corregidos problemas de exportación en Linux
- Corregido el crash en Linux causado por rutas incorrectas de Python
- Corregido que el mapa de alturas del terreno siempre generaba el mismo resultado
- Corregido crash por recursión en recarga de plantillas
- Corregidas miniaturas negras al usar exposición manual
- Corregido código incorrecto por defecto en DebugTab
- Corregido que CodeEditor no era editable cuando la cadena estaba vacía
- Corregidos límites AABB incorrectos en mallas animadas
- Corregidos errores de occlusion (culling) en fragmentos de terreno
- Corregidas referencias faltantes al componente StateMachine
- Corregidos varios errores tipográficos en la UI del editor
- Corregidos errores tipográficos en la documentación
- Corregido crash en EntityMap
- Corregidos problemas de resaltado de sintaxis en CodeEditor
- Corregido resaltado de comentarios en CodeEditor después de cadenas
- Corregida implementación de copiado al portapapeles para usar SDL
Problemas conocidos
Tenemos algunos problemas conocidos que vale la pena mencionar. La razón por la que no se han corregido aún es porque son baja prioridad o porque no hemos logrado reproducirlos consistentemente. Si tienes alguna pista sobre ellos, por favor cuéntanos en nuestro servidor de Discord.
- Cave no funciona en algunos (o la mayoría) de sistemas Linux con Wayland (por ahora sólo se soporta X11).
- A veces un fragmento del terreno desaparece dependiendo del ángulo de cámara (un problema falso positivo de culling). Es un fallo muy raro y todavía no he logrado reproducirlo.