Diferencia entre revisiones de «UNITY Cámara en perspectiva»
Ir a la navegación
Ir a la búsqueda
Imagen obtenido de esta web
| (No se muestran 30 ediciones intermedias del mismo usuario) | |||
| Línea 1: | Línea 1: | ||
=Introducción= | =Introducción= | ||
| + | |||
| + | * '''Preparación:''' | ||
| + | :* Crea una nueva escena de nombre '''Escena_UD2_Camara_Perspectiva''' | ||
| + | |||
| + | |||
* La cámara va a ser nuestros ojos. Van a mostrar la escena como si estuviéramos nosotros viendo con nuestros ojos los objetos 3D dibujados a nuestro alrededor. | * La cámara va a ser nuestros ojos. Van a mostrar la escena como si estuviéramos nosotros viendo con nuestros ojos los objetos 3D dibujados a nuestro alrededor. | ||
| Línea 9: | Línea 14: | ||
* En este punto vamos a tratar solo la cámara en perspectiva. | * En este punto vamos a tratar solo la cámara en perspectiva. | ||
| + | |||
| + | |||
<br /> | <br /> | ||
| + | |||
=Cámara en perspectiva= | =Cámara en perspectiva= | ||
| Línea 28: | Línea 36: | ||
* Veamos un poco más en detalle los parámetros que conforman una cámara en perspectiva. | * Veamos un poco más en detalle los parámetros que conforman una cámara en perspectiva. | ||
| + | |||
| + | |||
| + | <br /> | ||
| + | ==Cámara en perspectiva en Unity== | ||
| + | |||
| + | * Al crear un nuevo proyecto, Unity añade al mismo una cámara por defecto, de nombre '''Main Camera'''. | ||
| + | : Si pulsamos sobre ella podemos ver que aparece una ventana denominada '''Camera Preview''' que nos muestra como el usuario vería nuestro juego. Sería igual a que si pulsamos sobre la 'Game Window'. | ||
| + | |||
| + | [[Imagen:Unity3d_camara_basico_1.jpg|500px|center]] | ||
| + | |||
| + | |||
| + | * Al igual que cualquier GameObject de la escena vamos a poder mover la cámara o rotarla en cualquiera de sus tres ejes, accedediendo a su propiedad Transform. | ||
| + | : También vamos a poder colocar la cámara como 'hija' de cualquier GameObject en la jerarquía, pudiendo conseguir que la cámara se mueva al mismo tiempo que un 'protagonista'. | ||
| + | : Veamos un ejemplo: | ||
| + | |||
| + | * <u>'''Preparación previa:'''</u> | ||
| + | :* Crea una escena de nombre '''Escena_UD2_Camara3D_1''' y guárdala en la carpeta '''Scenes''' dentro de Assets en la ventana Project Window. | ||
| + | : Dentro de la escena crea la siguiente jerarquía de GameObjects: | ||
| + | :* Un plano en la posición (0,0,0) (recuerda pulsar el botón 'Reset' después de añadirlo a la escena, [https://wiki.cifprodolfoucha.es/index.php?title=UNITY_El_entorno_de_desarrollo#A.C3.B1adiendo_objetos como ya vimos en esta Wiki]) | ||
| + | :* Una esfera en la posición (-3,1,-2) | ||
| + | :* La cámara en la posición (-2,1,-7) '''dentro del GameObject Sphere'''. Recordar que al añadirlo al interior de la jerarquía, la posición es <u>relativa al objeto padre, en este caso la esfera</u>. | ||
| + | |||
| + | [[Imagen:Unity3d_camara_basico_2.jpg|500px|center]] | ||
| + | |||
| + | ::<u>Nota:</u> Las posiciones podéis cambiarlas a vuestro gusto. | ||
| + | |||
| + | |||
| + | : Si ahora, movéis la esfera en la 'vista Scene' (aún no sabemos crear el programa que permite mover al protagonista) veréis que la cámara también se mueve, al ser hija en la jerarquía. | ||
| + | [[Imagen:Unity3d_camara_basico_3.jpg|500px|center]] | ||
| + | |||
| + | |||
| + | :<u>Nota:</u> Hay que tener cuidado con este recurso, ya que la cámara también se verá afectada por la rotación del objeto padre (la esfera). | ||
| + | : Probar a rotar en ejecución la esfera en cualquiera de los ejes y veríes como la cámara también rota. Esto normalmente en un juego no queremos que ocurra. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | <br /> | ||
==Parámetros de una cámara en perspectiva== | ==Parámetros de una cámara en perspectiva== | ||
| Línea 62: | Línea 109: | ||
* Por último tenemos el '''viewport'''. | * Por último tenemos el '''viewport'''. | ||
: En una cámara 3D, el viewport va a establecer la relación de aspecto (la relación que existe entre el ancho y el alto de la pantalla). Hablaremos de esto en el siguiente punto. | : En una cámara 3D, el viewport va a establecer la relación de aspecto (la relación que existe entre el ancho y el alto de la pantalla). Hablaremos de esto en el siguiente punto. | ||
| + | : Indicar que en una cámara en perspectiva, el viewport va 'creciendo en tamaño' a medida que se aleja, a diferencia del viewport en una cámara ortográfica (2D) que siempre tiene el mismo tamaño. | ||
| Línea 72: | Línea 120: | ||
:* FOV tiene un valor de 60 grados. | :* FOV tiene un valor de 60 grados. | ||
:* El plano near está situado a 0.3 unidades de la cámara y el plano far a 1.000 unidades de la cámara. Por lo tanto la cámara va a 'dibujar' los objetos situados entre 0.3 y 1000 (es el view frustum) | :* El plano near está situado a 0.3 unidades de la cámara y el plano far a 1.000 unidades de la cámara. Por lo tanto la cámara va a 'dibujar' los objetos situados entre 0.3 y 1000 (es el view frustum) | ||
| − | :* La relación de aspecto va a ser 1 a 1 (valor del viewport). | + | :* La relación de aspecto va a ser 1 a 1 (valor del viewport). Vamos a explicar un poco más los valores del ViewPort: |
| + | ::* Los valores (X,Y) del viewport '''se mueven entre 0-1 con decimales, separados por punto'''. Indican la posición del Viewport (lo que se va a visualizar) '''en la pantalla''', siendo la posición (0,0) abajo-izquierda y (1,1) arriba-derecha. Así el valor (0.5,0) desplazaría el viewport hasta la mitad de la pantalla, apareciendo una banda negra por la izquierda. | ||
| + | ::* Los valores W,H pueden tener cualquier valor ya que indican la relación de aspecto, pero Unity va a ajustar la imagen a cualquier pantalla al generar el ejecutable del juego. Si ponemos unos valores inferiores a 1 (entre 0-1 con decimales) tendremos el efecto de 'ver' el viewport en pequeño, siendo el valor 0 en el que no se ve nada y el valor 1 en el que el viewport ocupa toda la pantalla. Así, un valor de (0.5,1) haría que el viewport visualizara la mitad de la pantalla de ancho. | ||
| + | |||
| + | *<u>Nota:</u> Los parámetros Clear Flags y Culling Mask los veremos en la [http://wiki.cifprodolfoucha.es/index.php?title=Unity_SkyBox sección SkyBox] y en la [https://wiki.cifprodolfoucha.es/index.php?title=Unity_Luces#Uso_de_capas_.28layers.29_con_luces sección de sombras aplicadas a luces] de esta Wiki. | ||
| Línea 84: | Línea 136: | ||
<br /> | <br /> | ||
| + | |||
==Relación de aspecto== | ==Relación de aspecto== | ||
| Línea 92: | Línea 145: | ||
| − | * Cuando alguien | + | * Cuando alguien filma una película lo hace utilizando la cámara con una relación de aspecto determinada. |
: ¿ Qué pasa cuando intentamos visualizar lo filmado en una televisión con una relación de aspecto diferente a la original ? | : ¿ Qué pasa cuando intentamos visualizar lo filmado en una televisión con una relación de aspecto diferente a la original ? | ||
| − | [[Imagen:Unity3d_cam_rel_aspecto_2.JPG| | + | [[Imagen:Unity3d_cam_rel_aspecto_2.JPG|300px|center]] |
<small><center>Imagen obtenido [http://www.todovisual.com.mx/tienda/Preguntas-proyectores-cine-en-casa.html de esta web]</center></small> | <small><center>Imagen obtenido [http://www.todovisual.com.mx/tienda/Preguntas-proyectores-cine-en-casa.html de esta web]</center></small> | ||
| Línea 103: | Línea 156: | ||
: Esto es así para que la película '''no se deforme''': | : Esto es así para que la película '''no se deforme''': | ||
[[Imagen:Unity3d_cam_rel_aspecto_3.JPG|500px|center]] | [[Imagen:Unity3d_cam_rel_aspecto_3.JPG|500px|center]] | ||
| − | : En esta imagen, el ancho | + | : En esta imagen, el ancho se ha duplicado, pero la altura no, por lo que la imagen aparece 'deformada'. |
| Línea 116: | Línea 169: | ||
| − | [[Imagen:Unity3d_cam_rel_aspecto_4.jpg| | + | [[Imagen:Unity3d_cam_rel_aspecto_4.jpg|300px|center]] |
* Podemos comprobar como quedaría el juego con diferentes relaciones de aspecto en Unity. | * Podemos comprobar como quedaría el juego con diferentes relaciones de aspecto en Unity. | ||
| + | [[Imagen:Unity3d_cam_rel_aspecto_5.jpg|800px|center]] | ||
| + | : En este ejemplo, la pantalla donde se probaría el juego tiene una relación 16:9 mientras que el juego se estaría ejecutando con una resolución 4:3 (Unity permite establecer la resolución con la que se juega el juego que no tiene por qué coincidir con la pantalla completa. | ||
| + | : Si cambiamos la relación de aspecto a 16:9 vemos que el juego ocupa toda la pantalla (tenéis que cambiar el tamaño de la ventana Game para que el juego ocupe todo): | ||
| + | [[Imagen:Unity3d_cam_rel_aspecto_6.jpg|800px|center]] | ||
| + | <br /> | ||
| + | ==Layers== | ||
| + | * Más información en [https://docs.unity3d.com/Manual/Layers.html este enlace]. | ||
| + | * Las Capas o Layers son un recurso que nos proporciona Unity gracias al cual vamos a poder asociar a cada GameObject de la escena una capa. | ||
| + | : Cada capa está referenciada por un nombre. | ||
| + | * De esta forma el <u>uso de capas nos va a permitir</u>: | ||
| + | :* Que una determinada cámara solo visualice (dibuje) los gameobjects que estén asociados a la capa indicada. | ||
| + | :* Cuando veamos los 'rayos' a continuación, veremos que el uso de capas nos va a permitir restringir la detección de colisiones solo a los gameobjects que se encuentren en una capa determinada. | ||
| + | :* Que las luces solo tengan efecto (iluminen) aquellos objetos que se encuentren en una determinada capa. | ||
| + | * Por defecto ya existen una serie de capas creadas y nosotros podemos añadir las que queramos hasta un <u>máximo de 32</u>. | ||
| − | < | + | <gallery caption="Layers" widths="350" heights="300px" perrow="2"> |
| + | Image:Unity3d_cam_layers_1.jpg| Para crear nuevas capas podemos ir por la opción de menú Edit => Project Settings => Tags and Layers | ||
| + | Image:Unity3d_cam_layers_2.jpg| Ahora podemos añadir nuevas capas a partir de la 7. | ||
| + | Image:Unity3d_cam_layers_3.jpg| Podemos ir a la misma pantalla si escogemos un gameobject cualquiera de la escena y desplegamos su propiedad Layer. | ||
| + | Image:Unity3d_cam_layers_4.jpg| En este ejemplo voy a crear una nueva capa de nombre 'Invisible'. El número no tiene por qué coincidir con el vuestro. | ||
| + | Image:Unity3d_cam_layers_5.jpg| Una vez creada '''debemos de asignar dicha capa a los gameobjects que queramos'''. En el ejemplo, están seleccionados los dos cubos laterales y se les asigna la nueva capa a la vez. | ||
| + | Image:Unity3d_cam_layers_6.jpg| En las propiedades de la cámara '''desmarcamos''' la capa 'Invisible'. | ||
| + | Image:Unity3d_cam_layers_7.jpg| Podemos comprobar que la propiedad 'Culling Mask' de la cámara pone Mixed y no visualiza los dos cubos azules. | ||
| + | </gallery> | ||
| − | |||
| − | |||
| − | |||
| − | + | <br /> | |
| + | ==Avanzado== | ||
<br /> | <br /> | ||
| − | === | + | ===Trabajando con varias cámaras a la vez=== |
| − | * | + | * Lo visto anteriormente nos puede servir para crear juegos en los que tengamos que hacer uso de varias cámaras. |
| − | : | + | : Crea una nueva escena de nombre Escena_UD2_CamaraPerspectiva_DosCamaras y cárgala presionando dos veces sobre ella. |
| − | |||
| − | * | + | * Sigue los siguientes pasos: |
| − | : | + | <gallery caption="Creando un espejo retrovisor" widths="400" heights="300px" perrow="2"> |
| + | Image:Unity3d_2camaras_1.jpg| Duplica la cámara MainCamera de la escena (con la cámara seleccionada en la Hierarchy Window, presiona las teclas Ctrl+D). | ||
| + | Image:Unity3d_2camaras_2.jpg| Sitúa las dos cámaras en la posición (0,0,0) con la opción de '''Reset'''. | ||
| + | Image:Unity3d_2camaras_3.jpg| Coloca la cámara 'VistaTrasera' en la posición (0,0,0) y rotada (0,180,0). | ||
| + | Image:Unity3d_2camaras_4.jpg| Con la cámara 'VistaTrasera' seleccionada vamos a eliminar dos componentes que no vamos a necesitar: Audio Listener y Flare Layer. '''Cambia la propiedad depth y dale de valor 1.''' | ||
| + | Image:Unity3d_2camaras_5.jpg| Ponemos los valores indicados X,Y,W,H del viewport de la cámara 'VistaTrasera'. Podéis probar a cambiarlos para ver el efecto. Si estáis en la ventana Game podéis ver como se visualizan las dos cámaras. Indicar que cuando tenemos varias cámaras, la propiedad '''depth''' nos va a indicar cual es la cámara que va a visualizarse en el juego. La que tenga el valor mayor será la cámara 'activa'. Si tenemos varias y no ocupan toda la pantalla, se podrán visualizar a la vez como en el ejemplo. | ||
| + | Image:Unity3d_2camaras_6.jpg| Arrastra dos modelos y coloca uno en la posición (0,0,16) y el otro en la posición (0,0,-16). Observa la ventana Game. | ||
| + | </gallery> | ||
| − | |||
| − | |||
| + | * Indicar que podemos mejorar el efecto y tener una imagen 'dentro de la cual' tendríamos la imagen de la cámara. | ||
| + | : Imaginar un espejo o un retrovisor de un coche... | ||
| − | : | + | : Para ello tendríamos que hacer uso de un [https://docs.unity3d.com/Manual/class-RenderTexture.html Render Texture]. |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | <br /> | |
| − | |||
| − | : | + | * <u>Nota:</u> Vuelve a cargar la escena '''Escena_UD2_CamaraPerspectiva'''. |
| − | |||
| − | |||
| + | * Cuando trabajamos sobre el mundo 3D, hablamos de coordenadas (x,y,z) sin embargo nuestra cámara está visualizando 'pixeles' sobre una pantalla 2D (ancho-alto). | ||
| − | + | : Es necesario tener algún mecanismo que nos permita 'pasar' de coordenadas de nuestro mundo (world cooordinates) a coordenadas de nuestra cámara (screen space). | |
| − | |||
| + | * Veamos las dos operaciones. | ||
<br /> | <br /> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | <br /> | ||
| + | '''[https://wiki.cifprodolfoucha.es/index.php?title=Programacion_de_videojuegos_con_UNITY3D#UNIDAD_2:_Conceptos_b.C3.A1sicos_3D Enlace a la página principal del curso]''' | ||
| + | <br /> | ||
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2018). | <br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2018). | ||
Revisión actual del 14:20 19 abr 2020
Sumario
Introducción
- Preparación:
- Crea una nueva escena de nombre Escena_UD2_Camara_Perspectiva
- La cámara va a ser nuestros ojos. Van a mostrar la escena como si estuviéramos nosotros viendo con nuestros ojos los objetos 3D dibujados a nuestro alrededor.
- En el desarrollo de videojuegos podemos hacer uso dos tipos de cámara diferentes:
- Cámara ortográfica: Utilizada en los juegos 2D.
- Cámara en perspectiva. Utilizada en los juegos 3D.
- En este punto vamos a tratar solo la cámara en perspectiva.
Cámara en perspectiva
- Este tipo de cámara va a 'dibujar' los objetos en perspectiva, en función de la distancia, de tal forma que los objetos más cercanos se verán más grandes y los objetos más lejanos se verán más pequeños.
- En este gráfico, la cámara estaría situada en en cuadrado más pequeño, mirando cara a los triángulos. Después explicaremos más en detalle.
- Como vemos existen dos triángulo, el triángulo rojo está delante del verde, por lo tanto debe de verse mayor (los dos tienen el mismo tamaño).
- Veamos el resultado:
- Veamos un poco más en detalle los parámetros que conforman una cámara en perspectiva.
Cámara en perspectiva en Unity
- Al crear un nuevo proyecto, Unity añade al mismo una cámara por defecto, de nombre Main Camera.
- Si pulsamos sobre ella podemos ver que aparece una ventana denominada Camera Preview que nos muestra como el usuario vería nuestro juego. Sería igual a que si pulsamos sobre la 'Game Window'.
- Al igual que cualquier GameObject de la escena vamos a poder mover la cámara o rotarla en cualquiera de sus tres ejes, accedediendo a su propiedad Transform.
- También vamos a poder colocar la cámara como 'hija' de cualquier GameObject en la jerarquía, pudiendo conseguir que la cámara se mueva al mismo tiempo que un 'protagonista'.
- Veamos un ejemplo:
- Preparación previa:
- Crea una escena de nombre Escena_UD2_Camara3D_1 y guárdala en la carpeta Scenes dentro de Assets en la ventana Project Window.
- Dentro de la escena crea la siguiente jerarquía de GameObjects:
- Un plano en la posición (0,0,0) (recuerda pulsar el botón 'Reset' después de añadirlo a la escena, como ya vimos en esta Wiki)
- Una esfera en la posición (-3,1,-2)
- La cámara en la posición (-2,1,-7) dentro del GameObject Sphere. Recordar que al añadirlo al interior de la jerarquía, la posición es relativa al objeto padre, en este caso la esfera.
- Nota: Las posiciones podéis cambiarlas a vuestro gusto.
- Si ahora, movéis la esfera en la 'vista Scene' (aún no sabemos crear el programa que permite mover al protagonista) veréis que la cámara también se mueve, al ser hija en la jerarquía.
- Nota: Hay que tener cuidado con este recurso, ya que la cámara también se verá afectada por la rotación del objeto padre (la esfera).
- Probar a rotar en ejecución la esfera en cualquiera de los ejes y veríes como la cámara también rota. Esto normalmente en un juego no queremos que ocurra.
Parámetros de una cámara en perspectiva
- En la imagen anterior el ojo representa a una cámara.
- Como vemos, de él 'surgen' rayos formando un pirámide que se va abriendo hasta el infinito.
- Cuando configuramos una cámara en perspectiva podemos determinar desde que punto y hasta que punto se visualizan los objetos.
- Fuera de estas dos 'distancias' los objetos no se dibujarán.
- Esos dos puntos en la figura que representa el área de visualización (como una pirámide aumentando de tamaño), forman dos planos que es lo que se conoce como el plano near (el situado en el punto más cercano) y el plano far (el situado en el punto más alejado)
- El área de visualización (lo que va a dibujar la cámara) se conoce como view frustum.
- Normalmente cuando definimos una cámara 3D indicamos un punto muy cercano (por ejemplo, 0.3) y un punto muy lejano (1000) aunque este último va a depender del tipo de juego. Recordar que estamos hablando de 'unidades' en el mundo 3D que son los cuadrados que se ven en el suelo.
- ¿ Por qué limitar el área de visualización ? Para ahorrar recursos. Ten en cuenta que un objeto 3D muy alejado no será apreciado por la vista, pero el ordenador seguirá dibujándolo aunque no lo veas.
- Existe otro parámetro que es el Field of View => FOV
- Este parámetro es un ángulo y representa el ángulo de visión de la cámara sobre la proyección de los objetos.
- Viene a ser como la apertura del objetivo de una cámara. Cuanto más grande, más abarcamos.
- El valor por defecto es de 60 grados, pero dependiendo del juego puede ser que nos interese aumentarlo, como en los juegos de primera persona.
- Cabe señalar que al disminuir el ángulo conseguimos un 'efecto zoom' como se ve en la imagen anterior.
- IMPORTANTE: En la cámara en perspectiva tiene que cumplirse que 0 < near < far.
- Por último tenemos el viewport.
- En una cámara 3D, el viewport va a establecer la relación de aspecto (la relación que existe entre el ancho y el alto de la pantalla). Hablaremos de esto en el siguiente punto.
- Indicar que en una cámara en perspectiva, el viewport va 'creciendo en tamaño' a medida que se aleja, a diferencia del viewport en una cámara ortográfica (2D) que siempre tiene el mismo tamaño.
- En Unity3D podemos seleccionar la cámara en le ventana de jerarquía y podremos observar los valores de todos estos parámetros en la ventana inspector:
- Podemos observar:
- FOV tiene un valor de 60 grados.
- El plano near está situado a 0.3 unidades de la cámara y el plano far a 1.000 unidades de la cámara. Por lo tanto la cámara va a 'dibujar' los objetos situados entre 0.3 y 1000 (es el view frustum)
- La relación de aspecto va a ser 1 a 1 (valor del viewport). Vamos a explicar un poco más los valores del ViewPort:
- Los valores (X,Y) del viewport se mueven entre 0-1 con decimales, separados por punto. Indican la posición del Viewport (lo que se va a visualizar) en la pantalla, siendo la posición (0,0) abajo-izquierda y (1,1) arriba-derecha. Así el valor (0.5,0) desplazaría el viewport hasta la mitad de la pantalla, apareciendo una banda negra por la izquierda.
- Los valores W,H pueden tener cualquier valor ya que indican la relación de aspecto, pero Unity va a ajustar la imagen a cualquier pantalla al generar el ejecutable del juego. Si ponemos unos valores inferiores a 1 (entre 0-1 con decimales) tendremos el efecto de 'ver' el viewport en pequeño, siendo el valor 0 en el que no se ve nada y el valor 1 en el que el viewport ocupa toda la pantalla. Así, un valor de (0.5,1) haría que el viewport visualizara la mitad de la pantalla de ancho.
- Nota: Los parámetros Clear Flags y Culling Mask los veremos en la sección SkyBox y en la sección de sombras aplicadas a luces de esta Wiki.
- Si seleccionamos la cámara en la ventana de jerarquía podemos ver en la ventana de escena el área de visualización de la cámara que viene representado por unas líneas blancas que surgen de ella formando una pirámide:
Relación de aspecto
- Todos estamos 'cansados' de escuchar algo como: Me voy a comprar una televisión 16:9, o voy a comprarme un monitor 16:10
- Estos números representan la relación que existe entre el ancho (primer número) y el alto (segundo número)
- Cuando alguien filma una película lo hace utilizando la cámara con una relación de aspecto determinada.
- ¿ Qué pasa cuando intentamos visualizar lo filmado en una televisión con una relación de aspecto diferente a la original ?
- Que aparecen las temidas bandas negras :)
- Esto es así para que la película no se deforme:
- En esta imagen, el ancho se ha duplicado, pero la altura no, por lo que la imagen aparece 'deformada'.
- En juegos pasa algo parecido, con la ventaja que los objetos son dibujados en el momento que se juega (no está filmado previamente, bueno, aunque puede ser que haya escenas animadas previamente hechas).
- Lo que tenemos que tener claro es que la cámara tiene una relación de aspecto que se lo da el ViewPort en su valores W y H:
- Esa relación de aspecto no tiene que ver con el dispositivo físico donde se va a ejecutar el juego.
- Así, si ejecuto el juego en una pantalla con 16:9, en principio se vería deformado.
- Para evitarlo, Unity (si no tocamos los valores por defecto) ajustará, al iniciar el juego, el ViewPort al tamaño de la pantalla para mantener la relación de aspecto.
- En el caso de los juegos 3D esto llevará consigo que se verán diferentes zonas.
- Podemos comprobar como quedaría el juego con diferentes relaciones de aspecto en Unity.
- En este ejemplo, la pantalla donde se probaría el juego tiene una relación 16:9 mientras que el juego se estaría ejecutando con una resolución 4:3 (Unity permite establecer la resolución con la que se juega el juego que no tiene por qué coincidir con la pantalla completa.
- Si cambiamos la relación de aspecto a 16:9 vemos que el juego ocupa toda la pantalla (tenéis que cambiar el tamaño de la ventana Game para que el juego ocupe todo):
Layers
- Más información en este enlace.
- Las Capas o Layers son un recurso que nos proporciona Unity gracias al cual vamos a poder asociar a cada GameObject de la escena una capa.
- Cada capa está referenciada por un nombre.
- De esta forma el uso de capas nos va a permitir:
- Que una determinada cámara solo visualice (dibuje) los gameobjects que estén asociados a la capa indicada.
- Cuando veamos los 'rayos' a continuación, veremos que el uso de capas nos va a permitir restringir la detección de colisiones solo a los gameobjects que se encuentren en una capa determinada.
- Que las luces solo tengan efecto (iluminen) aquellos objetos que se encuentren en una determinada capa.
- Por defecto ya existen una serie de capas creadas y nosotros podemos añadir las que queramos hasta un máximo de 32.
- Layers
Avanzado
Trabajando con varias cámaras a la vez
- Lo visto anteriormente nos puede servir para crear juegos en los que tengamos que hacer uso de varias cámaras.
- Crea una nueva escena de nombre Escena_UD2_CamaraPerspectiva_DosCamaras y cárgala presionando dos veces sobre ella.
- Sigue los siguientes pasos:
- Creando un espejo retrovisor
Ponemos los valores indicados X,Y,W,H del viewport de la cámara 'VistaTrasera'. Podéis probar a cambiarlos para ver el efecto. Si estáis en la ventana Game podéis ver como se visualizan las dos cámaras. Indicar que cuando tenemos varias cámaras, la propiedad depth nos va a indicar cual es la cámara que va a visualizarse en el juego. La que tenga el valor mayor será la cámara 'activa'. Si tenemos varias y no ocupan toda la pantalla, se podrán visualizar a la vez como en el ejemplo.
- Indicar que podemos mejorar el efecto y tener una imagen 'dentro de la cual' tendríamos la imagen de la cámara.
- Imaginar un espejo o un retrovisor de un coche...
- Para ello tendríamos que hacer uso de un Render Texture.
- Nota: Vuelve a cargar la escena Escena_UD2_CamaraPerspectiva.
- Cuando trabajamos sobre el mundo 3D, hablamos de coordenadas (x,y,z) sin embargo nuestra cámara está visualizando 'pixeles' sobre una pantalla 2D (ancho-alto).
- Es necesario tener algún mecanismo que nos permita 'pasar' de coordenadas de nuestro mundo (world cooordinates) a coordenadas de nuestra cámara (screen space).
- Veamos las dos operaciones.
Enlace a la página principal del curso
-- Ángel D. Fernández González -- (2018).

