UNITY Figuras 3D

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • Preparación previa:
  • Crea una escena de nombre Escena_UD2_Figuras3D y guárdala en la carpeta Scenes dentro de Assets en la ventana Project Window.


  • Para poder desarrollar juegos 3D debemos entender que es una figura 3D y como lo representa un ordenador.
  • En el mundo del desarrollo de los videojuegos, podéis encontraros con la palabra MESH para hacer referencia a una figura 3D.
En el mundo del desarrollo de los videojuegos 2D, cada gráfico se denomina SPRITE.


  • Un ordenador es capaz de 'dibujar' gracias al uso de funciones que le suministran las librerías gráficas, las cuales acceden al hardware del equipo (tarjeta gráfica).
Actualmente disponemos de dos librerías gráficas:
  • OpenGL: Se utiliza en Windows, Linux y Mac. Es la librería por defecto que utiliza Unity en Linux y Mac.
  • DirectX: Se utiliza en Windows. Es la librería por defecto que utiliza Unity en Windows.
Podemos ver cómo cambiar la librería de la que va a hacer uso el juego en este enlace.
Unity va a hacer uso de estas librerías para pintar, crear efectos, mover objetos,....


  • No os hacéis la pregunta de ¿ cómo puede dibujar una figura tridimensional en una pantalla bidimensional ?
La idea es muy sencilla y la respuesta también: triángulos.
Las figuras 3D complejas están formadas por cientos o miles de triángulos.
Cada triángulo guarda información sobre su posición en un forma de coordenadas (X,Y,Z).
LIBGDX UD4 Animacion 1.jpg
En esta imagen se puede ver como cada cara del cubo está formado por dos triángulos


Unity3d objeto3D 1.png
Imagen obtenida de la wikipedia



  • Lo que hace el ordenador es 'transformar' esas coordenadas (x,y,z) de cada triángulo por medio de una serie de operaciones con matrices, a coordenadas de pantalla (x,y), y después dibuja en dichas coordenadas los triángulos.
Unity3d ejes 3.jpg
Imagen obtenida de esta página




Unidades de medida de los objetos 3D

  • Los objetos 3D no tienen un 'tamaño' como cuando pensamos en la realidad.
Lo que tienen son unidades de medida.


  • Cuando creo un objeto 3D ocupará un espacio en el entorno tridimensional donde lo estoy creando. Este espacio está identificado por una rejilla.
En el caso de Unity3D esta rejilla está en el plano X-Z:
Unity3d figuras3d.jpg
En la imagen podemos ver como hay un cubo que mide 1 unidad de alto, de ancho y de profundidad.


  • Cuando creo objetos 3D no tengo que preocuparme por las medidas de los objetos, tengo que preocuparme por la proporcionalidad entre ellos.
Es decir, si tengo un coche que ocupa 5 unidades, un conejo no puede medir 4, tendrá que medir 1 unidad o media.


  • Después tendré que situar la cámara en la posición correcta para ver correctamente la escena.
Si tengo las figuras con un número de unidades pequeño, tendré que acercar más la cámara para tener la misma visión que si el número de unidades es mayor.


  • En la imagen siguiente se puede observar que tenemos un coche que ocupa sobre 4 unidades y un tigre sobre 2 unidades.
Unity3d figuras3d 2.jpg
Como vemos la proporción es más o menos correcta.
La cámara se encuentra a 2 unidades por encima y por detrás de los dos y podemos en la ventana de preview como queda la escena.


Ahora vamos a modificar los modelos, aumentando su tamaño al doble del actual (manteniendo su proporción), y vamos a mover la cámara para que la visualización sea la misma. Lógicamente tendremos que alejarnos más ya que los modelos van a 'crecer':
Unity3d figuras3d 3.jpg
Como vemos la imagen se ve igual y las figuras han crecido. Ahora el coche ocupa 8 unidades y el tigre 4 (la cabeza ocupa parte del siguiente cuadrado)



  • Nota importante: Si hacemos uso del motor de físicas (un complemento que añadido a un objeto hace que le afecte la gravedad y se comporte como un objeto físico real, como rebotar al chocar,...) la escala es importante, ya que dicho motor interpreta 1 metro real como una unidad de medida de la malla tridimensional de Unity. Por lo tanto si escalo mucho un objeto y hago que la cámara se aleje mucho para mantener el aspecto, al aplicar la gravedad veré que el objeto baja 'lentamente' pero esto es debido a que estoy viendo un objeto muy grande desde una gran distancia.


  • Hay tres factores que pueden afectar la escala de un objeto:
  • El tamaño del mesh en la aplicación de modelado 3D (en la página principal de este curso disponéis de varios programas de diseño 3D).
  • El ajuste Mesh Scale Factor cuando realizamos la operación de importación del objeto para añadirlo a nuestro proyecto.
  • Los valores de escala del Transform Component (en la propiedades del gameobject, la opción SCALE dentro de la sección 'Transform' que aparece a la derecha una vez seleccionado un objeto).
Lo ideal es no modificar la escala en el componente Transform Component.
La mejor opción es crear los modelos en una escala real para que no se tenga que cambiar la escala.



Importando modelos y ajustando escala

  • NOTA:
  • Recordar que para UNITY la unidad de medida de las figuras 3D es el metro. Así, una figura con escala 1x1x1 tiene 1metrox1metrox1metro
  • Veremos en un punto posterior de esta Wiki como importar nuevos modelos.


  • Tal como comentamos antes, cuando importamos un modelo, lo ideal es que este viniera con la escala adecuada, pero puede que esto no pase.
Si cambiamos manualmente la escala en la propiedad Scale de su 'Transform' tendremos problemas con el motor de físicas (un conjunto de librerías que nos van permitir emular la gravedad y colisiones entre objetos) ya que aunque visualmente podemos ajustar todo a escala, no es lo mismo que caiga un coche de 3 metros de largo que uno de 300 metros (aunque visualmente los dos parezcan iguales al estar la cámara mucho más alejada en el segundo caso). En coche de 300 metros parece que caerá mucho más lentamente que el de 3 metros.
Si no vamos a hacer uso del motor de físicas podríamos emplear esta forma de aumentar/disminuir el tamaño.
También si necesitamos diferentes tamaños para el mismo modelo importado, pero esto lleva consigo que una disminución en el rendimiento ya que el motor de físicas tiene que realizar más cálculos.


  • La forma adecuada de cambiar la escala es a través de una propiedad del modelo cuando se importa.
Para importar un modelo lo ideal es que este tenga el formato fbx el cual puede ser generado por cualquier aplicación de diseño 3D.
Si no lo está. Unity lo convertirá a este formato antes de incorporarlo al proyecto.






Ejes de coordenadas en UNITY / Blender

  • UNITY utiliza lo que se conoce como regla de la mano izquierda.
Otro software, como el framework LIBGDX o software de diseño gráfico como Blender utilizan la regla de la mano derecha.
  • Esta regla nos dice cuales son las direcciones positivas de los ejes X-Y-Z (quiere esto decir que moviéndonos hacia las direcciones indicadas por los dedos, el valor de las coordenadas aumenta y es positivo).
Unity3d ejes 1.jpg
Imagen de Primalshell CC BY-SA 3.0
Debéis coger vuestra mano y poner la misma posición que la indicada en la figura apuntando el dedo del medio hacia vuestro cuerpo (UNITY utiliza la regla de la mano izquierda, por tanto vuestro dedo gordo apuntará a vuestra izquierda).
Por lo tanto, en Unity los valores positivos de las coordenadas X-Y-Z son:
  • Y: Hacia arriba.
  • Z: Hacia vuestro cuerpo.
  • X: Hacia vuestra izquierda.
Podemos comprobarlo como en una escena cualquiera de Unity, al seleccionar un GameObject aparecen los ejes de la forma indicada anteriormente:
Unity3d ejes 2.jpg


Nota: En Blender,además de cambiar el sentido de los valores positivos para uno de los ejes, también cambia los ejes, así, el eje X es, utilizando la regla de la mano derecha, el que apunta a tu cuerpo, el eje Y sería tu dedo gordo apuntando a la derecha y el eje Z sería tu dedo índice apuntando hacia arriba.






Enlace a la página principal del curso



-- Ángel D. Fernández González -- (2018).