3D

amasando_pan.jpg

Compilando MangOS + scriptdev2 / ACID + ytdb en español y para Windows

Esta guía en ningún momento pretende ser exhaustiva y detallada con respecto la uso e instalación del software necesario para llevarla a cabo. Por ello podríamos calificarla de nivel “medio” y su objetivo es el de conseguir una versión compilada de MangOS + librerías y una base de datos actualizada (ytdb en este caso) para las plataformas basadas en Microsoft Windows tanto en arquitecturas de 32bits como de 64bits. Si lo que pretende el lector es conseguir el anterior objetivo y la instalación de un servidor MySQL, por ejemplo, no es algo que se puede obviar sin problemas, es posible que pueda encontrar cierta dificultad para completar su tarea.

Superada esa pequeña advertencia solo resta ponernos a ello.

Si no tenemos un servidor MySQL en la máquina que va a alojar el servidor, ya podemos ponernos a ello:

MySQL Community Server: dev.mysql.com/downloads/mysql/

Elegimos la versión optimizada para nuestro servidor 32/64, lo instalamos y lo dejamos corriendo como servicio. También anotaremos el password que hemos fijado para root durante la instalación porque nos hará falta más adelante.

Instalamos la última versión de Git para Windows en code.google.com/p/msysgit/ y también TortoiseSVN en tortoisesvn.net/

Y por último pero no por ello menos importante, instalaremos también Microsoft Visual Studio Express. En el momento de escribir esto ya es posible compilar MangOS sin problemas con la versión 2010 del MVSE pero todavía no es posible hacerlo con las librerías de scriptdev2 y por lo tanto tendremos que usar Visual C++ 2008 Express Edition para que todo vaya bien.

Una vez instalado el servidor MySQL, el software de repositorios y Visual C++, ya podemos empezar a meter las manos en harina.

manos a la obra... En primer lugar crearemos una carpeta para guardar el proyecto completo de nuestro servidor a la que llamaremos, por ejemplo, Server. Dentro de la carpeta “Server” y en un subdirectorio que llamaremos “src” vamos a copiar el repositorio con el código fuente de MangOS. Lo haremos clonando desde un Git GUI en siguiente repositorio: git://github.com/mangos/mangos.git

Una vez que ya tenemos el código fuente de MangOS, hacemos lo propio con la base de datos ytdb mediante el cliente SVN: http://svn2.assembla.com/svn/ytdbase

Y para terminar clonamos dentro de la ubicación /src/src/bindings/scriptdev2/ y también con SVN el repositorio de Scriptdev2 en https://scriptdev2.svn.sourceforge.net/svnroot/scriptdev2.

Ahora que tenemos todo el material necesario ya podemos lanzar Visual C++ y empezar a compilar. En primer lugar abriremos la solución mangosdVC80.sln (o la que corresponda a la versión de nuestro compilador), lo pondremos en release y ajustaremos la versión que queremos obtener a Win32 o x64 según convenga. Hecho esto ya podemos compilar MangOS :)

Mientras Visual C++ hace lo suyo podemos crear con SQLYog, NaviCat o similares, las siguientes bases de datos: mangos, realmd, scriptdev2, characters. Una vez creadas y desde /server/src/sql/ procederemos a crear las estructuras de nuestras bases de datos restaurando en ellas el characters.sql y realmd.sql que hay en ese subdirectorio. La base de datos llamada mangos la restauraremos desde la versión de ytdb correspondiente a la de mangos que vayamos a utilizar y que ya nos hemos bajado antes. Empezaremos por la versión trunk que nos corresponda y depués aplicaremos las actualizaciones que encontraremos en la carpeta /updates correspondiente.

Una vez restaurada la base de datos para mangos, abriremos ésta y en la tabla llamada db_version nos fijaremos en cual es la versión de MangOS en la que estamos y desde /server/src/sql/updates procederemos a restaurar todas las actualizaciones posteriores a la que nos dio db_version.

Horno

A estas alturas es casi seguro que Visual C++ haya sacado ya un MangOS del horno y encontraremos su ejecutable, junto a realmd.exe y casi todas las librerias necesarias para ejecutarlos, dentro de la carpeta /src/bin/Win32 ó /src/bin/x64 según lo que hayamos especificado al compilador. Junto a esto y que ya hemos restaurado la base de datos, solo nos resta compilar la librería de scriptdev2 (el cerebro de la bestia) y crear/restaurar su base de datos.

Empecemos por lo segundo: desde la ruta /server/src/src/bindings/scriptdev2/sql restauraremos dentro de la base de datos scriptdev2 y en este orden, el scriptdev2_create_structure.sql y scriptdev2_script_full.sql que allí encontraremos. Finalmente y desde la misma ruta restauraremos mangos_scriptname_full.sql dentro de la base de datos mangos. Aplicaremos las actualizaciones que sean necesarias y volveremos a Visual C++ para el paso final.

Desde Server/src/src/bindings/scriptdev2 abriremos la solución correspondiente a nuestro compilador, scriptVC80.sln en caso de Visual C++ 2008, ajustaremos a release y la arquitectura con la que estamos trabajando. Si vamos a incluir scripts “custom” ahora es el momento de incluirlos en el proyecto dentro del /scripts/custom del árbol del PROYECTO y modificar ScriptLoader.cpp de forma acorde con lo que acabamos de incluir.

Una vez hecho lo anterior solo nos resta compilar la librería. Una vez que VC++ haya finalizado podemos cerrarlo y comprobar que en nuestra carpeta /bin tenemos el scriptdev.dll correspondiente. Solo nos resta copiar/renombrar a ese mismo lugar los ficheros de configuración que encontraremos en /server/src/src/mangosd, /server/src/src/realmd y /server/src/src/bindings/scriptdev2 con las extensiones .conf.dist.in (que cambiaremos a .conf), editarlos de forma acorde a nuestro sistema y nuestras bases de datos y echarlo a correr.

Dragon 3D

Dragon 3D

Author: djmon84

Instrucciones: dragon

Opciones de MD3

Workflow para Zbrush, Maya y Finalrender

 Después de hacer varias pruebas para intentar renderizar con Finalrender para Maya unos mapas de desplazamiento/normales, he llegado a la conclusión de que el workflow que sirve para Mental Ray no es del todo bueno para usar con Finalrender. En realidad son muy similares ya que los mapas generados por Zbrush sirven tanto para un motor de render como para el otro, pero hay ciertos detalles que aparecen al volver a Maya que necesitan de ajustes diferentes. Y además los propios de cada motor.

 En esta pequeña guía voy a utilizar una prueba del craneo de Beast que estoy usando para la escena "Minnie and the Beast". El modelo lowpoly, una vez importado en Zbrush, con las UV’s previamente ajustadas en Maya, viene a ser algo parecido a esto:

 Después de pasar un rato agradable esculpiendo, tengo el siguiente resultado:

Nada espectacular, aunque se trata de una parte apenas visible. Oculta por otras piezas y en gran medida fuera de campo. En fin. 

Parte 1: Exportar los mapas desde Zbrush

a) Mapa de desplazamiento.

En primer lugar y antes de nada bajamos el nivel de subdivisión en Zbrush al mínimo. Y acto seguido nos vamos al menú Zplugin donde estará instalado el plugin Multi Displacement 3 (en Zbrush 3.1). Ajustamos las opciones de MD3 como en la siguiente captura y en caso de querer generar un mapa de desplazamiento de otro tamaño que 2048×2048, cambiaremos el valor correspondiente.

 Acto seguido nos vamos a Export Options y allí ajustaremos las opciones correspondientes para obtener un mapa que se lleve bien con Maya.

De momento y hasta que encuentre algo mejor, esto es lo que me ha funcionado mejor con FinalRender. Sacaremos como resultado un TIFF de 32bits y hay que tener en cuenta que con esta configuración, el Displacement Exporter se encargará de hacer el Vertical Flip que tanto le gusta a Maya. El quickcode para esta configuración es:

DE-LBEK-EAEAEA-R32

El quickcode anterior correspondería a la opción para generar mapas de desplazamiento en un TIFF de 32bits. La captura anterior no corresponde a ese quickcode ya que para el correcto la opción Scale estaría en A.D.Factor en lugar del Off que se puede ver en la misma. En caso de querer trabajar con mapas de desplazamiento de 16 bits, el quickcode sería el siguiente: DE-HBEK-EAEAEA-R32.

 

 Una vez elegidas las opciones para exportar el mapa de desplazamiento, volveremos al menú principal y pulsamos el botón CREATE ALL. Le damos un nombre y ubicación al fichero, elegimos TIFF como formato y esperamos a que Zbrush acabe de generar el mapa.

b) Mapa de normales.

Ahora vamos a exportar un mapa de normales (normal map) usando ZMapper. En primer lugar bajamos el nivel de subdivisión en el modelo al mínimo, tal y como hicimos antes con los desplazamientos. Lanzamos ZMapper, abrimos la pestaña Normal & Cavity Map y simplemente cargamos el preset llamado Maya_TangentSpaceNode_BestQuality (Open Configuration). Este preset, entre otras cosas, también se encargará de hacer el Vertical Flip a la imagen resultante. Pulsamos el botón Create NormalMap y esperamos unos segundos.

  Una vez generado el mapa de normales, lo exportamos (Texture -> Export).

 Como paso opcional podemos aprovechar para generar un Cavity Map también desde Zmapper. A la configuración anterior sólo habría que añadir unos puntos en Cavity Intensity y crear el mapa con el botón Create CavityMap.

Parte 2: De vuelta a Maya

 Una vez exportados los dos o tres mapas en Zbrush, podemos volver a Maya para ajustarlos a nuestro modelo. En primer lugar haremos unos pequeños ajustes en el objeto al que queremos aplicar esos mapas. Lo primero será desactivar los desplazamientos de Maya ya que usaremos los de FinalRender:

 

 Y ahora, si se trata de objeto poligonal como es el caso, conviene aplicarle uno o varios Smooth o bien convertir el objeto en Subdivisión. La mejor manera de hacer esto es hacerlo usando las subdivisiones de FinalRender en render time. Del mismo modo que usando Mental Ray le aplicariamos un nodo de subdivisión con el Aproximation Editor, aquí lo haremos usando una característica propia de FinalRender:

 En el mismo objeto, dentro de las opcionesde FinalRender, activamos Render as Subdivision Surfaces y ajustamos el Level a un valor razonable. Para empezar, dos está bien.

  El siguiente paso hacia el éxito consiste en crear un shader para nuestro objeto, uno al gusto. Creamos un nodo de desplazamiento para el shader, cargamos el TIFF creado anteriormente en Zbrush, ajustamos el Filter Type a Mipmap y desplegamos las opciones de Color Balance para la textura.

 Aquí nos interesa el valor de Alpha Gain y Alpha Offset. Alpha Gain nos ayudará a establecer el nivel del desplazamiento y también queremos que el valor de Alpha Offset sea el valor negativo de la mitad del anterior. Lo más cómodo es crear una expresión para llevar el valor de Alpha Offset automáticamente, que sería la siguiente si asumimos que el nombre de la textura con el mapa de desplazamiento es "file1".

file1.AlphaOffset = – file1.AlphaGain / 2

Actualización: Parece que es indiferente usar los parámetros Alpha Gain y Alpha Offset del nodo file con la textura que corresponde al mapa de desplazamiento o bien usar los parámetros Gain y Offset que se encuentran en el tab llamado Finalrender dentro del nodo de tipo Displacement. Por defecto estoy usando éste último, pero se me ocurre que si pensásemos en cambiar de motor de render haría más engorrosa la adaptación.

 Respecto al valor correcto de Alpha Gain -o Gain a secas si usamos el parámetro de Finalrender- : en teoría se trataría de un valor fijo para mapas de desplazamiento de 32 bits ya que almacenan el valor del Alpha Depth Factor de Zbrush en su interior. En la práctica yo no lo acabo de ver tan sencillo pero en cualquier caso ese valor sería 2.2 ,entonces el valor de Alpha Offset sería -1.1 y no haría falta de usar ninguna expresión para calcular su valor.

En el caso de trabajar con mapas de desplazamiento de 16bits habría que tener en cuenta el valor del Alpha Depth Factor de Zbrush. Para obtenerlo es necesario generar el mapa de desplazamiento desde Tools->Displacement en Zbrush. En la parte de abajo del menú Alpha, y teniendo seleccionado el mapa de desplazamiento allí, podremos consultar dicho valor.

Una vez sabido el valor de Alpha Depth Factor, la fórmula para calcular el valor preciso de Alpha Gain en Maya es la siguiente:

Alpha Gain = (Alpha Depth Factor / 10)*2

Y el valor de Alpha Offset se calcularía usando la expresión antes mencionada.


  En principio tenemos listo el mapa de desplazamiento, ahora crearemos un bump para el shader conectado al mapa de normales que creamos anteriormente en Zbrush, sin olvidar ajustar el valor del nodo bump como Tangent Space Normals (Use as:). También podríamos usar el Cavity Map aplicado al diffuse del shader o bien usarlo como detalles en una textura bien elaborada.

  Ya sólo queda ajustar las opciones para mapas de desplazamiento en los Render Globals de FinalRender:

  En primer lugar, obviamente, tenemos que activar los desplazamientos (Enable Displacement). Los ponemos en Mode: Intensity y el valor de Multiplier lo dejaremos en principio en el que lleve por defecto (más adelante tendremos que jugar con este valor para obtener un resultado más o menos bueno) y nos quedamos también con el valor de Pixel Edge Size. En caso de que el mapa contenga huecos como el del ejemplo es conveniente desactivar la opción Runtime Displacement ya que en caso contrario los agujeros / surcos aparecerán planos.

 Y finalmente, usando la técnica del ojímetro y los valores de Alpha Gain (+Alpha Offset) en la textura del mapa de desplazamiento y Multiplier y Pixel Edge Size en Displacement Options del Render Globals para FinalRender, conseguiremos tener algo más o menos similar a lo que buscamos. Hay que tener especial cuidado con el valor de Pixel Edge Size ya que si bajamos demasiado el valor (<=1) aumentará muchísimo el número de microtriángulos y el tiempo de render se disparará hacia el infinito, pero en principio se cumple que para mapas de desplazamiento de 16bit donde el Alpha.Gain ha sido calculado con el método expuesto arriba, los valores por defecto de Multiplier y Pixel Edge Size funcionan bastante bien.

 

wireframe rápido "beast"

Minnie and the Beast (parte 2) – Modelando I

Estos son los primeros avances en el modelado básico de la bestia dolorida. He decidido hacerlo por piezas e intentando mantener el número de polígonos lo más bajo posible. Las imágenes de prueba que ilustran este artículo llevan aplicado un smooth en todas las partes, pero se trata de un total de 11206 polígonos hasta ahora. Y hay que tener en cuenta que, aunque no he modelado toda la figura, en esta escena están las mandíbulas, ojos y dientes de los dos lado del modelo.

 Todavía queda por trabajar un poco las patas. Ajustar las uñas para que se asemejen más al dibujo original y lo mismo para los dedos. Además de eso tengo que modelar todas las encías para las ocho mandíbulas que tiene el muchacho.

 Después de lo anterior tocará ajustar las UV's antes de empezar a esculpir detalles en ZBrush y meterme de lleno con las texturas que, probablemente haga antes de modelar a Minnie. De momento me encuentro con un problema: muchos de los dientes están repetidos, pero no he sido previsor y no he apuntado cuales son para no tener que ajustar las UV's en todos los duplicados. Seguramente me toque hacerlo con todos y son más de 100 piezas individuales.

 Respecto al modelado en si, casi todo está hecho a partir de cubos extruidos y usando como referencia la imagen original. Los ojos son simples esferas y los cuernos están hechos a partir de conos a los que he movido los vértices para ajustarlos lo mas posible a la imagen de referencia.

 Para finalizar, un render rápido como referencia de lo que he avanzado (que tampoco es mucho):