Compartir vía


Modelado y animación de las entidades

En esta guía, repasaremos los conceptos básicos para crear un modelo y animaciones para Minecraft: Bedrock Edition. Como ejemplo, modelaremos y animaremos un pequeño robot, que se inició en el artículo Introducción a Agregar entidad.

Con este tutorial, aprenderás lo siguiente:

  • Cómo crear un modelo para una entidad usando Blockbench.
  • Cómo aplicar texturas y animaciones a un modelo.

Requisitos

Se recomienda que completes lo siguiente antes de comenzar este tutorial.

Modelo

Los modelos en Minecraft usan un formato específico que utiliza un JSON para definir la forma. Cada modelo usa una textura que se puede asignar a través de controles de renderizado.

Para crear el modelo y la textura, usaremos Blockbench, un programa de modelado 3D que puede crear modelos para Bedrock Edition de Minecraft.

Configuración del modelo

Cuando abras Blockbench por primera vez, verás una lista de los formatos de modelo disponibles. Selecciona Bedrock Model. Verás un cuadro de diálogo sobre la configuración básica del proyecto.

Configuración del proyecto para los modelos Bedrock Edition en Blockbench

La parte importante es Mob Geometry Name. Aquí, ingresaremos un nombre único para el modelo. La mejor práctica es aplicar snake_case, por lo que solo utiliza letras minúsculas, números, guiones bajos y puntos. No se admiten espacios ni otros caracteres especiales. Para nuestro modelo, solo ingresaremos robot.

Podemos dejar el campo para el nombre del archivo vacío por ahora, ya que lo definiremos más adelante cuando exportemos el modelo. Para la configuración de Box UV y el tamaño de la textura también se pueden dejar los valores predeterminados porque los cambiaremos más adelante. El botón Confirm (Confirmar) guardará esta configuración.

Estructura ósea

Lo primero que hay que tener en cuenta al realizar un modelo es la estructura ósea. Los huesos son la parte del modelo que se puede animar y se pueden organizar en una jerarquía arbitrariamente profunda. Cada hueso en sí es invisible pero puede contener cubos que darán forma al modelo.

Listado de huesos en Blockbench

Una buena práctica es utilizar un hueso raíz para cada modelo y poner todo lo demás en su interior. Esto significa que luego podrás animar tanto todo el modelo a la vez como algunas de sus partes específicas. Crea un nuevo grupo en Blockbench. "Grupos" y "Huesos" significan esencialmente lo mismo en este contexto.

Puedes hacer clic derecho en el grupo o presionar F2 para cambiarle el nombre. El nombre de un hueso debe usar snake_case (por lo que solo incluye letras minúsculas, números y guiones bajos). Cada nombre de hueso debe ser único para futuras referencias en las diferentes animaciones.

Mientras construimos el modelo en los siguientes pasos, asegúrate de que la estructura esté configurada correctamente. Puedes arrastrar grupos para cambiar el orden o soltarlos en otros grupos. Esta captura de pantalla muestra la estructura ósea correcta del modelo terminado.

Forma

Ahora puedes comenzar a crear la forma del modelo. Crea nuevos cubos y usa las herramientas de movimiento, cambio de tamaño y rotación para ajustarlos. Un truco para agregar cubos más rápido es seleccionar un cubo ya posicionado y presionar Ctrl + D (duplicar) para obtener una copia.

Forma sin textura de un robot en Blockbench

Puedes mover cubos con mayor precisión si mantienes presionada la tecla Mayús (Shift), Control o ambas al mismo tiempo. Según el estilo de modelado, puede tener sentido adherirse completamente a la cuadrícula o solo mover los cubos en incrementos de una mitad o un cuarto.

Los modelos de Bedrock Edition utilizan el mapeo Box UV de forma predeterminada. Eso significa que el mapeo de texturas solo usará números completos y hará un redondeo a un número menor si es necesario. Para evitar caras estiradas o invisibles, asegúrate de que el tamaño de los cubos utilice números completos.

Si estás trabajando en partes simétricas, como las extremidades, créalas primero en el lado derecho y luego, en espejo, a la izquierda. Puedes duplicarlas antes o después de crear la textura, según si deseas usar la misma textura en ambos lados.

Cuando creas huesos para las partes móviles del modelo, piensa siempre cuál es el punto sobre el que girará esa parte. Selecciona un hueso y presiona P para obtener la herramienta Pivot. Esta herramienta te permite mover el punto de pivote del hueso. También puedes usar esta herramienta en los cubos si deseas rotarlos alrededor de un punto específico.

Texturizado

Plantillas

Una vez que la forma del modelo está lista, puedes crear una plantilla de textura. La plantilla es una textura que tiene un espacio único para cada cubo y cada cara del modelo. También puedes mapear los cubos UV manualmente, pero la plantilla hace el trabajo por ti y encuentra el diseño más eficiente en cuanto al espacio. Recuerda que a Minecraft no le gustan las imágenes de alta resolución.

Al crear una textura, ingresa robot como el nombre de la textura y marca la opción Template (Plantilla). En el cuadro de diálogo de la plantilla, selecciona tu resolución. 16x es la resolución predeterminada de Minecraft, pero puedes aumentarla si lo deseas.

Color de base

Una vez creada la plantilla, puedes pasar a la pestaña Paint (Pintura) en Blockbench. Esto revelará todas las herramientas que tienes para modificar la textura. Selecciona la herramienta Paint Bucket (Cubeta de pintura) y establece el modo de relleno junto a la herramienta en Cube (Cubo). Selecciona un color en el panel de colores del lado derecho. Ahora puedes revisar tus cubos y colorearlos con colores de base individuales.

Detalles

Ahora puedes comenzar a trabajar en la textura. Si te sientes más cómodo creando las texturas en tu programa de edición de imágenes, ahora puedes guardar la textura haciendo clic en el ícono de guardar junto a la textura. Luego, puedes abrirla en tu editor de imágenes. Cualquier cambio aparecerá en Blockbench tan pronto como guardes la textura. Pero, si prefieres trabajar directamente en el modelo, puedes utilizar las herramientas de pintura integradas en Blockbench.

Hay algunos trucos para usar el pincel en Blockbench de manera más eficiente:

  • Para pintar áreas más grandes, puedes aumentar el tamaño del pincel.
  • Puedes pintar directamente en la vista previa 3D, o puedes pintar en el editor UV en el lado izquierdo.
  • Si deseas crear una línea recta, haz clic en el principio de la línea, luego mantén presionada la tecla Mayús (Shift) al final de la línea.
  • Para asegurarte de no pasar por alto los puntos cubiertos que podrían revelarse a través de las animaciones, puedes ocultar los cubos. Simplemente, haz clic en el ícono de ojo en el esquematizador.

Animaciones

Las animaciones pueden animar la forma de tu modelo, pero también pueden reproducir sonidos y efectos de partículas. En la siguiente sección, veremos cómo agregar una animación a tu entidad, cómo crear tu propia animación en Blockbench y, finalmente, cómo usar los controles de animación.

Uso de las animaciones predeterminadas

El pack de recursos original contiene animaciones genéricas a las que puedes hacer referencia en tu propio pack sin tener que copiar los archivos. Estas animaciones pueden ser un buen punto de partida para las entidades originales, pero, por supuesto, las animaciones personalizadas son mucho más potentes. Puedes encontrar todas las animaciones originales en el pack de recursos original aquí.

En este ejemplo, usaremos la animación look at (mirada). Esta animación rotará el hueso de la "cabeza". Por eso es importante que la cabeza del modelo use exactamente el mismo nombre.

Además, la entidad necesitará un componente look at en su archivo de comportamiento. Estos son los componentes de mirada de la vaca. Puedes probar con distintos números si quieres.

            "minecraft:behavior.look_at_player": {
                "priority": 7,
                "look_distance": 6,
                "probability": 0.02
            },
            "minecraft:behavior.random_look_around": {
                "priority": 9
            }

Ahora que el comportamiento está configurado, pasaremos al archivo de la entidad cliente. Asegúrate de que la versión de formato de este archivo esté configurada en 1.10.0 o superior para que esto funcione.

Primero, vinculemos la animación. Esto se hace en la sección de animaciones, en la etiqueta de descripción de la entidad. La segunda parte aquí (animation.common.look_at_target) es el identificador global de la animación. Este nombre se define en el archivo de animación y es válido en cualquier lugar de este pack o de cualquier otro pack. La primera parte (look_at_target) es el nombre corto. Así es como hacemos referencia a la animación dentro del archivo de la entidad, y solo es válida dentro del alcance de esta entidad.

            "animations": {
                "look_at_target": "animation.common.look_at_target"
            }

Ahora, necesitamos reproducir la animación. Para las animaciones simples que están siempre activas mientras existe la entidad, esto es tan simple como mencionar el nombre corto en la matriz scripts/animate en el archivo de la entidad cliente.

            "scripts": {
                "animate": ["look_at_target"]
            }

Si ahora pruebas el robot en el juego, verás que gira la cabeza y mira a su alrededor.

Cómo crear una animación

En la guía Agregar entidad, creamos una pequeña animación de conducción para el robot. Ahora creemos una animación que se reproduzca cuando el robot pierda contacto con el suelo (rueda). Antes de crear una animación, comprueba siempre que haya una forma de activarla. Podemos activar fácilmente una animación en la que el robot pierde el equilibrio con solo usar la consulta de Molang query.is_on_ground para probar si el robot dejó de tocar el suelo.

Controles de animación en Blockbench

Se pueden crear animaciones simples en el editor de texto, pero, en el caso de animaciones más complejas basadas en fotogramas clave, Blockbench facilita la tarea. Abre el modelo y cambia a la pestaña Animate (Animar) en la esquina superior derecha. Crea una nueva animación en el panel Animations (Animaciones) en el lado izquierdo y asígnale el nombre animation.robot.sway. También puedes elegir un nombre más largo o incluir un espacio de nombres para garantizar la compatibilidad con otros complementos. Pero ten en cuenta que los identificadores de animación solo admiten snake_case, cadenas y puntos, pero no dos puntos ni guiones.

Una vez que hayas configurado la animación, puedes comenzar a animar. Selecciona el hueso raíz de la entidad. Mueve el cursor de tiempo en la línea de tiempo a 0 segundos y haz clic en el ícono más que se encuentra junto a Rotation (Rotación). Esto creará un nuevo fotograma clave en la nueva posición. Ahora mueve el cursor a unos 0.2segundos. Selecciona la herramienta de rotación y gira todo el robot ligeramente hacia la izquierda. Esto generará automáticamente un nuevo fotograma clave. Puedes ver los valores en el lado izquierdo de la pantalla. Gíralo a unos 10grados.

Ahora avanza en el tiempo hasta aproximadamente medio segundo y gira el hueso raíz hacia el otro lado. Finalmente, muévete a 1segundo y gíralo de nuevo a0.

Si ahora mueves el cursor al principio y presionas reproducir, verás una breve animación de balanceo. Ahora que ya sabes cómo animar, puedes refinar la animación y, por ejemplo, dejar que la antena oscile un poco.

Por último, presiona Ctrl + S para guardar el modelo y la animación. Guarda la animación en la carpeta animations del pack de recursos como robot.animation.json.

Ahora haz referencia a la animación y reprodúcela en el archivo de la entidad cliente como hicimos con la animación de look at. Pero ahora solo reproduciremos la animación de balanceo con la condición de que el robot no esté en el suelo. Esto se verá similar a lo siguiente:

            "animations": {
                "look_at_target": "animation.common.look_at_target",
                "sway": "animation.robot.sway"
            },
            "scripts": {
                "animate": [
                    "look_at_target",
                    {"sway":"!query.is_on_ground"}
                ]
            }

Si ahora generas un robot y lo empujas por un borde, se reproducirá la animación. Pero solo se reproducirá una vez.

Esto se debe a que la consulta que se hace en la sección scripts es solo un valor de mezcla para la animación. Define si la animación se reproduce, no cuándo lo hace y cuándo no. Es por eso que la animación comenzará a reproducirse una vez cuando !query.is_on_ground sea true/1, pero nunca dejará de reproducirse. Simplemente se desvanecerá una vez que el valor vuelva a ser false/0 y la próxima vez reanudará la animación. No volverá a reproducirse desde el principio.

Este comportamiento es bastante útil para animaciones estáticas o en bucle sin principio ni fin. Pero, si queremos iniciar la animación cada vez que cambia la consulta, necesitamos un enfoque diferente. Aquí es donde entran en juego los controles de animación.

Controles de animación

Los controles de animación funcionan con estados. Un control de animación puede tener un número ilimitado de estados. Solo uno de estos estados está activo a la vez. El control puede pasar a otros estados mediante expresiones de Molang. Cada estado puede reproducir un conjunto distinto de animaciones, sonidos y efectos de partículas.

Cada vez que el cliente carga la entidad, por ejemplo, al unirse a un mundo, el control de animación comienza en un estado inicial. Este estado se llama default de forma predeterminada.

Para configurar el control de animación, crea una nueva carpeta en el pack de recursos llamada animation_controllers. Dentro de esta carpeta, crea un nuevo archivo de texto llamado robot.animation_controllers.json. Crea un control de animación como el siguiente:

{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.robot.ground": {}
    }
}

Ahora, necesitamos crear un estado inicial. Este estado se llama default de forma predeterminada. El control de animación siempre se iniciará en este estado cuando se cargue la entidad. Por ejemplo, después de reincorporarse al mundo.

El único trabajo de este estado es hacer la transición al estado de balanceo una vez que la entidad deja de tener contacto con el suelo. Para esto, usaremos una transición. El control cambiará a ese estado tan pronto como la consulta query.is_on_ground deje de ser verdadera.

{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.robot.ground": {
            "states": {
                "default": {
                    "transitions":[
                        {"swaying": "!query.is_on_ground"}
                    ]
                }
            }
        }
    }
}

Ahora, agregaremos el estado de balanceo. Este estado reproducirá la animación de balanceo y después de eso, reiniciará el control para que vuelva al estado predeterminado. Podemos usar la consulta query.all_animations_finished para realizar la transición solo después de que la animación se haya reproducido. El resultado de esta consulta solo será verdadera cuando todas las animaciones del estado actual hayan terminado de reproducirse. Además, comprobaremos si la entidad está en tierra nuevamente.

{
    "format_version": "1.10.0",
    "animation_controllers": {
        "controller.animation.robot.ground": {
            "states": {
                "default": {
                    "transitions":[
                        {"swaying": "!query.is_on_ground"}
                    ]
                },
                "swaying": {
                    "animations":[
                        "sway"
                    ],
                    "transitions":[
                        {"default": "query.all_animations_finished && query.is_on_ground"}
                    ]
                }
            }
        }
    }
}

Ahora necesitamos vincular el control de animación a nuestra entidad. Los controles de animación se pueden vincular de la misma manera que las animaciones en el archivo de la entidad cliente. El control está vinculado en la sección animations y se reproduce en la sección scripts.

            "animations": {
                "look_at_target": "animation.common.look_at_target",
                "sway": "animation.robot.sway",
                "ground": "controller.animation.robot.ground"
            },
            "scripts": {
                "animate": [
                    "look_at_target",
                    "ground"
                ]
            }

Si pruebas esto en el juego, verás que la animación ahora funciona más de una vez. Pero, según la duración de la animación, puedes notar que si el robot pierde contacto con el suelo dos veces con un intervalo corto, la segunda vez no se reproducirá la animación. Eso es porque la primera animación aún no ha terminado, por lo que el control no se restableció todavía al estado predeterminado.

Veamos una solución diferente que permitiría resolver este problema. Si quitamos la consulta all_animations_finished, saldremos del estado de balanceo tan pronto como la entidad vuelva a tocar el suelo. Si probamos esto de nuevo, la animación se detendrá abruptamente.

Para evitarlo, podemos usar la opción blend_transition; eso permite salir de la animación sin problemas en un tiempo establecido. Esta es una de las propiedades más importantes de los controles de animación e incluso nos permite crear una transición simple entre dos poses fijas de una entidad.

En última instancia, cuál solución es mejor depende del caso de uso. En este ejemplo, la animación se desvanece suavemente una vez que el robot toca de nuevo el suelo.

                "swaying": {
                    "animations":[
                        "sway"
                    ],
                    "transitions":[
                        {"default": "query.is_on_ground"}
                    ],
                    "blend_transition":0.5
                }

¿Cuál es el siguiente paso?

Ahora aprendimos cómo crear un modelo que esté listo para animaciones y vimos cómo texturizarlo. También vinculamos una animación existente al modelo y creamos nuestra propia animación en Blockbench.

Si deseas agregar otras funcionalidades más allá de la apariencia de la entidad, consulta el tutorial sobre los comportamientos de las entidades.