PFM: Cambiando el personaje en UDK (parte 1)

Al conseguir la cámara en tercera persona vemos que nuestro personaje es un robot que no está mal, pero no es el personaje que queremos en nuestro juego, así que vamos a cambiarlo.

Para ello necesitaremos un modelo 3d del personaje que queremos, las texturas necesarias para el mismo, y un conjunto de animaciones. Yo como aún no tengo modelado a mi personaje protagonista, usaré este modelo que hice en una asignatura del máster y del cual tengo un par de animaciones básicas.

pfm02_01

El Content Browser

Una vez tenemos el material necesario recopilado empezaremos a importarlo a UDK y montar nuestro personaje. Para los modelos y animaciones UDK soporta el conocido formato FBX, pudiendo ir las animaciones en ficheros aparte del modelo. Para importar los modelos necesitamos abrir el Content Browser, que puede encontrarse en el menú View > Browser Windows > Content Browser (También hay un botón en la barra superior de herramientas para abrirlo). Veremos la siguiente ventana:

pfm02_02El Content Browser es donde podemos inspeccionar todo el contenido de nuestro juego: modelos, sonidos, texturas, materiales, animaciones, sistemas de partículas,… Los que se ven por defecto son los que trae UDK como ejemplo. Los ‘assets’, como se llaman los elementos del juego, se guardan en paquetes con extensión upk. Por mantener el orden conviene crear un paquete propio para almacenar todos nuestros assets.

Importando el modelo

Para empezar importaremos el modelo. Pulsando en el botón Import de la parte inferior izquierda se abrirá la típica ventana donde podremos buscar el FBX de nuestro modelo. A continuación aparece una ventana donde podemos escoger el Paquete, el Grupo y el Nombre del nuevo asset a importar. Damos los valores que queramos:

pfm02_03Aparecerá nuestro modelo en el visor del Content Browser y veremos que el paquete creado está bajo New Packages en la lista de paquetes. Tiene un asterisco lo que significa que no se ha guardado. Hacemos clic con el botón derecho y lo guardamos. En este momento podemos elegir dónde se guardará el paquete upk. Para mantener el orden yo lo guardaré en UDKGame\Content\PFM\UPK pero es indiferente.

Una vez guardado veamos nuestro modelo importado. UDK lo ha clasificado como Skeletal Mesh, pues ha detectado que tiene un esqueleto, lo que nos permitirá aplicarle animaciones. Si hacemos doble clic en él, se abrirá otra ventana donde podremos verlo mejor.

pfm02_04Como vemos aparece sin texturas, vamos a importarlas. Igual que importamos antes el modelo importamos ahora las texturas del modelo. Con esto no basta, pues las texturas deben aplicarse a los modelos mediante materiales, por lo que habrá que crearlos para asignárselos al modelo.

Creando y asignando los materiales

Haciendo clic derecho en el visor de assets del Content Browser seleccionamos New Material. Le damos un nombre al material según el que le corresponda con el modelo y se abrirá el Editor de Materiales. Este editor permite crear shaders mediante un sencillo sistema de cajas que se van conectando. Con este editor se pueden hacer verdaderas virguerías como materiales reflectantes, translucidos, con animación, etc, pero para esto iremos a lo simple. En el Content Brower seleccionamos con el ratón (haciendo clic) una de las texturas que hemos importado. A continuación en el Editor de Materiales pulsamos la tecla ‘T’ y manteniéndola pulsada hacemos clic con el botón izquierdo del ratón. Aparecerá una cajita con la textura seleccionada (También podría crearse desde el menú que aparece con el botón derecho del ratón, pero con la tecla T es un atajo). La conectamos a la caja más grande con el ratón tal que así:

pfm02_05Pulsamos el tick verde de la parte superior izquierda del Editor de Materiales y lo cerramos. Repetimos el proceso para cuantos materiales sean necesarios. Para mi caso habrá 2 materiales, uno para cada textura del modelo (cuerpo y cabeza). Una vez tenemos los materiales podemos aplicarlos al modelo en su editor.

Ya en el editor del modelo, en la parte inferior izquierda, si desplegamos el menú de propierdades Skeletal Mesh y Materials, podemos ver que hay 2 materiales asignados a None:

pfm02_06Para asignarlos a los materiales recién creados seleccionamos con el ratón el material deseado en el Content Browser y en el editor del modelo pulsamos en la flecha verde al lado de los huecos para el material de las propiedades de la imagen anterior. Una vez hecho veremos que el modelo ya tiene los materiales asignados.

pfm02_07Con esto ya podríamos colocar el personaje en el escenario, aunque no tendría animaciones ni podríamos controlarlo. Este mismo proceso serviría para incluir otros objetos no controlados ni animados. El siguiente paso será importar las animaciones del modelo, asignárselas, montar el árbol de animaciones y ya por código indicar que queremos usar este personaje. Como esta entrada ya es bastante larga, continuaré en una segunda parte, que no será menos extensa.

Parte 2.
Banner Blog

Anuncios

35 pensamientos en “PFM: Cambiando el personaje en UDK (parte 1)

  1. Pingback: PFM: Cambiando el personaje en UDK (y parte 2) | El Blog de Marcos

  2. Pingback: PFM: Añadiendo un PNJ básico en UDK | El Blog de Marcos

  3. Pingback: PFM: Apuntando con el personaje | El Blog de Marcos

  4. Pingback: PFM: Meeting Mr. Pepe Dummy | El Blog de Marcos

  5. Buenas Marcos,

    Tengo una duda, a ver si me la puedes resolver! Yo he creado un modelo con 3d max y a la hora de importarlo no tengo ningún problema, pero si con las texturas. He importado las texturas en formato TGA y con un tamaño de 512×512 pixels y a la hora de crear el material uno la textura con la patilla negra con el Diffuse del PreviewMaterial y no me aparece nada en el Preview. Continúa la esfera con los colores por defecto blanco y azul. A qué puede deberse este problema?

    Mucas gracias.

    • Buenas de nuevo,

      No, no me sale ningun error, únicamente al añadir la textura en el editor de materiales no se ve reflejado el cambio en el Preview. Si no se te ocurre, adjuntaré imágenes. (ahora estoy en el trabajo y no tengo mi pc)

      Muchas gracias.

      Un slaudo.

    • Buenas de nuevo!!

      Mira, fíjate en el screenshot ( https://www.dropbox.com/s/n7ahscx9k075bi0/Error%20UDK.jpg ). Yo creo que el problema está ahí, que no me pilla las texturas… Porque con el Unity no tengo ningún problema a la hora de importar mis modelos y esto va a hacer que me decante por el unity de nuevo… jejeje espero que me puedas ayudar!!! 🙂

      Muchas gracias!!!

    • Qué extraño, nunca me ha pasado eso.. Te ocurre con cualquier textura que utilices? Y qué pasa si le das al tick verde? Al aplicar el material a un modelo tampoco se ve?

    • Si, me tiene loco perdido… Si, me ocurre con todas las que he probado, pero tengo que decir que solo he probado con texturas que haya hecho yo. Si le doy al tick verde me guarda y hace todo bien, aplico el material a una malla y no se modifica. Tal vez desinstalando y volviendo a instalar.. es que no lo se.

  6. De dónde saco una textura que sepa 100% seguro que funciona con el UDK? Otra cosa es la versión del UDK, que me descargué la beta de Feb del 2013 (February 2013 UDK Beta).

    • Buenas,

      Solucionado, no se que leches le pasaba a mi UDK. Me he instalado la versión anterior (la última de 2012) y ahora me importa bien las texturas.

      Muchas gracias!

    • Bueno, me alegro de que al menos ya te funcione. Yo estoy usando la versión de noviembre así que no sé si será un problema de la de febrero o que se te instalara mal o algo. Saludos 😀

  7. Hola marcos siento ser tan pesado jajaja, que programa se puede usar para modelar en 3d? porque estuve viendo el 3d max y cuesta 4000€ y al ser estudiantes de primero aun no tenemos suficiente dinero -_- y es para saber si habría algún programa gratis o alguna otra optativa más barata

    • Pues gratis totalmente creo que el mejor es Blender, tiene funcionalidades más que de sobra para modelar y hay muchísimos tutoriales gratuitos. Por otro lado, mira a ver si tu universidad tiene convenio con Autodesk, porque ofrecen una versión gratis de 3ds max para estudiantes.

    • Mi universidad tiene un acuerdo con microsoft pero no estoy seguro si lo tiene con autodesk, algún programa de microsoft sería bueno para modelar?

  8. buenas Marcos,
    nose si te acordaras de mi, hace unos meses te pedi ayuda con unas dudas respecto al animtree y la posicion de las armas, el caso es que tengo otra duda que seguramente sera una tonteria XD pero contra mas facil la solucion mas me complico, el caso es que nose como poner la fisica en los pawns ( para que al morir caigan desplomados) podrias ayudarme? he esperado a escribir esta duda a tener algo decente que mostrar XD este es mi projecto (gracias a ti y tus tutos avanza)

    escribo en la parte de cambiar personaje porque me parecia que encajaba mas esta pregunta 🙂

    pd: me estoy descargando tu juego^^ veamos como vicia jajaja

    • Hola Manu! Veo grandes avances en el video, muy chulo!

      Crear los ragdoll de los personajes no es difícil, pero hay que hacer varias cosas. Te puedo dar información un poco por encima:

      En primer lugar debes crear un Physics Asset para tu personaje. Para eso tendrás que usar la herramienta PHAT de UDK: http://udn.epicgames.com/Three/PhATUserGuide.html
      Cuando sepas un poco cómo se maneja será fácil definir un “esqueleto físico” que se ajuste correctamente al personaje.

      Una vez hecho esto, ya desde código, hay que activar el ragdoll en el momento de la muerte del personaje. Habrá que modificar por tanto la clase del Pawn
      En el componente SkeletalMeshComponent, en las defaultproperties, hay que añadir el PhysicsAsset e indicarle que lo use, de forma parecida a esto:

      Begin Object Class=SkeletalMeshComponent Name=SkeletalMeshComponentGabriel
      SkeletalMesh=SkeletalMesh'Players.Gabriel.SM_Gabriel'
      AnimSets(0)=AnimSet'Players.Gabriel.AS_Gabriel'
      AnimTreeTemplate=AnimTree'Players.Gabriel.AT_Gabriel'
      PhysicsAsset=PhysicsAsset'Players.Gabriel.SM_Gabriel_Physics'
      bHasPhysicsAssetInstance=true

      ...

      Hecho eso, se puede activar el ragdoll sobreescribiendo la función PlayDying:

      simulated function PlayDying(class DamageType, vector HitLoc)
      {
      PlaySound(S_Die, true);

      bReplicateMovement = false;
      bTearOff = true;
      Velocity += TearOffMomentum;
      SetDyingPhysics();
      bPlayedDeath = true;
      HitDamageType = DamageType; // these are replicated to other clients
      TakeHitLocation = HitLoc;
      if ( WorldInfo.NetMode == NM_DedicatedServer )
      {
      GotoState('Dying');
      return;
      }
      InitRagdoll();
      mesh.MinDistFactorForKinematicUpdate = 0.f;

      if (Physics == PHYS_RigidBody)
      {
      //@note: Falling instead of None so Velocity/Acceleration don't get cleared
      //setPhysics(PHYS_Falling);
      }
      PreRagdollCollisionComponent = CollisionComponent;
      CollisionComponent = Mesh;

      CylinderComponent.SetActorCollision(false,false);
      Mesh.SetActorCollision(true, true);
      Mesh.SetTraceBlocking(true, true);

      if( Mesh.bNotUpdatingKinematicDueToDistance )
      {
      Mesh.ForceSkelUpdate();
      Mesh.UpdateRBBonesFromSpaceBases(TRUE, TRUE);
      }

      if( Mesh.PhysicsAssetInstance != None )
      {
      Mesh.PhysicsAssetInstance.SetAllBodiesFixed(FALSE);
      }

      Mesh.SetRBChannel(RBCC_Pawn);
      Mesh.SetRBCollidesWithChannel(RBCC_Default,TRUE);
      Mesh.SetRBCollidesWithChannel(RBCC_Pawn,TRUE);
      Mesh.SetRBCollidesWithChannel(RBCC_Vehicle,TRUE);
      Mesh.SetRBCollidesWithChannel(RBCC_Untitled3,FALSE);
      Mesh.SetRBCollidesWithChannel(RBCC_BlockingVolume,TRUE);

      Mesh.ForceSkelUpdate();
      Mesh.UpdateRBBonesFromSpaceBases(TRUE, TRUE);

      Mesh.bPauseAnims=True;
      Mesh.PhysicsWeight = 1.0;
      Mesh.bUpdateKinematicBonesFromAnimation=false;

      Mesh.SetRBLinearVelocity(Velocity, false);
      //Mesh.SetTranslation(vect(0,0,1) * 6);
      Mesh.ScriptRigidBodyCollisionThreshold = MaxFallSpeed;
      Mesh.SetNotifyRigidBodyCollision(true);
      Mesh.SetBlockRigidBody(true);
      Mesh.WakeRigidBody();

      GotoState('Dying');
      }

      Este código lo saqué de los foros de UDK creo recordar.
      Un saludo

    • woo gracias marcos siempre me salia el advertencia por no poner bHasPhysicsAssetInstance=true xd fallo tontoxd aun tengo mucho que aprender, aun no lo he probadoxd estoy un poco ocupado ya dire si me funciona gracias por ser tan rapido contestando a las dudas 🙂

  9. Hola marcos!!, me descargé tu juego y me encanta, tienes futuro tio. Estoy creando mi juego, en donde apareces en un cetro médico y hay soldados dentro, pero el problema es que no se como crear el modelo de los soldados y animarlo (en 3d max) solo quiero ponerle animaciones básicas: que anden libremente por todo el mapa, que ataquen al jugador cuando lo vean y que no se maten entre ellos, y una cosa mas, ¿podrías hacer vídeos explicando paso a paso como hacer lo del spawn de enemigos, lo que te he dicho y la interfaz de menú de pausa y principal?, porque no entiendo nada, voy a subir un vídeo de como va el juego (solo tengo el entorno gráfico y me faltan algunos muebles) un saludo y porfavor necesito tu ayudaa.

  10. Tengo una dudilla, para personalizar mi juego debo de crear mi propia clase y eso. Leí que había que irse a devolpment e hize todo lo que dijiste y fue bien, pero con los códigos se supone que debo de escribirlos en un bloc de notas, ¿me serviría copiar y pegar los ejemplos que tu pones o debo de escribirlo todo a mano?, esque te juro que estoy muy confundido y no se como hacerlo. Por cierto, gran juego el Dark Fortress, está muy bien, pero estaría también chulo que le pusieras algún monstruo o alguna criatura que te persiga, pero solo son ideas. Quiero ser como tu, y solo me faltan el menú y los enemigos para acabar el juego.

  11. Verás, Marcos, tengo Blender, y no se como exportar mis animaciones. Y cuando solo exporto el modelo en fbx y lo importo en UDK, me sale que udk no funciona y me pide cerrar el editor, y así todo el rato y no lo puedo importar, ¿como exporto animaciones de blender en fbx?, ¿como arreglo este fallo?

    file:///C:/Users/Alejandro%20Manche%C3%B1o/Desktop/Captura.PNG

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s