• No results found

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á definida 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

55

2.2.2.2 Inteface de la herramienta

El plugin de 3ds Max es ejecutado en presencia del 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 (lo que será el navmesh en la herramienta de Unity 3d) para la primera persona. Este objeto debe haber sido creado previamente en 3ds Max y en este paso es seleccionado por el usuario. El mismo no será visible en el producto final para presentar el proyecto. Debe cubrir todas las áreas que el arquitecto desee que sean navegables, incluyendo rampas y escaleras 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 representan 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.), para garantizar el buen funcionamiento de la navegación en primera persona por la edificación.

 Un segundo momento de la interface se dedica a la selección de los planos horizontales 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 preparació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

En el tercer momento de la interface se marcan los layers (o capas en español) que contengan mobiliario, si existen. En la escena pueden existir tantos layers como se desee, pero deben estar separados los de mobiliario (incluida vegetación

56 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 reciben un tratamiento distinto durante el procesamiento del modelo.

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 navegació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.

2.2.2.3 Procesamiento post-interface

El script 3dsApplication.ms (encargado de la interface), cuando se pulsa el botón “Finalizar”, crea una instancia de la clase mainObject definida en mainObjectClassDefinition.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 scripts. Son separados los objetos contenidos en los layers de mobiliario y los objetos 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.

A los objetos componentes de la edificación son aplicados la función createObjectWithDeleteFaces que agrupa la geometría por niveles, dividiéndola según los planos límites. A estos grupos de geometría de edificación son añadidos el mobiliario

57 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 correspondiente).

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 de la escena es un prisma imaginario que existe en 3ds Max que contiene todos los objetos de la escena de forma exacta, obteniendo el centro de este prisma, se obtiene el centro de toda la escena.

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.

Se pone en marcha la función estimateGlazingCandidateNodes que hace un recorrido iterativo por todos los objetos de la escena para evaluar el material que tienen con el fin de detectar cuáles de ellos pueden ser interpretados como objetos de cristal. Si alguno de ellos presenta un material cuya transparencia sea mayor que 60 (si es en base a 100) o que 0.6 (si es en base a 1) o cuya opacidad sea menor de 40 (si es en base a 100) o que 0.4 (si es en base a 1), se le considera como aplicable y se le hace pertenecer a un grupo de exportación a fbx glazingTaggedObject. El procedimiento considera todas estas posibilidades de valores debido a que diferentes tipos de materiales en 3ds Max tienen distintos nombres de parámetros para designar su transparencia, usualmente “transparency” u “opacity”, significando lo opuesto una a la otra) y los rangos no están estandarizados, aunque en los casos esperados van de 0 a 1, o de 0 a 100 indistintamente.

Luego se pone en marcha la función getCompassZOrientation que busca en la escena si existe un objeto brújula (compass), incluso si el mismo es parte de un daylight system, y guarda en grados su parámetro de azimuth, que expresa la orientación del norte propuesto en la escena. Si existe más de un objeto brújula en la escena, se guarda solamente el del primero encontrado, que es el que tenga un InternalIDNumber más bajo.

58