La secuenciación de comandos de geometría proporciona funciones de Blueprint y Python para crear herramientas de modelado y procesos de trabajo personalizados. Esta guía cubre los aspectos básicos de la secuenciación de comandos de geometría mediante blueprints. Sigue estos pasos para generar una herramienta de malla procedimental para el diseño de niveles, similar a las herramientas de geometría creadas para el proyecto de muestra de Lyra.
Esta guía explica cómo:
Generar geometría procedimental para el bloqueo rápido de niveles. Usar operaciones booleanas para recortar una malla de forma dinámica. * Crear una función para hacer bake de malla estática.
La herramienta que has desarrollado es un pequeño ejemplo de generación de malla procedimental y de herramientas que puedes crear con la secuenciación de comandos de geometría. Un ejemplo avanzado es el marco de generación procedimental de contenido, que usa secuencias de comandos de geometría como base. Para obtener más información sobre este conjunto de herramientas, consulta la sección Descripción de la generación procedimental de contenido.
Otros procesos de trabajo que puedes crear además de la generación procedimental son:
Asignación de varios materiales a los recursos. Aplicación de booleanos de malla con Python. * Generación de volúmenes de bloqueo basados en envolventes convexas .
Conocimientos previos necesarios
Para entender y usar el contenido de esta página, debes:
Tener conocimientos básicos de blueprints. Estar familiarizado con el tema de introducción a la secuenciación de comandos de geometría, en concreto con los nuevos tipos de objeto presentados.
Esta guía usa la plantilla de tercera persona. Sin embargo, puedes usar cualquier proyecto para seguir el proceso.
Cómo habilitar el complemento
Para poder usar la secuenciación de comandos de geometría es necesario tener activado el complemento asociado.
Para habilitar el complemento o comprobar si ya lo está:
-
En la barra de menús, selecciona Editar > Complementos.
-
En la barra de búsqueda, escribe «Geometry Script».
- Activa el complemento Geometry Script y selecciona Sí en el cuadro de diálogo emergente.
- Reinicia el motor.
Creación de una clase de blueprint
Para empezar, debes garantizar que tienes la clase de blueprint correcta. Dado que el objetivo es crear una malla procedimental para el diseño de niveles, necesitas usar la clase GeneratedDynamicMeshActor.
Para seleccionar una clase de blueprint:
- En el explorador de contenido, haz clic derecho y selecciona Clase de blueprint.
-
Busca y selecciona GeneratedDynamicMeshActor.
- Llama al blueprint BP_ProceduralGen.
Si no ves GeneratedDynamicMeshActor como opción, el complemento Geometry Script no está habilitado.
Configuración del evento
Después de crear la clase, debes configurar el evento específico para poblar la malla dinámica que usarás para construir tu herramienta.
Para crear el evento:
- En el explorador de contenido, haz doble clic en la clase de blueprint.
- Abre el grafo de eventos.
-
Haz clic derecho en el grafo y escribe «generated mesh» (malla generada) para filtrar los nodos disponibles. A continuación, selecciona el nodo Event on Rebuild Generated Mesh. Este evento se activa cada vez que actualizas los parámetros de la malla dinámica, lo que provoca que la malla se reconstruya.
-
Asciende la salida Malla objetivo a una variable local haciendo clic derecho en su pin y seleccionando Ascender a variable.
- Ponle a la variable el nombre DynamicMesh, define el tipo como Malla dinámica y mantenla como privada. Esta variable representa la malla dinámica que estás editando.
Construcción de la geometría
Una vez creados el evento y la clase de blueprint, puedes empezar a añadir funciones de secuenciación de comandos de geometría. El objetivo de esta guía es generar formas ocultas que se puedan transformar y recortar. Para ello, primero tienes que crear la malla que quieras editar.
Para crear una malla:
- Arrastra desde el pin de ejecución de la variable DynamicMesh y busca y selecciona el nodo Append Box. Esto añade un elemento primario de caja a la malla dinámica.
-
Conecta el pin de salida de la variable DynamicMesh al pin de entrada de la malla objetivo.
Con estos primeros nodos, habrás creado una malla procedimental. Puedes probarla compilando y arrastrando el blueprint a tu nivel. Para saber qué otras formas puedes crear al instante, consulta la sección Generación de elementos primitivos de la documentación de referencia sobre secuenciación de comandos de geometría.
Cómo añadir un widget de transformación
Para poder ajustar dinámicamente la transformación de tu malla, puedes añadirle controles interactivos.
Para añadir controles interactivos:
-
Crea una nueva variable pública llamada BoxSize y defínela con el tipo Vector.
-
En el panel Detalles de esta variable, activa Editable de instancia y Mostrar widget 3D. Establece el valor por defecto en 200, 200, 200. Al activar el widget 3D, se crea un manipulador para controlar de forma interactiva las transformaciones X, Y y Z.
- Arrastra la variable y selecciona Obtener BoxSize.
- Haz clic derecho en la variable y selecciona Dividir pin de estructura. Los valores X, Y y Z de la variable determinarán las dimensiones de la caja.
-
Conecta los valores X, Y y Z correspondientes a los respectivos valores de dimensión de Anexar caja.
- Compila (Ctrl + Alt) y guarda (Ctrl + S) el trabajo.
Ahora ya puedes generar una malla cúbica y ajustar sus dimensiones de forma dinámica. Cada ajuste con el widget genera una nueva malla dinámica del tamaño establecido y evita la necesidad de cambiar la escala de la malla.

Para que aparezca el widget, debes estar en el modo de selección.
Edición con booleanos
Las operaciones booleanas suman o restan pares de mallas. Son útiles para añadir rápidamente efectos de detalle y desplazamiento a la malla. Si quieres crear la segunda malla para la función booleana, puedes asignar una malla temporal de un conjunto de mallas. La malla temporal evita geometría innecesaria en el editor, lo que reduce la presión sobre el procesamiento informático.
Para crear una operación booleana:
- Haz clic derecho en el grafo y selecciona Obtener grupo de mallas de cálculo. Esto asigna una malla temporal para realizar una operación booleana.
- Fija el pin de ejecución de Anexar caja a Obtener grupo de mallas de cálculo.
-
Arrastra el pin Valor de retorno, luego busca y selecciona el nodo Request Mesh. Conecta los pines de ejecución.
- Arrastra el pin Valor de retorno, luego busca y selecciona el nodo Append Cylinder. Este nodo añade una malla cilíndrica que usarás para sustraer de la malla de caja.
-
Asciende la malla objetivo de salida a una variable llamada BoolMesh. Establece Malla dinámica como el tipo y déjalo como privado.
- Arrastra el pin de ejecución de BoolMesh y selecciona el nodo Apply Mesh Boolean. Usarás este nodo para aplicar la operación booleana a tu malla.
- Arrastra y conecta la variable DynamicMesh a la entrada Malla dinámica del nodo Apply Mesh Boolean.
-
Conecta BoolMesh al pin Malla de herramienta del nodo Apply Mesh Boolean. Malla de herramienta representa la malla con la que quieres crear el booleano. Este parámetro es el motivo por el que has añadido el nodo Append Cylinder.
- En el nodo Apply Mesh Boolean, define el tipo de la operación como Restar.
- Después de aplicar las operaciones necesarias, debes devolver la malla temporal al grupo para que se pueda reutilizar su memoria. Conecta el pin de ejecución del nodo Apply Mesh Boolean a la función Liberar todas las mallas de cálculo. Cuando se activa el evento, se liberan todas las mallas de cálculo que el grupo haya asignado.
- Compila (Ctrl + Alt) y guarda (Ctrl + S) el trabajo.
Al compilar y visualizar el blueprint en el editor de niveles, es posible que no veas el efecto booleano porque es demasiado pequeño. Para ver el efecto, puedes establecer manualmente el tamaño de la malla booleana o ajustarlo dinámicamente con widgets.
Cómo añadir widgets
Al igual que has creado un widget para el elemento primario de caja, puedes hacer lo mismo con los booleanos de malla y posición.
Para crear un widget:
-
En el panelVariables, crea una variable pública para la posición de la malla booleana, llámala BoolLocation y define el tipo como Vector.
-
En el panel Detalles, activa Editable de instancia y Mostrar widget 3D.
-
Haz clic derecho en el pin Transformar del nodo Append Cylinder, selecciona Dividir pin de estructura y conecta la variable BoolLocation a la ubicación de transformación.
- Crea otra variable pública, llámala BoolSize y define el tipo como Vector. Puedes usarla para ajustar el tamaño de la malla booleana.
- En el panel Detalles, activa Editable de instancia y Mostrar widget 3D. Luego define el valor por defecto en 1, 1 y 5.
- Arrastra la variable al grafo y selecciona Obtener tamaño booleano.
- Haz clic derecho en el pin y selecciona Dividir pin de estructura.
-
Conecta los pines BoolSize a los pines Escala de transformación correspondientes del nodo Append Cylinder.
- Compila (Ctrl + Alt) y guarda (Ctrl + S) el trabajo.
Ya tienes una malla que puedes transformar dinámicamente en distintas formas.

Cómo hacer bake en funciones de malla estática
Ahora que tienes tu malla generada dinámicamente, puedes aplicarla a mallas estáticas existentes para diseñar niveles rápidamente. Para ello, puedes crear una función y exponerla en el panel Detalles del editor de niveles.
Para controlar cuándo se actualizan las mallas estáticas:
-
Crea una nueva función llamada Bake en malla estática.
-
En el panel Detalles de la función, habilita Llamada en el editor para activar el evento desde el editor de niveles.
- Arrastra desde el pin de ejecución de la función, luego busca y selecciona Obtener malla dinámica. La función extrae la malla dinámica que se está usando en ese momento.
-
Arrastra desde el pin de ejecuciónObtener malla dinámica y selecciona Copiar malla en malla estática. Conecta también el Valor de retorno a Desde malla dinámica. Cuando se ejecuta la función, se hace bake de la malla dinámica en la malla estática seleccionada.
- Para poder seleccionar la malla estática en la que quieres hacer bake, debes exponer el parámetro en el editor. Crea una variable pública llamada TargetMesh y define el tipo como Malla estática.
- Arrastra la variable al grafo y selecciona Obtener malla objetivo.
- Haz clic derecho en el pin de la variable y selecciona Convertir en Get validado. Esta conversión configura la función para que solo ejecute el código si has seleccionado una malla.
-
Conecta el pin Malla objetivo a A recurso de malla estática.
Secuencia del bake final.
- Compila y guarda el proceso.
-
Ahora aparecerá el botón Bake en malla estática en el panel Detalles del editor de niveles. Antes de usar el botón, actualiza la malla objetivo a la malla estática a la que quieras hacer bake.
Revisión de los resultados finales
Con la función Bake de malla estática y la secuencia de malla procedimental, puedes usar la malla dinámica para actualizar las mallas estáticas de tu nivel continuamente.
Secuencia de la malla procedimental final. Haz clic para ampliar.
Por tu cuenta
Prueba a hacer los siguientes ajustes usando lo que has aprendido:
Cambia la malla de la caja a una esfera. Añade una segunda malla booleana para un control de modelado adicional. * Usa la opción Crear un nuevo recurso de malla estática a partir de una malla para hacer bake de la malla dinámica en una nueva malla estática en lugar de una existente.