New Release Wave Engine 3.2
Estamos muy contentos de lanzar hoy la preliminar de WaveEngine 3.2. Esta nueva versión trae consigo un gran conjunto de nuevas características y mejoras.
Los aspectos destacados de la vista previa 3.2 incluyen un sistema de partículas basado en un GPU completamente nuevo de sombreador de cálculo, que ofrece el máximo rendimiento en las nuevas APIs gráficas, y que es compatible con las plataformas que no soportan sombreadores de cálculo. También presentamos un nuevo sistema de sombras completamente dinámico con soporte para luces puntuales, focos, luces direccionales y todo tipo de luces de área. Por último, es importante destacar la nueva generación de código de escenas automáticas, que mejora los tiempos de carga en la modalidad de lanzamiento. En este artículo puedes encontrar más información sobre el resto de cambios introducidos en esta nueva versión.
Puedes descargar la previsualización de WaveEngine 3.2 aquí y probar varias muestras nuevas desde github.
Y si quieres conocer la última versión de nuestro motor gráfico, ¡no te pierdas todo sobre Evergine!
Funciones destacadas
Sombreado
Presentamos un nuevo sistema de sombras completamente dinámico con soporte para todos los tipos de luz actuales. Este sistema se basa en técnicas de mapeo de sombras utilizando matrices de texturas para todos los tipos de luz, con el fin de unificar el comportamiento de filtrado y reducir el código de sombreado de material estándar.
Hay un nuevo ShadowMapComponent que puedes añadir a SceneManagers, lo que te permite controlar algunos parámetros importantes para todas las sombras dinámicas de tu proyecto:
Los tres parámetros permiten cambiar el tamaño de las matrices de texturas utilizadas para mantener los mapas de sombras por tipo de luces (las luces de área se consideran puntos de luz).
El filtro de sombras se basa en una versión optimizada de PCF, utilizado para todos los tipos de luz de origen, que mejora la calidad visual cuando varios tipos de superposición de sombras.
Las opciones de filtro son PCF 2×2, 3×3, 5×5 y 7×7. Aquí tienes una comparación de resultados visuales utilizando un punto de luz:
El siguiente parámetro «AutoDepthBounds» ayuda a mejorar la calidad visual de las luces direccionales. Para este tipo de luz utilizamos la técnica del mapa de sombras en cascada con 4 cascadas por defecto. Esta técnica se utiliza para representar sombras en escenas grandes, mejorando la calidad visual de los elementos más cercanos dividiendo el rango frustum de la cámara en partes y dando más píxeles de mapa de sombras a áreas más cercanas.
Debido al hecho de que el tamaño de la gama de cámaras frustum es importante para obtener mejores resultados, la distancia entre planos cercanos y lejanos de la cámara debe ser tan corta como sea posible para una escena específica. Para que sea más fácil para el desarrollador, AutoDepthBounds utiliza un sombreador de cómputo para encontrar dinámicamente los píxeles más cercanos y lejanos en el último mapa de profundidad de marco, cuyas profundidades se utilizan en lugar del plano cercano y lejano, consiguiendo siempre los mejores resultados visuales.
En este video, puedes ver sombras en una escena compleja comparando el efecto de usar el parámetro AutoDepthBounds:
Sistema de partículas
WaveEngine 3.2 incluye un nuevo sistema de partículas basado en sombreadores de cálculo para mejorar drásticamente el rendimiento de las nuevas APIs gráficas, así como mantener la compatibilidad con plataformas que no soportan estos sombreadores. Esto nos permite aumentar el número de partículas, la interacción y los efectos que las afectan.
La clave de esta nueva funcionalidad es el nuevo componente ParticleSystem. Le permite especificar un montón de propiedades de partículas como:
- Propiedades generales: Número de partículas, arrastre, gravedad, espacio de simulación (mundial o local)…
- Material: Textura y capa de renderizado de partículas…
- Otras propiedades: Color, Vida, Tamaño, Velocidad, Ángulo, Velocidad angular, Ruido y mucho más.
Un sistema de partículas necesita otro componente para especificar dónde se va a emitir la partícula. Para ello, creamos componentes adicionales llamados emisores de forma de partícula:
Formas primitivas: las formas más utilizadas.
SphereShapeEmitter: emite partículas desde una forma esférica. Puedes especificar la emisión desde la superficie, desde el centro o desde todo el volumen
BoxShapeEmitter: emite partículas desde una forma cuadrada.
CircleShapeEmitter: emite partículas desde una forma circular en 2D.
PointShapeEmitter: emite partículas desde una posición.
EdgeShapeEmitter: emite partículas desde una línea recta.
EntityShapeEmitter: emite partículas de la entidad especificada. Permite crear sistemas de partículas más complejos:
Otra nueva característica interesante es la posibilidad de aplicar fuerzas a las partículas. Hemos incluido varios componentes para ayudar en esa tarea:
PointAttractorForce: Atraer (o repeler usando fuerza negativa) partículas a un punto.
WindForce: Aplicar una fuerza a todas las partículas en un determinado rango en una dirección especificada.
DragForce: La velocidad de todas las partículas bajo la influencia de esta fuerza se reducirá.
EntityAttractorForce: Atraer todas las partículas a la malla de entidad especificada.
Generación de código de escena
Hemos trabajado para mejorar el rendimiento de la carga de las escenas. Utilizando las nuevas funciones .Net ‘Generadores de fuentes‘, las escenas existentes del proyecto se convierten en código C# , evitando la deserialización cuando se carga.
Los siguientes gráficos muestran cómo el tiempo de carga de algunas escenas de prueba se ha reducido drásticamente en la plataforma Web cuando se cargan desde el código C# generado:
Ejecutando estas pruebas en Windows, la mejora es menor, pero todavía muy notable:
Al mismo tiempo, este cambio ayuda a mejorar el tamaño de un proyecto construido en plataformas donde el enlazador está habilitado (como web, UWP, Android…) y también a eliminar los activos de escena del contenido de la aplicación. Por ejemplo, un proyecto Web vacío publicado en Release toma más de 6MB de DLLs usando la versión de vista previa 3.1 y con esta versión se ha reducido a menos de 3MB.
Este primer paso usando el nuevo ‘Generador de fuentes‘ abre una puerta para mejorar muchas áreas de WaveEngine, como optimizar los activos exportados, reemplazar el uso de la reflexión, conseguir una mejor interacción del editor de código…
Otras mejoras y correciones de errores en la vista preliminar de WaveEngine
- Ratón de Plataforma web para entrar y salir arreglado.
- Mejora de la precisión de constantes y cálculos de MathHelper.
- Las nuevas plantillas incluyen una capa aditiva por defecto.
- Editor que permite cambiar el diseño del visor de escenas.
- Selector de color del editor que permite editar el valor hexadecimal.
- Caché de mallas primitivas.
- Soporte Net Framework 4.6.1 reestablecido.
- Se han añadido sobrecargas no genéricas para los métodos de contenedores.
- Se ha arreglado la suma de comprobación de actualización automática de la lanzadera.
- Editor de control de entidad deshacer/rehacer arreglado.
- El editor muestra pestañas separadas en la barra de tareas.
- Generación de miniaturas del editor fijada para texturas pequeñas.
- Los atajos de teclado del editor funcionan cuando el árbol de entidades está enfocado.
- Número de entidades del editor arreglado.
- Materia de luz del editoe arreglado.
- El editor selector de efectos en el visor de materiales ahora no muestra efectos de cómputo