Modelado de procedimientos con guión de MEL en maya - Día 1

Este tutorial presenta las emocionantes posibilidades para modelar usando el lenguaje de script MEL de Maya. En esta primera parte, aprenderemos los conceptos básicos de los comandos MEL y crearemos dos scripts de modelos de procedimientos que podrían ser útiles en sus propios flujos de trabajo..

Mirando bajo el capó

El Maya Embedded Language (o MEL) es la estructura de comando que Maya utiliza para crear casi todo lo que ves en la pantalla. Cada vez que creas un objeto o mueves un vértice, se llama un comando MEL para hacer que esa acción suceda. Incluso todas las ventanas, estantes, pestañas, menús y editores se generan y organizan mediante scripts de MEL. Si lo desea, puede reconstruir completamente la interfaz de Maya usando nada más que MEL, haciendo del lenguaje de scripting una herramienta increíblemente poderosa para tener como artista. Si puede usar scripts para automatizar las partes de su trabajo que más tiempo consumen, puede dedicar mucho más tiempo a que su trabajo se destaque..

El mejor lugar para aprender acerca de los comandos específicos de MEL es en la sección de Documentación Técnica de Maya Docs, y la mejor manera de familiarizarse con los conceptos detrás de MEL es verlos en acción. Vamos a profundizar en el sistema y comenzar con nuestro primer script.


Script One

El primer guión creará un tubo cuadrado con los lados planos alineados en los ejes X y Z. Ejecutaremos la creación del script y haremos un botón de estante para acceder a él..


Paso 1

Escribe tu Pseudo-código.

El pseudocódigo es una forma simple de una secuencia de comandos en inglés, con cada paso importante enumerado. Cuando comienzas a trabajar en scripts complejos, es muy importante delinear tus scripts antes de comenzar. Para nosotros, el pseudocódigo podría verse así:

 Crear tubería poligonal de cuatro lados Girar 45 grados en Y Mover para sentarse en el plano del suelo Mover el punto de pivote al origen Congelar las transformaciones

Paso 2

Abra el editor de secuencias de comandos haciendo clic en el botón en la parte inferior derecha de la ventana principal de Maya.

Dentro del editor de scripts, hay dos paneles principales, el panel de estado de arriba y la ventana de MEL / Python a continuación. Asegúrese de que la pestaña MEL está seleccionada.


Paso 3

Dibuja una primitiva "pipa" en la escena maya.

Debería ver algo similar a esto en el panel de estado de la ventana del editor de secuencias de comandos:

 polyPipe -ch en -o en -r 2.958298 -h 2.434319 -t 0.9; // Resultado: pPipe1 polyPipe1 //

Etapa 4

Copie y pegue el comando polyPipe desde la línea de estado en el Editor de secuencias de comandos.

Debería obtener un duplicado exacto del primer polyPipe, esta vez ubicado exactamente en el origen.


Paso 5: Romper el código

El comando polyPipe que acaba de usar es uno de los miles de comandos MEL disponibles para usted. Su estructura (lo que los programadores llaman sintaxis) es prácticamente la misma para cada comando:

 melCommand -flag value -flag2 value targetObject;

La primera parte es el comando en sí mismo, y los indicadores (indicados por el carácter de guión) definen ciertos atributos del comando. Los comandos que manipulan objetos que ya existen a menudo requieren un objetivo, que le dice al comando qué objeto cambiar. Cada comando también requiere un punto y coma, que marca el final del comando.

En el ejemplo de polyPipe, las tres banderas a continuación definen el radio, la altura y el grosor del tubo creado.

 -r 3.162278 -h 3.514619 -t 0.8

Revisaremos otras banderas en detalle más adelante en el tutorial, cuando armemos el script.

El flujo de trabajo de modelado de procedimientos en MEL es esencialmente un ingenioso encadenamiento de comandos que crean o manipulan la geometría en Maya..


Paso 6

Elimine el conducto original y seleccione el que acaba de crear con el comando MEL.


Paso 7

Establezca el número de subdivisiones del eje en cuatro y elija algunos números enteros “agradables” para la altura, el radio y la profundidad. Cambiaremos esto más adelante, y harán el ejemplo más fácil..

Estas configuraciones se pueden ajustar con el comando polyPipe en el momento en que se crea el objeto utilizando indicadores, por lo que no se preocupe por lo que le proporciona el editor de scripts..


Paso 8

Gira el objeto en el eje Y en 45 grados

Si gira el objeto a mano, el resultado en el editor de secuencias de comandos debería ser algo como esto:

 gire -r -os 0 -45 0;

Si gira el objeto escribiendo el valor de rotación, el resultado será:

 setAttr "pPipe3.rotateY" 45;

Por ahora, usaremos el comando de rotación en nuestro script. En tutoriales posteriores, usaremos setAttr para trabajar con atributos de objetos específicos.


Paso 9

Mueva el tubo de modo que quede sentado en el plano de la cuadrícula.

Si mueve el objeto a mano, el código en el editor de secuencias de comandos debe ser:

 mover -r 0 1 0;

Si mueves el objeto escribiendo el valor de y:

 setAttr "pPipe3.translateY" 1;

De nuevo, usaremos el comando de mover en lugar de setAttr.


Paso 10

Presione “insertar” y mueva el pivote del tubo hacia abajo hasta el origen.

Esto le permitirá escalar fácilmente la tubería desde un plano de tierra. Este es el código que obtengo en el editor de scripts:

 mover 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;

Tenga en cuenta que el código aquí tiene dos objetivos: polyPipe3.rotatePivot y polyPipe3.scalePivot. Esto significa que el código solo se puede usar cuando el objeto en cuestión se llama polyPipe3. En tutoriales posteriores, abordaremos este problema mediante el uso de variables, pero por ahora, lo solucionaremos mediante un comando diferente que haga lo mismo:

 xform -a -rotatePivot 0 0 0 -scalePivot 0 0 0;

Paso 11

Congele las transformaciones en el objeto yendo al menú de modificación y seleccionando Congelar transformaciones.

El código en el editor de script:

 makeIdentity -aplica true -t 1 -r 1 -s 1 -n 0;

makeIdentity es una forma de congelar las transformaciones, pero no es un comando con un nombre muy intuitivo. Maya tiene bastantes scripts incorporados que automatizan ciertos procesos, incluida la congelación de transformaciones..


Paso 12: Vamos a intentarlo de nuevo ...

En el editor de scripts, vaya a Historial y active Echo All Commands. Esto obliga al editor de scripts a "hacer eco" o mostrar todos los comandos que ejecuta maya, incluso si el usuario no los activó activamente.


Paso 13

Vuelva a congelar las transformaciones y observe el resultado del editor de scripts. Verás el siguiente código:

 FreezeTransformations; makeIdentity -aplica true -t 1 -r 1 -s 1 -n 0;

FreezeTransformations es un script auxiliar de maya, un "comando de tiempo de ejecución" que llama a makeIdentity. A diferencia de los comandos mayas normales, los comandos de tiempo de ejecución generalmente comienzan con letras mayúsculas. Tenga cuidado al usar estos comandos dentro de su código, ya que es posible que no sean compatibles de la misma manera en todas las instalaciones de Maya. Para FreezeTransformations, el inconveniente es que el comando toma los valores que se configuran en el cuadro de diálogo Opciones de Transformación de Congelación, que pueden configurarse de manera diferente dependiendo de la última vez que lo usó. Rara vez cambio la configuración de la predeterminada, por lo que me siento cómodo utilizando FreezeTransformations y otros scripts de ayuda. Esta es una preferencia personal, pero creo que la conveniencia de usar comandos de tiempo de ejecución excede el riesgo de que un script pueda romperse. Sin embargo, es importante comprender que en los scripts complejos, los comandos de tiempo de ejecución pueden causar problemas, y el uso de cualquier script que se base en los cuadros de diálogo de maya es una mala práctica si planea entregar el script a otra persona. Dicho esto, usar Echo All Commands es una buena manera de encontrar los scripts y comandos en segundo plano que no se encuentran en la Documentación técnica..


Paso 14: Poniendo todo junto

Hasta ahora, hemos pasado por cinco comandos que se pueden unir para crear nuestro objeto. Alineamos esos comandos con nuestro pseudo-código, y echemos un vistazo a las banderas específicas de cada uno. Cada bandera tiene dos "modos", un nombre largo y una taquigrafía. Típicamente, la taquigrafía tiene solo una o dos letras. Personalmente, prefiero usar la taquigrafía siempre que sea posible, pero usar el nombre completo puede ser útil para los principiantes y hace que su código sea más legible para quienes no escriben. Vamos a desglosar los comandos:

 // Crear una tubería poligonal de cuatro lados (una barra diagonal doble denota un comentario en el código, que MEL ignora) polyPipe -r 3 -h 4 -t 1 -sa 4;

Banderas relevantes:

  • -El radio (-r) define el radio del tubo.
  • -altura (-h) define la altura y
  • -espesor (-t) define el grosor del tubo de poli, medido desde el borde exterior del radio hacia adentro
  • -subdivisionsAxis (-sa) define cuántos lados tiene polyPipe
 // Girar 45 grados en Y rotar -r -y 45;

Banderas relevantes:

  • -relativo (-r) gira el objeto en relación con su posición actual
  • -rotateY (-y) establece la rotación en el eje y
 // Mover para sentarse en el plano de tierra mover -r 0 1 0;

Banderas relevantes:

  • -relativo (-r) mueve el objeto en relación con su posición actual

El comando de movimiento aquí usa una sintaxis ligeramente diferente del comando de rotación. 0 1 0 es la abreviatura de traducir 0 en x, traducir 1 en y y traducir 0 en z. MEL es un lenguaje muy flexible y, a menudo, tiene más de una forma de hacer exactamente lo mismo. En este caso, también podríamos haber hecho:

 // Mover para sentarse en el plano de tierra mover -r -y 1;

La elección es suya, y una gran parte de las secuencias de comandos es desarrollar sus propias preferencias y estilos..

 // Mover el punto de pivote al origen xform -ws -rp 0 0 0 -sp 0 0 0;

Banderas relevantes:

  • -worldSpace (-ws) se mueve a una posición absoluta en el espacio-mundo
  • -rotationPivots (-rp) mueve los pivotes de rotación en las direcciones x, y y z
  • -scalePivots (-sp) mueve los pivotes de escala en las direcciones x, y y z

xform tiene una gran cantidad de banderas y puede usarse para una gran cantidad de funciones. Definitivamente veremos este nuevo en futuros tutoriales..
// congelar las transformaciones del objeto
FreezeTransformations;


Paso 15

Ponga todos los comandos en el editor de secuencias de comandos. Esto es lo que deberías tener:


Paso 16

Resalte el código en el editor de secuencias de comandos, y el botón central del mouse arrastra la secuencia de comandos al estante de los 'polígonos'. Esto creará un icono de estante personalizado con su script asociado a él. Cada vez que haga clic en ese botón, el script se ejecutará.


Paso 17

Para agregar una etiqueta personalizada al botón del estante, acceda al editor de estantes haciendo clic y manteniendo presionada la flecha hacia abajo en el extremo izquierdo de la ventana. Dentro del Editor de estantes, encuentre el botón que acaba de crear y agregue una etiqueta y el nombre del icono. El nombre del ícono generalmente debe tener menos de cinco caracteres. ¡Felicidades! Ya ha completado su primer script de modelado basado en MEL.


Script 2

Ahora que hemos aprendido las cuerdas, veamos otro ejemplo similar. Aquí aplicaremos lo que ya hemos aprendido y crearemos un modelo básico de "cubo redondeado".


Paso 1

Escribe tu Pseudo-código.

 Crear un cubo de polígono Mover para sentarse en el plano del suelo Mover el punto de pivote al origen Congelar las transformaciones seleccionar todos los bordes del objeto bordes cónicos con tres divisiones

Paso 2

Crear el comando cubo de polígono.

 // crea un cubo polyCube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1;

Banderas relevantes:

  • -ancho (-w)
  • -altura (-w)
  • -profundidad (-w)
  • -subdivisionesX (-sx)
  • -subdivisionesY (-sy)
  • -subdivisionesZ (-sz)

Paso 3

Cree los comandos "mover al plano de tierra", "mover pivotes" y "congelar transformaciones", como en el script anterior.

 // mover el cubo mover -r 0 2 0; // Mover el punto de pivote al origen xform -ws -rp 0 0 0 -sp 0 0 0; // congelar FreezeTransformations;

Etapa 4

Utilice un comando para seleccionar todos los bordes del cubo. Hay un par de maneras en las que podrías hacer esto. Dado que el objeto ya está seleccionado cuando MEL lo genera, me gusta usar uno de los scripts de ayuda de Maya para hacer esto.

 // seleccionar bordes ConvertSelectionToEdges;

Paso 5

Use un comando de bisel para crear nuevos bordes en su cubo.

 // biselado polyBevel -oaf 1 -o .2 -sg 3 -fn 1 -mv 1 -sa 180;

Banderas relevantes:

  • -offsetAsFraction (-oaf) cuando es verdadero, la cantidad de bisel se determinará por una fracción de la longitud de los bordes adyacentes.
  • -offset (-o) determina la cantidad de biselado a agregar
  • -segmentos (-sg) el número de bordes para agregar a los bordes biselados
  • -fillNgon (-fn) cuando sea verdadero, subdividirá las esquinas donde el bisel crea caras de n lados
  • -mergeVertices (-mv) cuando es verdadero, fusionará los vértices creados de las caras llenas de n lados
  • -smoothingAngle (-sa) Determina en qué ángulo debe endurecerse el bisel normal

Paso 6

Ponlo todo junto:

 polyCube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1; mueve -r 0 2 0; xform -ws -rp 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; polyBevel -oaf 1 -o .2 -sg 3 -fn 1 -mv 1 -sa 180;

Paso 7

Crea el ícono de tu estante, renómbrelo y listo.!