Animación esquelética, cinemática directa e inversa. Cinemática inversa (solo para versiones Pro)

En la lección anterior aprendimos sobre el método cinemático directo, en el que las relaciones jerárquicas se transmiten de antepasados ​​a descendientes. Esto lleva al hecho de que los objetos secundarios heredan total o parcialmente el comportamiento de los objetos principales y al mismo tiempo no tienen ninguna influencia sobre ellos. Este tipo de vinculación jerárquica facilita la animación de objetos que constan de una gran cantidad de elementos, siempre que a todos los elementos del objeto se les asignen las mismas transformaciones. Sin embargo, no ayudará cuando el movimiento de un elemento deba afectar a todos los demás elementos asociados dentro de un objeto complejo, teniendo en cuenta su posición en la cadena jerárquica, así como sus propiedades. Este comportamiento se simula utilizando cinemática inversa o, como se suele decir, cinemática inversa (Cinemática inversa), ejemplos sencillos de cuyo uso veremos en esta lección.

Aspectos teóricos

El concepto de cinemática inversa.

La cinemática inversa se diferencia de la cinemática directa por un principio de herencia diferente. Si con la cinemática directa la transformación de los descendientes está determinada por la transformación de sus antepasados, entonces con la cinemática inversa los descendientes ponen en movimiento los objetos padres, es decir, el programa calcula la posición y orientación de los objetos padres en función de la posición y orientación. del niño transformado. Un descendiente que provoca transformaciones de otros objetos de acuerdo con las leyes de la cinemática inversa se llama efector ( Efector), si está ubicado en el medio de una rama jerárquica separada, o un efector final ( FinEfector) si es el objeto final de esta rama. Toda la cadena jerárquica se manipula a través del efector. En este caso, la transformación del efector final asegura la transformación de todos los objetos de la rama jerárquica de acuerdo con las leyes de la cinemática inversa, y la transformación solo del efector conduce al hecho de que la posición de los objetos inferiores en la jerarquía cambia según a las leyes de la cinemática directa y a los objetos con una jerarquía superior, según las leyes de la cinemática inversa.

Para ver esto, crea una escena simple con una especie de maza modelada a partir del primitivo hedra, diez toros y un cilindro con bases biseladas (Fig. 1). Vincular objetos con herramienta SeleccionaryEnlace(Seleccionar y vincular) alejándose del objeto hedra 01 para oponerse ChaflánCil 01 - como resultado, el cilindro resultará ser un objeto raíz (Fig. 2). Seleccione el cilindro y muévalo hacia la izquierda; todos los demás objetos que sean hijos de él se moverán junto con él. Mientras que el movimiento de uno de los tori ubicado en el medio de la cadena conducirá al movimiento de solo los objetos de la cadena que son sus hijos, mientras que los objetos ubicados encima de él en la jerarquía permanecerán en su lugar (Fig.3) . Regrese a la posición original de los objetos y active el modo cinemática inversa abriendo en el panel Jerarquía marcador ik y haciendo clic en el botón Interactivoik, que conviene resaltar (Fig. 4). Guarde la escena de trabajo en un archivo y repita las mismas operaciones moviendo el cilindro y el toroide: mover el primer objeto dará los mismos resultados que antes, pero cambiar la posición del toroide provocará los cambios correspondientes en la posición de todos los demás. (y no solo los niños en relación con él), incluido el objeto Raíz (Fig. 5). En este caso, la posición de los objetos ubicados en la jerarquía debajo del toro movido (en este caso desempeña el papel de simplemente un efector) cambiará de acuerdo con las leyes de la cinemática directa, y los objetos con una jerarquía superior, de acuerdo con las leyes. de cinemática inversa.

Controlar la rotación y el movimiento de los objetos.

Regrese a la escena de trabajo guardada, seleccione el objeto hedra 01 y muévelo, observando todos los objetos de la cadena jerárquica, y te convencerás de la total falta de control sobre ellos, ya que la posición y orientación de estos últimos cambian de la forma más impredecible (Fig. 6). Esto se debe a que, por defecto, se permite cualquier tipo de movimiento y rotación para los objetos controlados por el efector. En la práctica, la mayoría de las veces, los objetos conectados sólo se pueden transformar de cierta manera, lo que significa que todas las demás opciones de transformación están prohibidas para ellos.

Durante la cinemática inversa, este aspecto se regula principalmente a través de parámetros de articulación, que permiten determinar sobre qué ejes y dentro de qué límites ( RotacionalArticulacións) y/o mover ( CorredizoArticulacións) uno u otro objeto hijo en relación con el padre. En otras palabras, los parámetros de unión especifican la naturaleza de la transformación de la conexión (o, como se suele decir, una unión o unión) entre los objetos hijo y padre. Estos parámetros se configuran en la pestaña ik paneles Jerarquía, sin embargo, de forma predeterminada solo están disponibles los parámetros que son responsables de limitar la rotación de objetos en la cadena jerárquica ( RotacionalArticulacións). Capacidad para gestionar objetos utilizando parámetros. CorredizoArticulacións aparecerá sólo después de asignarle un controlador IK especializado. Esto último se hace a través del menú. Animación=>ikSolucionadores(Animación=>soluciones IK), que implica asignar uno de los siguientes controladores IK a los objetos:

  • HOLAsolucionador (HistoriaIndependientesolucionador) - controlador históricamente independiente (considerado el más universal para la animación de personajes);
  • alta definiciónsolucionador (HistoriaDependientesolucionador) - controlador históricamente dependiente;
  • ikMiembrosolucionador- controlador para la animación de las extremidades (diseñado para sólo dos objetos de la cadena jerárquica);
  • Ranuraiksolucionador- controlador de tiras.

Estos controladores no solo brindan acceso a los parámetros CorredizoArticulacións, pero también ofrecen muchas posibilidades debido al hecho de que transforman secuencias jerárquicas ordinarias en las llamadas cadenas cinemáticas inversas ( ikCadena), que son objetos de control no visualizados que simplifican la gestión de elementos jerárquicos según las leyes de la cinemática inversa. Externamente, en las ventanas de proyección, los circuitos IK aparecen como una serie de puntos de mira y líneas que conectan el principio y el final de un circuito IK en particular. Estos elementos se seleccionan de la forma habitual (haciendo clic en la cruz o usando el SeleccionarporNombre), pero no se editan a través del panel Modificar(como otros objetos), y a través del panel Movimiento. Independientemente del tipo de controlador, los circuitos IK se crean de la misma manera: se selecciona el primer elemento del circuito propuesto, luego se le asigna un controlador IK y se especifica el último elemento de la cadena. La diferencia entre los controladores IK radica en el uso de diferentes métodos para convertir cadenas IK al calcular soluciones IK.

Para que las cadenas IK simplifiquen la gestión de los elementos jerárquicos, cree un modelo simplificado de la pierna (muslo y parte inferior de la pierna con pie) - Fig. 7. Enlazarlos en una cadena jerárquica, comenzando este proceso desde abajo, de modo que al final el cilindro superior (es decir, el muslo) se convierta en el objeto Raíz. Active el modo de cinemática inversa e intente mover el pie hacia la izquierda; el resultado no será el mismo que se puede observar al caminar, ya que incluso con un pequeño movimiento los giros de las articulaciones serán demasiado grandes (Fig. 8). Ahora cree un objeto ficticio adicional en la parte superior del muslo e inclúyalo en la jerarquía como objeto raíz. Seleccione un objeto ficticio y asigne un controlador al circuito. HOLAsolucionador usando el comando Animación=>ikSolucionadores=>HOLAsolucionador y especificando el pie como efector final, cuando se realiza esta acción, una línea de puntos se extenderá detrás del cursor del mouse (Fig. 9). Esto creará una cadena cinemática inversa con el controlador IK, que se indicará mediante la aparición de una línea que se extiende desde la parte superior del muslo hasta el pie y una cruz (este es el llamado objeto objetivo ikMeta) en el punto de referencia efector (Fig. 10). Si mueve la mira, verá que la pierna se mueve, se dobla y gira de modo que el punto de referencia del pie siempre está en el centro de la mira, pero el pie en sí no se mueve con respecto a la parte inferior de la pierna (Fig. 11). ). Intenta animar un movimiento similar haciendo clic en un botón. AutoLlave, activando el cuadro 50, arrastrando la mira un poco hacia atrás y luego, en el cuadro 100, devolviéndola a su posición original y desactivando el modo de generación automática de claves. Reproduzca la animación y verá una simulación de caminar extremadamente simplificada (Fig. 12). Por supuesto, el camino real aún está lejos, pero por ahora nos limitaremos a esto y volveremos a este tema en una de las próximas lecciones, cuando hablemos de construir una jerarquía usando Huesos.

Volvamos a la escena de trabajo con la maza guardada en el disco e intentemos experimentar un poco configurando los parámetros de la articulación. Seleccione el objeto raíz del menú. Animación=>ikSolucionadores(Animación=>Soluciones IK) seleccione comando alta definiciónsolucionador y apunte el mouse al efector final (es decir, el objeto hedra 01). Seleccione un objeto hedra 01, muévelo de nuevo en una de las direcciones y verás que el resultado es mucho más realista (Fig. 13). Seleccione un objeto ChaflánCil 01 y abre el marcador. ik paneles Jerarquía. Por defecto, los parámetros para ello son CorredizoArticulacións casillas de verificación deshabilitadas Activo en relación a los tres ejes y habilitado para parámetros RotacionalArticulacións(Figura 14). Esto significa que este objeto puede girar de cualquier forma, pero tiene prohibido moverse con respecto a cualquiera de los ejes. Por ejemplo, cancele la restricción de deslizamiento relativo al eje. z activando la casilla de verificación Activo en la sección zEje, - después de esto la posición y orientación del objeto ChaflánCil 01 será completamente diferente cuando el efector final se mueva (Fig. 15 y 16); devolver la restricción. Tenga en cuenta que incluso con una restricción deslizante establecida, algún desplazamiento de objeto ChaflánCil 01 todavía ocurre, ya que las restricciones no se establecen directamente en los objetos, sino en sus conexiones entre sí ( Articulación), es decir, en las articulaciones (si hacemos una analogía con un miembro humano). Intente también establecer restricciones en la rotación de objetos. ChaflánCil 01 en relación con los tres ejes, lo que permitirá lograr una fijación rígida de la posición y orientación de un objeto determinado, mientras que todos los demás elementos de la cadena IK seguirán estando completamente libres de restricciones de rotación y deslizamiento (Fig. 17).

Arroz. 14. Aspecto inicial de los pergaminos. Juntas deslizantes Y Juntas rotacionales para objeto ChaflánCil 01

Establecer límites de restricción

Además de habilitar/deshabilitar restricciones al deslizarse y girar en pergaminos CorredizoArticulacións Y RotacionalArticulaciones se puede regular cuánto movimiento o rotación se permite en relación con uno u otro eje, es decir, establecer los límites de las restricciones. Esto se logra marcando la casilla Limitado(Límite) y definición de valores límite de rotación en campos De Y A(“Desde” y “Hasta”). Nuestra escena de trabajo no es muy adecuada para experimentar con límites de deslizamiento y rotación, así que cree una nueva escena de tres cilindros de diferentes diámetros, colocados uno encima del otro de modo que el cilindro con el radio más grande esté en la parte superior (debe estar en el origen), y en la parte inferior está el más pequeño (Fig. 18). La altura de todos los cilindros es la misma e igual a 30. Conéctelos en una cadena jerárquica, comenzando este proceso desde arriba para que al final el cilindro inferior termine como el objeto Raíz (Fig. 19).

Seleccione el cilindro inferior y asigne el circuito a un controlador. HOLAsolucionador usando el comando Animación=>ikSolucionadores=>HOLAsolucionador y especificando el cilindro superior como efector final. Seleccione el cilindro superior y en la pestaña ik paneles Jerarquía en un pergamino RotacionalArticulaciones quitar las casillas de verificación Activo para los tres ejes, y en el pergamino CorredizoArticulacións habilitar la casilla de verificación Activo para eje z. Realice una operación similar para el cilindro del medio y para el cilindro inferior, prohíba todo tipo de transformaciones en S de la articulación. Después de esto, intente mover el cilindro superior hacia arriba y hacia abajo; después de los permisos establecidos, se moverá en relación con el eje. z(Fig. 20) y puede moverse hacia arriba y hacia abajo indefinidamente sin restricciones. Ahora configuremos límites para que los cilindros se muevan a lo largo del eje. z de modo que el cilindro superior quede primero completamente sumergido en el del medio y luego el del medio en el inferior. Es decir, el resultado final debería ser algún tipo de imitación de un tubo plegable (por ejemplo, un telescopio). La forma más sencilla es seleccionar las restricciones apropiadas con control visual de los límites, lo cual es posible aumentando y disminuyendo con el mouse mientras presiona la tecla Ctrl los valores correspondientes en los campos ubicados a la derecha de los campos de entrada (sin habilitar la casilla de verificación por ahora Limitado). En este caso, el estado actual de los cilindros se mostrará inmediatamente en la ventana de proyección activa. Seleccione el cilindro superior y de esta manera (es decir, cambiando los parámetros manteniendo presionada la tecla Ctrl) asegúrese de que su posición inicial (es decir, cuando ocupa su posición original) coincida con el valor De, igual a 30, y el final (cuando este cilindro está completamente sumergido en el cilindro inferior) - al valor A, igual a 0. De manera similar, seleccione los valores de las restricciones para el cilindro del medio, que para la tarea en cuestión resultarán exactamente iguales. Habilite las casillas de verificación apropiadas Limitado(Fig. 21), y verás que al mover el cilindro superior, nuestro “catalejo” efectivamente se plegará según lo previsto (Fig. 22). Guarde su escena de trabajo en un archivo. Anima el movimiento de los cilindros: activa el modo de generación automática de claves, arrastra el control deslizante hasta el último cuadro, mueve el cilindro superior para que quede completamente sumergido en el inferior y desactiva el modo de generación automática de claves. Guarde la escena en un archivo (lo necesitaremos más adelante).

Arroz. 21. Aspecto final del pergamino. Juntas deslizantes para cilindros superiores y medios

Si lo desea, la conexión de objetos se puede hacer más fluida habilitando la casilla de verificación para las restricciones de uniones correspondientes. Facilidad(Esta función se utiliza a menudo para animar modelos "suaves"). Por ejemplo, haga esto para los cilindros superior y medio (Fig. 23). Después de esto, el efecto de mover los cilindros durante la animación se volverá más suave, ya que el cilindro del medio comenzará a moverse no cuando el cilindro superior alcance su límite inferior, sino un poco antes.

¿Qué es la “cinemática inversa”?

La tarea de la cinemática inversa es buscar un conjunto de configuraciones de articulaciones que garanticen el movimiento más suave, rápido y preciso hacia puntos determinados. Sin embargo, muchos de los métodos existentes actualmente adolecen de desventajas tales como una alta complejidad computacional y la falta de naturalidad de las posturas resultantes. Este artículo describe un nuevo ( probablemente en el momento de escribir este artículo: 2010.) método heurístico llamado “Método hacia adelante y hacia atrás” ( Cinemática inversa de alcance hacia adelante y hacia atrás, en adelante simplemente FABRIK),
FABRIK evita el uso de rotaciones y matrices a favor de obtener directamente un punto en una línea. Gracias a esto, solo requiere unas pocas iteraciones, tiene un bajo coste computacional y, como resultado, una pose visualmente natural. FABRIK también maneja la imposición de restricciones y el uso de múltiples circuitos y/o puntos finales sin ningún problema. Este es el método del que trata esta publicación.

Les pido que traten este extracto con comprensión, porque el original es bastante extenso, tiene mucha agua, repeticiones apropiadas e inapropiadas y desviaciones del tema, así como comparaciones con otros algoritmos. Decidí ignorarlo, por lo que contiene solo una pequeña parte del texto, que, sin embargo, refleja la esencia: aprox. traducción

1. Modelo de cuerpo artificial

Un sistema de cuerpos rígidos múltiples consta de una colección de cuerpos rígidos, llamados nodos, conectados entre sí por aristas. Todos los bordes son componentes sensibles al movimiento: restringen el movimiento dentro de un cierto ángulo con respecto a los bordes vecinos. Modelar un cuerpo virtual es importante para calcular la pose humana. Un modelo con restricciones correctamente colocadas le permitirá obtener un conjunto de poses correctas, lo que permitirá obtener movimientos más realistas. La mayoría de los modelos asumen que las partes del cuerpo son duras, aunque esto es simplemente una aproximación a la realidad.
El esqueleto suele modelarse como una jerarquía de segmentos sólidos conectados por aristas, cada uno de los cuales está definido por propiedades como longitud, forma, volumen y masa. El manipulador, a la manera de una mano robótica o un personaje animado, está modelado como una cadena formada por nodos sólidos conectados entre sí mediante bordes. Cada movimiento y/o rotación de un hueso con índice i afecta a todos los elementos posteriores de la cadena. La cadena se puede formalizar de la siguiente manera: cualquier nodo sin hijos debe denominarse punto final; Para cada punto final, se puede formar una cadena retrocediendo a lo largo del esqueleto, de padre a padre, hasta encontrar el nodo raíz de la cadena (el comienzo de la cadena). Por definición, el problema IK supone que el nodo raíz es estático. Sin embargo, los métodos suelen hacer frente a mover la raíz.

Algoritmo de ciclo completo del algoritmo FABRIK (pseudocódigo, primer elemento de la matriz en el índice 1)

Datos iniciales: matriz de posiciones de nodos p[i] con i = 1...n, posición objetivo t y valores de distancia entre nodos coincidentes. d[yo] = | p -t | for i = 1, ... , n-1 Salida: Nuevas posiciones p[i], i = 1...n //Distancia entre la raíz y el objetivo dist = | p-t | //Comprueba si el objetivo es alcanzable si dist > d + d + ... + d ( //el objetivo es inalcanzable para i = 1, ..., n-1 do ( //Encuentra la distancia r[i] entre objetivo t y nodo p [i] r[i] = | t - p[i] | lambda[i] = d[i] / r[i] //Encontrar la nueva posición del nodo p[i] p = (1 - lambda[i]) * p[i] + lambda[i] * t ) ) else ( //El punto es alcanzable; por lo tanto b será la nueva posición del nodo p b = p //Comprueba si la distancia entre el nodo final p[n] y / es mayor /posición objetivo valor de tolerancia t (tolerancia) DIFa = | p[n] - t | while DIFa > tol do ( //Paso 1: seguimiento directo //Establecer el nodo final p [n] como objetivo (probablemente significa "poner en la posición objetivo" - traducción aproximada) p[n] = t for i=n -1 , ..., 1 do ( //Obtener la distancia r[i ] entre el nodo p[i] y la nueva posición p r[ i] = | p - p[i] | lambda[i] = d[i] / r[i] //Calcular la nueva posición del nodo p[i] ] p[i] = (1 - lambda[i]) * p + lambda[i] * p[i] ) //Etapa 2: secuencia inversa //Establece el elemento raíz p en la posición inicial p[i] = b for i=1 ,..., n - 1 do ( //Obtener la distancia r[i] entre el nodo p y la posición p[i] r[i] = | pag - pag[i] |

lambda[i] = d[i] / r[i] //Obtener una nueva posición p[i] p = (1-lambda[i]) * p[i] + lambda[i] * p ) DIFa = | p[norte] - t |

) ) 2.FABRIK: una nueva solución heurística al problema del CI Esta parte proporciona la esencia del método FABRIK. Utiliza posiciones ya calculadas en los modos hacia adelante y hacia atrás. FABRIK logra la minimización de errores mediante un ajuste único del ángulo de cada nodo. Aquellos. Se recorre toda la cadena, comenzando desde el último nodo, ajustando el ángulo de cada nodo omitido, después de lo cual la cadena se recorre en la dirección opuesta. Este método, a diferencia de la transformación de rotación, convierte el problema de encontrar la posición de un nodo en el problema de encontrar un punto en una línea; por lo tanto, se puede ahorrar tiempo y reducir el número de cálculos. Supongamos que el conjunto p,…, p[n] es el conjunto de posiciones de los nodos manipuladores. Además, supongamos que pag es el nodo raíz y p[n] es el nodo final, es decir Por simplicidad, dejaremos un nodo final. El objetivo está representado por la posición. t. El método FABRIK se presenta en el listado anterior y una interpretación gráfica del ciclo completo en la figura de la izquierda, con un punto objetivo y cuatro nodos en la cadena. Considere el ciclo completo del algoritmo en la figura:

  • a- Posiciones iniciales del manipulador y objetivo.
  • t- Mover el nodo final p,…, p[n] a la meta.
  • do- Encontrar la posición pag" pag" Y p,…, p[n], a distancia d desde el punto pag".
  • d- Repetir para todos los nodos.
  • mi- Segunda etapa del algoritmo: mover el elemento raíz de su posición pag" a su posición inicial.
  • F- Repetimos para todos los nodos, pero esta vez comenzamos desde la base y avanzamos hasta el nodo final. El algoritmo se repite hasta que la posición del elemento final se acerca al objetivo a una distancia suficiente.

Más detalles:
Primero, se calculan las posiciones entre los nodos (matriz d), tras lo cual comprueba si se puede alcanzar el punto objetivo; Se calcula la distancia entre el nodo raíz y el objetivo ( dist), y si esta distancia es menor que la suma total de distancias entre nodos, entonces el objetivo es alcanzable; de ​​lo contrario, no. Si el objetivo es alcanzable, el ciclo completo se limita a dos etapas. En la primera etapa, el algoritmo estima la posición inicial de cada nodo, comenzando desde el elemento final. pag moviéndose hacia la base del manipulador p,…, p[n]. Entonces, dejemos que la posición objetivo sea la posición del nodo final, p"[n] = p[n]. Obtenemos una línea recta yo, acostado sobre los puntos p,…, p[n] Y p"[n]. Nueva posición del nodo con índice. n-1, pag", se encuentra en esta línea a una distancia d de p"[n]. De manera similar, la nueva posición del nodo con índice n-2, pag", se puede calcular usando la línea recta yo, acostado sobre los puntos p,…, p[n] Y pag" a distancia d de pag". El algoritmo se repite hasta que se hayan calculado todas las nuevas posiciones para todos los nodos, incluido el final. En los casos en que el elemento raíz se mueve a la posición requerida, FABRIK funciona como se describe, la única diferencia es que la nueva posición pag"" el nodo raíz será la posición deseada, no la posición inicial.
Después de una iteración completa, en casi todos los casos (según las observaciones), el nodo final se acercará al objetivo. El procedimiento se repetirá el número de veces requerido hasta que el nodo final caiga en la posición objetivo o se acerque a ella a una distancia aceptable. Una implementación del método FABRIK sin introducir restricciones convergerá en cualquier punto/cadena objetivo si el objetivo es alcanzable. Sin embargo, si el objetivo está más lejos que la distancia a la que se puede extender la cadena, se necesita una condición de interrupción que comparará la posición pasada y actual del nodo final, y que detendrá la ejecución del algoritmo si el desplazamiento del nodo final es menor que un cierto valor (épsilon). Además, en casos especiales, el algoritmo se interrumpe después de un cierto número de iteraciones (sin embargo, tal situación aún no se ha encontrado).
Para obtener resultados y soluciones más rápidos en varias iteraciones, es posible la optimización utilizando Álgebra Geométrica Conforme (en adelante CGA); CGA tiene una ventaja sobre formas básicas como esferas, líneas, planos y círculos, que se representan con bastante facilidad mediante objetos algebraicos. Por lo tanto, la búsqueda de la posición de un nodo ubicado entre dos nodos conocidos se puede expresar mediante la intersección de dos esferas con centros en las posiciones correspondientes a estos nodos, y un radio igual a la distancia entre las posiciones del nodo buscado y el los existentes; la nueva posición del nodo estará en el punto más cercano del círculo formado por la intersección de las dos esferas. Otra optimización sencilla consiste en dibujar directamente una línea en la dirección del objetivo cuando este último no está disponible.

3. Modelo con múltiples nodos finales.


Como en el caso de un nodo final único, el algoritmo se divide en dos etapas:

  • La primera etapa es exactamente la misma, solo que esta vez comienza desde cada nodo final y se mueve hacia adentro a lo largo de la cadena desde este nodo, hasta llegar a la subbase (probablemente una subbase es un nodo con varios bordes adyacentes). - aprox. De esta manera obtenemos tantas posiciones diferentes para la placa base como nodos finales conectados a ella. La posición final se puede tomar como un centroide de estas posiciones. Después de esto, la ejecución del algoritmo continúa en modo normal, pasando de la subbase a la raíz. Si las subbases tienen sus propias subbases, entonces se realizan acciones similares en relación con ellas: también se compila una lista de posibles posiciones, después de lo cual esta subbase se establece en el centroide de la lista completa de posiciones.
  • En la segunda etapa, se aplica el algoritmo habitual a cada nodo, alejándose cada vez más del nodo raíz. En este caso, cada cadena debe procesarse por separado hasta el nodo final: cuantas más subbases, más repeticiones para cada una de ellas. El proceso se repite hasta que los nodos finales alcanzan su objetivo o hasta que ocurre una condición de interrupción.

4. Limitadores

Y finalmente, la parte más deliciosa de este artículo son los cálculos utilizando limitadores. Son necesarios, como habrás adivinado, para una mayor similitud con los organismos reales. El nodo en sí suele caracterizarse por tres grados de libertad. La rotación de un nodo se puede caracterizar como una "rotación simple" (2 grados de libertad), que refleja su posición final, y una rotación alrededor de su propio eje (1 grado de libertad). Por tanto, dividiendo el movimiento del nodo en dos de estas fases y aplicándoles limitadores, es posible controlar la posición del nodo. Las restricciones mismas pueden imponerse de manera similar: porque El algoritmo es iterativo; se pueden aplicar restricciones de rotación en cada iteración del algoritmo. Los limitadores, sin embargo, no afectarán la convergencia del algoritmo. La idea principal del uso de limitadores es reposicionar y reorientar los nodos dentro de los límites de las restricciones.

  • a- Configuraciones iniciales del manipulador y objetivo.
  • t- Mover el nodo final p,…, p[n] hacia la meta y orientarla hacia ella.
  • do- Encontrar la posición pag", situada en la línea entre las posiciones pag" Y p,…, p[n], a distancia d desde el punto pag".
  • d- Reorientar el nodo a su posición. pag" para que mire a lo largo del borde que conecta pag" Y pag".
  • mi- Cálculo de elipse delimitadora: las posiciones permitidas están en el área sombreada. Ninguno de los picos se mueve a ninguna parte en esta etapa.
  • F- Nudo p,…, p[n] se mueve a la posición p^, que es la posición más cercana en la elipse sombreada, asegurando así que la nueva posición p^ estará dentro de límites aceptables.
  • gramo- Mover el nodo p^ por punto pag" para mantener la longitud del borde.
  • h- Reenfoquemonos pag" para satisfacer la restricción de orientación.

Este procedimiento se repite para todos los nodos, en orden directo e inverso, de forma similar a como se realizaban los movimientos en la versión sin restricciones. Al mismo tiempo, la restricción de “elipse” es probablemente una característica de una arista, no de un nodo, es decir, en la segunda fase el nodo debe moverse a la elipse p,…, p[n]- aprox. traducción

  • Traducción
  • Modo de recuperación

¿Qué es la “cinemática inversa”?

La tarea de la cinemática inversa es buscar un conjunto de configuraciones de articulaciones que garanticen el movimiento más suave, rápido y preciso hacia puntos determinados. Sin embargo, muchos de los métodos existentes actualmente adolecen de desventajas tales como una alta complejidad computacional y la falta de naturalidad de las posturas resultantes. Este artículo describe un nuevo ( probablemente en el momento de escribir este artículo: 2010.) método heurístico llamado “Método hacia adelante y hacia atrás” ( Cinemática inversa de alcance hacia adelante y hacia atrás, en adelante simplemente FABRIK),
FABRIK evita el uso de rotaciones y matrices a favor de obtener directamente un punto en una línea. Gracias a esto, solo requiere unas pocas iteraciones, tiene un bajo coste computacional y, como resultado, una pose visualmente natural. FABRIK también maneja la imposición de restricciones y el uso de múltiples circuitos y/o puntos finales sin ningún problema. Este es el método del que trata esta publicación.

Les pido que traten este extracto con comprensión, porque el original es bastante extenso, tiene mucha agua, repeticiones apropiadas e inapropiadas y desviaciones del tema, así como comparaciones con otros algoritmos. Decidí ignorarlo, por lo que contiene solo una pequeña parte del texto, que, sin embargo, refleja la esencia: aprox. traducción

1. Modelo de cuerpo artificial

Un sistema de cuerpos rígidos múltiples consta de una colección de cuerpos rígidos, llamados nodos, conectados entre sí por aristas. Todos los bordes son componentes relacionados con el movimiento: restringen el movimiento dentro de un cierto ángulo en relación con los bordes vecinos. Modelar un cuerpo virtual es importante para calcular la pose humana. Un modelo con restricciones correctamente colocadas le permitirá obtener un conjunto de poses correctas, lo que permitirá obtener movimientos más realistas. La mayoría de los modelos asumen que las partes del cuerpo son duras, aunque esto es simplemente una aproximación a la realidad.
El esqueleto suele modelarse como una jerarquía de segmentos sólidos conectados por aristas, cada uno de los cuales está definido por propiedades como longitud, forma, volumen y masa. El manipulador, a la manera de una mano robótica o un personaje animado, está modelado como una cadena formada por nodos sólidos conectados entre sí mediante bordes. Cada movimiento y/o rotación de un hueso con índice i afecta a todos los elementos posteriores de la cadena. La cadena se puede formalizar de la siguiente manera: cualquier nodo sin hijos debe denominarse punto final; Para cada punto final, se puede formar una cadena retrocediendo a lo largo del esqueleto, de padre a padre, hasta encontrar el nodo raíz de la cadena (el comienzo de la cadena). Por definición, el problema IK supone que el nodo raíz es estático. Sin embargo, los métodos suelen hacer frente a mover la raíz.

Algoritmo de ciclo completo del algoritmo FABRIK (pseudocódigo, primer elemento de la matriz en el índice 1)

Datos iniciales: matriz de posiciones de nodos p[i] con i = 1...n, posición objetivo t y valores de distancia entre nodos coincidentes. d[yo] = | pag - pag[yo] | for i = 1, ... , n-1 Salida: Nuevas posiciones p[i], i = 1...n //Distancia entre la raíz y el objetivo dist = | p-t | //Comprueba si el objetivo es alcanzable si dist > d + d + ... + d ( //el objetivo es inalcanzable para i = 1, ..., n-1 do ( //Encuentra la distancia r[i] entre objetivo t y nodo p [i] r[i] = | t - p[i] | lambda[i] = d[i] / r[i] //Encontrar la nueva posición del nodo p[i] p = (1 - lambda[i]) * p[i] + lambda[i] * t ) ) else ( //El punto es alcanzable; por lo tanto b será la nueva posición del nodo p b = p //Comprueba si la distancia entre el nodo final p[n] y / es mayor /posición objetivo valor de tolerancia t (tolerancia) DIFa = | p[n] - t | while DIFa > tol do ( //Paso 1: seguimiento directo //Establecer el nodo final p [n] como objetivo (probablemente significa "poner en la posición objetivo" - traducción aproximada) p[n] = t for i=n -1 , ..., 1 do ( //Obtener la distancia r[i ] entre el nodo p[i] y la nueva posición p r[ i] = | p - p[i] | lambda[i] = d[i] / r[i] //Calcular la nueva posición del nodo p[i] ] p[i] = (1 - lambda[i]) * p + lambda[i] * p[i] ) //Etapa 2: secuencia inversa //Establece el elemento raíz p en la posición inicial p[i] = b for i=1 ,..., n - 1 do ( //Obtener la distancia r[i] entre el nodo p y la posición p[i] r[i] = | pag - pag[i] |

lambda[i] = d[i] / r[i] //Obtener una nueva posición p[i] p = (1-lambda[i]) * p[i] + lambda[i] * p ) DIFa = | p[norte] - t |

) ) 2.FABRIK: una nueva solución heurística al problema del CI Esta parte proporciona la esencia del método FABRIK. Utiliza posiciones ya calculadas en los modos hacia adelante y hacia atrás. FABRIK logra la minimización de errores mediante un ajuste único del ángulo de cada nodo. Aquellos. Se recorre toda la cadena, comenzando desde el último nodo, ajustando el ángulo de cada nodo omitido, después de lo cual la cadena se recorre en la dirección opuesta. Este método, a diferencia de la transformación de rotación, convierte el problema de encontrar la posición de un nodo en el problema de encontrar un punto en una línea; por lo tanto, se puede ahorrar tiempo y reducir el número de cálculos. Supongamos que el conjunto p,…, p[n] es el conjunto de posiciones de los nodos manipuladores. Además, supongamos que pag es el nodo raíz y p[n] es el nodo final, es decir Por simplicidad, dejaremos un nodo final. El objetivo está representado por la posición. t lambda[i] = d[i] / r[i] //Obtener una nueva posición p[i] p = (1-lambda[i]) * p[i] + lambda[i] * p ) DIFa = | p[norte] - t |
  • a- Posiciones iniciales del manipulador y objetivo.
  • t- Mover el nodo final p,…, p[n] a la meta.
  • do- Encontrar la posición pag" pag" Y p,…, p[n], a distancia d desde el punto pag".
  • d- Repetir para todos los nodos.
  • mi) ) pag" a su posición inicial.
  • F- Repetimos para todos los nodos, pero esta vez comenzamos desde la base y avanzamos hasta el nodo final. El algoritmo se repite hasta que la posición del elemento final se acerca al objetivo a una distancia suficiente.

Más detalles:
Primero, se calculan las posiciones entre los nodos (matriz d), tras lo cual comprueba si se puede alcanzar el punto objetivo; Se calcula la distancia entre el nodo raíz y el objetivo ( dist), y si esta distancia es menor que la suma total de distancias entre nodos, entonces el objetivo es alcanzable; de ​​lo contrario, no. Si el objetivo es alcanzable, el ciclo completo se limita a dos etapas. En la primera etapa, el algoritmo estima la posición inicial de cada nodo, comenzando desde el elemento final. pag moviéndose hacia la base del manipulador p,…, p[n]. Entonces, dejemos que la posición objetivo sea la posición del nodo final, p"[n] = p[n]. Obtenemos una línea recta yo, acostado sobre los puntos p,…, p[n] Y p"[n]. Nueva posición del nodo con índice. n-1, pag", se encuentra en esta línea a una distancia d de p"[n]. De manera similar, la nueva posición del nodo con índice n-2, pag", se puede calcular usando la línea recta yo, acostado sobre los puntos p,…, p[n] Y pag" a distancia d de pag". El algoritmo se repite hasta que se hayan calculado todas las posiciones nuevas para todos los nodos, incluido el último. En los casos en que el elemento raíz se mueve a la posición requerida, FABRIK funciona como se describe, con la única diferencia de que la nueva posición pag"" el nodo raíz será la posición deseada, no la posición inicial.
Después de una iteración completa, en casi todos los casos (según las observaciones), el nodo final se acercará al objetivo. El procedimiento se repetirá el número de veces requerido hasta que el nodo final caiga en la posición objetivo o se acerque a ella a una distancia aceptable. Una implementación del método FABRIK sin introducir restricciones convergerá en cualquier punto/cadena objetivo si el objetivo es alcanzable. Sin embargo, si el objetivo está más lejos que la distancia a la que se puede extender la cadena, se necesita una condición de interrupción que comparará la posición pasada y actual del nodo final, y que detendrá la ejecución del algoritmo si el desplazamiento del nodo final es menor que un cierto valor (épsilon). Además, en casos especiales, el algoritmo se interrumpe después de un cierto número de iteraciones (sin embargo, tal situación aún no se ha encontrado).
Para obtener resultados y soluciones más rápidos en varias iteraciones, es posible la optimización utilizando Álgebra Geométrica Conforme (en adelante CGA); CGA tiene una ventaja sobre formas básicas como esferas, líneas, planos y círculos, que se representan fácilmente mediante objetos algebraicos. Por lo tanto, la búsqueda de la posición de un nodo ubicado entre dos nodos conocidos se puede expresar mediante la intersección de dos esferas con centros en las posiciones correspondientes a estos nodos, y un radio igual a la distancia entre las posiciones del nodo buscado y el los existentes; la nueva posición del nodo estará en el punto más cercano del círculo formado por la intersección de las dos esferas. Otra optimización sencilla consiste en dibujar directamente una línea en la dirección del objetivo cuando este último no está disponible.

3. Modelo con múltiples nodos finales.


Como en el caso de un nodo final único, el algoritmo se divide en dos etapas:
  • La primera etapa es exactamente la misma, solo que esta vez comienza desde cada nodo final y se mueve hacia adentro a lo largo de la cadena desde este nodo, hasta llegar a la subbase (probablemente una subbase es un nodo con varios bordes adyacentes). - aprox. De esta manera obtenemos tantas posiciones diferentes para la placa base como nodos finales conectados a ella. La posición final se puede tomar como un centroide de estas posiciones. Después de esto, la ejecución del algoritmo continúa en modo normal, pasando de la subbase a la raíz. Si las subbases tienen sus propias subbases, entonces se realizan acciones similares en relación con ellas: también se compila una lista de posibles posiciones, después de lo cual esta subbase se establece en el centroide de la lista completa de posiciones.
  • En la segunda etapa, se aplica el algoritmo habitual a cada nodo, alejándose cada vez más del nodo raíz. En este caso, cada cadena debe procesarse por separado hasta el nodo final: cuantas más subbases, más repeticiones para cada una de ellas. El proceso se repite hasta que los nodos finales alcanzan su objetivo o hasta que ocurre una condición de interrupción.

4. Limitadores

Y finalmente, la parte más deliciosa de este artículo son los cálculos utilizando limitadores. Son necesarios, como habrás adivinado, para una mayor similitud con los organismos reales. El nodo en sí suele caracterizarse por tres grados de libertad. La rotación de un nodo se puede caracterizar como una "rotación simple" (2 grados de libertad), que refleja su posición final, y una rotación alrededor de su propio eje (1 grado de libertad). Por tanto, dividiendo el movimiento del nodo en dos de estas fases y aplicándoles limitadores, es posible controlar la posición del nodo. Las restricciones mismas pueden imponerse de manera similar: porque El algoritmo es iterativo; se pueden aplicar restricciones de rotación en cada iteración del algoritmo. Los limitadores, sin embargo, no afectarán la convergencia del algoritmo. La idea principal del uso de limitadores es reposicionar y reorientar los nodos dentro de los límites de las restricciones.
  • a- Configuraciones iniciales del manipulador y objetivo.
  • t- Mover el nodo final p,…, p[n] hacia la meta y orientarla hacia ella.
  • do- Encontrar la posición pag", situada en la línea entre las posiciones pag" Y p,…, p[n], a distancia d desde el punto pag".
  • d- Reorientar el nodo a su posición. pag" para que mire a lo largo del borde que conecta pag" Y pag".
  • mi- Cálculo de elipse delimitadora: las posiciones permitidas están en el área sombreada. Ninguno de los picos se mueve a ninguna parte en esta etapa.
  • F- Nudo p,…, p[n] se mueve a la posición p^, que es la posición más cercana en la elipse sombreada, asegurando así que la nueva posición p^ estará dentro de límites aceptables.
  • gramo- Mover el nodo p^ por punto pag" para mantener la longitud del borde.
  • h- Reenfoquemonos pag" para satisfacer la restricción de orientación.
Este procedimiento se repite para todos los nodos, en orden directo e inverso, de forma similar a como se realizaban los movimientos en la versión sin restricciones. Al mismo tiempo, la restricción de “elipse” es probablemente una característica de una arista, no de un nodo, es decir, en la segunda fase el nodo debe moverse a la elipse p,…, p[n]- aprox. traducción

Aquí crearemos una animación para el personaje que creamos en el Capítulo 4. Esta vez no podremos arreglárnoslas con esferas y teteras separadas, ya que no necesitamos un objeto experimental, sino un sistema de objetos jerárquicamente conectados.

Cinemática directa (FK)

La cinemática directa (FK - Forward Kinematics) representa el movimiento de los objetos secundarios en relación con los principales. No hay nada complicado aquí. Creemos una cinemática directa para las manos de nuestro personaje. Para hacer esto, abra el archivo con el personaje. Haga clic en el botón Tecla automática.

Deja que el personaje nos salude.

Muevamos el control deslizante a algún cuadro, por ejemplo al décimo, y levantemos la mano. Esto lo haremos mediante la rotación, y para dar la posición deseada lo más probable es que tengamos que rotar ambas partes de la mano.

Volvamos al principio del rango () y reproduzcamos la animación. Si te parece que el personaje está levantando el brazo demasiado rápido, haz lo siguiente: selecciona ambas partes del brazo (hombro y antebrazo), luego ve a la línea de visualización del número de fotograma, selecciona la segunda tecla (tenemos dos teclas en el mismo lugar - para el hombro y para el antebrazo) para resaltar ambos, dibuja un área rectangular alrededor de ellos. Las teclas seleccionadas se volverán blancas. Muévalos a algún otro cuadro, por ejemplo el 15. Puedes regresar y reproducir la animación nuevamente.

Coloque el control deslizante en la siguiente posición (unos fotogramas después del día 15) y gire el hombro un poco hacia la izquierda. Mueva el control deslizante unas cuantas veces más y gire el hombro hacia adelante y hacia atrás. Luego crea un marco final en el que se baja el brazo y se dobla ligeramente el codo. Si ejecuta la animación, verá que el hombro se mueve como debería cuando una persona agita la mano y el antebrazo se inclina lentamente. Esto se debe a que para el antebrazo solo creamos dos teclas con una distancia bastante grande entre ellas.

Para deshacerse de este efecto, debe crear una clave en el último movimiento de la mano en la que el antebrazo esté en la posición correcta. Es recomendable crear esta clave en el mismo cuadro en el que se encuentra la clave para el último movimiento del hombro (la penúltima clave para el hombro). Seleccione el hombro para que se muestren sus teclas de animación y mueva el control deslizante al marco donde se encuentra su penúltima tecla. Ahora seleccione el antebrazo y gírelo hasta la posición deseada. Reproduzca la animación nuevamente. Ahora el personaje agita la mano de forma más natural. Apague el botón de tecla automática. En general, es mejor no mantener este botón activado en vano, ya que en este caso puedes crear animaciones no deseadas mientras editas y colocas objetos. Cuando el botón Auto Key está desactivado, la animación seguirá reproduciéndose, pero ya no será posible crearla. La transformación de objetos hace que la animación misma cambie. Si ahora giramos la mano del personaje en el cuadro cero para que quede extendida hacia adelante y reproducimos la animación, veremos que la mano se mueve en una posición diferente. Haga clic en Deshacer para restaurar la animación original.

Para resumir: creamos muchas teclas de animación para el hombro y solo cuatro teclas para el antebrazo. Entre la segunda y la tercera clave, el antebrazo está inmóvil en relación con su objeto principal: el hombro.

Aquí hay un archivo con animación manual (formato 3ds MAX 6).

Cinemática inversa (IK)

La cinemática inversa se utiliza en los casos en los que necesitamos colocar algún objeto de nuestra jerarquía en una posición determinada. Por ejemplo, si queremos animar el caminar de un personaje, las piernas deben aterrizar en el suelo y no deslizarse mientras el cuerpo se mueve con respecto al suelo. Lograr esto mediante cinemática directa es extremadamente difícil, casi imposible. Afortunadamente, existe una cinemática inversa.

Veremos las herramientas de cinemática inversa que se introdujeron en 3ds MAX 4 y sobrevivieron hasta las últimas versiones (3ds MAX 7). En versiones anteriores, la cinemática inversa se organizaba de forma algo diferente.

La cinemática inversa se crea mediante las llamadas cadenas cinemáticas inversas (IK Chain). Se crea una cadena entre objetos que están unidos secuencialmente entre sí. Para crear dicha cadena, la secuencia jerárquica debe terminar con algún objeto secundario auxiliar. Tracemos la creación de una cadena de cinemática inversa en las piernas de nuestro personaje, siendo el último objeto auxiliar de la cadena el pie.

Seleccionemos el objeto raíz de nuestra cadena. Tenga en cuenta que el objeto raíz de la cadena no es el objeto raíz de toda la jerarquía, es decir, no el cuerpo, sino el muslo (muslo). Seleccione el muslo y vaya al elemento del menú principal. Animación. Abramos el elemento Animación. Solucionador IK(solucionador de cinemática inversa). Allí puedes ver:

HI Solver (History Independent Solver): solucionador históricamente independiente

HD Solver (Solver dependiente del historial): solucionador dependiente del historial (el mejor solucionador para secuencias de animación cortas, pero da malos resultados para animaciones largas)

IK Limb Solver: solucionador de animación de extremidades, diseñado para dos objetos de una cadena jerárquica

Spline IK Solver - solucionador de splines

Usaremos HI Solver. Aunque IK Limb Solver está diseñado para animar extremidades humanas, funciona mal cuando lo usa, el personaje siempre dobla una rodilla hacia atrás y un codo hacia adelante;

Si todavía tenemos el muslo seleccionado, seleccione HI Solver y haga clic en el pie de la misma pierna cuyo muslo está seleccionado. Deberíamos tener un lazo que conecte ambas partes de la pierna y una cruz azul en el punto de apoyo del pie. Una cadena cinemática inversa es un objeto auxiliar que tiene un color y un nombre. Para mayor comodidad, puede cambiar el nombre del circuito creado. Creemos exactamente la misma cadena para el segundo tramo.

La cruz azul es el llamado objeto objetivo ( Objetivo IK). Si ahora intentamos moverla, veremos que la pierna se dobla y gira de tal manera que el punto de apoyo del pie siempre está en el centro de la cruz (aunque el pie en sí no se mueve con respecto a la parte inferior de la pierna). ). Los ajustes de herencia de rotación que hicimos para el pie ya no funcionan porque fueron creados para cinemática de avance.

Ahora ha quedado claro por qué se necesita un objeto hijo auxiliar: su punto de referencia es un punto de referencia para la cadena cinemática inversa. Para que el pie se mueva naturalmente, necesitamos colocarle algún otro objeto auxiliar y hacer otra cadena cinemática inversa, pero no haremos eso ahora, sino que intentaremos crear una animación de caminar.

Si el botón Auto Key no está presionado, presiónelo. Movamos el control deslizante a algún cuadro, por ejemplo 10. Empecemos a caminar con el pie derecho. Levantémoslo (con ayuda de IK Goal) y movámoslo un poco. Adelantemos también un poco el cuerpo, tal como avanza medio paso. Movamos el control deslizante nuevamente. Pongamos el pie en el suelo y movamos un poco más el torso. Tenga en cuenta que creamos teclas de animación no para rotar el muslo y la parte inferior de la pierna, sino para mover el objetivo IK.

Ahora necesitamos crear una clave de animación para el IK Goal en el mismo cuadro donde el pie derecho vuelve a tocar el suelo. En general, la clave se creará con el más mínimo movimiento de nuestro IK Goal para la pierna izquierda, pero para crear una clave sin mover la pierna, debes hacer clic en el botón grande con la imagen de la clave (Establecer clave - poner la llave). O puede ir a la pestaña Movimiento y crear una clave de animación usando el botón Posición en el grupo Crear clave.

Ahora animemos la pierna izquierda de la misma forma que lo hicimos con la derecha, sin olvidarnos de mover el torso. Rebobinemos la animación y reprodúzcala. Si hicimos todo correctamente, el personaje da dos pasos, y mientras camina con una pierna, la otra no resbala. Por ahora no prestaremos atención al extraño movimiento de los pies; en este caso desempeñan el papel de objetos auxiliares.

Aquí hay una escena ya preparada en la que el personaje da dos pasos y agita la mano.

Entonces, nos familiarizamos con la cinemática directa e inversa, ahora podemos pasar a cosas más serias: familiarizarnos con los sistemas óseos y crear un esqueleto para animar un personaje más complejo y detallado.

Trabajamos con la herramienta Joint y descubrimos cómo funciona. Ahora veamos cómo podemos controlar las articulaciones de una forma más sencilla. En este capítulo, presentaré algunas de estas herramientas y luego podremos usarlas más para manipular a nuestro personaje. Y la primera herramienta que les voy a presentar es una de las más importantes que deben conocer: la herramienta IK Handle. Sólo te diré qué es la cinemática inversa, cómo funciona y los conceptos básicos de cómo configurarla.

La cinemática inversa es una de las dos formas de controlar las articulaciones esqueléticas. El primer método se llama cinemática directa (cinemática directa) y, en esencia, es rotación. Con él, giras y devuelves las articulaciones a su lugar y esta es probablemente la forma más natural de manipulación, ya que nuestras articulaciones simplemente giran en diferentes direcciones, así como entre sí. Es decir, cada movimiento de nuestro cuerpo es una rotación de alguna articulación.

La cinemática inversa se basa en el concepto de Meta, es decir, el lugar donde debe girar la articulación. Esto nos permite especificar la posición final de la articulación a medida que gira. La forma más sencilla de recordar esto es comprender que la cinemática directa se basa en la rotación de una articulación y la cinemática inversa se basa en la posición de la articulación en el espacio cuando la rotamos.

Déjame mostrarte rápidamente un ejemplo. Aquí tengo dos cadenas idénticas de uniones. La primera cadena de uniones no tiene cinemática inversa, por lo que se controla mediante cinemática directa, y en nuestra cadena derecha tenemos instalado un IK Handle, que nos permite controlar las uniones mediante cinemática inversa. Iré a la ventana de proyección de vista lateral. Y acercaré un poco más el modelo en la ventana de proyección para verlo mejor.

Una vez más, Forward Kinematics es un giro. Quiero seleccionar el final de esta cadena de uniones y mover esta articulación aquí a las coordenadas centrales. Voy a rotar todas estas articulaciones alrededor de un punto. Empecemos a hacer esto de inmediato. Presionaré E para activar la herramienta Rotar y, como puedes ver, cuando comenzamos a rotarla, es bastante difícil lograr el objetivo solo con rotaciones. Así que rotaré esta articulación así, y esta así, y rotaré ésta un poco hacia atrás, y tal vez necesite rotar ésta nuevamente. Ahora estoy haciendo todo a ojo y sin tener mucho cuidado con la colocación de estas articulaciones porque la rotación y la posición de las articulaciones no coinciden muy bien entre sí.

La cinemática inversa facilita mucho este proceso. Si queremos mover esta cadena cinemática inversa a algún lugar exacto, todo lo que tengo que hacer es hacer clic en esta cruz en la parte inferior, se llama IK Handle1. Ahora puedo presionar W para ir a la herramienta Mover y simplemente mover mi articulación hacia el objetivo.

Es así de simple. Maua gira automáticamente todas las articulaciones de manera uniforme para lograr el objetivo. Pero si, por ejemplo, muevo la articulación más allá de este objetivo, tenemos problemas. Por lo tanto, no podemos llegar a ningún punto que queramos, pero si elegimos puntos más cercanos, todo saldrá bien. Como habrás notado, estos dos métodos se utilizan en situaciones diferentes.

Normalmente, la cinemática directa nos proporciona un movimiento más natural, ya que se basa en la rotación, lo que parece muy natural en la animación de personajes. Pero ambos métodos tienen su lugar. Te mostré cómo funciona, ahora déjame mostrarte cómo configurarlos rápidamente. Creemos un nuevo Archivo/Nueva Escena y consigamos algo de espacio vacío. Y pasemos a la vista lateral de la ventana de proyección. Seleccionaré la herramienta Esqueleto/Conjunción.

Hagamos una cadena articular muy simple que consta de dos huesos. Haré clic izquierdo aquí y crearé una articulación. Me moveré aquí un poco en relación con el eje central y crearé otra articulación aquí. Aquí tenemos un pequeño ángulo que le indicará a la cinemática inversa en qué dirección queremos que gire la articulación. Hemos hecho esto antes en el capítulo anterior y ahora te mostraré por qué lo hacemos. Ahora tenemos una cadena de uniones, así que establezcamos cinemática inversa para esta cadena.

Podemos ir a Skeleton, herramienta de manejo IK, o podemos usar este ícono aquí, ambos funcionan igual. Ahora necesitamos seleccionar la primera unión a partir de la cual haremos la cadena IK, que sea la superior. Y ahora el último porro, será el de abajo. Tenemos uniones intermedias, pero es importante que elija enseguida la última.

Y ahora tenemos IKHandle1. Podemos seleccionarlo, presionar W y, como puede ver, mi articulación del medio se dobla en esta dirección. Si enderezara mi cadena, IKHandle no funcionaría porque no entendería en qué dirección doblar la articulación, así que hicimos una ligera curva aquí. Echemos un vistazo al Outliner. Mira, aquí están nuestros porros.

Y IKHandle es un objeto separado y no está en la cadena de uniones. Así podremos moverlo por separado y cambiar la posición de las articulaciones. Estos son los conceptos básicos de cómo trabajar con IK Handles y Inverse Kinematics en Maua.

Por lo tanto, debemos recordar que tenemos dos formas de controlar las articulaciones, cinemática directa y cinemática inversa, y cada una tiene sus propias ventajas.




Arriba