jueves, 8 de noviembre de 2012

Modelado básico con el Blender. Un escenario sencillo. (2)

Añadiendo los pisos.

Desde donde lo dejamos en la entrada anterior, vamos a Add -> Mesh -> Cube para añadir un cubo. En el menú de Transform ponemos Location a {0, 0, 2'5} (esto siempre será {x, y, z}). El porqué de Z = 2'5 lo veremos ahora. En dimensiones su volumen lo establecemos a {30, 30, 5}. Lo de localizar el cubo en Z = 2.5 es porque las transformaciones sobre un objeto (trasladar, escalar, rotar) el Blender las hace a partir del punto central del mesh (y así con todos los objetos). Así que al tener el objeto tamaño en Z de 5, para que el piso quede "posado" sobre el suelo que tenemos en Z = 0, el punto central debe estar localizado en: 

localización en Z sobre la que se ha de posar  +  la mitad del tamaño en Z de nuestro objeto

Esto es en este caso, 2'5. Una vez hecho lo podemos renombrar como piso1.

En la imagen siguiente vemos resaltado el piso1, el inferior (la captura está sacada con los 3 pisos ya hechos, pero da lo mismo).


 Para el segundo piso las dimensiones son de {20, 20, 5}, es decir de altura igual pero más pequeño a lo largo y ancho. Lo localización, al estar posado sobre el primer piso cuya altura de su cara superior es 5, será, como se vio antes: 5 + 5/2, es decir 7'5.



Para el último piso seguimos las mismas pautas.




 Editando los bloques. Las rampas.

Seleccionamos el piso inferior y pasamos al EditMode. Para pasar al EditMode podemos o apretar el Tabulador o hacerlo desde el menú desplegable que se resalta en la siguiente captura.


Desde el EditMode podemos modificar los meshes a través de hacer transformaciones, uniones, eliminaciones, etc... de sus vértices, aristas (edges) o caras (faces).

La herramienta crucial en lo que vamos a hacer ahora es el Loop Cut and Slide. Ya con el piso1 seleccionado y en el EditMode, abrimos la vista de herramientas presionando la tecla T. Ahí veremos la herramienta Loop Cut and Slide.















Activamos la herramienta haciendo click sobre el botón indicado y al pasar el ratón sobre el cubo veremos como, dependiendo de hacia donde orientemos el puntero, un "loop" rosado rodeará el cubo en un sentido u otro. Los sentidos son 3 y se corresponden con cada uno de los ejes X, Y, Z.


Vamos a hacer dos divisiones sobre orientación X e Y cada una. Hacemos click izquierdo para fijar el "loop" y veremos como se volverá naranja y moviendo el ratón se desplazará sobre el eje fijado. Para hacer la subdivisión basta con volver a hacer click izquierdo y está quedará realizada. Las subdivisiónes las hacemos de manera que queden a la altura de donde las caras del bloque superior cortan al inferior, así por ejemplo queda la primera:















Y repetimos el proceso para la segunda. Como se puede ver, ahora el bloque está "cortado" en un nuevo trozo, el que marcamos con la primera subdivisión.















Una vez hecho el segundo, veremos como tenemos la esquina del bloque "recortada" gracias a las subdivisiones. Esta esquina es la que deformaremos para realizar la rampa de acceso al bloque superior.

Realizamos un nuevo corte con Loop Cut and Slide como el que hicimos en primer lugar  (a través del eje X, marcado en el Blender en rojo). El corte lo hacemos sobre la parte más grande de las que quedaron al hacer los cortes anteriores (en la imagen siguiente, la que queda a la izquierda). Esta vez el "loop" lo apuramos de tal manera que que quede a muy poquita distancia del corte anterior, así:















Esto servirá para que a la hora de modificar los vértices necesarios para deformar la esquina y hacer la rampa, la estructura entera no quede deformada por esa cara, sino solo ese pequeñísimo hueco que queda entre el corte grande y el corte de la esquina. Lo cual será prácticamente imperceptible y es más rápido que formar el piso completo con varios cubos independientes pegados entre si.

Nos aseguramos que tenemos activada la selección de vértices fijándonos en estos botones que resalto:















Tomando como referencia la captura superior, seleccionamos (mientras mantenemos apretado SHIFT) con click derecho los dos vértices que delimitan por la izquierda el bloque de la esquina. En el menú de herramientas de la izquierda veremos un botón que dice Merge: sirve para unir dos o más vértices. Al clickarlo veremos un pequeño menú (Firts, Last, etc...). Es muy sencillo, nos está preguntando en que posición queremos realizar la unión de los vértices seleccionados: si en el primero escogido, en el último, en el centro, etc... Como queremos realizar una rampa desde el suelo hasta arriba, seleccionamos FIRST o LAST dependiendo de si el vértice inferior de los dos seleccionados lo hemos marcado primero o no. Realizamos la misma operación con los vértices situados en el extremo de la esquina, por la derecha, y este es el resultado. 















 En la imagen superior, marcados en rojo están el botón Merge y los dos puntos sobre los que hay que unir cada pareja de vértices.

El proceso se repite de la misma manera para el bloque intermedio y el superior. Pasamos de nuevo a Object Mode (el modo por defecto en el Blender), seleccionamos el segundo piso y realizamos la misma operación por el lado que queramos.





























Finalmente repetimos el proceso para el último bloque y tendremos nuestra estructura y escenario hechos.















Lo siguiente será añadir los materiales y las luces para que nuestro escenario se muestre correctamente más tarde cargado desde el jMonkeyEngine...


lunes, 5 de noviembre de 2012

Modelado básico con el Blender. Un escenario sencillo. (1)

Abrimos el Blender, que mostrará la escena por defecto de siempre: el cubo sobre el grid. Seleccionamos el cubo haciendo click derecho sobre el y lo eliminamos con Supr/Del.

Estableciendo la escala del grid.
 Con la escena vacía mostrando solo el grid, presionamos N en el teclado para mostrar la vista de propiedades de la escena. Si hace falta, desplegamos el menú titulado Display. Establecemos Scale a 3.000 y Subdivisions a 3. El parámetro Lines lo podemos dejar como queramos, dependiendo de si el escenario va a ser pequeño o grande. De momento yo lo dejo a 30.


Construyendo el escenario.

Vamos a crear un escenario con un suelo, cuatro muros delimitándolo y una estructura central por la cual poder subir.
El suelo y los cuatro muros serán planos, mientras que la estructura central constará de bloques que editaremos para "esculpir" rampas por las cuales poder ascender.
Nota: De momento podemos ocultar el menú vertial de la izquierda presionando T.

El suelo:

Vamos al menú Add -> Mesh -> Plane y veremos un nuevo plano centrado en el origen. Seleccionado, presionamos N para ver las propiedades del objeto. El primer menú es el de Transform donde veremos los parametros de  Location, Rotation, Scale y Dimentions. Establecemos Dimentions a X: 50 e Y: 50. Z no lo podemos modificar ya que representa en Blender la "altura" y un plano es bi-dimensional.
Al modificar las dimensiones del plano y hacerlo más grande, tendremos que alejarnos del origen si queremos ver todo el plano del suelo. Para hacer zoom mantenemos presionado CTRL y movemos arriba y abajo el ratón mientras presionamos el botón central, o bien usamos la propieda rueda del ratón para hacer un zoom "escalonado".


Es importante darle un nombre a los elementos de manera que se identifiquen de manera clara (por ejemplo: suelo, muroNorte, muroSur, escalera, etc...). Para ello vamos a la vista Outliner que se mantiene abierta arriba a la derecha (la podemos ampliar) y veremos de manera anidada los elementos que conforman la escena. Veremos resaltado el elemento que está seleccionado en ese momento, así que clickamos en el + y podremos ver el nombre del mesh (la malla de vértices/caras que componen el objeto). Cambiamos el nombre de manera que sea fácil identificarlo. En este caso lo llamo "suelo". Para ello click derecho sobre cada uno de los elementos que lo componen y Rename (por supuesto mejor llamar al objeto y al mesh que lo compone de la misma manera).


Los muros:

Vamos a hacer el primer muro. Creamos otro plano, le cambiamos el nombre a muroA y lo mantenemos seleccionado para aseguranos de que no establecemos las transformaciones para ningún otro elemento. En Rotation, lo rotamos en X: 90º y en Location, lo movemos desde el origen hasta Y: 25 (recordar que el escenario mide 50 unidades de un lado a otro, por tanto del centro hasta un lado habrá la mitad de distancia). En Dimentions ponemos X a 50 (para abarcar todo un lado del escenario, fijarse también en los ejes de coordenadas que muestra constantemente el Blender) e Y a 20 o la altura que consideremos suficiente para un muro (mejor si es más de 10).



Los siguientes tres muros se hacen de manera similar pero variando las transformaciones, con especial cuidado en Location y Rotation (por ejemplo para el muro en el lado opuesto a muroA, la traslación será de Y: 0 hacia Y: -25, mientras que la rotación en X será de -90º para que la cara del plano mire al centro).

Para rotar la escena como queramos solo hay que mover el ratón mientras mantenemos presionado el botón central del mismo.

Muro opuesto al primer muro, al que he llamado muroB:




Y los dos muros restantes:







Con nuestro recinto hecho, lo siguiente es pasar a la construcción de la estructura central.


miércoles, 31 de octubre de 2012

Instalando y actualizando el jMonkeyEngine

El SDK del jMonkeyEngine lo podemos bajar de aquí. Seguimos los típicos pasos del asistente de instalación y listo.

La comunidad jME es muy activa y en la misma web hay gran cantidad de tutoriales e información sobre el SDK en concreto, sobre la organización y diseño de un juego en general, javadocs de la API, etc...
Empiezan por tutoriales para los conceptos más básicos y pasan luego a tratar temas más avanzados. Lo mejor para aprender sin duda es ir paso a paso con los tutoriales "Hello... " que hay por aquí.

Lo mío es compartir las cosas que voy descubriendo, aprendiendo, etc... ;)

Cuando esté instalado el jMonkey podremos actualizarlo llendo a Help -> Check for updates.





Para el que halla trabajado alguna vez con NetBeans, el entorno del SDK viene a ser el NetBeans adaptado a jMonkey, incluyendo una herramienta para visualizar y editar la escena OpenGL.

Una vez actualizado, quedará por hacer otra actualización más a través de Tools -> Plugins. Vamos a la pestaña setting y marcamos (en la lista de la izquierda) la casilla que dice: jMonkey SDK Nightly.
Luego vamos a la pestaña Available plugins, clickamos en Reload catalog y nos bajamos OgreXML Support y OgreXMLTools.



 


martes, 30 de octubre de 2012

Ogre exporter para Blender

Con el Blender instalado, pasamos a añadirle el exportador OgreXML.


y seguimos los pasos del instalador para tenerlo todo listo en un momento.

Ahora abrimos Blender. CTRL + Alt + U para entrar a User Preferences y vamos a la pestaña de Addons. En la lista marcamos para activar el Ogre exporter.



Hecho esto, en el menú File tendremos que ver la opción Ogre3D (.scene and .mesh) incluída en el desplegable Export.



A partir de ahora cualquiera de las escenas o modelos que creemos con el Blender podremos exportarlos con formato OgreXML, los cuales pueden ser leídos por el jMonkeyEngine para cargarlos como parte de nuestros juegos.



Un ejemplo rápido...

Tengo intención de mostrar como ir modelando (de manera básica, yo estoy aprendiendo a usar el Blender desde hace poco tiempo) un escenario muy sencillo para comenzar a probar el jMonkeyEngine. Pero de momento para ilustrar como  funciona el exportador del ogre muestro esto:






Es un escenario muy simple hecho a base de planos (para el suelo y los muros) y cubos (para las plataformas) y que incluye dos puntos de luz.
Para exportar, debemos elegir todos los elementos que forman la escena desde el Outliner (la lista de elementos a la derecha), Los seleccionamos juntos haciendo SHIFT + Click izquierdo sobre cada uno de ellos (el elemento Camera no hace falta seleccionarlo).




A continuación vamos a File -> Export -> Ogre3D y se nos mostrará esta pantalla:





Dejamos marcadas todas las opciones aunque de momento muchas de ellas no tendrán efecto alguno (por ejemplo las que tienen que ver con animaciones, que no tenemos). Es bueno exportar en una carpeta dedicada exclusivamente a una escena en concreto pues el número de archivos desplegados es proporcional al número de elementos usados para construir la escena (ya lo veremos en más detalle).

Una vez le demos a Export Ogre arriba a la derecha, volveremos a la vista principal de Blender y se nos mostrará un cuadro de texto informándonos de cuantos meshes (objetos) han sido exportados, cuantas luces, etc...





Desarrollo de videojuegos como aficionado (blender y jME)

Como las tardes son un aburrimiento, he decidido ir poco a poco compartiendo mi aprendizaje en el desarrollo aficionado de videojuegos mediante dos herramientas bastante potentes: Blender y jMonkeyEngine.

El Blender es una aplicación totalmente gratuita dedicada a la creación, modelado y animación de gráficos 3D.

Y el jMonkeyEngine es un framework para el desarrollo de videojuegos en Java. Posiblemente el mejor motor de juego gratuito que existe en dicho lenguaje.

Lo que he decidido hacer es realizar la parte que tenga que ver con los gráficos (creación de escenarios, modelos, etc...) con el Blender y toda la lógica del juego con Java a través del jME (abreviatura de jMonkeyEngine), ya que el framework puede importar y cargar con facilidad modelos exportados con el Blender a través de OgreXML (un add-on para el Blender).

Empezaré por mostrar como se instala el OgreXML en el Blender y como se exportan los diseños en ese formato. A partir de ahí pasaré a crear un escenario sencillo, cargarlo en el jME y ver como se le puede aplicar facilmente detección de colisiones, recorrer el escenario como un jugador en primer persona y todo lo que se me vaya ocurriendo... y lo que vaya aprendiendo.