Un canal de UV es un conjunto de datos dentro de una malla estática que mapea cada uno de los vértices de la malla a coordenadas en el espacio 2D. Estas asignaciones definen cómo se envuelven estos mapas de texturas 2D alrededor de la geometría 3D cuando se renderiza la malla.
Normalmente, las asignaciones de UV se crean y gestionan en una herramienta de modelado específica, la misma que se usa para crear la geometría de la malla estática. Sin embargo, el editor ofrece algunas posibilidades para trabajar con los canales de UV de tus modelos, tal y como se describe más abajo en esta página.
Los canales de UV tienen dos propósitos principales en el motor:
-
Coordenadas de textura en materiales: cuando creas un material que muestra un mapa de texturas y lo aplica a la superficie de una malla estática, puedes usar un nodo de coordenada de textura (o Texcoord) para especificar un canal de UV. El material usa la asignación entre coordenadas 2D y posiciones de vértices 3D contenidos en el canal de UV seleccionado para determinar qué áreas de la textura se deberían usar para sombrear triángulos en el modelo 3D.
Por ejemplo, el canal de UV 0 de esta malla estática simple del plano (arriba a la derecha en la siguiente imagen) muestra la forma más sencilla de mapear los dos triángulos de la malla (A y B) en el espacio de texturas. Cuando usas este canal de UV (establecido por la propiedad Índice de coordenadas del nodo TexCoord), el material aplica todo el ancho y alto de una textura al plano.
Haz clic en la imagen para verla a tamaño completo.
Por otro lado, la imagen de abajo muestra el canal de UV 1, que gira y sesga el mapeo entre los triángulos y el espacio de texturas de UV. Cuando la misma textura de imagen se aplica a la malla estática, cambia qué partes de la textura se aplican a las partes de la malla estática.
Haz clic en la imagen para verla a tamaño completo.
Los triángulos del mapeo de UV pueden solaparse. Un solapamiento solo significa que la misma parte de la textura se aplica a varias partes de la geometría de malla estática 3D.
La «U» en «canales de UV» hace referencia al eje horizontal de la textura; la «V» hace referencia al eje vertical. Las coordenadas de las texturas se suelen mantener entre 0 y 1, donde (0,0) representa la parte inferior izquierda de la textura y (1,1) la parte superior derecha. Sin embargo, esto no siempre es así. De forma predeterminada, cuando un valor U o V es superior a 1 o inferior a 0, el material «envuelve» al otro lado de la textura. Por ejemplo, un valor de V de 1.25 se suele tratar como 0.25. Sin embargo, puedes anclar estos valores en tu material, limitándolos a un valor mínimo de 0 y un valor máximo de 1.
-
Mapas de luz: los canales de UV también se usan para almacenar y aplicar mapas de luz. Un mapa de luz es un tipo especial de textura que almacena información de iluminación precalculada para mallas estáticas. Cuando tienes luces en tu nivel con el ajuste de movilidad estacionario o estático y construyes la iluminación para tu nivel, la herramienta Lightmass guarda la iluminación indirecta (y la iluminación directa para las luces estáticas) en texturas de mapa de luz usando un canal de UV para determinar el mapeo entre la geometría 3D de la malla estática y el espacio de texturas 2D.
Los canales de UV usados para los mapas de luz tienen que seguir algunas reglas especiales. Dado que cada parte de un objeto suele recibir distintos niveles de iluminación, no pueden solaparse dos triángulos de la malla en el espacio de texturas 2D. Cada triángulo debe ocupar su propia área en la textura. Además, todos los valores de las coordenadas UV deben estar entre 0 y 1. Los mapas de luz no pueden «envolver» como los mapeados de texturas normales. Por este motivo, los UV de mapa de luz se suelen generar (o empaquetar) a partir de mapeos de UV más sencillos.
Por ejemplo, el canal de UV de mapeo de texturas de este pilar asigna la geometría de cada uno de los cuatro lados a las mismas áreas que se solapan de la textura. Cuando usas este canal de UV para aplicar una textura a la geometría, cada uno de los lados usa las mismas partes de la textura.
Haz clic en la imagen para verla a tamaño completo.
Sin embargo, en el UV de mapa de luz del objeto, cada lado necesita cubrir su propia área única de espacio 2D:
Haz clic en la imagen para verla a tamaño completo.
Para obtener más información sobre los UV de mapa de luz y cómo generarlos, consulta Conceptos básicos sobre los mapas de luz en Unreal Engine y Generación de UV de mapa de luz en la documentación.
Cada malla estática del motor puede tener hasta siete canales de UV diferentes, por lo que puedes configurar múltiples formas de envolver texturas para distintos materiales (o para distintos nodos de muestreo de texturas dentro de un mismo material).
Canales de UV en el editor de mallas estáticas
En la interfaz de usuario del editor de mallas estáticas, puedes enumerar, visualizar y eliminar canales de UV.
Listado de canales de UV
Si tienes algún recurso de malla estática abierto en el editor de mallas estáticas, puedes usar el botón UV de la barra de herramientas para ver una lista de todos los canales de UV que usa la malla estática actual.
Haz clic en la imagen para verla a tamaño completo.
Cómo visualizar un canal de UV
Selecciona cualquier canal de UV de la lista para visualizar el mapeo de los triángulos de la malla en el espacio de textura 2D como una superposición en el visor:
Haz clic en la imagen para verla a tamaño completo.
Selecciona Ninguno en la parte superior de la lista para ocultar la superposición de UV.
Eliminación de un canal de UV
Cuando hayas seleccionado un canal en la lista, puedes eliminarlo. Cada canal de UV almacena las coordenadas de texturas de cada vértice como parte de la malla estática, por lo que podrías ahorrar memoria de tiempo de ejecución eliminando los mapeos que no uses.
Haz clic en la imagen para verla a tamaño completo.
Haz clic en la imagen para verla a tamaño completo.
El resto de canales de UV que estaban presentes en la lista después de eliminar el canal suben una posición para ocupar el espacio vacío que dejó el canal eliminado.
Haz clic en la imagen para verla a tamaño completo.
No puedes eliminar un canal de UV si tu recurso de malla estática está configurado para generar UV de mapa de luz y el canal de UV que has seleccionado ya se está usando como canal de origen o de destino para los UV de mapa de luz. Desactiva la opción Ajustes de compilación > Generar UV de mapa de luz o cambia Ajustes de compilación > Índice de mapa de luz de origen y Ajustes de compilación > Índice de mapa de luz de destino para que apunten a distintos canales de UV.
Creación de mapeos de UV
Cuando un material usa texturas como datos fuente para sus canales (como el color base, el mapa de normales, la dureza, etc.), suele usar el UV del modelo para determinar qué partes de esas texturas se envuelven alrededor de la geometría. Por lo tanto, cuando un modelo no tiene mapeos de UV, o los tiene mal diseñados, a menudo verás problemas visibles cuando intentes usar un material texturizado. Por ejemplo, si el UV tiene muchas costuras (lugares en los que los triángulos que son adyacentes en la geometría de la malla no lo son en el UV), la textura mostrará articulaciones visibles en esas costuras. O bien, si tu UV asigna áreas del espacio de UV de forma desigual a los triángulos de la malla (de modo que los triángulos grandes de la malla se asignan a áreas pequeñas de la textura o viceversa), la textura aparecerá estirada o distorsionada en distintas partes de la malla.
Para obtener los mejores resultados artísticos, siempre deberías intentar crear los mapeos de UV para tus objetos en 3D con una herramienta de modelado específica. Sin embargo, esto no siempre es posible. Por ejemplo, cuando importas datos de algunos tipos de aplicaciones de modelado CAD a Unreal Engine, es posible que no puedas crear un UV de alta calidad en tu aplicación de origen. En estos casos, puedes crear mapeos de UV en Unreal Editor.
Unreal Editor ofrece dos formas de crear mapeos de UV para una malla estática:
Configuración del proyecto: Para usar cualquiera de los métodos de generación de canales de UV descritos a continuación, debes instalar el complemento UV Editor para tu proyecto de Unreal Engine.
Haz clic en la imagen para verla a tamaño completo.
Opción 1: Desenvolver la geometría de la malla
De esta forma, los triángulos que componen la geometría de malla estática se despliegan y aplanan automáticamente. El área de la superficie de los triángulos se ajusta automáticamente para preservar la adyacencia de los triángulos vecinos, y las costuras se introducen en cualquier lugar donde el ángulo entre las superficies adyacentes cruce el umbral que establezcas.
Para desenvolver una malla estática en un nuevo mapeo de UV:
-
Elige la malla estática que quieras desenvolver y realiza una de las siguientes acciones:
-
Haz clic derecho en tu malla estática en el explorador de contenido y selecciona Desenvolver UV en el menú contextual.
Haz clic en la imagen para verla a tamaño completo.
-
Abre la malla estática que quieras generar en el editor de mallas estáticas. A continuación, en la barra de herramientas del editor de mallas estáticas, selecciona UV > Desenvolver UV.
Haz clic en la imagen para verla a tamaño completo.
Si no ves ninguna de las dos opciones del menú, asegúrate de haber activado el complemento Polygon Editing para tu proyecto.
-
-
Configura los parámetros para controlar los resultados de la desenvoltura:
Haz clic en la imagen para verla a tamaño completo.
Ajuste Descripción Selección del canal Determina cómo el proceso de desenvoltura elige en qué canal guardar el nuevo mapeo de UV.
- Configuración automática de mapa de luz: guarda el UV en el canal definido para esta malla estática como origen para los UV de mapa de luz y, a continuación, genera nuevos UV de mapa de luz partir del nuevo UV.
- Primer canal vacío: guardar el mapeo de UV desenvuelto en el primer canal de UV vacío de la malla estática.
- Especificar canal: elige esta opción para especificar un índice de canal en el ajuste Canal de UV.
Canal de UV Cuando Selección del canal se configura como Especificar canal, se usa este ajuste para determinar el índice del canal de UV en el que se guarda el UV desenvuelto. Umbral de ángulo Determina el ángulo máximo entre dos caras adyacentes para que esas caras permanezcan conectadas después de desenvolver. Al aumentar este valor, se minimiza el número de «islas» de UV separadas, lo que mantiene más triángulos conectados a sus vecinos y reduce el número de costuras que pueden provocar rupturas en el asignación de texturas. Sin embargo, esto también puede introducir más distorsión en las texturas envolventes, ya que es posible que haya que cambiar el tamaño de los triángulos de forma más agresiva en el espacio 2D para seguir conectados con sus vecinos. -
Haz clic en Continuar.
Opción 2: Proyectar la geometría de la malla en un canal de UV
Puedes proyectar la geometría 3D de tu malla estática en un espacio de texturas 2D usando un volumen de proyección: un plano, una caja o una esfera. En este método, cada cara de la malla estática se proyecta hacia fuera sobre las caras del volumen de proyección. A continuación, el volumen de proyección se desenvuelve en un espacio de texturas 2D.
-
Abre la malla estática que quieras generar en el editor de mallas estáticas.
Por ejemplo, haz doble clic en el recurso de malla estática en el explorador de contenido.
-
En la barra de herramientas del editor de mallas estáticas, selecciona UV > Generar UV.
Si no ves esta opción en el menú, asegúrate de haber activado el complemento Polygon Editing para tu proyecto.
-
Verás aparecer el panel Generar UV con una serie de controles que te ayudarán a manejar los resultados de la proyección de UV.
Haz clic en la imagen para verla a tamaño completo.
También verás aparecer un volumen verde alrededor de tu malla estática en el visor con un gizmo de manipulador estándar de Unreal Editor.
Si el volumen y el manipulador no aparecen al principio, activa el botón Mostrar gizmo de la parte inferior del panel Generar UV.
-
En el ajuste Tipo de proyección, elige el volumen que mejor se ajuste a las dimensiones de tu malla estática.
-
Ajusta el tamaño, la posición y la rotación del volumen para que coincida con la extensión de tu malla estática.
Para ello, puedes usar el manipulador del visor o los campos de texto del panel Generar UV. También puedes usar el botón Ajustar para que el volumen se ajuste automáticamente a la extensión de la geometría de malla estática y facilitarte el proceso.
-
En el ajuste Canal de destino, define el índice del canal donde quieres guardar el mapeo de UV proyectado.
La mayoría de los materiales obtienen las coordenadas de textura del canal 0. Si estás generando un UV para mejorar la forma en que las texturas se mapean alrededor de tu geometría de malla estática, lo más probable es que quieras fijar un
0en este campo. -
Haz clic en Aplicar para generar el mapeo de UV y guárdalo en el canal objetivo de la malla estática.
En la siguiente tabla se describen todos los ajustes del panel Generar UV:
| Ajuste | Descripción |
|---|---|
| Tipo de proyección | El volumen en el que se proyecta la geometría de la malla estática. |
| Tamaño | Las dimensiones del volumen de proyección. |
| Posición | La posición del volumen de proyección en relación con el punto de traslación de la malla estática. |
| Rotación | La rotación del volumen de proyección en relación con el punto de traslación de la malla estática. |
| Escala de teselado de UV | La escala de la proyección en el espacio de UV. Cuanto mayor sea el valor, mayor será la proyección en el espacio de la textura, lo que hace que los detalles de la textura parezcan más pequeños al envolverse en la superficie de la malla. |
| Desfase de UV | Controla la posición de la proyección en el espacio de texturas 2D. Los valores más pequeños del eje X mueven la proyección hacia la izquierda en el UV; los valores más altos desplazan la proyección hacia la derecha. Los valores más pequeños del eje Y mueven la proyección hacia arriba en el UV; los valores más altos desplazan la proyección hacia abajo. |
| Canal de destino | El índice del canal de UV donde se guardará la proyección. No puede ser el mismo canal que el que usa el editor de mallas estáticas para almacenar los UV de mapa de luz generados. Si el canal objetivo ya contiene datos, el editor te pedirá confirmación antes de continuar. |
| Mostrar Gizmo | Activa o desactiva el renderizado del volumen de proyección y del gizmo de manipulador en el visor. |
| Aplicar | Genera la proyección de UV según los ajustes anteriores y guarda el resultado en el canal objetivo. |
| Ajustar | Hace que el tamaño del volumen de proyección encierre toda la geometría de la malla estática. |
Canales de UV en secuencias de comandos del editor
También se puede trabajar con canales de UV en secuencias de comandos de Blueprint y Python que se ejecutan en Unreal Editor. Puedes hacer todo lo que haces en el editor de mallas estáticas y, además, añadir nuevos canales y generar nuevos mapeos de UV.
Prerrequisitos: si aún no lo has hecho, tendrás que instalar el complemento Editor Scripting Utilities. Para obtener más información, consulta Secuencias de comandos y automatización del editor.
En el complemento, encontrarás los nodos necesarios para gestionar los canales de UV en la categoría Editor Scripting > Static Mesh.
Para usar estos nodos, tu clase de blueprint debe derivar de una clase exclusiva del editor, como la clase PlacedEditorUtilityBase. Para obtener más información, consulta Secuencias de comandos del editor con blueprints.
Todas estas funciones funcionan con un recurso de malla estática, que normalmente tendrás que cargar llamando al nodo Editor Scripting > Asset Library > Load Asset.
Al modificar los canales de UV, se modifica el recurso. Suponiendo que quieras conservar los cambios realizados, también tendrás que usar un nodo como Editor Scripting > Asset Library > Save Asset o Save Loaded Asset después. Consulta los siguientes ejemplos.
Listado de canales de UV
Puedes usar el nodo Get Num UV Channels para averiguar cuántos canales de UV hay actualmente en un recurso de malla estática dado.
Por ejemplo:
Haz clic en la imagen para verla a tamaño completo.
Eliminación de un canal de UV
Cada canal de UV almacena las coordenadas de texturas de cada vértice como parte de la malla estática, por lo que podrías ahorrar memoria de tiempo de ejecución eliminando los mapeos que no uses.
Para eliminar un canal de UV, haz una llamada al nodo Remove UV Channel. Pásale el recurso de malla estática y el índice del canal de UV que quieras eliminar.
Por ejemplo:
Haz clic en la imagen para verla a tamaño completo.
El resto de canales de UV que ya estaban presentes en la lista después de eliminar el índice especificado suben una posición para ocupar el espacio vacío que dejó la entrada eliminada.
No puedes eliminar un canal de UV si tu recurso de malla estática está configurado para generar UV de mapa de luz y el canal de UV que has seleccionado ya se está usando como canal de origen o de destino para los UV de mapa de luz. Desactiva la opción Ajustes de compilación > Generar UV de mapa de luz o cambia Ajustes de compilación > Índice de mapa de luz de origen y Ajustes de compilación > Índice de mapa de luz de destino para que apunten a distintos canales de UV.
Cómo añadir un nuevo canal de UV
Puedes añadir un nuevo canal de UV a tu recurso de malla estática llamando a cualquiera de los siguientes nodos:
- Add UV Channel - Añade el nuevo canal al final de la lista de canales existente.
- Insert UV Channel - Añade el nuevo canal en el índice que especifiques, desplazando cada canal de UV un número hacia abajo en la lista. Ten en cuenta que la matriz de canales de UV no puede ser escasa: solo puedes insertar un nuevo canal en una posición de la lista que esté al lado de otro canal existente. Por ejemplo, si hay tres canales de UV en la lista (los índices 0, 1 y 2), puedes añadir uno nuevo con el índice 3, pero no con el 4.
Haz clic en la imagen para verla a tamaño completo.
El nuevo mapeo está vacío. Antes de usarlo, deberás rellenarlo de alguna forma, ya sea proyectando la geometría de la malla (ver más abajo) o usándolo como destino para la generación de mapas de luz.
Cómo desenvolver la geometría de malla en un canal de UV
Puedes crear nuevas asignaciones de UV haciendo que el editor de mallas estáticas despliegue y aplane automáticamente los triángulos que componen tu geometría de malla estática. El área de la superficie de los triángulos se ajusta automáticamente para preservar la adyacencia de los triángulos vecinos, y las costuras se introducen en cualquier lugar donde el ángulo entre las superficies adyacentes cruce el umbral que establezcas.
Configuración del proyecto: Para usar el método de generación de canales de UV descrito a continuación, debes instalar el complemento Polygon Editing para tu proyecto de Unreal Engine.
Utiliza el nodo Generate Unwrapped UVs. Tendrás que darle a este nodo:
- Una referencia al recurso de malla estática que quieres modificar.
- El índice del canal de UV donde quieres que se guarde el UV desenvuelto. Si este canal aún no existe, se creará en el proceso de desenvoltura.
- El ángulo máximo entre dos caras adyacentes para que esas caras permanezcan conectadas después de desenvolver. Al aumentar este valor, se minimiza el número de «islas» de UV separadas, lo que mantiene más triángulos conectados a sus vecinos y reduce el número de costuras que pueden provocar rupturas en el asignación de texturas. Sin embargo, esto también puede introducir más distorsión en las texturas envolventes, ya que es posible que haya que cambiar el tamaño de los triángulos de forma más agresiva en el espacio 2D para seguir conectados con sus vecinos.
Por ejemplo:
Haz clic en la imagen para verla a tamaño completo.
Proyección de geometría de malla en un canal de UV
Puedes crear nuevos mapeos de UV proyectando los triángulos de la malla estática en un plano 2D o en un volumen 3D simple.
Cada uno de los nodos descritos a continuación guarda el mapeo de UV que crea en un canal de UV que especifiques. Este canal de UV ya debe existir; si no existe, la función no lo creará.
Proyección planar
Utiliza el nodo Generate Planar UV Channel para proyectar tu geometría de malla estática en un plano. Usa este tipo de proyección si solo necesitas que las texturas envuelvan un lado de la malla estática.
Por ejemplo:
Haz clic en la imagen para verla a tamaño completo.
Proyección cilíndrica
Utiliza el nodo Generate Cylindrical UV Channel para proyectar tu geometría de malla estática en los lados, la parte superior y la parte inferior de un cilindro.
Por ejemplo:
Haz clic en la imagen para verla a tamaño completo.
Proyección de caja
Utiliza el nodo Generate Box UV Channel para proyectar tu geometría de malla estática en las caras de un cubo.
Por ejemplo, la siguiente secuencia de comandos crea una caja con el mismo tamaño aproximado que la malla estática, y luego crea un nuevo mapeo de UV proyectando la geometría de la malla estática a los lados de la caja:
Haz clic en la imagen para verla a tamaño completo.
Las funciones de gestión del nivel de detalle se encuentran en la claseunreal.EditorStaticMeshLibrary.
Todas estas características funcionan con un recurso de malla estática que normalmente tendrás que cargar llamando a una función como unreal.EditorAssetLibrary.load_asset.
Al modificar los canales de UV, se modifica el recurso. Suponiendo que quieras mantener los cambios realizados, también tendrás que usar una función como unreal.EditorAssetLibrary.save_asset o unreal.EditorAssetLibrary.save_loaded_asset después.
Listado de canales de UV
Puedes utilizar la función unreal.EditorStaticMeshLibrary.get_num_uv_channels para averiguar cuántos canales de UV hay actualmente en un recurso de malla estática dado.
Por ejemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Obtiene el número de canales de UV guardados en el recurso.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Número de canales de UV: " + str(num_uv_channels))
Eliminación de un canal de UV
Cada canal de UV almacena las coordenadas de texturas de cada vértice como parte de la malla estática, por lo que podrías ahorrar memoria de tiempo de ejecución eliminando los mapeos que no uses.
Para eliminar un canal de UV, llama a la función unreal.EditorStaticMeshLibrary.remove_uv_channel. Pásale el recurso de malla estática y el índice del canal de UV que quieras eliminar.
Por ejemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Obtiene el número de canales de UV guardados en el recurso.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
# Elimina el último de la lista.
channel_to_remove = num_uv_channels - 1
unreal.EditorStaticMeshLibrary.remove_uv_channel(asset_name, channel_to_remove)
# Guarda el recurso modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
El resto de canales de UV que ya estaban presentes en la lista después de eliminar el índice especificado suben una posición para ocupar el espacio vacío que dejó la entrada eliminada.
No puedes eliminar un canal de UV si tu recurso de malla estática está configurado para generar UV de mapa de luz y el canal de UV que has seleccionado ya se está usando como canal de origen o de destino para los UV de mapa de luz. Desactiva la opción Ajustes de compilación > Generar UV de mapa de luz o cambia Ajustes de compilación > Índice de mapa de luz de origen y Ajustes de compilación > Índice de mapa de luz de destino para que apunten a distintos canales de UV.
Cómo añadir un nuevo canal de UV
Puedes añadir un nuevo canal de UV a tu recurso de malla estática llamando a cualquiera de las siguientes funciones:
unreal.EditorStaticMeshLibrary.add_uv_channel- Añade el nuevo canal al final de la lista de canales existente.unreal.EditorStaticMeshLibrary.insert_uv_channel- Añade el nuevo canal en el índice que especifiques, desplazando cada canal de UV un número hacia abajo en la lista. Ten en cuenta que la matriz de canales de UV no puede ser escasa: solo puedes insertar un nuevo canal en una posición de la lista que esté al lado de otro canal existente. Por ejemplo, si hay tres canales de UV en la lista (los índices 0, 1 y 2), puedes añadir uno nuevo con el índice 3, pero no con el 4.
Por ejemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Obtiene el número de canales de UV guardados en el recurso.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Número de canales de UV antes: " + str(num_uv_channels))
# Añade uno al final de la lista.
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
# Añade uno al principio de la lista.
unreal.EditorStaticMeshLibrary.insert_uv_channel(asset_name, 0)
# Obtiene el nuevo número de canales de UV guardados en el recurso.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
print("Número de canales de UV después: " + str(num_uv_channels))
# Guarda el recurso modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
El nuevo mapeo está vacío. Antes de usarlo, deberás rellenarlo de alguna forma, ya sea proyectando la geometría de la malla (ver más abajo) o usándolo como destino para la generación de mapas de luz.
Cómo desenvolver la geometría de malla en un canal de UV
Puedes crear nuevas asignaciones de UV haciendo que el editor de mallas estáticas despliegue y aplane automáticamente los triángulos que componen tu geometría de malla estática. El área de la superficie de los triángulos se ajusta automáticamente para preservar la adyacencia de los triángulos vecinos, y las costuras se introducen en cualquier lugar donde el ángulo entre las superficies adyacentes cruce el umbral que establezcas.
Configuración del proyecto: Para usar el método de generación de canales de UV descrito a continuación, debes instalar el complemento Polygon Editing para tu proyecto de Unreal Engine.
Utiliza la función unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs() . Pásale lo siguiente:
- Una referencia al recurso de malla estática que quieres modificar.
- El índice del canal de UV donde quieres que se guarde el UV desenvuelto. Si este canal aún no existe, se creará en el proceso de desenvoltura.
- El ángulo máximo, en grados, entre dos caras adyacentes para que esas caras permanezcan conectadas después de desenvolver. Al aumentar este valor, se minimiza el número de «islas» de UV separadas, lo que mantiene más triángulos conectados a sus vecinos y reduce el número de costuras que pueden provocar rupturas en el asignación de texturas. Sin embargo, esto también puede introducir más distorsión en las texturas envolventes, ya que es posible que haya que cambiar el tamaño de los triángulos de forma más agresiva en el espacio 2D para seguir conectados con sus vecinos.
Por ejemplo:
import unreal
asset_name = '/Game/Meshes/StaticMesh'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifica el canal de UV en el que quieras guardarla.
channel_index = 2
# Define el umbral de ángulo
angle_threshold = 55
# Desenvuelve la malla en el canal de UV
unreal.UVGenerationFlattenMapping.generate_flatten_mapping_u_vs(loaded_asset, channel_index, angle_threshold)
# Guarda el recurso modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Proyección de geometría de malla en un canal de UV
Puedes crear nuevos mapeos de UV proyectando los triángulos de la malla estática en un plano 2D o en un volumen 3D simple.
De momento, solo está presente en las API de secuenciación de Unreal Editor, no en la interfaz del editor de mallas estáticas. Sin embargo, el proceso y los ajustes necesarios para la API son más fáciles de entender si ya tienes conocimientos de las herramientas visuales para la proyección de mallas, como las de 3ds Max. Para obtener más información, consulta Modificador de mapas UVW en la ayuda de 3ds Max.
Cada una de las funciones descritas a continuación guarda el mapeo de UV que crea en un canal de UV que especifiques. Este canal de UV ya debe existir; si no existe, la función no lo creará.
Proyección planar
Utiliza la función unreal.EditorStaticMeshLibrary.generate_planar_uv_channel para proyectar tu geometría de malla estática en un plano. Usa este tipo de proyección si solo necesitas que las texturas envuelvan un lado de la malla estática.
Por ejemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifica el nivel de LOD para proyectar.
lod_index = 0
# Añade un nuevo canal de UV para nuestra proyección.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Configura el plano de proyección o «gizmo».
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Calcula el centro de la caja delimitadora del objeto.
# Define los ángulos de rotación en grados.
pitch = 0 # Alrededor del eje X
yaw = 0 # Alrededor del eje Y
roll = 0 # Alrededor del eje Z
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Aumenta o reduce los valores para hacer que la proyección sea mayor o menor.
tiling = unreal.Vector2D(1, 1)
# Proyecta la geometría de la malla estática en el canal de UV.
unreal.EditorStaticMeshLibrary.generate_planar_uv_channel(loaded_asset, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
# Guarda el recurso modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Proyección cilíndrica
Utiliza la función unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel para proyectar tu geometría de malla estática en los lados, la parte superior y la parte inferior de un cilindro.
Por ejemplo:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifica el nivel de LOD para proyectar.
lod_index = 0
# Añade un nuevo canal de UV para nuestra proyección.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Configura el cilindro de proyección o «gizmo».
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Calcula el centro de la caja delimitadora del objeto.
# Define los ángulos de rotación en grados.
pitch = 0 # Alrededor del eje X
yaw = 0 # Alrededor del eje Y
roll = 0 # Alrededor del eje Z
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Aumenta o reduce los valores para hacer que la proyección sea mayor o menor.
tiling = unreal.Vector2D(1, 1)
# Proyecta la geometría de la malla estática en el canal de UV.
unreal.EditorStaticMeshLibrary.generate_cylindrical_uv_channel(teapot, lod_index, channel_index, gizmo_pos, gizmo_orientation, tiling)
# Guarda el recurso modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)
Proyección de caja
Utiliza la función unreal.EditorStaticMeshLibrary.generate_box_uv_channel para proyectar tu geometría de malla estática en las caras de un cubo.
Por ejemplo, la siguiente secuencia de comandos crea una caja con el mismo tamaño aproximado que la malla estática, y luego crea un nuevo mapeo de UV proyectando la geometría de la malla estática a los lados de la caja:
import unreal
asset_name = '/Game/Path/MyStaticMeshAsset'
# Carga el recurso de malla estática.
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
# Especifica el nivel de LOD para proyectar.
lod_index = 0
# Añade un nuevo canal de UV para nuestra proyección.
num_uv_channels = unreal.EditorStaticMeshLibrary.get_num_uv_channels(asset_name)
unreal.EditorStaticMeshLibrary.add_uv_channel(asset_name)
channel_index = num_uv_channels
# Configura el volumen de proyección o «gizmo».
bbox = loaded_asset.get_bounding_box()
gizmo_pos = ((bbox.min + bbox.max) * 0.5) # Calcula el centro de la caja delimitadora del objeto.
# Define los ángulos de rotación en grados.
pitch = 0 # Alrededor del eje X
yaw = 0 # Alrededor del eje Y
roll = 0 # Alrededor del eje Z
gizmo_orientation = unreal.Rotator(pitch, yaw, roll)
# Obtiene el de tamaño de la caja.
gizmo_size = bbox.max - bbox.min
# Proyecta la geometría de la malla estática en el canal de UV.
unreal.EditorStaticMeshLibrary.generate_box_uv_channel(box, channel_index, lod_index, gizmo_pos, gizmo_orientation, gizmo_size)
# Guarda el recurso modificado.
unreal.EditorAssetLibrary.save_asset(asset_name)