El marco de generación procedimental de contenido es un conjunto de herramientas con el que podrás crear tus propios contenidos y herramientas procedimentales en Unreal Engine. La generación procedimental de contenido permite a artistas técnicos, diseñadores y programadores compilar de forma rápida e iterativa herramientas y contenido de cualquier complejidad, desde utilidades de recursos (como generación de biomas o edificios) hasta mundos enteros.
Conceptos y términos importantes
Puntos: ubicaciones en el espacio en 3D generadas por el grafo de generación procedimental de contenido y que suelen usarse para generar mallas. Los puntos contienen información sobre las transformaciones, los vínculos, el color, la densidad, la inclinación y el valor de inicialización. Se les pueden asignar atributos definidos por el usuario.
Densidad de puntos: valor usado por varios nodos de grafo. Esto se representa en la vista de depuración como un degradado en cada punto y muestra la probabilidad de que el punto exista en esa posición. Una densidad de 0 es negro; una densidad de 1 es blanco.
Configuración requerida
El marco de generación procedimental de contenido requiere que el complemento del marco de generación procedimental de contenido esté activado en el proyecto. Para obtener más información sobre cómo activar complementos, consulta Cómo trabajar con complementos.
Se necesita el complemento Interoperabilidad de script de geometría del marco de generación procedimental de contenido para muestrear puntos en mallas estáticas.
El grafo de nodos procedimentales
El grafo de nodos procedimentales es el elemento central del marco de generación procedimental de contenido.
Con un formato similar al del editor de materiales, los datos espaciales fluyen hacia el grafo desde un componente de generación procedimental de contenido en tu nivel y se usan para generar puntos. Los puntos se filtran y modifican a través de una serie de nodos, y la salida se actualiza en tiempo real. Los puntos resultantes se pueden usar para generar una variedad de recursos.
Crear el recurso de grafo de generación procedimental de contenido
Para crear un recurso de grafo de generación procedimental de contenido, sigue los pasos que se indican a continuación:
Haz clic derecho en Almacén de contenido o Explorador de contenido, ve a Crear recurso avanzado > Generación procedimental de contenido y selecciona Grafo de generación procedimental de contenido.
Elige un nombre para el nuevo recurso y pulsa Intro.
Plantillas de grafo de generación procedimental de contenido
Después de crear un grafo de generación procedimental de contenido, puedes marcar el grafo como plantilla y seleccionarlo en el menú contextual al crear nuevos grafos. De forma similar a las plantillas de Niagara, puedes agilizar el proceso de trabajo con una plantilla de grafo de generación procedimental de contenido en lugar de empezar con un grafo en blanco.
Establecer un grafo de generación procedimental de contenido como plantilla
Para configurar un grafo de generación procedimental de contenido como plantilla, abre el grafo y sigue pasos que se indican a continuación:
En la barra de herramientas, haz clic en el botón Ajustes del grafo para propagar el panel de detalles con los ajustes del grafo.
Ve a la sección Información de recursos del panel Detalles y activa la propiedad Es plantilla.
El grafo ya está definido como un grafo de plantilla.
Crear un nuevo grafo con una plantilla
Al crear un nuevo grafo, después de elegir el nombre y la posición del recurso, puedes seleccionar una plantilla de grafo en la ventana Crear grafo a partir de plantilla. Selecciona la crear plantilla de grafo que quieras usar y haz clic en el botón Inicializar desde plantilla para crear un nuevo grafo usando la plantilla.
Para desactivar el indicador de plantilla al crear nuevos grafos de generación procedimental de contenido, ve a Editar > Preferencias del editor en la barra del menú. A continuación, usa la barra de búsqueda o dirígete a la sección Editor de generación procedimental de contenido de las propiedades y desactiva Mostrar selector de plantillas en la propiedad Nuevo grafo.
Cuando esta propiedad está deshabilitada, la ventana Crear grafo a partir de plantilla no aparecerá al crear nuevos grafos de generación procedimental de contenido.
Cómo editar el grafo de generación procedimental de contenido
Con el editor de grafos de generación procedimental de contenido, puedes configurar y editar tus recursos de grafo de generación procedimental de contenido. Navegar por el editor es similar al editor de materiales o blueprint. También contiene algunas herramientas y paneles específicos para la generación procedimental de contenido.
| Número | Descripción |
|---|---|
1 | Barra de herramientas |
2 | Paleta de nodos |
3 | Viewport |
4 | Panel de detalles |
5 | Árbol de depuración |
6 | Lista de atributos |
De forma similar a cuando trabajas con blueprints, puedes añadir nodos al grafo si los arrastras al visor desde la paleta de nodos o usas el menú contextual.
Los cambios realizados en un grafo de generación procedimental de contenido se actualizan en tiempo real en el visor del editor cuando el grafo se asigna a un componente de generación procedimental de contenido y se ha usado para generar contenido.
Nodos de generación procedimental de contenido
El grafo de generación procedimental de contenido está formado por una serie de nodos de generación procedimental de contenido, cada uno de los cuales realiza una operación que contribuye al resultado final.
Estos nodos se dividen en las siguientes categorías:
| Categoría | Descripción |
|---|---|
Blueprint | Contiene nodos relacionados con blueprints. Esto incluye el nodo común para ejecutar blueprints de usuario derivados de PCGBlueprintElement. |
Flujo de control | Contiene nodos para controlar el flujo de lógica a través del grafo. |
Depuración | Contiene nodos que ayudan con la depuración. |
Densidad | Contiene nodos que afectan a la densidad de puntos. |
Filtro | Contiene nodos que filtran datos en función de criterios o por punto. |
Genérico | Contiene nodos que afectan a los datos, pero no a los datos espaciales. |
Generación jerárquica | Contiene nodos para controlar el modo Generación jerárquica. |
Entrada y salida | Contiene nodos para cargar Alembic y otros datos externos. |
E/S | Contiene nodos que controlan la interacción con datos externos. |
Metadatos | Contiene nodos que interactúan con atributos, ya sea en puntos o en conjuntos de atributos. |
Parámetros | Contiene nodos que controlan la recuperación de parámetros de actores o variables de blueprint. |
Operaciones de punto | Contiene nodos que afectan a los puntos y a sus propiedades. |
Muestrario | Contiene nodos que generan puntos a partir de una fuente de datos espaciales, como volúmenes, superficies y mallas. |
Espacial | Contiene nodos que crean relaciones espaciales entre datos, cambian sus datos espaciales internos o recuperan datos. |
Generador | Contiene nodos que crean nuevos datos o colocan actores en ubicaciones determinadas. |
Subgrafo | Contiene nodos que se encargan del uso de subgrafos. |
Al igual que con los blueprints, puedes añadir comentarios y nodos de redirección para mejorar la legibilidad de tu grafo.
Personalización de edición de grafos
La edición de gráficos generación procedimental de contenido se puede personalizar mediante un conjunto específico de propiedades, al que puedes acceder desde el panel Ajustes de grafo.
Con estas propiedades, puedes personalizar el comportamiento y el proceso de trabajo de tu grafo de generación procedimental de contenido para una experiencia más cuidada. Estos ajustes se pueden usar para compilar un grafo de generación procedimental de contenido que adapte el proceso de trabajo de generación procedimental de contenido a tu proyecto.
Filtrado de nodos
Puedes usar los ajustes del filtro de nodos para filtrar selecciones de nodo por categoría. El filtrado se realiza en función de la inclusión o la exclusión. Para filtrar nodos en el menú contextual de la selección, activa la propiedad Filtrar nodos por categoría y añade un índice a la propiedad Categorías filtradas con el botón Añadir (+). Después de añadir un índice, puedes escribir el nombre de la categoría en el campo de texto o usar el menú desplegable para seleccionar una categoría de nodo.
Al cambiar los filtros, se actualizará la selección disponible en la paleta del nodo y en el menú contextual.
Filtrado de grafos
Aparte de filtrar los nodos disponibles para el grafo, también puedes filtrar los subgrafos disponibles. Al igual que con el filtrado de nodos, activa primero la propiedad Filtro de subgrafo, añade (+) un nuevo índice y selecciona el subgrafo quequieres que sea seleccionable en el grafo.
Atributos y metadatos
Los atributos son similares a las variables, y almacenan datos definidos por su nombre y tipo. Hay dos tipos de atributos:
Atributos estáticos: atributos fijos y siempre presentes. Empiezan por
$, como$Position.Atributos dinámicos: atributos que se crean en tiempo de ejecución y se almacenan como parte de los metadatos de los datos del grafo.
Dominios de metadatos
Al usar atributos en grafos de generación procedimental de contenido, debes tener en cuenta el dominio en el que se encuentran los metadatos. El dominio controlará qué tipo de información puedes guardar, y cómo puede usarse y manipularse más adelante. Cada punto de metadatos debe saber qué dominio es compatible y cuál es el dominio por defecto. Los dominios llevan el prefijo @ cuando se seleccionan.
La vista de lista de atributos tiene un campo para cambiar entre dominios.
Hay tres dominios que puedes usar al trabajar con grafos de generación procedimental de contenido. En primer lugar, puedes usar el dominio Datos con los atributos establecidos para los propios datos. El dominio Datos está restringido a valores únicos, por lo que no puedes almacenar varios valores como conjuntos de atributos. El dominio Datos se puede manipular igual que otros dominios. Puedes crear o añadir atributos, así como manipularlo con operaciones de metadatos, si añades el prefijo @Data al atributo. Por ejemplo, un atributo MyAttr en el dominio Datos sería @Data.MyAttr. El dominio Datos es el que se utiliza por defecto para el resto de datos espaciales; el dominio @Data es el que se utiliza por defecto. Cuando no se ha especificado ningún dominio.
El segundo dominio es Puntos, que usa el prefijo @Points.
El tercer dominio es Elementos, que se utiliza con conjuntos de atributos y usa el prefijo @Elements.
Selector de atributos
Algunos nodos de grafo de generación procedimental de contenido se pueden usar para proporcionar interoperabilidad entre atributos estáticos y atributos dinámicos a través del selector de atributos.
El selector de atributos te proporciona una lista de atributos disponibles para usar con el nodo seleccionado. El selector de atributos usa las siguientes reglas de nomenclatura:
Los nombres que empiezan por $ son atributos estáticos, mientras que los que no la llevan son atributos dinámicos.
@Lastrepresenta el último atributo dinámico manipulado por el nodo anterior.
Por ejemplo, el nodo de matemáticas se usa para realizar operaciones matemáticas con atributos estáticos y dinámicos:
Haz clic en la imagen para verla a tamaño completo.
El campo de nombre del selector de atributos también se puede usar para extraer datos de los componentes:
En la imagen de arriba, $Position.ZYX proporciona la inversa de los componentes de $Position. A continuación, se indican los componentes que pueden manipularse de esta forma y sus tipos:
| Componente | Clase |
|---|---|
Vectores | |
X, Y, Z, W, x, y, z, w | Doble. No se puede mezclar con RGBA. |
R, G, B, A, r, g, b, a | Doble. No se puede mezclar con XYZW. |
Longitud, tamaño | Doble. Devuelve la longitud del vector. |
Transformaciones | |
Ubicación, posición | Vector3 |
Escala, escala 3D | Vector3 |
Rotación | Cuaternión |
Rotadores | |
Cabeceo, guiñada, alabeo | Double |
Adelante, a la derecha, arriba | Vector3 |
Cuaterniones | |
Extractor de vectores de compatibilidad | Vector |
Extractor de rotadores de compatibilidad | Rotación |
Anulaciones de ajustes de C++
Algunos ajustes están marcados como PCG_Overridable en los metadatos de propiedad de C++. En el caso de los nodos de blueprint, las variables que son visibles y editables por instancias son anulables.
Una vez anulados, los pines se añaden automáticamente al nodo como pines avanzados. Hay dos tipos de pines:
Anulación global: acepta cualquier número de atributos y anula todos los ajustes para cada atributo que coincide exactamente con el nombre del ajuste.
Anulación individual: acepta cualquier número de atributos y anula los ajustes específicos si se encuentra un atributo que coincide exactamente con el nombre del ajuste (o cualquier nombre si solo hay un atributo).
Los tipos de atributos deben coincidir, pero algunos se pueden convertir.
Para conocer el nombre o el tipo exactos, consulta la burbuja informativa del pin de anulación:
Dado que los dominios son específicos para cada dato, la API de C++ de UPCGData tiene funciones para saber qué dominios son compatibles y para realizar conversiones entre FPCGMetadataDomainID, que es la clase interna para especificar un dominio de metadatos, y FPCGAttributePropertySelector, que es la clase expuesta para seleccionar los atributos y las propiedades. Cada FPCGMetadataDomain tiene su propio conjunto de atributos y entradas, que son independientes entre sí. Los descriptores de acceso se actualizan para acceder al dominio correcto mediante FPCGAttributePropertySelector.
Ejemplo de metadatos de spline
Las siguientes secciones muestran algunos ejemplos de configuración de procesos de trabajo de metadatos de generación procedimental de contenido prácticos.
Atributos de spline
Con los atributos, puedes manipular directamente las propiedades de los puntos de control. Puedes acceder a la siguiente lista de propiedades de los atributos si pulsas las teclas Añadir (+) > Spline > Puntos de control.
| Nombre | Descripción | Clase |
|---|---|---|
$Position | El componente de posición de la transformación del punto de control (en referencia al mundo) | Vector |
$Rotation | El componente de rotación de la transformación del punto de control (en referencia al mundo) | Quaternion/ Rotación |
$Scale | El componente de escala de la transformación del punto de control (en referencia al mundo) | Vector |
$Transform | Transformación de mundo del punto de control | Transformación |
$ArriveTangent | Tangente de llegada del punto de control | Vector |
$LeaveTangent | Tangente de salida del punto de control | Vector |
$InterpType | Tipo de interpolación del punto de control para la posición (igual que la establecida en el punto de control de spline) | ESplinePointType |
$LocalPosition | Vector | |
$LocalRotation | El componente de rotación de la transformación del punto de control (en referencia al spline) | Quaternion/ Rotación |
$LocalScale | El componente de escala de la transformación del punto de control (en referencia al spline) | Vector |
$LocalTransfrom | Transformación local del punto de control | Transformación |
Datos de spline
También puedes manipular las propiedades de los datos directamente. Puedes acceder a la siguiente lista de propiedades de datos si pulsas Añadir (+) > Spline > Global.
| Nombre | Descripción | Clase |
|---|---|---|
@Data.$SplineTransform | Transformación del spline | FTransform |
@Data.$IsClosed | Si el spline está cerrado o no (aolo lectura) | bool |
Metadatos de spline
Aparte de las propiedades de los puntos de control, puedes añadir atributos a los datos de spline vinculados a los puntos de control. Estos metadatos se interpolan cuando muestreamos el spline. Los metadatos como estos se comportan igual que los de puntos o atributos.
Al igual que con los puntos, puedes usar Añadir atributo para crear un nuevo atributo o usar las operaciones de metadatos y especificar un objetivo de salida para escribir en este atributo.
Además, los metadatos de los puntos de control se utilizan por defecto para los metadatos del spline, pero también puedes ser explícito con @ControlPoints.
Parámetros de grafo
Al igual que los parámetros del editor de materiales, los parámetros del grafo de generación procedimental de contenido son valores modificables creados por el usuario que pueden ayudar a crear grafos personalizables para diversas situaciones. Para crear un nuevo parámetro:
Abre los ajustes del grafo de generación procedimental de contenido.
Haz clic en el botón + situado junto a Parámetros. Esto crea un nuevo parámetro.
Haz clic en la flecha hacia abajo que está junto al nuevo parámetro. Cambia el nombre y selecciona el tipo.
Para cambiar el valor de un parámetro en un grafo de generación procedimental de contenido:
Cambia el valor en los parámetros del grafo o en el panel de detalles de un recurso de generación procedimental de contenido.
Para cambiar el valor de un parámetro en una instancia de grafo de generación procedimental de contenido:
Abre el recurso en el explorador de contenido para cambiar el valor o en el panel de detalles de un recurso de generación procedimental de contenido.
Instancias de grafo
Las instancias de grafo de generación procedimental de contenido funcionan de forma similar a las instancias de material y utilizan parámetros de grafo para ayudarte a reutilizar los grafos existentes como instancias o subgrafos de generación procedimental de contenido:
Para crear una instancia de grafo de generación procedimental de contenido:
Selecciona un recurso de generación procedimental de contenido en tu nivel.
Selecciona el componente de generación procedimental de contenido en el panel Detalles.
Haz clic en el botón Guardar instancia para crear una nueva instancia.
Ponle un nombre a la nueva instancia de grafo y pulsa Intro.
Componente de generación procedimental de contenido
El grafo de nodos procedimentales puede muestrear tu nivel a través del componente de generación procedimental de contenido. Este componente almacena una instancia del grafo de nodos procedimentales y gestiona la generación procedimental de contenido, tanto en el editor como e eln tiempo de ejecución. Los componentes de generación procedimental de contenido se añaden como componente a un actor o se usan como parte del volumen de generación procedimental de contenido, un volumen básico útil para configurar rápidamente contenido procedimental.
Para conectar un grafo de generación procedimental de contenido a tu componente de generación procedimental de contenido, sigue los pasos que se indican a continuación:
En el visor del editor o en el esquematizador, selecciona el volumen de generación procedimental de contenido o la clase de blueprint que quieras conectar.
En el panel Detalles, haz clic en el componente de generación procedimental de contenido.
Haz clic en el grafo desplegable y selecciona el grafo de nodo de generación procedimental de contenido que quieras usar.
Haz clic en el botón Generar para ver el resultado.
Compatibilidad con World Partition
Cuando se asignan recursos de generación procedimental de contenido a una capa de datos de World Partition y a una capa HLOD, el grafo de generación procedimental de contenido genera los actores y los asigna a las mismas capas de datos y HLOD.
Para obtener más información sobre cómo usar la generación procedimental de contenido con World Partition, consulta Uso de generación procedimental de contenido con World Partition.
Cómo depurar en la generación procedimental de contenido
La depuración es una parte esencial del proceso de trabajo de generación procedimental de contenido.
Cada nodo tiene una variedad de opciones de depuración, que puedes usar para visualizar los datos de los puntos en cada paso del grafo de generación procedimental de contenido:
Depurar renderizado
Activar/desactivar nodo
Inspeccionar
Marca la casilla de verificación Depurar en el panel Detalles del nodo o pulsa la tecla D para activar o desactivar Depurar renderizado en cada nodo.
Marca la casilla de verificación Habilitado en el panel Detalles del nodo o pulsa la tecla E para activar o desactivar cada nodo.
También puedes mostrar todos los puntos que genera un nodo en la lista de atributos tras inspeccionar el nodo.
Selecciona un componente de generación procedimental de contenido en el árbol de depuración.
Haz clic con el botón derecho en el nodo que quieras inspeccionar.
Selecciona Inspeccionar. También puedes pulsar la tecla A.
Crear un volumen de bosque sencillo
Un caso de uso común de las herramientas de generación procedimental es la generación de biomas en un entorno de mundo abierto.
Para crear un generador de bioma de bosque básico, sigue los pasos que se indican a continuación.
Esta muestra usa materiales y mallas estáticas de la colección Megascans Trees: European Hornbeam descargada con Fab.
Crear el nivel
Crea un nuevo proyecto en Unreal Engine.
Crea un nuevo nivel con la plantilla de nivel Básico. Guarda el nivel.
Elimina la malla estática del suelo y añade un nuevo paisaje al nivel con el modo Paisaje.
Con las herramientas de escultura, añade variaciones a tu paisaje.
Crear el volumen de generación procedimental de contenido
Vuelve al modo Selección y activa la ventana Colocar actores si no se muestra.
Usa la casilla Buscar clases para buscar el Volumen de generación procedimental de contenido y añadir uno a tu nivel.
Escala el volumen de generación procedimental de contenido a X=8,0; Y=8,0; Z=8,0
Crear el recurso de grafo de generación procedimental de contenido
Haz clic derecho en Almacén de contenido o Explorador de contenido, ve a Crear recurso avanzado > Generación procedimental de contenido y selecciona Grafo de generación procedimental de contenido.
Llama al nuevo recurso PCG_ForestGen y pulsa Intro.
Haz doble clic en PCG_ForestGen para abrir el editor de grafos de generación procedimental de contenido.
Conectar el componente de generación procedimental de contenido
En el visor del editor o en el esquematizador, selecciona Volumen generación procedimental de contenido.
En el panel Detalles, haz clic en el componente de generación procedimental de contenido.
Haz clic en el grafo desplegable y selecciona PCG_ForestGen de la lista.
Crear los puntos
En la ventana Editor de grafos de generación procedimental de contenido, añade un nodo Obtener datos de paisaje al grafo.
Arrastra desde la salida de Obtener datos de paisaje y añade un nodo Muestrario de superficies.
Selecciona Muestrario de superficies y pulsa la tecla D para activar o desactivar Depurar renderizado.
Vuelve a la ventana del editor, selecciona el volumen de generación procedimental de contenido y haz clic en el botón Generar del panel de detalles.
Ya puedes ver los puntos que se generan en el visor del editor. Los puntos se adaptan a la forma del paisaje.
Añadir variación
En el editor de grafos de generación procedimental de contenido, selecciona Muestrario de superficies.
Para añadir más puntos, ajusta las propiedades Puntos por metro cuadrado, Extensiones de puntos y Soltura en el panel de detalles.
Ajusta el valor Puntos por metro cuadrado en 0,15 para añadir más puntos al espacio.
La propiedad Extensiones de puntos controla el de tamaño de los vínculos de cada punto. Cambia los valores de X, Y y Z a 50.
La propiedad Soltura determina cuánto se adaptan los puntos generados a la forma de una cuadrícula. Deja el valor de Soltura en 1,0.
A continuación, añade un nodo Transformar puntos. Este nodo añade movimiento adicional, rotación y cambios de escala a tus puntos con un intervalo definido. Conecta el pin Salida del nodo Muestrario de superficies con el pin Entrada del nodo Transformar puntos.
Desactiva Depurar renderizado en el nodo Muestrario de superficie y actívalo en el nodo Transformar puntos.
Para añadir algo de variación de rotación, cambia el valor Z de Rotación máxima a 360. Esto otorga a todos los puntos una rotación aleatoria de entre 0 y 360 grados.
El grafo de generación procedimental de contenido genera puntos y los rota para adaptarse a la dirección normal del paisaje. Para desactivar esta rotación adicional, marca la casilla de verificación Rotación absoluta.
Para añadir alguna variación de tamaño, establece los valores X, Y y Z Escala mín. a 0,5. Cambia los valores de X, Y y Z Escala máx. a 1,2.
El resultado final es un conjunto de puntos con una buena cantidad de variación
Generar las mallas estáticas
En el editor de grafos de generación procedimental de contenido, añade un nodo Generador de malla estática al visor del grafo. Conecta el pin Salida del nodo Transformar puntos al pin Entrada del generador de malla estática.
Seleccione el generador de malla estática.
En el panel Detalles, busca la opción Entradas de malla y haz clic en el botón + para añadir una malla estática que generar.
Haz clic en la flecha hacia abajo junto a Entradas de malla para abrir la matriz.
Haz clic en la flecha hacia abajo junto a Índice [0].
Haz clic en la flecha hacia abajo junto a Descriptor.
Haz clic en el menú desplegable Malla estática y selecciona el árbol que quieras generar. Este ejemplo usa SM_EuropeanHornbeam_Forest_01.
Puedes añadir más mallas estáticas y equilibrar la variedad con la propiedad Peso para cada entrada de malla de la matriz. Unreal Engine añade el valor de peso de todas las entradas de malla estática y divide ese número por cada peso individual para determinar la probabilidad de que se genere cada entrada.