Читать книгу Unity 3D - Marc Lidon Mañas - Страница 14
Оглавление1. Importar los modelos
En este capítulo vamos a trabajar con modelos, materiales, texturas y crearemos nuestros prefabs con colisionadores para construir nuestro nivel. Para seguir este capítulo puedes crear un proyecto nuevo e importar el paquete de assets que viene con el material del libro o puedes abrir el proyecto Construcción escenario modular.
Antes de empezar vamos a importar el material de este capítulo 4. Primero debes tener localizada la carpeta con el proyecto de este capítulo y acceder desde la barra principal Assets > Import Package > Custom Package y seleccionar el paquete de este capítulo que tiene el nombre de Modelos_Capitulo 4.unitypackage.
En el proyecto verás que en la ventana Protector tenemos una carpeta con el nombre Mi_Escenario que contiene las siguientes carpetas:
Fig. 4.1
Antes de continuar vamos a crear las carpetas que nos van a hacer falta. Así pues crearemos las siguientes carpetas dentro de Mi_Escenario.
•Materiales
•Prefabs
•Escenas
La ventana inspector debería quedarte como te muestro en la siguiente imagen:
Fig. 4.2
2. Modelos
En esta carpeta tenemos los modelos que han sido creados con un programa de 3d como puede ser Blender, Maya, Lightwave, Modo, Cinema4D etc. En este libro no se enseña cómo se crean estos modelos pero si como podemos trabajar con ellos en Unity.
Si seleccionamos uno de los Modelos, por ejemplo el que tiene como nombre Caja_1, veremos que tiene un añadido en su interior como te muestro a continuación:
Fig. 4.3
Al seleccionar un Modelo verás que en la ventana inspector aparecen una serie de propiedades del modelo que corresponden a la configuración de su importación. En este apartado disponemos de tres propiedades a configurar dependiendo del modelo.
Fig. 4.4
•Model: Esta opción contiene todos los parámetros que debemos tener en cuenta sobre la superficie del modelo, que se agrupa en 3 secciones : Meshes (Superficies), Normal & Tangents (Referente a la dirección de las normales de las superficies del modelo) y Materials (Materiales).
•Rig: En el caso de que el modelo sea un personaje es posible importar un rig.
•Animations: Algunos modelos pueden llevar animaciones.
Para este capítulo solamente vamos a utilizar el modelo como superficie y no vamos a tener ni rig ni animaciones.
Otro aspecto interesante que puedes observar en la ventana inspector es una muestra del modelo visualizado en la parte inferior.
Fig. 4.5
En la imagen anterior el cubo de la izquierda es el modelo con una material por defecto como lo veras en la escena y el cubo de la derecha te muestra la superficie con un número de vértices y triángulos.
Nuestro modelo en escena
A continuación vamos a poner algunos modelos en escena para trabajar con ellos. Para empezar vamos a seleccionar y a arrastrar dentro de la ventana Hierarchy (Jerarquía) 3 modelos; Suelo_1, Pared_Principal_1 y la Caja_1 .
No te preocupes si te quedan un poco desubicados en la escena, porque lo importante es que te queden de una forma parecida a la que te muestro a continuación:
Fig. 4.6
3. Materiales y texturas
De momento nuestros modelos no son gran cosa y es porque tienen un material por defecto que no tiene textura. Bien ahora vamos a crear materiales para nuestros modelos, para ello en la ventana Project accedemos a la carpeta Materiales y dentro de ella crearemos un material pulsando botón derecho del ratón y seleccionando la opción Create>Material y le ponemos el nombre de Caja_1.
Fig. 4.7
A continuación vamos a ponerle textura a este material pero antes en el menu Shader donde pone Standard le damos clic y seleccionamos la opción Standard (Specular setup) como te muestro en la siguiente imagen:
Fig. 4.8
Ahora asegúrate de que Rendering Mode se encuentra con la opción Opaque (Opaco) y haz clic encima del punto que encontraras en la opción Albedo. Se abrirá una nueva ventana con las texturas que se encuentran en la carpeta Texturas, selecciona la textura Caja_Difuse.
Fig. 4.9
Ahora selecciona el material Caja_1 desde la ventana Project y arrástralo encima del modelo Caja_1, como te muestro en la imagen siguiente.
Fig. 4.10
Ahora vemos cómo se le aplica el material al modelo caja_1. El siguiente paso es ponerle al material las texturas de Specular, Normal Map y Occlusion como hemos hecho con Albedo. Te dejo una captura de cómo me quedan los parámetros del material Caja_1 y cómo se ve el modelo en escena.
Fig. 4.11
Un apunte que debes tener en cuenta es que cuando le pongas la textura Normal Map, deberás pulsar el botón Fix Now para que se aplique este tipo de textura.
Fig. 4.12
Ahora es el momento de que crees los materiales que faltan para los distintos modelos, para que tengas una pequeña guía de te doy una pista de cuantos materiales debes crear en la siguiente imagen:
Fig. 4.13
En realidad solamente tienes que crear dos materiales más el de la Caja_2 y otro que he llamado Escena_General que sirve para el resto de modelos. Una vez tengas estos materiales pon todos los modelos en escena y arrastra sus respectivos materiales.
Fig. 4.14
El sombreado de los materiales
Cuando creamos materiales Unity utiliza dos opciones de sombreado el Standard “metallic”y el Standard (Specular setup).
•Standard ”metálico” dispone de una valor entre (0-1) que identifica si es metálico o no. Si el valor es 1 el parámetro color Albedo controla el color del reflejo especular y la mayoría de la luz se refleja. Cuando el valor es 0 el reflejo especular tendrá el color de la luz proyectada y la superficie de este material apenas tendrá reflejo.
•Estándar “especular” en este caso el color especular se utiliza para controlar el color y la fuerza de las reflexiones especulares en el material. Esto nos permite tener un reflejo especular de un color diferente al reflejo difuso.
Fig. 4.15
4. Parámetros básicos de los materiales
Ahora que has trabajado un poco con los materiales te resumo sus características más destacadas, para que en un futuro cuando crees tus propios modelos puedas utilizar materiales correctamente.
Rendering Mode
En este apartado nos encontramos con un desplegable en donde podemos seleccionar entre cuatro opciones. El parámetro en sí está enfocado en la transparencia del objeto.
Fig. 4.16
•Opaque (Opaco): es el valor predeterminado y adecuado para objetos sólidos normales sin áreas transparentes.
•Cut out (Recortar): le permite crear un efecto transparente que tiene bordes duros entre las áreas opacas y transparentes. En este modo, no hay áreas semitransparentes, la textura es 100% opaca o invisible. Esto es útil cuando se usa transparencia para crear la forma de materiales como hojas o tela con agujeros y jirones.
•Transparent (Transparente): adecuado para la representación de materiales transparentes realistas, como plástico transparente o vidrio. En este modo, el material tomará valores de transparencia (basados en el canal alfa de la textura y el alfa del tint colour), sin embargo, los reflejos y las iluminaciones se verán con toda claridad, como en el caso de los materiales transparentes reales.
•Fade (Fundido): permite que los valores de transparencia desvanezcan por completo un objeto, incluidos los reflejos o reflejos especulares que pueda tener. Este modo es útil si quieres animar un objeto que se desvanece hacia adentro o hacia afuera. No es adecuado para la representación de materiales transparentes realistas.
Main Maps (Mis mapas)
En este apartado disponemos de varios parámetros en donde utilizaremos mapas de textura según necesitemos para nuestros modelos.
Albedo
Controla el color base de la superficie.
Fig. 4.17
Si disponemos de una textura esta se representara en el objeto. En el caso anterior sucede para materiales opacos pero en el caso de que tengamos un material transparente este parámetro puede controlar la transparencia del material con una textura, los valores son blanco completamente opaco y el negro totalmente transparente.
Fig. 4.18
Modo Specular parámetro Specular
Son esencialmente los reflejos directos de las fuentes de luz en su Escena, que generalmente se muestran como reflejos brillantes y brillan en la superficie de los objetos (aunque los reflejos especulares también pueden ser sutiles o difusos).
Cuando se trabaja en modo Especular, el color RGB en el parámetro Especular controla la intensidad y el matiz del color de la reflectividad especular. Esto incluye el brillo de las fuentes de luz y los reflejos del entorno.
Fig. 4.19
Cuando ponemos una textura al parámetro Specular, tanto el parámetro Specular como el control deslizante Smoothness desaparecen. Por otro lado, los niveles especulares para el material están controlados por los valores en los canales Rojo, Verde y Azul de la Textura y los niveles de Suavidad para el material están controlados por el canal Alfa de la misma Textura. Esto nos unifica el trabajo porque una misma textura define como van a ser las áreas ásperas, lisas, una diferentes valores para la especularidad del objeto.
Fig. 4.20
Modo Metallic parámetro Metallic
En este modo a pesar del gran parecido al del Specular la reflectividad y el comportamiento de la luz en este tipo de material es variado por los parámetros Metálico (metallic) y el nivel de suavizado (Smoothnes). Estos dos parámetros bien configurados también nos proporcionan las reflexiones especulares que se siguen generando.
Fig. 4.21
Este Modo sera el que te ponga Unity por defecto siempre que crees un material nuevo, porque a pesar de que se llame Metallic no es solo para materiales metálicos, la razón es que este parámetro intenta determinar cuánto se parece el material que estás creando a uno metálico. Para que entendamos este concepto debemos entender que en una textura el color blanco representará el valor máximo de Metallic y el color negro es el valor mínimo de Metallic. De este modo, si tenemos un material para el traje de un guerrero que tiene partes de cuero y metálicas podremos determinar qué zonas deben tener mayor reflexión.
En el caso de que no tengamos ninguna textura este parámetro lo controlaremos mediante un deslizador entre los valores 0 y 1.
Fig. 4.22
Smoothness
Este parámetro se utiliza tanto en el modo metálico como en el modo especular proporcionando un servicio similar. En mi apreciación personal cuanto más nos acercamos al valor (1) del deslizador mayor es la concentración de la espectacularidad del material tanto en el modo metálico como el modo especular, por el contrario se disipa o suaviza cuanto más nos acercamos al valor (0).
Fig. 4.23
Normal Map
Este tipo de mapas nos permite representar relieve en nuestros modelos a pesar de que estos sean simples planos. Este tipo de texturas son muy utilizadas en los videojuegos, ya que nos permiten dar detalle a nuestros modelos. En los modelos importados de este capítulo puedes ver algunos mapas normales para los modelos que son en realidad cubos.
Los mapas normales son un tipo de mapa de relieve. Son un tipo especial de textura que le permite agregar detalles de la superficie, como protuberancias, ranuras y arañazos, a un modelo que capta la luz como si estuvieran representados por una geometría real. Este tipo de materiales se pueden crear con programas de diseño en 3D.
Fig. 4.24
Height Map
Este tipo de mapas o texturas tienen una función parecida a la de las normal maps pero en este caso es mucho más complejo ya que requieren más geometría para que el resultado sea aceptable. El objetivo es también crear relieve en una superficie en el ejemplo del capítulo no utilizaremos ninguna, pero este tipo de texturas se utilizan muchas veces para dar detalles adicionales a superficies con bastante geometría como los terrenos.
Fig. 4.25
Este tipo de mapas son en tonos de grises en donde el color blanco representa la zona más alta y el color negro la zona más baja.
Oclusion Map
Este tipo de texturas son mapas que intenta crear una iluminación ambiental y es un añadido a la textura principal. Es decir las partes cóncavas de un modelo serán oscurecidas, dando mayor sensación de profundidad. En muchos casos este parámetro combinado con el de normales ayuda a definir mejor el relieve y que se pueda apreciar mejor los detalles de un modelo.
Este tipo de texturas son imágenes en escala de grises, en donde las zonas en blanco son las zonas en donde la iluminación es directa y las zonas negras son donde no recibe iluminación. Este tipo de texturas se suelen crear con programas de creación 3d.
Fig. 4.26
Emission
Este parámetro cuando lo activamos es posible hacer que nuestro material emita luz y poder controlar el color y la intensidad de este. También nos permite incorporarle una textura. Un ejemplo que puedes ver en el ejemplo de este capítulo es la caja dos que dispone de una textura con fondo negro en donde solamente están en blanco las zonas que se quieren iluminar.
Luego puedes utilizar la caja selectora de color para ponerle el color que desees y en la caja de su lado derecho ponerle un valor para la intensidad.
Fig. 4.27
Detail Mask
Este parámetro permite utilizar una textura que actúe en forma de máscara para esconder ciertas zonas de nuestro modelo para aplicar otro tipo de detalle. En otras palabras, sería una forma de mostrar una parte de la textura en ciertas zonas que queremos que se muestren y esconder otras zonas de la textura que no queremos que se muestren. En este capítulo no vamos a entrar en detalle con este parámetro puesto que las texturas ya están preparadas para los modelos.
Parámetros de escalado y repetición
Esta zona se compone del Tiling en donde podemos especificar cuantas veces repetimos una textura en los ejes (X) e (Y) y el Offset para desplazarla en los ejes anteriores. Estos parámetros los podemos utilizar siempre que tengamos texturas con un patrón de repetición en estos ejes, si no es el caso es mejor no utilizar estos parámetros.
Fig. 4.28
Secondary Maps
Unity nos permite añadir un segundo conjunto de texturas sobre las que tenemos ya aplicadas. Esto es útil cuando queremos agregar algún detalle extra a nuestros modelos. Como hemos dicho en el apartado de escalado y repetición el tipo de texturas que se suele utilizar en estos dos parámetros suelen ser texturas preparadas para repetirse en gran escala.
5. Colliders y Rigid Bodies
Los colliders son un componente de los Gameobject se adaptan a la forma de nuestros modelos en cierto modo y crean colisiones. Este componente no lo tienen nuestros modelos por que han sido importados. Los colliders nos permiten que el objeto cree una colisión con otros objetos cuando estos trabajan con físicas.
Todos nuestros modelos deben tener un collider, para que más adelante nuestro player no atraviese las paredes o se caiga en el espacio infinito. Para ponerles un collider debemos seleccionar el objeto desde la ventana Jerarquía o la ventana escena, y desde la ventana inspector añadirle un collider desde Add Component >Physics > Box Collider. En este caso como todos los modelos son formas cuadradas utilizaremos el Box Collider como te muestro a continuación:
Fig. 4.29
El Box Collider anterior es la caja representada en color verde, en la imagen se ha exagerado el tamaño para que se diferencie bien del modelo. Normalmente cuando creas un componente collider este se adapta automáticamente al modelo. Para cambiar el tamaño puedes utilizar el botón Edit Collider y hacerlo desde la ventana escena o puedes utilizar las cajas de valores del apartado Size.
Un Rigidbody es otro componente de un Gameobject que creará un comportamiento físico en nuestros modelos. Este componente Rigidbody se lo vamos a aplicar a las dos cajas que tenemos en nuestra escena. Esto provocará que nuestras cajas reaccionen a la gravedad y reaccionaran a las colisiones.
Fig. 4.30
Antes de continuar, si estas siguiendo el capítulo mientras realizas las tareas que te propongo,te habrás encontrado con un inconveniente en el modelo Rampa, puesto que tiene una inclinación y el componente collider toma todo el ancho y todo el alto del modelo. Esto es un problema muy común con los modelos de este tipo vamos a ver como resolverlo.
Fig. 4.31
•Primero borra el componente collider del modelo de la rampa.
Fig. 4.32
•Dirígete a la ventana Jerarquía y en el botón Create seleccionamos la opción Empty.
•Se creará un GameObject vacío el cual le pondremos el nombre Collider_Rampa.
•A este GameObject le añadiremos un BoxCollider y lo escalaremos y lo posicionaremos de manera que se adapte lo máximo posible al modelo.
•Para finalizar arrastra el GameObject Collider_Rampa encima de Rampa para que se emparenten y de este modo ya tenemos el collider.
Fig. 4.33
Ahora podemos controlar el objeto Collider_Rampa que es hijo de Rampa utilizando las herramientas de escalado rotación y desplazamiento podemos darle la inclinación que deseemos. Voy a realizar capturas del proceso para que puedas ver como lo hago.
Primero debes utilizar el Gizmo de la ventana Vista y proyectar la vista que se parezca a la que te muestro a continuación:
Fig. 4.34
Fig. 4.35
Si todo es correcto debería quedarte la rampa como se muestra en la última imagen. A continuación veremos como preparar nuestros Prefabs para empezar a montar nuestro escenario modular.
6. Model vs Prefabs
Un archivo de modelo puede contener un objeto 3D, como un personaje, un edificio o un mueble. Este modelo es importado como activos múltiples, en donde suele contener la malla del objeto.
Cuando hablamos de Prefabs estamos hablando de modelos que hemos configurado en Unity y están listos para ser usados. Es decir los Prefabs ya tienen sus texturas puestas, sus animaciones configuradas (si tienen animación), sus colliders, rigidbody etc.
Ahora accederemos a la carpeta Prefabs en la ventana Proyectos y explicaré dos modos de crear Prefabs.
El primero y el más sencillo es configurar nuestro modelo, con sus texturas y sus colliders en la ventana escena y luego desde la ventana Jerarquía seleccionamos el nombre del objeto y lo arrastramos en el interior de la carpeta. Este tomará un color azulado y ya tendrás tu Prefab para utilizarlo siempre que lo necesites.
Fig. 4.36
Otra forma es crear un Prefab vacío dentro de la carpeta Prefabs haciendo clic con el botón derecho del ratón y acceder a la opción Create > Prefabs como te muestro a continuación:
Fig. 4.37
Se creara un Prefab vacío al que le puedes poner el nombre que quieras. Esta forma es muy útil cuando quieres crear configuraciones distintas de tus modelos y guardarlos como distintos Prefabs. Por defecto el nuevo Prefab es de color blanco cuando está vacío, en el momento que nosotros arrastremos un modelo encima de este Prefab tomara el color azul y ya tendremos nuestro Prefab listo para usar.
Fig. 4.38
Ahora debes coger todos los modelos y crear un Prefab de ellos para el siguiente apartado en donde aprenderás a montar partes de un escenario modular.
Fig. 4.39
7. Montar un escenario simple
Este es el momento de colocar todos nuestros Prefabs de forma ordenada para crear una escena simple que podría ser el primer nivel de un videojuego. En la imagen siguiente tenemos un esquema de un escenario muy básico que hemos dividido en dos sectores.
Fig. 4.40
Sector A
Para el sector A primero vamos a crear un GameObject vacío con el nombre de Sector A. Ahora seleccionaremos el Prefab Suelo_1 y lo arrastramos en la escena. En la ventana Jerarquia seleccionamos el Prefab Suelo_1 y lo duplicamos haciendo clic con el botón derecho dentro de la ventana Jerarquía y seleccionando la opción Duplicate.
Fig. 4.41
Ahora vamos a colocar estas dos piezas una al lado de la otra bien encajadas para ello selecciona uno de los Prefabs en la escena y luego pulsa la tecla (V) del teclado y verás tu cursor se siente atraído por los vértices del Prefab. Con la tecla (V) pulsada arrastra tu cursor hasta el vértice opuesto del otro Prefab para que se pongan justo uno al lado del otro.
Fig. 4.42
Ahora seleccionamos estos dos Prefabs y los duplicamos a la vez, en este caso si queremos moverlos de forma que siga el espacio de la cuadrícula de la escena movemos los duplicados manteniendo pulsado la tecla_Control.
Fig. 4.43
Ahora debemos realizar esta acción varias veces hasta que tengamos el suelo de la superficie del sector A como te he mostrado en el dibujo del mapa del escenario. Una vez tengas una superficie parecida lo dejo a tu elección. Dentro de la ventana Jerarquía vamos a seleccionar todos los Prefabs del suelo y los arrastraremos dentro del GameObject vacío Sector_A. De este modo tendremos ordenados todos los Prefabs. Esto estaría bien para cuando tenemos solo un Prefab en un sector, pero a continuación debemos añadir Paredes y otros elementos, por ese mismo motivo podemos crear varios gameObjects vacíos que sean padres de los distintos elementos como te muestro a continuación:
Fig. 4.44
En la imagen anterior verás que en la ventana Jerarquía tenemos El Sector A que es padre de todos los objetos que hay en el escenario excepto la cámara y la luz. Después tenemos un objeto vacío con el nombre Suelo Sector A que contiene todos los Prefabs del suelo, y he añadido otro objeto vacío con el nombre Paredes Sector A que va a contener todas las paredes. Esta es la dinámica que vamos a seguir.
El siguiente paso es que vayas arrastrando en escena los Prefabs por tipo y vayas construyendo el sector A de una forma organizada. Los Prefabs puedes rotarlos y moverlos pero no escalarlos pues estos modelos se crearon de una forma muy simple para que encajaran entre ellos.
Fig. 4.45
El sector está casi finalizado, como puedes ver tenemos ordenado en la ventana Jerarquía el sector A con todos los elementos que la componen, pero en los Prefabs que he utilizado solo tienen un box collider las columnas las cajas y los pasamanos las paredes y los suelos no llevan porque quería mostrarte otra forma de crear colliders en un escenario y para ser más concretos en un sector específico.
Vamos a crear otro gameObject vacío con nombre CollidersSectorA. Este gameObject que acabamos de crear no tiene de momento ningún parentesco con ningún objeto de la escena. A este objeto CollidersSectorA vamos a agregarle varios componentes de tipo Box Collider que re-situaremos en este sector.
Fig. 4.46
Fig. 4.47
Fig. 4.48
Una vez que tengas el primer boxcollider colocado añadiremos otro componente del mismo tipo a nuestro objeto CollidersSectorA.
Fig. 4.49
Este nuevo collider lo debemos re-situar utilizando la opción Edit Collider del componente o introduciendo valores en las opciones Center o Size.
Fig. 4.50
Es una forma de poner colisionadores a nuestra escena, en vez de utilizar un colisionador para cada Prefab, utilizamos 5 colisionadores que abarcan las necesidades de las paredes y suelos. El sector debería verse de la siguiente manera:
Fig. 4.51
Ahora que ya tenemos el sector A terminado hacemos exactamente el mismo procedimiento para crear el sector B. Los elementos Rampa y Plataforma son elementos que no pertenecerán a ningún sector puesto que son conectores de estos. A continuación te muestro como debería quedar la escena según nuestro esquema.
Fig. 4.52
8. Importar Standard Assets y probar el escenario
En el proyecto de este capítulo podrás importar un paquete con Assets en el que encontraremos un Player en primera persona que utilizaremos para poder probar el escenario dentro del juego.
Una vez que cargues el paquete de Standard Assets accede a la carpeta Characters > FirstPersonCharacter > Prefabs > FPSController, arrastramos este FPSController dentro de la escena y lo posicionamos en el SectorA como te muestro a continuación:
Fig. 4.53
Ahora desactiva o borra la cámara que viene por defecto en la escena como te muestro a continuación.
Fig. 4.54
Bien ya tenemos el escenario y un FPS (jugador en primera persona), ahora es el momento de disfrutar, ejecuta el juego y explora el escenario que todo esté correcto.
Fig. 4.55
Fig. 4.56