Blender parece hecho a medida para crear modelos 3D que luego se usen en juegos y aplicaciones desarrollados en Unity 3D. Blender ofrece un enorme abanico de opciones para creación, modelado, renderizado y animación en 3D. La creación de modelos para Unity requiere usar un subconjunto de funciones de Blender. Gracias a la excelente organización del entorno Blender (versiones 2.5 en adelante) resulta muy fácil acostumbrarse a localizar las funciones necesarias e ignorar el resto. En este artículo se detallan las particularidades a tener en cuenta para que los modelos creados en Blender resulten tal como se esperan en Unity 3D.
Para aprender a usar Blender desde el principio es necesario seguir primero el artículo Blender para programadores: inicio rápido.
ACTUALIZACIÓN: Usando este importador de Blender en Unity se pueden modelar y estructurar los objetos normalmente en Blender, sin necesidad de tener en cuenta equivalencias de ejes ni consideraciones especiales en orientación, posición o escala. |
Equivalencia de ejes
Forward es eje “frontal” de los objetos. Por ejemplo, un coche se orienta con la parte delantera hacia el eje forward, +Z en Unity. En Blender forward debe orientarse hacia el eje -Y, y de esta forma al importar en Unity el objeto “mirará” correctamente hacia +Z.
Blender >> | >> Unity 3D | |
---|---|---|
Forward | -Y | Z |
Up | Z | Y |
Right | -X | X |
Orientación
En Blender un objeto de primer nivel de la jerarquía en su orientación original debe tener una rotación de +90º en el eje X pero la malla estar en su posición natural (Z arriba). De esta forma, al importarse en Unity el objeto recibirá rotación 0, 0, 0.
Aplicar rotación de malla X+90:
- En Modo Objeto seleccionar sólo el objeto requerido. Asegurarse que el Pivot Point está configurado en 3D Cursor.
- Shift-S, escoger Cursor To Selected.
- Establecer modo Edición (TAB) y seleccionar todos los vértices (A).
- Rotar los vértices -90º en el eje X. Se consigue pulsando R, entonces X, escribir -90 y pulsar return.
- Volver a modo Objeto (TAB).
- Rotar el objeto 90º en el eje X. Se consigue pulsando R, entonces X, escribir 90 y pulsar return.
Tras los pasos 1 y 2 todo el proceso se puede hacer con la siguiente secuencia de teclas:
TAB, A, R, X, -90, return, TAB, R, X, 90, return.
- Los objetos hijos sólo requieren la rotación de los vértices (pasos 1 a 4) para mantener la coherencia con el padre.
- En el resto de indicaciones del artículo se asume que todos los objetos de primer nivel tienen aplicado este proceso.
Posición
Los objetos de primer nivel en la jerarquía posicionados en Blender cogen las mismas coordenadas al llegar a Unity, sólo que se asignan a los ejes correspondientes según la Equivalencia de ejes anterior.
Los objetos hijos cogen las posiciones locales según la siguiente equivalencia de ejes:
Blender >> | >> Unity 3D | |
---|---|---|
Forward | +Z | +Z |
Up | +Y | +Y |
Right | -X | +X |
Escala
Los valores de escala X, Y, Z se transmiten tal cual a Unity, en los mismos ejes. Si el objeto ya tiene la orientación X+90º en Blender entonces los efectos de la escala son idénticos en Blender y en Unity. Por ejemplo, escala Y=2.0 duplica la altura (eje vertical) en ambos entornos.
Rotación
Los objetos siempre van a quedar en apariencia igual entre Blender y Unity. Si va a ser necesario moverlos o rotarlos en Unity entonces los objetos de primer nivel deben tener aplicado el ajuste de rotación X+90º para poder aplicar rotaciones coherentes.
Conversión de ángulos Euler en objetos de primer nivel en la jerarquía:
Eje | Blender | Unity 3D | Efecto |
---|---|---|---|
Up | -Z | +Y | Giro en sentido de las agujas del reloj visto desde arriba |
Forward | +Y | +Z | Balanceo hacia la izquierda visto desde atrás hacia forward |
Right | 90+X | +X | Inclinación hacia abajo mirando hacia forward |
Conversión de ángulos Euler en objetos hijos:
Eje | Blender | Unity 3D | Efecto |
---|---|---|---|
Up | -Y | +Y | Giro en sentido de las agujas del reloj visto desde arriba |
Forward | -Z | +Z | Balanceo hacia la izquierda visto desde atrás hacia forward |
Right | +X | +X | Inclinación hacia abajo mirando hacia forward |
Centro local (Origen)
Usar el cursor 3D para fijar el origen en la posición deseada:
- Shift-S – Cursor to… En modo Objeto se puede posicionar en el centro de la geometría del objeto (Cursor to Active). En modo Edición se puede seleccionar una porción de geometría relevante y posicionar el cursor en su centro (Cursor to Selected)
- Posición numérica en la barra de opciones (N), View > 3D Cursor Location.
Jerarquía
La jerarquía de objetos se traslada a Unity tal cual esté establecida en la ventana Outliner de Blender:
Animaciones
Si no se utilizan NO se deben importar en Unity. Es necesario desactivar la importación de animaciones en el importador de Unity o borrar / desactivar el componente Animation una vez instanciado el objeto. La animación por defecto restablece la escala del objeto, con lo que anula cualquier escala que se haya aplicado en Unity.
Nombres
Blender | Unity 3D |
---|---|
Nombre del fichero .blend | Nombre del objeto root |
Nombre del nodo en la ventana Outliner | Nombre del objeto |
Nombre del material | Fichero de material en la carpeta Materials* |
- El nombre del material depende de la configuración del importer de Unity. Los espacios en el nombre se sustituyen por subrayados (_). Si ya existe un fichero de material con el mismo nombre, se reutiliza. Si no existe se crea.
Modificadores
Quedan aplicados los modificadores de malla que estén activos ( realtime display) y en la ordenación que tengan. El resultado en Unity es idéntico a lo que se vea en Blender. Bevel, Subdivision Surface, Mirror, Boolean, Edge Split….
Suavizado y bordes (Smooth)
Por defecto todos los objetos se importan a Unity en modo “Smooth” (suavizado). En este modo cada vértice tiene una única normal. Se puede previsualizar el resultado en Blender en modo Objeto > barra de herramientas (T) > Shading: Smooth. Este ajuste smooth – flat no afecta al resultado en Unity, que siempre queda suavizado (smooth). Para definir bordes duros se añade a la malla el modificador Edge Split. Permite indicar un ángulo de suavizado para toda la malla, y/o definir explícitamente las aristas que serán siempre “duras”.
- Suavizado por ángulo: activar Edge Angle en las opciones del modificador e indicar el ángulo máximo de suavizado. Las aristas cuyas caras forman un ángulo mayor que el dado se consideran “duras”.
- Suavizado explícito: activar Sharp Edges en las opciones del modificador. En modo Edición seleccionar las aristas duras, entonces pulsar Ctrl-E (Edge Options) y marcar como duras (Mark Sharp). Las aristas duras quedan resaltadas en la malla. Para volverlas al estado normal (smooth) seleccionarlas de nuevo y entonces Ctrl-E -> Clear Sharp.
El resultado del suavizado se muestra en tiempo real en modo Objeto (debe estar establecido el modo Shading: Smooth en la barra de herramientas – T).
Texturas / UV maps
El objeto debe tener un UV Texture en los datos del objeto (Object Data). Dos UV Texture para dos canales UV. No influyen Material ni Textures. El UV Texture seleccionado se edita en la ventana UV/Image Editor (modo Edición).
Un canal UV (UV Texture) es un conjunto de coordenadas UV para toda la malla 3D. El canal contiene una coordenada UV por cada vértice de cada cara. Las coordenadas se editan en modo Edición. Al seleccionar caras en el modelo 3D sus vértices UV correspondientes para el canal UV seleccionado aparecen en el UV/Image Editor. Seleccionar un canal UV diferente en Object Data muestra los vértices UV para las caras seleccionadas en ese canal UV. Sólo se editan las coordenadas UV en el canal seleccionado en ese momento.
La ventana 3D muestra el efecto sobre el modelo 3D configurando el sombreado como Textured.
UV/Image Editor
En el editor de UV aparecen las coordenadas UV sobre la imagen asignada a las caras seleccionadas, o sólo la cuadrícula de fondo si la selección de caras no tiene imagen asignada.
- Menú Image -> Open para asignar una nueva imagen a las caras seleccionadas.
- Sección Image en la barra de herramientas para cambiar o desasignar la imagen.
Efecto en Unity
Unity importa hasta dos canales UV, primario y secundario. Se pueden invertir desde el propio Unity configurando “Swap UVs” en el importador. Cada imagen única asignada a las caras de un objeto genera un submesh en la malla, así como un material propio con el nombre de la imagen. Las caras sin imagen asignada reciben el material por defecto. El objeto en Unity tendrá tantos “slots” para materiales como imágenes se hayan asignado, más otro con el material por defecto en caso de que haya caras sin imagen asignada. Las imágenes usadas en Blender no se trasladan a Unity, ni aunque los ficheros de imagen estén incluidos dentro del fichero .blend. Unity espera encontrar los ficheros en una subcarpeta Textures al alcance del fichero .blend.
Nota: La opción Swap UVs del importador de Unity se aplica a todos los objetos dentro del fichero .blend. Si es necesario intercambiar los UVs de un objeto en concreto, se hace en Blender en UV Texture. No hay opción de cambiar el orden. Con el primer UV seleccionado, al dar a + se duplica éste en la última posición. Ahora basta borrar (-) el primero y ya están intercambiados.
Excelente artículo, claro y bien construido
Genial para dar un primer vistazo al flujo de trabajo entre estos dos hermanos, me anima a aprender un poco mas.
Recomendado!
Genial. Con 3 sencillos pasos (descargar, copiar, y renombrar) podremos olvidarnos del problema de equivalencias de ejes en todos los modelos que importemos desde Blender. !Y de una tacada! Muchas gracias por tu trabajo.