Páginas

lunes, 29 de diciembre de 2014

Interpolando plataformas con Unity



La interpolación es el proceso de ir calculando puntos intermedios entre dos o más puntos que nos vienen fijos. Es un problema bastante común en videojuegos, ya que se utiliza para calcular trayectorias de objetos como plataformas que van sobre railes.


Un método sencillo

Existen herramientas muy sofisticadas para calcular interpolaciones, como los splines, pero yo me voy a centrar en un caso muy sencillo y a la vez útil para el día a día, la interpolación lineal.

La interpolación lineal es una foma muy sencilla de interpolar, que consiste en calcular los puntos intermedios sobre una recta que une dos puntos A y B.

Para calcular estos puntos intermedios se puede empezar restando el punto final B menos el origen A, lo que nos da el vector M que va de un punto al otro.




Después se multiplica este vector por un factor entre 0 y 1. Si este factor es 0 nos da el punto inicial, si es 1 el final, y los valores entre 0 y 1 dan los puntos intermedios.




Por tanto para calcular un punto cualquiera P hay que sumar(1) al punto origen A al vector M y multiplicarlo por un factor entre cero y uno.



Sustituyendo M por B - A queda la fórmula final.



(1) Sumamos el punto origen porque hay que "colocar" M sobre el punto A, sino estaríamos interpolando alrededor de (0,0,0).


Pasándolo a Unity


En Unity lo primero sería crear un script que tuviera variables para cada uno de los puntos.


Y en el update aplicar la fórmula, incrementando el factor de interpolación a una cierta velocidad, en este caso 0.1, y cuando detectamos que "nos pasamos" volvemos a poner el factor en 0.


El resultado podría ser así.





Haciendo Ping pong

Otra opción que tenemos cuando el factor llega "al tope" es invertir la velocidad, de forma que el punto P vuelva otra vez hacia A, un comportamiento conocido como Ping Pong.

Para ello podemos declarar una variable sentido que sea 1 si vamos de A a B y -1 si vamos de B a A.


Después de incrementar - o decrementar - el factor, comprobamos que no nos estemos pasando por uno de los extremos, y si lo estamos haciendo, cambiamos el valor de la variable sentido para ir al sentido contrario.



El resultado podría quedar así.





Poniéndolo bonito

Ahora vamos a ver si podemos hacer algo con este script, al fin y al cabo somos game designers ¿no?

Lo primero sería construir un pequeño escenario, podéis usar el construction kit que os presenté hace unas semanas.


Dentro de este escenario nos creamos unas plataformas, que tendrán un punto inicial y otro final. Estos puntos nos harán de "topes".



Ahora agrupamos estos tres objetos - la plataforma y los dos puntos - creando un objeto padre al que vamos a añadir el script de interpolación. Hay otras formas de hacerlo, pero así resulta cómodo mover los objetos.



Modificamos además el script para que la velocidad no sea siempre 0.1, sino que cada plataforma pueda tener una velocidad distinta, añadiendo al script.


Y en el update sustituimos el 0.1 por la variable velocidad.


Finalmente, repartiendo con gracia las plataformas a lo largo del escenario - a lo alto en este caso - llegamos a este bonito resultado.



Como siempre, podéis descargaros el proyecto aquí.



Interpolacion_Unity4.3.4.zip


Hasta la próxima.



domingo, 14 de diciembre de 2014

El misil del Venom o no rendirse

Esta semana os voy a contar una historia. Tiene que ver con uno de los temas recurrentes en el blog: Formar el carácter.

Porque se habla mucho de que para ser diseñador hay que saber de ésto y de ésto otro, pero se habla poco de los obstáculos que hay que afrontar durante el ejercicio de la profesión, y aprender a afrontarlos es tanto o más importante que el contar con conocimientos técnicos sólidos.

Vamos, que os voy a contar una batallita.



Cuando yo era pequeño tenía un Amstrad CPC, un ordenador de 8 bits que funcionaba con cintas. Me pasé muchas tardes jugando con ese ordenador, solo o en compañía de mis amigos.



Uno de los juegos que teníamos se llamaba Venom Strikes Back. Era un juego de plataformas bastante apañado, en el que el protagonista contaba con diferentes armas y habilidades, ambientado en el universo GI Joe basado en una serie de dibujos llamada M.A.S.K.

El juego no era especialmente difícil, pero tenía un punto que parecía imposible, algo que hoy en día sería un fallo de diseño garrafal, pero que en aquella época no era tan raro encontrarse. Nosotros lo llamábamos "El misil del Venom".



Era un misil enorme que se te acercaba, y se te acercaba, y por mucho que le dispararas nunca lo matabas, ni te daba ninguna señal de que le estabas haciendo daño. Uno retrocedía y retrocedía hasta que no podía más y no tenía más remedio que dejarse matar.

Estuvimos un tiempo intentando superar "El misil del Venom", pero no hubo manera, y lógicamente pasamos a otros juegos, dejándolo como una de esas cosas "imposibles" que te encuentras en la vida.

Bueno, no exactamente.


A mí me fastidiaba no haber resuelto el enigma, así que cada cierto tiempo volvía a probar, con el mismo resultado, y después de un tiempo quizá solo lo probaba una vez al año, pero sin llegar a dejarlo.

Muchos años después, ya sin tener el ordenador, me ponía un emulador de Amstrad en el PC y jugaba a algunos de aquellos juegos, y alguna vez probaba a pasarme el Venom Strikes Back, por los viejos tiempos.
.



No sé por qué un día me fijé que siempre lo había estado intentando matar con la misma arma, o con una combinación de las dos armas de que disponía, pero por algún motivo nunca había probado solo con la otra, quizá asumiendo que todas las armas tenían la misma potencia.



Así que me fui hacia el misil, disparé todo lo que pude con esa arma, retrocedí, volví a disparar todo lo que pude, retrocedí y...



¡BUM! Ya no había misil.

Quince años después "el misil del Venom" había caído. En la soledad de mi cuarto, sin testigos, siendo ya casi ingeniero informático, muy lejos de ese crío de doce años que jugaba al Amstrad con sus amigos.

Fortitudine Vincimus, que diría un famoso explorador polar. Vencemos por nuestra resistencia, por nuestra tozudez.

Muchas personas abandonan sus sueños porque se encuentran con un "misil del Venom" en sus vidas.

No os rindáis.




viernes, 5 de diciembre de 2014

¿Unos chistecillos?

Tengo algunos tutoriales en la cocina, pero esta semana no les he podido dedicar tiempo - la vida de un diseñador es complicada -. Mientras busco el hueco y, para no olvidarnos del inglés, ¿qué tal unos chistecillos?


Tomad aire y... 




¡Hasta la próxima!








domingo, 23 de noviembre de 2014

Prototipando interiores con ... Sweet Home 3D.

Esta semana os voy a presentar un programita que permite hacer el prototipo de un interior en un tiempo récord. Se trata de...



Vale, seguramente se pensó para hacer las reformas del cuarto de baño, pero mirad qué resultados se pueden obtener ¿No podría servir para diseñar niveles?




¡Veámoslo!

Lo primero es instalar la aplicación, que se puede descargar desde http://www.sweethome3d.com/es/



Instalamos, abrimos la aplicación...



Cogemos la herramienta de crear suelos



Y creamos... un suelo.


Ahora con la herramienta de crear paredes...



Creamos ... ¿No lo adivináis? ... Las paredes. Fijáos cómo la vista en 3D se va actualizando.




Ahora colocamos las puertas. Imaginad la que habría que liar en Max para hacer ésto...





Continuamos con los muebles... Parece que nos está quedando una especie de garaje.





¡Oops! Problema, no tenemos un coche para poner en el garaje ¿Qué hacemos?

Pues irnos a la web de Sweet Home 3D y descargarlo :)




En la sección de free models encontramos un bonito coche.




Lo descargamos y lo importamos a nuestra biblioteca.




En el importador, dadle unas dimensiones decentes, para que se vea grande, y archivadlo en "varios".




Ahora ya lo tenéis. Lo arrastráis a escena y lo redimensionáis - investigad cómo.




Y... Fin.

Ah, ¡pero nosotros trabajamos en Unity! ¿Qué hacemos?

Pues exportar la escena como Obj.




e importarla en Unity.




Si además tenéis por ahí el construction kit que puse por aquí hace unos días, le podéis añadir unos colores...





Unas luces ya que estamos...




¡Y ya tenemos nuestro garaje!




Tiempo total - cuando le cojáis agilidad -, pongamos media hora, y ésto ya le sirve al artista 3D como referencia para modelar el interior ¿Qué os parece?


¡Hasta la próxima!


Podéis descargar los archivos de este proyecto aquí.

domingo, 16 de noviembre de 2014

Una despedida

Esta semana también voy a jubilar mi lápiz digital, porque está el pobre que ya no se aguanta. Sirva esta foto(1) como pequeño homenaje.



(1) Os habéis fijado como está ¿no? Pues eso.

Encontrar tu sitio

Hoy os dejo dos entrevistas, una en inglés(1) y otra en castellano, con dos profesionales que han terminado por encontrar su sitio en la industria, uno en España y otro a nivel internacional. Se trata de Santiago Segura y Bryan Cranston - de Breaking Bad -.



La entrevista empieza en 1:22



La entrevista empieza en 1:28


De Santiago Segura me gusta su espíritu emprendedor, y cómo levantó Torrente prácticamente de la nada, buscando financiación en concursos de televisión y aprovechando al máximo los pocos medios de que disponía, mientras que De Bryan Cranston me gusta su profesionalidad y su historia, cómo ha tenido que ir de un sitio a otro, el papel que la casualidad ha tenido en su vida y todas las vicisitudes que ha tenido que pasar para llegar a donde está(2).

En una cultura profesional como la española, donde se busca no destacar, donde el profesional eficiente es objeto de envidias, donde parece que está mal tener éxito, pienso que es importante fijarse en casos como éstos porque nos enseñan a ver un poco más allá de esta realidad y a escaparnos de la mediocridad que a menudo nos rodea.

Ala, hasta la próxima.


(1) ¡Aprended Inglés, malditos!
(2) Un caso parecido al de Kevin Spacey con House of Cards o Hugh Laurie con House.


domingo, 9 de noviembre de 2014

Haciendo un blockout con Unity

Al final del artículo encontrarás un package con un set de primitivas para Unity.

Un blockout es una primera versión de un nivel que hace el diseñador para que los artistas sepan cómo se van a distribuir los espacios y dónde se ubicarán los elementos principales.






Como podéis ver hay muchas técnicas para hacerlo, como modelarlo en Max o usar herramientas propias del engine como hacen en Unreal.


También podríamos optar por hacerlo en Unity usando las primitivas que trae incorporadas, lo que pasa es que Unity no tiene un conjunto de primitivas demasiado amplio y el blockout queda un poco pobre ¿Cómo solucionar ésto?




Pues abriendo el Max y dedicando un rato a modelar unas cuanta piezas "extra", siempre con la vista puesta en que sean piezas que se puedan reutilizar bastante.





Ya que estamos podemos aprovechar y colocarles los ejes a las piezas "en los pies" para que sean fáciles de colocar sobre otros objetos.




Y también colocarlos teniendo en cuenta cómo nos interesará que se escale el objeto, para que no se nos descoloque mucho.


Una vez tenemos modeladas nuestras primitivas las exportamos como FBX y las incorporamos al proyecto Unity.



Y nos creamos unos materiales sencillos para marcar las diferentes partes del escenario.



Con éstos elementos ya podemos prototipar nuestro nivel.


Aquí tenéis el package con el set de piezas que he modelado.


Construction Kit- Unity > 4.3.4



Hasta la próxima.