Conceptos clave de Niagara en Unreal Engine

Conceptos clave de Niagara en Unreal Engine. El motor de videojuegos está expandiendo su base de usuarios, abarcando mucho más allá de los juegos. Se usa cada vez más en industrias que nada tienen que ver con el concepto original, como los siguientes ejemplos.

  • Visualización arquitectónica.
  • Diseño industrial y automotriz.
  • Producción de cine y televisión virtual.

Los usuarios son más diversos que nunca, desde estudiantes de diseño hasta pequeños desarrolladores independientes, grandes equipos de estudios profesionales, individuos y empresas fuera de la industria de los juegos.

Con el sistema de efectos visuales (VFX) llamado Niagara, se agrupan las funcionalidades necesarias para cualquier campo de la industria y para cualquier usuario.

Conceptos clave de Niagara en Unreal Engine
Conceptos clave de Niagara en Unreal Engine

Objetivos para un nuevo sistema VFX

La intención es disponer de un nuevo sistema que ofrezca a todos los usuarios la flexibilidad de crear los efectos que necesitan. Los objetivos para el nuevo sistema VFX son los siguientes:

  • Poner el control total en manos de los artistas.
  • Es programable y personalizable en cada eje por separado.
  • Proporciona mejores herramientas para la depuración, la visualización y el rendimiento.
  • Admite datos de otras partes de Unreal Engine, además de permitir datos de fuentes externas.

Cómo Niagara logra estos objetivos

Compartir datos

El control total del usuario empieza con el acceso a los datos. El objetivo es conseguir que el usuario pueda usar cualquier dato de cualquier parte de Unreal Engine. Así como usar datos de otras aplicaciones. De esta forma todos los datos quedan expuestos al uso del artista.

Carga útil de partículas

Para exponer todos estos datos al usuario, tenemos que establecer cómo alguien puede usar esos datos. Los espacios de nombres proporcionan contenedores para datos jerárquicos. Por ejemplo, Emitter Age contiene datos para un emisor; Particle Position contiene datos para una partícula. Nuestro mapa de parámetros es la carga útil de partículas que lleva todos los atributos de la partícula. Como resultado de esto, todo se vuelve opcional.

Se pueden agregar muchos tipos de datos

Se puede agregar cualquier tipo de datos como parámetro de partículas. Puedes agregar estructuras complejas, matrices de transformación o banderas booleanas. Puedes agregar estos o cualquier otro tipo de datos, y usarlos en su simulación de efectos visuales.

Combinando el paradigma del gráfico y el de la pila

Hay ventajas tanto para el paradigma de pila (como el que se usa en Cascade) como para el paradigma gráfico (como el que se usa en Blueprints). Las pilas proporcionan a los usuarios un comportamiento modular y legibilidad. Los gráficos dan a los usuarios más control sobre el comportamiento. Este nuevo sistema de efectos combina las ventajas de ambos paradigmas.

Conceptos clave de Niagara en Unreal con acciones programables
Conceptos clave de Niagara en Unreal con acciones programables

Jerarquía para la estructura híbrida de Niagara

Módulos: Los módulos funcionan en un paradigma gráfico. Podemos crear módulos con HLSL en el editor de secuencias de comandos utilizando un gráfico de nodo visual. Los módulos comunican los datos comunes, encapsulan los comportamientos y se apilan juntos.

Emisores: Los emisores funcionan en un paradigma de pila. Sirven como contenedores para módulos y se pueden apilar para crear varios efectos. Un emisor es monouso, pero también es reutilizable. Los parámetros se transfieren hasta el nivel del emisor desde los módulos, pero puede modificar módulos y parámetros en el emisor.

Sistemas: Al igual que los emisores, los sistemas funcionan en un paradigma de pila y también funcionan con una línea de tiempo de secuenciador. Lo podemos usar para controlar cómo se comportan los emisores en el sistema. Un sistema es un contenedor de emisores. El sistema combina estos emisores en un solo efecto. Al editar un sistema en Niagara Editor, podemos modificar y anular cualquier parámetro; y módulo o emisor que se encuentre en el sistema.

Efectos de fluidos en Niagara para Unreal Engine
Efectos de fluidos en Niagara para Unreal Engine

Pila de selección de Niagara y grupos de pila

La simulación de partículas en Niagara funciona conceptualmente como una pila. La simulación fluye desde la parte superior de la pila hasta la parte inferior y ejecuta los módulos en orden. Fundamentalmente, cada módulo se asigna a un grupo que describe cuándo se ejecuta el módulo. Por ejemplo, los módulos que inicializan partículas o que actúan cuando se genera una partícula están en el grupo generación de partículas.

Dentro de cada grupo, puede haber múltiples etapas, que se denominan en puntos particulares del ciclo de vida de un sistema. Los emisores, los sistemas y las partículas tienen etapas de generación y actualización de forma predeterminada. Las etapas de generación se invocan en el primer cuadro donde existe ese grupo. Por ejemplo, los sistemas invocan su etapa de aparición cuando el sistema se instancia por primera vez en el nivel y se activa.

Dentro de los conceptos clave de Niagara en Unreal Engine, tenemos las partículas que invocan su etapa de generación cada vez que el emisor emite una partícula; y las instrucciones de generación se ejecutarán para cada nueva partícula que se cree. Las etapas de actualización se invocan en cada cuadro donde el sistema, emisor o partícula está activo.

Etapas avanzadas dentro del sistema Niagara

También hay etapas avanzadas, como eventos y etapas de simulación, que se pueden agregar al flujo de generación y actualización. Los eventos se invocan cada vez que una partícula genera un nuevo evento y se establece un emisor para manejar ese evento.

Siempre que sea posible, las etapas del controlador de eventos ocurren en el mismo marco; pero después del evento de origen. Las etapas de simulación son una característica avanzada de la GPU. Esta función permite que se produzcan varias etapas de generación y actualización en secuencia, y es útil para construir estructuras complejas como simulaciones de fluidos.

Un módulo es un elemento, pero un elemento no es un módulo. Los módulos son activos editables que un usuario puede crear. Los elementos se refieren a partes de un sistema o emisor que el usuario no se pueden crear. Algunos ejemplos de elementos son las propiedades del sistema, las propiedades del emisor y los renderizadores.

Etapas, grupos, espacios de nombres y encapsulación de datos

Al agregar cada módulo a una etapa (actualización, generación, evento o simulación) en un grupo (sistema, emisor o partícula); podemos controlar cuándo se ejecuta un módulo y con qué datos opera el módulo. Los grupos de pila están asociados con espacios de nombres que definen qué datos pueden leer o escribir los módulos de ese grupo.

Por ejemplo, los módulos que se ejecutan en el grupo del sistema pueden leer y escribir en los parámetros del espacio de nombres del sistema. Pero solo pueden leer los parámetros que pertenecen al espacio de nombres del motor o del usuario.

A medida que la ejecución baja por la pila desde el grupo de sistemas hasta el grupo de emisores, los módulos que se ejecutan en el grupo de emisores pueden leer y escribir en los parámetros del espacio de nombres del emisor.

Lectura del grupo de partículas

Pero solo pueden leer los parámetros en los espacios de nombres del sistema, del motor y del usuario. Los módulos del grupo de partículas solo pueden leer los parámetros de los espacios de nombres del sistema y del emisor.

Debido a que los módulos en los grupos de emisores pueden leer parámetros en el espacio de nombres del sistema; los módulos del grupo del sistema pueden realizar una vez la simulación que es relevante para todos los emisores. Los resultados de eso (almacenados en el espacio de nombres del sistema) pueden ser leídos por el gestor de módulos de grupos de emisores en cada emisor individual.

Esto continúa con los módulos de grupos de partículas que pueden leer parámetros en los espacios de nombres del sistema y del emisor.

Niagara está construído desde cero para mejor provecho

Este conjunto de herramientas está construido desde cero para ofrecer un poder sin precedentes a los creadores de contenido que buscan un control total sobre la simulación; el renderizado y el rendimiento de partículas.

En los conceptos clave de Niagara en Unreal, el artista técnico tiene la capacidad de crear funciones adicionales por su cuenta, sin la ayuda de un programador. El sistema es adaptable y flexible. Los principiantes pueden comenzar modificando plantillas o ejemplos de comportamiento, y los usuarios avanzados pueden crear sus propios módulos personalizados.

Componentes principales de Niagara

En el sistema Niagara VFX, hay cuatro componentes principales:

  • Módulos
  • Sistemas
  • Emisores
  • Parámetros

Veamos primero el componente de sistemas

Un sistema Niagara es un contenedor para todo lo que necesitarás para crear cualquier efecto. Dentro de ese sistema, puedes tener diferentes bloques de construcción que se acumulan para ayudar a producir el efecto general.

Puedes modificar algunos comportamientos a nivel del sistema que luego se aplicarán a todo el proceso en ese sentido.

Componente de sistemas
Conceptos clave de Niagara en Unreal – componente de sistemas

El panel de la línea de tiempo en el editor del sistema muestra qué emisores están contenidos en el sistema. Y cuáles se pueden usar para administrar esos emisores.

Emisores

Los emisores son donde se generan las partículas en un sistema de Niágara. Un emisor controla cómo nacen las partículas; qué les sucede a esas partículas a medida que envejecen y cómo se ven y se comportan las partículas.

El emisor está organizado en una pila. Dentro de esa pila hay varios grupos, dentro de los cuales puede colocar módulos que realizan tareas individuales. Los grupos son los siguientes.

Grupos de emisores
Grupos de emisores en Niagara

Emitter Spawn

Este grupo define lo que sucede cuando se crea por primera vez un emisor en la CPU. Debemos utilizar este grupo para definir configuraciones iniciales y valores predeterminados.

Emitter Update

Este grupo define los módulos a nivel de emisor que ocurren en cada cuadro en la CPU. Debemos utilizar este grupo para definir el desove de partículas cuando desee que continúen desovando en cada cuadro.

Particle Spawn

Este grupo se llama una vez por partícula, cuando esa partícula nace primero. Aquí es donde debemos definir los detalles de inicialización de las partículas; como la ubicación donde nacen, de qué color son, su tamaño y más.

Particle Update

Este grupo se llama por partícula en cada marco. Podemos definir aquí cualquier cosa que necesitemos cambiar cuadro por cuadro a medida que las partículas envejecen. Por ejemplo, si el color de las partículas cambia con el tiempo. O bien, si las partículas se ven afectadas por fuerzas como la gravedad; el ruido de rizos o la atracción puntual. Incluso puedes querer que las partículas puedan cambiar de tamaño con el tiempo.

Event Handler

En el grupo controlador de eventos, podemos crear eventos; generar en uno o más emisores que definen ciertos datos. Luego podemos crear eventos de escucha en otros emisores que desencadenan un comportamiento en reacción a ese evento generado.

Render

El último grupo es el grupo Render. Aquí es donde se define la visualización de la partícula y se configura uno o más motores de render para nuestras partículas. Es posible que quieras utilizar un renderizador de malla si deseas definir un modelo 3D como base de tus partículas, sobre el cual podrías aplicar un material. O bien, es posible que quieras utilizar un renderizador de sprites y definir tus partículas como sprites 2D. Hay muchos renderizadores diferentes para elegir y experimentar.

Los módulos como conceptos clave de Niagara en Unreal

Los módulos son los componentes básicos de los efectos en Niagara. Agrega módulos a grupos para hacer una pila. Los módulos se procesan secuencialmente de arriba a abajo.

Los módulos principales
Los módulos como conceptos clave de Niagara en Unreal

Puedes pensar en un módulo como un contenedor para hacer algunos cálculos. Pasar algunos datos al módulo; luego dentro del módulo hacer algunos cálculos con esos datos y luego volver a escribir esos datos al final del módulo.

Los módulos se construyen utilizando lenguaje de Sbhader de alto nivel (HLSL), pero se pueden construir visualmente en un gráfico usando nodos. Puedes crear funciones, incluir entradas o escribir en un mapa de valores o parámetros. Incluso puedes escribir código HLSL en línea de comando, utilizando el nodo CustomHLSL en el gráfico.

Podemos ver cómo se ejecutan los cálculos

Puedes hacer doble clic en cualquier módulo de un emisor en Niagara para ver las matemáticas que están sucediendo en su interior. Incluso puedes copiar y crear tus propios módulos. Por ejemplo, si haces doble clic en el módulo Add Velocity para echar un vistazo al interior, puedes inspeccionar el flujo de datos.

Inspeccionar el flujo de datos
Inspeccionar el flujo de datos en Niagara

El script empieza recuperando entradas; la entrada de velocidad y el espacio de coordenadas. Luego obtiene la velocidad actual de las partículas, así como un factor de escala ingresado. Luego, la velocidad de entrada se escala, se transforma en el espacio de coordenadas correcto y se suma a la velocidad actual de las partículas.

Una vez que se completa ese trabajo, la nueva velocidad de la partícula se vuelve a escribir; para que cualquier módulo que necesite información de velocidad más abajo en la pila pueda recuperarla. Todos los módulos están construidos con esa metodología básica, aunque para algunos las matemáticas internas pueden ser más complejas.

Parámetros y tipos de parámetros

Los parámetros son una abstracción de datos en una simulación de Niagara. Los tipos de parámetros se asignan a un parámetro para definir los datos que representa ese parámetro. Hay cuatro tipos de parámetros:

Primitivo: este tipo de parámetro define datos numéricos de precisión variable y anchos de canal.

Enum: este tipo de parámetro define un conjunto fijo de valores con nombre y asume uno de los valores con nombre.

Struct: este tipo de parámetro define un conjunto combinado de tipos Primitive y Enum.

Interfaces de datos: este tipo de parámetro define funciones que proporcionan datos de fuentes de datos externas. Pueden ser datos de otras partes de Unreal Engine 4 o datos de una aplicación externa.

Parámetros y tipo de parámetros
Parámetros y tipo de parámetros en Niagara

Opciones dentro de los parámetros y tipos de parámetros

Podemos agregar un módulo de parámetros personalizados a un emisor haciendo clic en el icono del signo más ( + ) y seleccionando establecer parámetro nuevo o existente directamente.

Esto agrega un módulo de configuración de parámetros a la pila. Hacemos clic en el icono del signo más ( + ) en el módulo establecer parámetro y seleccionamos agregar parámetro para establecer un parámetro existente o crear nuevo parámetro para establecer un nuevo parámetro.

Plantillas y Asistentes en Niagara

Cuando creamos por primera vez un emisor de Niagara o un sistema de Niagara; aparece un cuadro de diálogo que ofrece varias opciones para el tipo de emisor o sistema que deseamos crear.

Podemos cambiar cualquiera de los parámetros en la plantilla. Podemos agregar, modificar o eliminar cualquiera de los módulos. En una plantilla de sistema, también podemos agregar, modificar o eliminar cualquiera de los emisores. Las plantillas están ahí para impulsar tu creatividad y ofrecerte algo con lo que puedas trabajar de inmediato.

Asistente del sistema

Para crear un nuevo sistema Niagara, hacemos clic con el botón derecho en el explorador de contenido y buscamos FX > Sistema Niagara.

Asistente del sistema Niagara
Asistente del sistema Niagara

Nuevo sistema de emisores seleccionados en Niagara

Si seleccionamos esta opción y hacemos clic en siguiente, se muestra una lista de emisores disponibles. Esta lista incluye emisores existentes en su proyecto y emisores de plantilla. Seleccionamos los emisores que deseamos incluir en el nuevo sistema y hacemos clic en el icono verde del signo más ( + ) para agregarlos.

Luego hacemos clic en finalizar para crear el sistema. Si eliges un emisor existente, el sistema heredará de esos emisores. Si eliges un emisor de plantilla, el sistema no tendrá herencias. Además, el emisor de plantilla es una instancia que puede ser estrictamente local para ese sistema; o puedes guardarlo como un activo de emisor separado.

Sistema de emisores seleccionados en Niagara
Sistema de emisores seleccionados en Niagara

Nuevo sistema a partir de una plantilla de comportamiento

Si seleccionamos esta opción y hacemos clic en siguiente, podemos elegir entre una lista de plantillas o ejemplos de comportamiento que representan varios sistemas de efectos de uso común. Al igual que con las plantillas de emisores, esta lista puede ser seleccionada por creativos artísticos o directores creativos.

Si eres nuevo en Unreal Engine, esta opción te dará un ejemplo de cómo se construyen los sistemas FX en Niagara. Los ejemplos de comportamiento son ejemplos simples diseñados para presentar un aspecto aislado del sistema Niagara; que puedes examinar para ayudar a desmitificar ese comportamiento.

Sistema Niagara a partir de una plantilla
Sistema Niagara a partir de una plantilla

Copiar sistema existente

Si seleccionamos esta opción y hacemos clic en siguiente, se muestra una lista de los sistemas existentes. Elige uno de ellos para copiar, luego hacemos clic en finalizar.

Copiar sistema existente de Niagara
Copiar sistema existente de Niagara

Crear sistema vacío en Niagara

Si seleccionamos esta opción, este sistema no contiene emisores ni plantillas de emisores. Esta opción es útil si deseamos crear un sistema que sea totalmente diferente de los otros sistemas.

Crear sistema vacío de Niagara
Crear sistema vacío de Niagara

Asistente de emisores

Para crear un nuevo emisor, hacemos clic con el botón derecho en el explorador de contenido y seleccionamos FX > Niagara Emitter.

Niagara Emitter
Niagara Emitter

Opciones para crear un nuevo emisor en Niagara

Nuevo emisor a partir de una plantilla

Si seleccionamos esta opción, podemos elegir entre una lista de plantillas que presentan varios tipos de efectos de uso común. En un gran estudio de desarrollo, los líderes artísticos o los directores creativos pueden seleccionar la lista de plantillas.

De esa forma se aseguran de que las mejores prácticas de la empresa se integren en las plantillas. Estas plantillas también ofrecen un excelente punto de partida si estamos empezando en Unreal Engine.

Heredar de un emisor existente

Si seleccionamos esta opción, podemos crear un nuevo emisor que herede las propiedades de un emisor existente. Esta opción convierte al nuevo emisor en un elemento secundario del emisor existente que seleccionó.

Si necesitamos muchos emisores que tengan ciertas propiedades en común, esta es una buena opción para elegir. Podemos realizar cambios en el emisor principal y todos los emisores secundarios reflejarán estos cambios. Debemos seleccionar de un emisor principal para usar esta opción.

Copiar emisor existente

Si seleccionamos esta opción, podemos crear un nuevo emisor que sea una copia de un emisor que ya habíamos creado previamente. Esto puede ser útil si necesitamos crear varios emisores similares. Hacemos clic en siguiente después de seleccionar esta opción; y aparecerá una lista de emisores disponibles. A continuación, podemos elegir cuál queremos copiar.

Flujo de trabajo de efectos visuales de Niagara

Crear sistemas: Primero creamos un sistema Niagara en el que podamos agregar uno o más emisores. A continuación, podemos configurar las propiedades de cada emisor.

Crear o agregar emisores: En el Editor de Niagara, podemos ajustar el emisor cambiando las propiedades de los módulos que ya contiene; o agregar nuevos módulos para lograr el efecto deseado. También podemos copiar emisores y agregar varios emisores en un solo sistema Niagara.

Crear o agregar módulos: En tu emisor, puedes agregar módulos existentes de Niagara haciendo clic en el signo más (+) del grupo donde desea agregar el módulo. Niagara incluye muchos módulos preexistentes; y en la mayoría de los casos, podrás crear tus efectos sin necesidad de diseñar ningún módulo personalizado.

Sin embargo, si prefieres crear tus propios módulos, puede ser útil comprender cómo fluyen los datos a través de un módulo.

Confluencia de datos a través de un módulo en Niagara
Confluencia de datos a través de un módulo en Niagara

Dentro de los conceptos clave de Niagara en Unreal, los módulos se acumulan en un espacio de nombres temporal. Luego puedes apilar más módulos juntos. Mientras estos contribuyan al mismo atributo; los módulos se apilarán y acumularán correctamente.

Funciones disponibles al escribir un módulo

  • Operadores booleanos.
  • Expresiones matemáticas.
  • Funciones personalizadas.
  • Expresiones trigonométricas.
  • Todos los módulo susan HLSL.
  • Nodos que facilitan las funciones repetitivas.
  • Una vez que crea un módulo, cualquier otra persona puede usarlo.

El flujo lógico en Niagara es el siguiente

Flujo lógico del sistema de módulos en Niagara
Flujo lógico del sistema de módulos en Niagara

Debemos recordar que cada módulo, emisor y sistema que creamos utiliza recursos. Para conservar recursos y mejorar el rendimiento, consulta los módulos que ya se incluyen en Niagara para ver si puedes lograr tu objetivo sin crear un nuevo módulo. Las entradas dinámicas se pueden utilizar con gran efecto aquí.

Paradigmas de Niágara

Herencia

  • Con una jerarquía plana, no puedes ubicar y usar de manera efectiva los activos que ya tienes en tu biblioteca. Lo que lleva a las personas a recrear esos activos. La duplicación de esfuerzos reduce la eficiencia y aumenta los costes.
  • La herencia jerárquica aumenta la capacidad de descubrimiento y permite la reutilización eficaz de los activos existentes.
  • Cualquier cosa heredada puede anularse para un emisor secundario en un sistema.
  • Los módulos se pueden agregar o se pueden revertir al valor principal.
  • Esto también es cierto con los comportamientos a nivel de emisor, como el desove, la vida útil, los bucles, las ráfagas, etc.

Entradas dinámicas en Niagara

  • Las entradas dinámicas se construyen de la misma manera que se construyen los módulos.
  • Las entradas dinámicas ofrecen a los usuarios una extensibilidad infinita para la herencia.
  • En lugar de actuar sobre un mapa de parámetros, las entradas dinámicas actúan sobre un tipo de valor.
  • Cualquier valor puede ser impulsado por la lógica de Graph y los valores orientados al usuario.
  • Las entradas dinámicas tienen casi la misma potencia que la creación de módulos, pero se pueden seleccionar y colocar en la pila sin crear nuevos módulos.
  • Los módulos existentes se pueden modificar y personalizar de muchas maneras mediante el uso y el encadenamiento de entradas dinámicas; esto puede reducir la sobrecarga del módulo y mejorar el rendimiento.

Microexpresiones

  • Cualquier valor en línea se puede convertir en un fragmento de expresión HLSL.
  • Los usuarios pueden acceder a cualquier variable en la partícula, el emisor o el sistema, así como a cualquier función HLSL o VM.
  • Esto funciona bien para funciones pequeñas y únicas que no necesitan un nuevo módulo.
Eventos y expresiones en Niagara
Eventos y expresiones en Niagara

Eventos en Niagara

  • Los eventos son una forma de comunicación entre elementos (como partículas, emisores y sistemas).
  • Los eventos pueden ser cualquier tipo de datos, empaquetados en una carga útil (como una estructura) y enviados. Entonces cualquier otra cosa puede escuchar ese evento y tenerlo en cuenta.

Opciones que puede utilizar en los eventos

  • Ejecuta el evento directamente en una partícula utilizando Particle ID.
  • Ejecuta el evento en cada partícula en un sistema.
  • Configura las partículas para que se generen en respuesta al evento, luego toma alguna acción sobre esas partículas.

Los eventos son un nodo especial en el gráfico (estructuras).

Cómo utilizar el nodo Evento

  • Nombra el evento.
  • Agrega los datos que desee.
  • Agrega un controlador de eventos en la pila de emisores.
  • Configura las opciones para el controlador de eventos.

Hay una pila de ejecución separada para eventos

  • Puedes poner una lógica gráfica elaborada en los controladores de eventos.
  • Puedes configurar un sistema de partículas completo, con una lógica compleja; y luego tener un conjunto completo de comportamientos separados que ocurren cuando se desencadena el evento.

Interfaces de datos en Niagara

  • Hay un sistema extensible para permitir el acceso a datos arbitrarios.
  • Los datos arbitrarios incluyen datos de malla, audio, información DDC externa, objetos de código y contenedores de texto.
  • Las interfaces de datos se pueden escribir como complementos para una mayor extensibilidad en el futuro.
  • Los usuarios pueden obtener cualquier dato asociado con una malla esquelética utilizando una interfaz de datos de malla esquelética.

Houdini dentro de los conceptos clave de Niagara en Unreal

  • Con Houdini, podemos calcular puntos de división, ubicaciones de generación, posiciones de impacto, velocidad de impacto, normales, etc.
  • Luego podemos exportar esos datos de Houdini a un formato de contenedor común (CSV).
  • Podemos importar el archivo CSV a Niagara en nuestro proyecto con Unreal Engine 4.

Tienes más artículos sobre Niagara aquí. En el foro puedes encontrar toda la información sobre Unreal Engine agrupada y los comentarios. Sigue leyendo…