Las técnicas de redes neuronales se emplean cada vez más en gráficos por computadora para mejorar la calidad de imagen, optimizar el rendimiento y facilitar la creación de contenido. En este contexto, Unreal Engine 5 (UE5) ha implementado el Neural Network Engine (NNE), que unifica las cargas de trabajo de inferencia a través de múltiples backends, permitiendo a los desarrolladores integrar características de redes neuronales en flujos de trabajo gráficos en tiempo real.
Este artículo presenta el nuevo plugin que incorpora NVIDIA TensorRT para RTX como una opción de tiempo de ejecución (NNERuntimeTRT) para una inferencia eficiente en GPUs NVIDIA RTX. Para ilustrar sus beneficios, se utilizará un proyecto simplificado de UE que ejecuta un modelo de IA de posprocesamiento, destacando las mejoras sobre otros tiempos de ejecución de GPU, como DirectML.
A continuación, se discutirán los componentes involucrados en el proyecto.
Visión general de TensorRT para RTX
TensorRT para RTX permite a los usuarios desplegar modelos de IA en GPUs RTX de manera más eficiente, utilizando un optimizador Just-In-Time (JIT) para generar motores de inferencia adaptados al hardware específico del usuario. Esta optimización se realiza una vez en la máquina del usuario.
Como resultado, TensorRT para RTX puede ofrecer un mayor rendimiento en comparación con los proveedores de ejecución por defecto. Por ejemplo, las comparaciones de rendimiento muestran mejoras al utilizar TensorRT para RTX en comparación con DirectML, medido en una GPU NVIDIA GeForce RTX 5090.
TensorRT para RTX es compatible únicamente con GPUs NVIDIA RTX, desde la generación Turing (capacidad de cómputo 7.5) hasta la generación Blackwell (capacidad de cómputo 10.0).
Visión general del motor de redes neuronales de Unreal Engine
NNE admite múltiples tiempos de ejecución para invocar tareas de inferencia, eligiendo entre CPUs y GPUs. TensorRT para RTX se centra en GPUs y esta sección se enfocará en los tiempos de ejecución de GPU de NNE.
NNE puede realizar inferencias en la GPU de dos modos:
- Síncronamente desde la CPU, requiriendo sincronización de memoria.
- Asíncronamente a través del Grafo de Dependencias de Renderizado (RDG), alineándose con el renderizado de cuadros.
El método síncrono resulta útil para editores y tareas de inferencia basadas en eventos, mientras que el RDG es ideal para el posprocesamiento de IA, escalado o eliminación de ruido.
Proyecto de muestra de transferencia de estilo
Se creó un proyecto básico de UE5 para probar el plugin NNE TensorRT para RTX, aplicando modelos de transferencia de estilo durante el posprocesamiento. En la prueba, se configuró un nivel simple con algunas primitivas básicas y una cámara fija.
Para ejecutar la inferencia de transferencia de estilo y gestionar los recursos de renderizado, se requiere una implementación de NNE. UE5 ofrece esto a través del plugin de Neural Post-Processing, que realiza inferencia en la GPU mediante RDG. Para este proyecto, se utilizará el método RDG de NNERuntimeTRT.
Todo lo que se necesita es entrenar o descargar un modelo de estilo adecuado, como uno preentrenado del ONNX zoo.
Configuración del proyecto
El plugin NNE TensorRT para RTX es compatible con la versión binaria del motor 5.7 disponible desde el lanzador. Sin embargo, el plugin de posprocesamiento neural contiene una lista codificada de tiempos de ejecución dentro de su activo de perfil neural, por lo que es necesario actualizar su código para incluir NNERuntimeTRT en la lista.
Para comenzar:
- Obtén el código fuente del motor desde GitHub.
Si es tu primera vez accediendo al código base del motor, vincula tu cuenta de GitHub con tu cuenta de Epic. Consulta este documento para conocer el proceso de acceso.
Después de configurar el motor, deberías tener una solución de Visual Studio. Abre la solución y localiza los archivos neuralprofile.h/cpp.
UNNERuntimeRDGTensorRT UMETA(DisplayName = "NNERuntimeTRT"),
En neuralprofile.h, agrega NNERuntimeTRT a ENeuralProfileRuntimeType. Luego, encuentra el método GetNeuralProfileRuntimeName y añádelo al array kRuntimeNames.
- Obtén el plugin desde Fab o la página de desarrolladores de NVIDIA.
- Descomprime el plugin en la carpeta de plugins del motor.
- Compila el motor siguiendo estas instrucciones.
- Comienza con el proyecto de muestra.
Perfilado de rendimiento
Durante la prueba, activa las estadísticas del motor y alterna entre TensorRT para RTX (TRT) y DirectML (DML) para evaluar las mejoras de rendimiento. Para un perfilado más completo, utiliza Unreal Insights para capturar información de cuadros y desgloses para DML y TRT.
En un sistema con una GPU NVIDIA GeForce RTX 5090 a 1080p, Unreal Insights mostró que DML requería 5.7 ms, mientras que TRT completaba en 3.8 ms, lo que representa una mejora de rendimiento de 1.5x.


Uso de otros modelos de transferencia de estilo
Es posible utilizar cualquier modelo de transferencia de estilo del ONNX zoo o entrenar el propio. Los modelos del ONNX zoo tienen dimensiones fijas de 1x3x224x224 para los tensores de entrada y salida. El plugin de proceso neural permite la división de modelos pequeños a búferes de cuadro más grandes.
En el repositorio del proyecto de muestra, se incluye un script de Python que redimensiona las dimensiones de los tensores de entrada y salida para modelos de transferencia de estilo ONNX.
Para más información sobre cómo construir aplicaciones de IA con NNE, consulta la documentación oficial.


