Experimentos con Eagle3D
modsmega.zip (482 K)Hace unos meses, César David me escribió un email acerca de Eagle3D, una especie de extension para el programa de diseño de circuitos electrónicos Eagle. Este "plugin" transforma un circuito en una escena de POV-Ray, usando componentes de una librería de objetos 3D realizados con POV-Ray. Además, se puede expandir esta librería de componentes, y ese era el motivo del email de César: quería saber si se podrían reescribir los componentes de una de mis escenas antiguas para añadirlos a la librería de Eagle3D.
Teóricamente se podría, pero al descargarme y probar Eagle y Eagle3D (via Wine en Linux), comprobé que en realidad la librería de Eagle3D es inmensa, muy detallada, y con componentes reales. Los componentes del circuito de mi escena son inventados, poco fidedignos, y no tendría mucho sentido intentar adaptarlos.
En cualquier caso, al probar Eagle3D me dí cuenta de que la escena de POV-Ray que genera por defecto se podría mejorar mucho con mejores texturas e iluminación... como no soy ingeniero, me limité a usar la placa que viene como ejemplo (hexapod), retocando solamente las texturas y la iluminación.
Tutorial
Además de César, otros usuarios de Eagle3D me han pedido que dé más detalles sobre las modificaciones que hice para obtener estas imágenes, así que no me ha quedado más remedio que hacer un pequeño tutorial. Tambien he pedido permiso a Matthias Weisser para publicar el código con mis cambios, que puedes descargar en enlace bajo el titulo de esta pagina: ojo: no se trata del codigo completo de Eagle3D, sino solo de los ficheros que modifiqué para mejorar la escena modsmega.pov.
No voy a entrar en detalles en el uso de Eagle para generar los archivos POV-Ray con el ULP de Eagle3D, ya que no soy usuario de Eagle. En mi caso me he limitado a cargar la placa, ir al menú File->Run, ejecutar el ULP de Eagle3D y aceptar todas las opciones por defecto (más que nada porque a través de Wine las fuentes no se ajustan bien, y en la mayoría de los casos no se lee el texto). Supondremos que ya tienes exportada tu placa a formato POV-Ray, y que has guardado el archivo en una carpeta creada para este proyecto.
Para empezar, observa que usé MegaPOV 1.2.1 para renderizar las imágenes, en lugar de POV-Ray 3.6, ya que quería usar mapas HDRI para la iluminación. El código generado por Eagle3D funciona perfectamente con MegaPOV, ecepto por un pequeño detalle: la variable environment da un error, seguramente debido a que colisiona con algun identificador interno de MegaPOV. La solución es sencilla, solo hay que cambiar el nombre de esta variable, por ejemplo a environment2.
A continuación, para simplificar el proceso, recomiendo hacer una copia de los archivos de la carpeta /povray de Eagle3D en la carpeta del proyecto. Así además podemos modificarlos sin afectar al comportamiento original de Eagle3D. Si lo prefieres, puedes modificar directamente los archivos originales en la carpeta /povray de Eagle3D, pero tendrás que añadir su trayectoria en el archivo povray.ini con una sentencia Library_Path (puede que tengas que hacer lo mismo con la ubiicacion de las fuentes ttf necesarias).
Vale, ya entramos en materia... abre el archivo exportado por Eagle3D y desactiva el entorno predefinido: #declare environment=0;. Tambien deberías de eliminar el fondo predefinido borrando la linea con la sentencia background{col_bgr}. En su lugar vamos a usar un entorno HDRI esférico para iluminación y reflexiones, y un plano con una textura de madera para la mesa: copia y pega el código a continuación, pero ten cuidado de ponerlo antes de la linea #include "tools.inc".
(El mapa HDRI usado es la famosa cocina de Paul Debevec, y la textura de madera es una imagen gratuita de Accustudio).
Lo siguiente es borrar las luces de la escena: busca las lineas con las sentencias light_source y eliminalas (o comenta cada linea con //). Lo único que nos falta ahora es retocar las texturas, lo cual es sencillo pero laborioso. El gran problema es saber en qué archivo estan las texturas que usan nuestros componentes.
Algunas texturas comunes estan en tools.inc, pero las específicas de cada componente estaran en la misma macro que crea el objeto, y para eso hay que identificarlo y buscar su definición en el archivo de inclusión correspondiente (cap.inc, diode.inc, resistor.inc, etc..). Lo ideal sería que Eagle3D tuviera todos los materiales centralizados en tools.inc, o mejor aún, en un archivo aparte donde los autores de los componentes podrían añadir sus definiciones de texturas. En mi opinión, las texturas NUNCA deberian definirse dentro de las macros de los objetos, sino que deberian usarse SIEMPRE texturas predefinidas en un archivo de texturas centralizado.
Entrando en materia, el problema de la mayoría de texturas es que no tienen un finish{} y consisten simplemente en un pigmento. Hay que añadir un acabado a todas, dependiendo del tipo de superficie. Para empezar, sustituye las siguientes texturas en tools.inc:
Hay más texturas por defecto en tools.inc, que dependen del valor de col_preset en la escena principal. En mi caso, el valor por defecto era 2, asi que sustituí las texturas por las siguientes:
A partir de aquí, tendrás que ir buscando en cada archivo de inclusión las texturas de los componentes que quieras mejorar. Por ejemplo, para cambiar el material de los chips, en ic.inc y qfp.inc sustituí los pigmentos simples como pigment{Gray30} por pigment{granite color_map{[0 Gray30][1 Gray20]}}, para darles ese acabado granuloso. En el caso de conectores y otros plasticos lisos, simplemente añadí finish{reflection{.1,.2}} o similares, variando el rango de la reflexión variable en cada tipo de plástico (por ejemplo, para los condensadores azules usé finish{reflection{.1,.5}}).
Y eso es todo, en realidad... es más laborioso que difícil, pero lo bueno es que los cambios sirven para futuras placas, en las que solo tendremos que actualizar las texturas de los componentes nuevos.
Como toque final, puedes cambiar la cámara a una posición más interesante, y añadir focal_blur (desenfoque) para incrementar el realismo:
En la sección de bocetos a continuación, he añadido un par más de imagenes de la escena de ejemplo modsmega.pov incluida con Eagle3D. Las hice como apoyo para redactar este tutorial, ya que así iba tomando notas mientras adaptaba la escena.
