lunes, 16 de febrero de 2015

Uso de NURBS para el modelado 3D

Primera parte del nivel usando superficie NURBS

Finalmente me he lanzado a crear los escenarios modelados, en lugar de usar terrenos. Una de las ventajas de esto es que puedo hacer formas más complejas, doble nivel de suelo, paredes verticales, zonas con techo, y curvas, muchas curvas que en terrenos es complicado de conseguir.

Necesito esas curvas porque quiero usar formas inspiradas en Gaudí. Lo primero que he intentado es tener unas paredes curvas en la primera parte de la primera pantalla, y eso me ha permitido aprender a usar NURBS para el modelado 3D.

En la primera parte las paredes tienen una doble curvatura, una en su borde superior, que se hará más bajo o más algo dependiendo de la zona y con curva suave. Y la segunda sobre el plano, ya que esta habitación tiene silueta de balón de rugby o de barca, más ancha el medio y acabando en punta. Al tener dos curvaturas es algo más complicado que solo crear un plano NURBS a medida.

Curva NURBS CV

Lo he hecho con una técnica que me parece más sencilla y potente. Crear varias curvas planas y unirlas mediante un NURBS (un spline al final), al que podré ajustar el número de polígonos para la aproximación en 2 ejes. El primer paso es dibujar una curva plana, para ello uso una curva NURBS con vértices de control. Es parecido a una curva de Bezier, pero aquí no señalamos puntos exactos por los que tiene que pasar la curva y sus pendientes, sino puntos de control y una curva se genera automáticamente para pasar cerca (no por encima) de esos puntos, pero siendo una curva suave.

Colocando curvas NURBS
Duplicado de curvas para la otra pared

Después clono esta curva y deformo las copias, escalando para hacer que la curva sea allí más alta o baja, y las coloco donde quiero para obtener esa forma de barca, o al menos una de las paredes. Espejo estas curvas para tener la pared del otro lado idéntica, y añado una nueva curva para poder cerrar la curva al inicio.

Superficie NURBS U Loft

Entonces creo una superficie NURBS usando la herramienta U Loft Surface. Solo hay que elegir cada curva en orden y las va uniendo mediante una superficie. Lo bueno es que esto recoge las curvas como puntos de control, pero no como malla definitiva, entonces podemos controlar la malla que aproxima la superficie deseada de distintas formas y varias de ellas paramétricas. La que me hace por defecto tenía más de 2000 polígonos, así que cambié a superficie regular, y puedo elegir por parámetros u y v el número de polígonos en cada eje. Elegí 6 divisiones en vertical y 22 para todo el recorrido de la pared. Total: algo menos de 300 polígonos. Y sin embargo tiene bastante buena pinta. Hay que tener en cuenta que estaba usando terrenos de 250.000 polígonos, así que aunque necesite varias zonas de unos pocos miles de polígonos para hacerlo modelado, tendrá mejor rendimiento.

Además del cubo del suelo, he añadido 3 cubos más que van a ser los tres primeros obstáculos para el jugador, cada uno un poco más alto que el anterior, para que aprenda de forma natural que si deja pulsado el botón de saltar, lo hará más alto. Copiado de las tuberías de la pantalla 1-1 del Mario Bros, si vas a aprender a hacer diseño, aprende de los mejores.

El resultado intermedio está en la foto. Todavía queda pasarlo a polígono editable, texturizar, etc, pero no lo quiero hacer todavía hasta no hacer las pruebas en Unity para ver si hay que hacer más estrecho el pasillo, más altas las paredes... Todo eso se ajusta mejor si puedes acceder a las curvas originales, modificadores de la superficie, etc que si lo haces una vez transformado en polígonos arrastrando vértices. Tenía la idea de cerrar la curva al final en un objeto sólido, por si tenia problemas de colisiones contra una pared plana el sistema que uso ahora en Unity como demostró con los terrenos, pero en las pruebas ha ido bien, así que al menos mientras no pueda ir la gravedad en esa dirección, creo que no hará falta.

El resultado final queda bastante bien para el inicio del juego, puesto que sin querer tengo ahí una referencia al nacimiento.

No hay comentarios :

Publicar un comentario