Creación de una carretera de montaña ( parte 1 / ir a la parte 2 )
Cuando le comenté a mi buen amigo Alberto Areta que iba a preparar una serie de tutoriales sobre modelado por subdivisión, enseguida me propuso una idea para uno de ellos: cómo crear una carretera y su relieve circundante, de modo que pudiéramos obtener una malla “limpia” y perfectamente preparada para texturizar por UVs y para poder añadir detalles superficiales con comodidad (esculpir el terreno, añadir arcenes, cunetas y taludes, etc).
Para diseñar una obra civil existen diferentes aplicaciones dedicadas (Cartomap, MDT, In-Roads, Clip…) que son capaces de recoger los datos reales, capturados por topografía clásica o fotogrametría. A partir de estos datos (si es por topógrafia clásica, una nube de puntos) estas aplicaciones permiten crear una malla triangular o “MDT” del terreno previo que origina el curvado. Sobre esta malla se plantea el desarrollo, primero en planta y luego en alzado (altura) del proyecto de carretera, presa, etc. Dentro del programa de cálculo puede obtenerse el MDT del terreno —antes y después—, el MDT que genera la carretera, cunetas, desmontes y terraplenes (aparte de perfiles longitudinales, transversales…).
El problema de las mallas generadas por este tipo de programas
es que no suelen ser muy “limpias”. Muchas veces son mallas de triángulos, lo que ya de entrada impide su subdivisión. Y también resulta muy difícil extraer buenos mapas UV a partir de ellas, cuando resulta que este sistema de texturizado sería el ideal para mapear una larga carretera o conjunto de viales.
Por todo ello es muy probable que, incluso aunque consigamos importar a nuestro programa 3D favorito unas mallas directas desde alguna de las aplicaciones mencionadas anteriormente, tengamos que “limpiarlas” o hasta rehacerlas para poder trabajar con comodidad.
En el siguiente tutorial vamos a ver cómo abordar este proceso usando un buen modelador poligonal por subdivisión de superficies: Modo.
Pero confío en que la mayor parte de los procedimientos explicados aquí puedan llevarse a cabo con cualquiera de las otras aplicaciones comunmente usadas en la visualización 3D —3DSMax, Maya, Softimage, Cinema4D, Lightwave, etc—. Como siempre, creo que lo realmente importante es la metodología, y no tanto las herramientas X o Y ;-)
1. NUESTRA “MATERIA PRIMA”
Según me explicó Alberto, hay ocasiones en que para definir un terreno el material con el que contamos es una “nube de puntos” (creada a partir de las capturas realizadas por un topografo sobre el terreno) y a partir de ahí se puede extraer todo: curvas de nivel, archivos DEM, mallas, etc. En otras ocasiones (cartografía a partir de fotogrametría aerea) se parte de las curvas de nivel, etc.
No se cómo será en otros programas (Max, Maya, Softimage, etc) pero desde luego usando Modo, con unas curvas de nivel no vamos a llegar muy lejos: no tenemos herramientas internas para construir una buena malla de terreno a partir de ellas…
Para crear este tuto vamos a considerar que partimos de dos cosas, lo que podríamos llamar nuestra “materia prima”:
—
Una malla triangular. Que es un tipo de malla relativamente fácil de obtener (por cualquier programa dedicado) a partir de una nube de puntos, y que podremos importar a nuestra aplicación.
— Los perfiles básicos, en planta, de nuestra carretera —su eje central y sus límites laterales— y de sus taludes, así como la información de alturas en cada punto de inflexión. Estos perfiles también los podremos importar para trabajar sobre ellos.
Esto es todo con lo que contamos. Pero claro, me podéis plantear: ¿y qué pasa si ni siquiera contamos con esta información?, ¿y si lo único que tengo es un archivo PDF con las curvas de nivel como aparecen en la ilustración anterior?, ¿o lo que es aún peor: un plano impreso en papel y nada más?. Pues entonces os diría que “estamos apañaos” :-))
Mi consejo es que habléis con vuestro cliente y le exijáis más información y en otros formatos más prácticos: hoy en día TODO el mundo —y más dentro de los estudios de ingeniería y topografía— trabaja con ordenadores y aplicaciones dedicadas, así que seguro que os podrán exportar la información que ellos tengan en un formato (DXF, DWG, IGN…) que conseguiréis abrir desde vuestro programa para poder usar como referencia.
Nos centramos en los perfiles de la propia carretera en planta:
— Lo más importante sería el perfil central (en amarillo), que se podría considerar como el eje de la carretera.
—
Luego nos es de ayuda contar con los perfiles laterales (en azul), los límites de la carretera. Aunque si nos facilitan la anchura, en este caso 5 metros por carril, podemos extrapolar esta información a partir del eje.
— Es muy importante contar con las líneas de cabeza y pie de talud (en morado): estos perfiles nos indican los puntos de contacto entre los taludes y el terreno original. Para trazar una carretera hay puntos en los que hay que quitar tierra —desmonte— y otros en los que hay que aportarla —terraplén—.
— Y los cambios entre las diferentes partes del trazado (en blanco). A continuación lo veréis mejor:
En el trazado de toda carretera vamos a encontar zonas de rectas y zonas de curvas.
Las zonas de rectas son… eso… rectas… Las tenéis en verde. Poco más hay que explicar ;-)
Pero en las zonas de curva de una carretera —y también de unas vías de tren— encontramos a su vez dos sub-zonas, y esto ya no es algo tan evidente para los no familiarizados [ gracias de nuevo a Alberto por sus explicaciones ¿Os había dicho que es ingeniero técnico topógrafo? ]:
—
Hay una parte de toda curva que es un arco de circunferencia (marcadas en azul). Ya sabéis: un centro y su arco, algo sencillo.
— Pero hay otra parte, a la entrada y a la salida de cada curva y coloreadas en rojo, que no se diseña como un arco de circunferencia, sino como una clotoide [ en el link buscar Cornu Spiral. Veréis que siempre suelo poner los links a la Wikipedia en inglés, ya que considero que están más completos que en español. De todos modos en la columna de la izquierda del artículo tenéis los links a nuestro idioma… o al afrikaans… o al
suomi… ].
La función básica de estos segmentos es evitar que actúe de golpe la fuerza centrípeta (impidiendo que nos estrellemos) haciendo más cómoda la transición entre las rectas y las curvas durante la conducción.
Y recordad que estos perfiles están en PLANTA, en la coordenada Y=0 [ bueno, o Z=0 en según qué programas, ya sabéis que algunos consideran la vertical como Y y otros como Z ]. Así pues necesitamos tener las cotas de altura
para cada uno de estos puntos de transición, y eso es lo que indican las magnitudes que aparecen en la ilustración en gris. Hay situaciones en las que esto se podría complicar: podríamos tener ascensos y descensos en un único tramo recto o incluso en una sóla curva, si es así deberíamos contar con esa información. Aquí lo hemos simplificado un poquito, para no alargarnos demasiado.
También podríamos tener la suerte de contar con este conjunto de perfiles, pero ya puestos a su cota, en su altura correcta de un modo directo tras la importación. Si es así, fabuloso: nos ahorraremos una buena cantidad de trabajo. Pero vamos a seguir considerando que sólo los tenemos en planta ¿ok?
Para tratar de ser lo más fieles posible al diseño original trataremos de usar los perfiles importados, operando sobre ellos directamente. En el caso de los tramos rectos y los arcos de circunferencia hemos tenido suerte porque nos han llegado con un número de puntos muy razonable. En cambio las curvas clotoides nos han pasado con un número excesivo de puntos: podríamos aplicar un script para optimizarlas y poder usarlas del mismo modo que los arcos, pero no va a hacer falta, ya veréis.
Desde luego lo ideal sería que al importar estos perfiles se nos abrieran como splines (bèzier, NURBS, paramétricas, etc) porque de ese modo podríamos decidir la resolución, el número de puntos que les queremos dar. Pero esto depende de muchos factores: el software dedicado en el que haya sido originalmente diseñada la carretera, el formato de exportación (y cómo exporta esa determinada aplicación en ese formato), y por supuesto nuestro programa de trabajo: probablemente un mismo DXF sea importado de un modo distinto por Modo que por Max o por Maya. En mi caso, con Modo, lo que tenéis aquí arriba es lo que me ha llegado [ se trata de un caso real que me envió Alberto, para trabajar sobre ello ].
Así que vamos a ver qué podemos hacer con todo esto.
2. CREACIÓN DE LA “CORTINA CENTRAL”
Lo primero que vamos a crear es la propia carretera, lo que podríamos llamar la “cinta” de la calzada. Pero para poder llegar a ello vamos a realizar un proceso previo que nos permita elevar el eje central a su cota de un modo que nos haga sencillo generar a continuación esa cinta. Toda esta segunda parte nos la podríamos ahorrar si tuvéramos ya los perfiles a su altura.
 |
Como primer paso nos construimos unos perfiles de referencia elevados. Se trata de subir cada uno de los puntos a su
cota —magnitudes que nos tendrán que haber facilitado— y de unirlos después mediante simples tramos rectos
(fijaos que en las zonas de clotoides y arcos también hemos dejado unos segmentos rectos). Repito que estos son sólo unos perfiles de REFERENCIA, para facilitarnos la comprobación visual de que los siguientes pasos están correctamente realizados.
 |
|
 |
A continuación extruimos verticalmente los perfiles originales en planta. Tanto los segmentos rectos, con sólo dos puntos cada uno, como los arcos de cirfunferencia, con un número razonable de puntos.
Los segmentos correspondientes a las clotoides no los extruimos porque recordad que tenían un número excesivo de vértices. Pero si hubieramos simplificado esos tramos, también los extruiríamos.
En un primer paso no es necesario que lo ajustemos todo con los perfiles que habíamos colocado como referencia a su cota. Lo dejamos un poco por debajo, en este caso lo extruimos todo a un valor constante: 250 metros. |
|
Y despues movemos los vértices superiores de nuestra “cortina” para igualarlos con los perfiles de referencia que habíamos creado.
Pero cuidado, los tramos rectos son muy sencillos: basta con ajustar las cotas de los dos únicos vértices por cada tramo (y podemos —y deberíamos— hacerlo numéricamente, para asegurarnos de su exactitud); pero en cambio los tramos curvos ya no son tan simples. No podemos ir vértice a vértice porque en ese caso no acabaríamos nunca y encima sería poco exacto.
No os dejéis engañar por el ejemplo que estamos viendo, donde realmente casi parece que el perfil superior está todo a la misma cota: en realidad hay pendientes, y eso ocurre también en los tramos curvos. |
En este procedimiento el alzado a su cota de los tramos curvos plantea un pequeño problema
extra que tendremos que resolver. Como en el ejemplo real de la carretera con la que estamos trabajando no
es muy evidente, vamos a verlo sobre un ejemplo más extremo:
 |
En el recuadro blanco podéis ver la vista en alzado de nuestra carretera: fijaos cómo realmente sí que existen ligeras pendientes, incluso en los tramos curvos (mirad dentro del círculo verde). En los otros dos gráficos
vemos una situación mucho más exagerada del problema con el que nos encontramos: ¿cómo elevar los vértices superiores en los tramos curvos de manera que obtengamos una pendiente suave si los observamos frontalmente pero sin destrozar la curvatura al ser observados en planta?
Vamos a ver un par de procedimientos: uno aproximado y otro más exacto. Y para ambos casos ciertamente vamos a emplear herramientas muy características de Modo, que no se si se encuentran disponibles en otras aplicaciones. Pero estoy seguro de que habrá otros medios para conseguirlo. Veamos estos dos métodos:
Método 1. Usando un Linear Falloff (aproximado)
Tenemos nuestro segmento curvo visto en alzado. Inicialmente todos los puntos superiores están en la misma cota.
— Primero elevamos todos los vértices hasta la cota más baja de nuestra pendiente. Podemos hacerlo a ojo o —como aquí— usando un método más preciso, mediante una alineación de coordenadas (ilustración superior).
— Vamos con las ilustraciones de la derecha: trazamos un Linear Falloff [ esto creo que es bastante expecífico de Modo ] para mover todos los puntos de manera que asciendan siguiendo una transición: el punto de un extremo asciende al máximo, el del otro extremo se queda donde estaba y el resto describen la pendiente. |
|
 |
Método 2. Usando el script Super Taut (más exacto)
Para este segundo método empezamos igual que antes:
— Primero hacemos coincidir todos los vértices con el punto más bajo de la pendiente.
— Pero después elevamos el vértice del extremo correspondiente hasta el punto más alto. Igual que antes, usamos sistemas de alineación por parámetros para hacerlo lo más exacto posible (no lo desplazamos “a ojo”). |
|
Y a continuación aplicamos la magia del script Super Taut del grandísimo y generoso Seneca Menard:
—
Seleccionanos primero el vértice de un extremo, luego el del otro, y finalmente todos los intermedios, con una lazada.
—
Invocamos el script a través de su interface y voilà, ahí lo tenemos resuelto. [ Un procedimiento 100% Modo ]. |
[ NOTA: desde un punto de vista estrictamente geométrico, ninguno de estos dos sistemas es realmente preciso ya que una pendiente constante que discurre sobre las paredes de un cilindro —un arco de circunferencia extruido— realmente origina una helicoide.
Y si encima la pendiente no es constante, la cosa aún se complicaría más. Podríamos ser mucho más precisos empleando VertexMap Falloffs definidos a partir de las coordenadas UV del cilindro, pero no vamos a entrar en tanta exactitud… ]
Bien, ya tenemos ajustados
todos los vértices superiores de los tramos rectos y los arcos de circunferencia. Recordad que habíamos dejado sin extruir los tramos correspondientes a las clotoides. Ahora podemos realizar unas sencillas operaciones de bridge para ensamblar todas las piezas. Nuevamente: desde un punto de vista purista, la curva que nos originará este bridge no va a ser una clotoide… pero os aseguro que se le parece mucho.
Así que por fin tenemos nuestra “cortina” que, en su cresta superior, va definiendo el eje central de la carretera ajustado a su cota.
A continuación veremos cómo crearemos la “cinta” que define la propia carretera [ una de las formas de hacerlo, claro, porque habría muchas, dependiendo de las herramientas concretas
y del programa en particular que usemos para trabajar ].
|