3.6 Modelling MEEMAC Protocol
3.6.1 Channel Utilization
• Hacer click en un lugar arbitrario del plano en el que esté permitida la navegación y la primera persona aparece momentáneamente en este punto (las áreas de navegación son definidas por el arquitecto median- te el objeto de navegación que se crea y selecciona en el 3ds Max). • Cambiar de nivel utilizando las flechas que hay debajo del plano, siem-
pre y cuando exista un área en que esté permitida la navegación en la misma posición donde se encuentra la primera persona pero en otro nivel (si solo es navegable la primera planta de la edificación o la pri- mera persona está ubicada en una habitación cuyo puntal abarque otros niveles, no puede accederse a niveles superiores, en este último caso hay que trasladar a la primera persona a un punto donde sí exis- ta superficie navegable en el nivel superior o inferior y luego hacer el cambio de nivel), (scroll).
• Hacer capturas de pantalla que se almacenarán en la misma carpeta donde se encuentra el ejecutable de la aplicación (tecla C).
• Cambiar a vista de exploración (o análisis del exterior), (tecla X)
• El modo de exploración permite panear, hacer zoom y orbitar el modelo y siempre tiene el cursor del mouse visible.
• Es posible cambiar el modo de visualización de la cámara de perspectiva a ortográfica (tecla Z).
• Puede ocultarse la cubierta de la edificación y, si los tiene, ocultarse y des- ocultarse niveles para permitir el análisis interior del proyecto.
• Se mantiene la utilidad de hacer capturas de pantalla de la misma forma que en la modalidad de primera persona.
La visualidad de la presentación del proyecto depende de los materiales que el usuario utilice en sus proyectos, esta herramienta es independiente del estilo de la visualidad final por lo que permite un número infinito de estilos.
La herramienta, por el momento solo funciona tras la preparación previa reali- zada en el 3ds Max, por lo que ningún otro modelo puede ser utilizado sin antes ser importado en este programa y sin serle aplicado el procedimiento de prepa- ración previa de la aplicación para este programa.
La herramienta está contenida en una carpeta de proyecto de Unity (Unity pro- ject) en cuyo interior está una carpeta de Assets con todos los elementos que estarán accesibles para el arquitecto dentro del Unity. En esta carpeta también se encuentra la aplicación para el 3ds Max.
2.1 Aplicación para el 3ds Max
La aplicación para el 3ds Max está programada en MaxScript, lenguaje de pro- gramación nativo programa, consta de seis scripts encargados de la preparación del modelo con una interface al usuario sencilla tipo wizard de tres pasos. La aplicación se encuentra dentro de la carpeta de Unity project en el camino \ Inquilino\Assets\ms scripts. En esta carpeta hay un archivo de MaxScript llama- do 3dsApplication.ms, un archivo llamado para botón.ms y una carpeta con las definiciones del resto de las funciones.
Para ejecutar la aplicación, con el 3ds Max abierto, arrastrar el archivo 3dsAppli- cation.ms hacia cualquiera de los viewport. Si se desea tener la aplicación dis- ponible siempre en la interface del 3ds Max se debe crear un botón que llame a este script, para ello puede crearse una barra de herramientas personalizada o incluirse en una de las barras de herramientas ya existentes (a partir del paso 4):
1. En el menú Customize en la barra de Menú, seleccionar Customize User Interface.
2. La ventana de Customize User Interface posee varias pestañas, seleccionar la pestaña Toolbars. La interface de esta pestaña está claramente dividida en dos columnas, la columna derecha está encabezada por un dropDown- List que contiene todos los nombres de las barras de herramientas que exis-
ten en el programa (creadas automáticamente o de forma manual por el usuario) y aparece por defecto la barra de herramientas Animation Layers. 3. Debajo del dropDownList hay tres botones (New, Delete y Rename). Hacer
click en el botón New creará una nueva barra de herramientas con el nom- bre escrito por el usuario que aparecerá flotando en la pantalla.
4. Abrir el Editor de MaxScript (en la esquina inferior izquierda de la pantalla hay dos campos horizontales, uno rosado y otro blanco, hacer click derecho sobre ellos y seleccionar Open Editor Window). En el menú File, seleccionar Open y abrir el archivo instalador.ms. Una vez abierto, hacer Ctrl + E con el cursor puesto en una línea del código. Seguir las instrucciones.
5. En la columna izquierda de la ventana Customize User Interface hay dos dropDownList, uno con el título Grupo (Group) y otro con el título Catego- ría (Category). Desplegar el dropDownList de Categoría y seleccionar FC- UCLV.
6. Al hacer esto aparece en el rectángulo debajo una línea con el nombre In- quilino, arrastre esta línea hacia el lugar que se desee de una barra de he- rramientas.
7. Un botón aparecerá en el lugar seleccionado. 2.1.1 Elementos que integran la herramienta
Los elementos que componen la herramienta son exclusivamente scripts de MaxScript, tres de ellos están destinados a la definición de funciones que son llamadas luego en una función principal que ejecuta todas las tareas y está de- finida en un cuarto script, un quinto script está destinado a la definición de una clase sencilla, contenedora de datos necesarios para la ejecución de la función principal y el sexto script define el rollout (elemento encargado de la interface de usuario) y ejecuta toda la aplicación.
Los scripts que componen la herramienta son: Definiciones de funciones:
• getSceneNodesContentInSpecifiedLayers.ms • createFurnitureGroups.ms
• createObjectWithDeleteFaces.ms Definición de la función principal:
• mainScript.ms Definición de la clase:
• mainObjectClassDefinition.ms Definición de la interface de usuario:
• 3dsApplication.ms
2.1.2 Funcionamiento de la herramienta
La Figura 11 muestra un modelo sencillo de prueba para demostrar el uso de la herramienta en este capítulo.
Figura 11
Modelo de prueba en 3ds Max.
Esta herramienta es aplicada al modelo terminado (modelación y texturizado en dependencia de la visualidad que se desee lograr en la presentación final). Al ejecutar la aplicación aparece ante el usuario una interface simple tipo wizard con tres momentos:
El primer momento está destinado a la selección del objeto de navegación para la primera persona (Figura 12). Este objeto es creado y seleccionado por el usua- rio y no será visible en el producto final para presentar el proyecto; cubrirá todas las áreas que el arquitecto desee que sean navegables, incluyendo rampas y es- caleras y excluirá toda aquella área que no sea navegable (tener en cuenta los muros divisorios de habitaciones, puertas cerradas y ubicación de mobiliario).
Es un objeto simplificado (las escaleras se representarán como rampas), todos los niveles o elementos deben estar contenidos en un mismo objeto de 3ds Max y la geometría debe ser cuidadosamente creada (que no existan irregularidades en la modelación como vértices en el mismo lugar que no estén unidos, etc.), todo esto garantizará el buen funcionamiento de la navegación en primera per- sona por la edificación.
Un segundo momento de la interface se dedica a la selección de los planos hori-
Figura 12
Objeto de navegación del modelo de prueba en 3ds Max.
zontales que definirán los límites de los distintos niveles de la edificación. Ninguno de estos objetos serán exportados desde el 3ds Max al finalizar la pre- paración y por lo tanto no serán visibles ni manipulables en la presentación final del proyecto.
Estos planos tienen que ser creados por el usuario utilizando preferentemente el objeto Plano (primitiva estándar en el panel de creación, Plane en inglés) y definirán el límite superior de cada nivel, dejando fuera la cubierta superior de la edificación en el caso de no ser esta navegable (Figura 13).
En el tercer momento de la interface se marcarán los layers (o capas en español) destinados al mobiliario (Figura 14). En la escena pueden existir tantos layers como se desee pero deben estar separados los de mobiliario (incluida vegeta- ción o accesorios) y los layers de lo considerado parte de la edificación (muros, carpintería, herrería, sistemas de cubierta o entrepisos, elementos de circulación vertical, etc.). Estos elementos necesitan ser separados porque recibirán un tra- tamiento distinto durante el procesamiento del modelo.
Figura 13
Planos de corte en el modelo de prueba en el 3ds Max.
El tránsito entre estos tres momentos de la interface está diseñado para que en cualquier punto se pueda regresar al momento anterior y rectificar la selección pero también para que ninguno de los dos primeros elementos (objeto de nave- gación y planos límites de niveles) queden sin ser seleccionados, esta selección es obligatoria. Es posible que el proyecto no quiera presentarse con mobiliario por lo que la existencia de layers de mobiliario es opcional.
Una vez seleccionados todos los objetos, el usuario pulsará el botón “Finalizar”, este cerrará la interface y comenzará el procesamiento del modelo.
El script 3dsApplication.ms (encargado de la interface), cuando se pulsa el bo- tón “Finalizar”, crea una instancia de la clase mainObject definida en mainOb- jectClassDefinition.ms y almacena en ella toda la información introducida por el usuario (el objeto para la navegación de la primera persona, los planos de corte y los layers de mobiliario), llama a la función main definida en mainScript.ms y le pasa la instancia de la clase mainObject creada.
La función main, llama al resto de las funciones definidas en los otros scipts. Son separados los objetos contenidos en los layers de mobiliario y los objetos
Figura 14
Selección de los layers de mobiliario en el modelo de prueba en el 3ds Max.
componentes de la edificación (que no son ni los planos límites entre niveles ni el objeto de navegación).
A los objetos de mobiliario le aplica la función createFurnitureGroups que separa el mobiliario de cada nivel teniendo en cuenta la posición de los planos límites entre niveles y los agrupa por niveles.
Al los objetos componentes de la edificación son aplicados la función createOb- jectWithDeleteFaces que agrupa la geometría por niveles (Figura 15), dividién- dola según los planos límites. A estos grupos de geometría de edificación son añadidos el mobiliario de cada nivel con lo que finalmente se obtiene un grupo por nivel (que contiene la geometría de edificación y el mobiliario del nivel co- rrespondiente).
Se escribe a disco la posición en Z de cada plano límite de cada nivel y luego se eliminan estos objetos.
El bounding box (Figura 16) de la escena es un prisma imaginario que existe en 3ds Max que contiene todos los objetos de la escena de forma exacta, obtenien- do el centro de este prisma, se obtiene el centro de toda la escena.
Figura 15
Primera planta del mo- delo de prueba seleccio- nado en el 3ds Max. Fuente: Autor.
Por esta vía se determina este punto medio y esta información se utiliza para trasladar toda la escena hacia el origen de coordenadas virtual del 3ds Max y se escribe a disco junto a la información de alto, ancho y profundidad de la escena para ser tomada como referencia por la aplicación del Unity.
Finalmente toda la escena es exportada en formato FBX. 2.1.3 Participación del usuario
Esta aplicación requiere una gran participación del usuario ya que es el momen- to en que el arquitecto tiene que tomar un grupo de decisiones que determinan el funcionamiento posterior de la presentación.
2.1.4 Interface
Como se había mencionado, la interface es de tipo wizard muy sencilla con tres momentos.
El primer momento se encarga de la selección del objeto de navegación de la primera persona (Figura 17) y posee los siguientes elementos:
Figura 16
Bounding box del mo- delo de prueba en el 3ds Max.
• Botón Seleccionar: cuando se pulsa, queda apretado y se está en modali- dad de selección. Lo siguiente a realizar es seleccionar el objeto. Cada vez que se pulsa el botón se anula la selección anterior y se puede realizar una nueva.
• Campo vacío: cuando se selecciona el objeto, muestra su nombre.
• Botón Siguiente: se pasa al siguiente momento (esto sucede en todos los botones Siguiente).
El segundo momento comprende la selección de los planos límite de cada nivel (Figura 18) y posee los siguientes elementos:
• Campo vacío: este cuadro muestra el nombre de cada objeto a medida que se añade a la selección. El objeto seleccionado dentro del cuadro, apare-
Figura 17 Interface de la aplica- ción en el 3ds Max en el primer momento. Fuente: Autor. Figura 18 Interface de la aplica- ción en el 3ds Max en el segundo momento. Fuente: Autor.
cerá seleccionado en pantalla mientras se está en modalidad de selección. • Botón Seleccionar: cuando se pulsa, queda apretado y se está en modali- dad de selección. Lo siguiente a realizar es seleccionar cada plano límite de forma consecutiva (el orden en el que se seleccionen los planos no impor- ta). Se sale de la modalidad de selección haciendo clic derecho en cualquier lugar de la pantalla. Cada vez que se pulsa el botón se anula la selección anterior y se puede realizar una nueva.
• Botón Añadir: cuando se pulsa, queda apretado y se está en modalidad de selección. Los objetos que se seleccionen se añaden a la selección anterior. Se sale de la modalidad de selección haciendo clic derecho en cualquier lugar de la pantalla.
• Botón Eliminar: elimina de la lista de selección el objeto que está seleccio- nado.
• Botón Siguiente.
• Botón Anterior: se pasa al momento anterior en caso de que quiera rectifi- carse, al volver atrás se conserva la configuración anterior pero puede ser modificada (esto sucede en todos los botones Atrás).
Los dos momentos anteriores son obligatorios por lo que si no se realiza selec- ción, el botón Siguiente está invalidado.
El tercer y último momento de la interface muestra la selección opcional de los layers de mobiliario (Figura 19) y posee los siguientes elementos:
• Campo de layers: un campo con la jerarquía de layers existente en la esce- na. Cada nombre del layer está precedido de un cuadro de selección (chec- kbox) para la selección del layer.
• Botón Refrescar: si se hace algún cambio en la estructura de layers de la escena, es necesario pulsar este botón para que el cambio sea efectivo en esta aplicación (Si se realiza un cambio en la estructura de layers y no se actualiza en la aplicación, los resultados de la selección de algún layer de mobiliario puede no ser el esperado).
• Botón Anterior.
• Botón Procesar: culmina la intervención del usuario y comienza el procesa- miento del modelo (Figura 20).
2.2 Aplicación en el Unity
La parte de la herramienta que está destinada al Unity es un proyecto de Unity (Unity Project). Todo el proyecto está contenido en una carpeta que a su vez
Figura 19 Interface de la aplica- ción en el 3ds Max en el tercer momento. Fuente: Autor. Figura 20 Interface de la aplica- ción en el 3ds Max du- rante el procesamiento del modelo.
cuenta con cuatro subcarpetas (Assets, cameraInfoFile, Library, ProjectSettings) y un grupo de archivos. Las carpetas Library y ProjectSettings y el grupo de ar- chivos están destinados al funcionamiento interno del proyecto de Unity y son creadas automáticamente por el programa por lo que no serán analizados. La carpeta cameraInfoFile almacena dos archivos TXT y su función se explicará posteriormente. La carpeta Assets es la más importante desde el punto de vista del usuario (arquitecto), contiene todos los elementos visibles en el proyecto: escenas (para esta aplicación solo una), modelos 3D, imágenes de la interface de usuario y todos los recursos, incluidos scripts, que determinan el funciona- miento directo de los elementos de la escena. Esta escena, estos elementos y su funcionamiento será el producto final que, después de compilado, servirá para la presentación del proyecto de arquitectura. La herramienta está programada en el Unity 4.0.1, no puede ser utilizada en versiones anteriores y su funcionamiento puede cambiar en versiones superiores.
2.2.1 Elementos que componen la escena en el Unity
Una vez abierta la escena en el Unity, se pueden ver los elementos que la compo- nen en el panel de jerarquía (Hierarchy). Existen seis objetos en la escena:
• Escena_Objetos_EO
Es un objeto padre de otros objetos fijos en la escena que sirven para la visuali- zación final del proyecto.
• Camera01_minimapCameraToClone_C
Es una cámara con vista ortográfica que se utiliza para la creación de los planos de los distintos niveles de la edificación.
• Camera02_ExteriorNavegation_Parent__EO
Es el objeto padre de las dos cámaras que permiten la navegación exterior: Ca- mera02_toSwitch_ExteriorNavegation__C, cámara en perspectiva que contiene
el script ExteriorNavegation.cs; y Camera03_ExteriorNavegation_orthoCame- ra_C, cámara para la visualización ortográfica.
• Caracter_1stPerson__NavMeshAgent
Este objeto, con su hijo Camera_toSwitch__C, se encargan de la navegación en primera persona. Contiene los scripts First_Per_Nav_Mesh_Move.cs y Mouse- Look.cs. Para la navegación en primera persona se utiliza una tecnología deno- minada NavMesh, que permite la traslación de un NavMeshAgent por un mesh que haya sido seleccionado y procesado como NavMesh. El objeto destinado a NavMesh, el usuario lo designa en la aplicación programada para el 3ds Max al construir y seleccionar el objeto navegable, y la construcción del NavMesh la hace el usuario de forma manual en el Unity. Caracter_1stPerson_NavMeshA- gent es un objeto con un componente NavMeshAgent programado para acep- tar cualquier NavMesh que se encuentre lo suficientemente cerca de él.
• Camera_mainCamera_C
Cámara que se utiliza para la visualización de la escena (esta cámara sigue a las otras en dependencia de la modalidad en la que se encuentre). Este objeto con- tiene el script CameraSwitch.cs.
• GUI_EO
Es el objeto encargado de toda la interface gráfica y de su funcionamiento y con- tiene el resto de los scripts de la aplicación.
2.2.2 Funcionamiento de la aplicación
El funcionamiento de la aplicación está determinado por los scripts que se en- cuentran en la carpeta Script dentro de la carpeta de Assets. A continuación se relatarán todos con su funcionamiento:
• MainScript.cs:
de la preparación inicial y distribución de los elementos al resto de los scripts que lo necesiten. Carga el modelo desde la carpeta de Resources en los Assets y separa los grupos de cada nivel almacenándolos en un arreglo de meshes; ob- tiene el objeto de NavMesh, le agrega un componente MeshCollider (utilizado para la detección de niveles) y oculta el objeto; lee la información almacenada en disco por la aplicación del 3ds Max y es utilizada para la ubicación y la size de la cámara de la que se obtienen los planos de la edificación, las proporciones de los planos y los valores que determinan los límites de los niveles señalados por el usuario en la aplicación del 3ds Max. A partir de este momento el resto de los script funcionan correctamente.
• BuildMinimaps.cs:
Este es un script que se ejecuta en el método Start() del script Minimap.cs. Esta clase solo contiene un método que se llama GetMinimaps() al que se le pasa:
• Un gameObject que contiene una cámara, esté es instanciado, la cá- mara se cambia a vista ortográfica y se utiliza para la construcción de los mapas, al final, la instancia se elimina.
• Un arreglo de float de tamaño 4 que contiene: los tres valores de un