| IntroducciónMindsEye  está actualmente en fase  de desarrollo.  La mayor parte del
trabajo se realiza  bajo la  interface.  Esto significa  que si  usted
intenta probar las partes actualmente funcionales, estas pueden variar
de un día para otro. Nosotros creemos  en un buen diseño básico, antes
que en dar a los usuarios herramientas con las que jugar .¿Qué es
Minds Eye?En la actualidad el mercado del modelado  y el rendering está dominado
por caros paquetes de  software comercial. MindsEye  es (o será) la
repuesta en freeware (gpl) a un paquete de software que pueda competir
con estas versiones comerciales. Cogiendo  lo mejor de ambas fuentes y
con   nuevas  técnicas  innovativas  Minds  Eye  trata   de ser en una
plataforma completa para todo   tipo  de  trabajos  con  gráficos
3DHistoriaHace unos dos  años, cuando Linux no  era más que un sistema operativo
para hackers, surgió la idea de comenzar  a trabajar en un programa de
render/modelado/animación para Linux. Inspirados  por el trabajo de la
gente  de Gimp, nos  pusimos a trabajar para  ver si era posible crear
otra maravilla similar. Durante  un año, más  o menos,  trabajamos con
varias  ideas de  diseño.  En   un  principio,   comenzó de un    modo
erróneo. Se hicieron buzones  a grupos de noticias  para ver si había
gente interesada en unirse     al proyecto.  Recibimos   montones   de
repuestas, y  parecía que no  tendríamos ningún problema para comenzar
el proyecto. El nombre, por aquel entonces,  era Free-D. Un nombre que
fue cambiado posteriormente  por  Minds  Eye,  dado que  podría  haber
causado confusiones  con el  proyecto de  las librerías  Free 3D.  Muy
lentamente  el proyecto creció.   En el  camino encontramos obstáculos
que no tenían nada que ver con el proyecto. Por ejemplo la gente tenía
una idea específica sobre lo que quería  ver mejorado. Por lo tanto en
nuestra lista de correo, solíamos ver discusiones constantes sobre las
especificaciones  en el diseño.  Tardamos   más de un  año en producir
realmente algo de código.DiseñoLa parte más interesante de Minds  Eye es su  diseño. Todas las partes
son  modulares,  desde el  elemento más  pequeño  hasta las partes más
grandes como el modelador.   En el  corazón del  programa está lo  que
nosotros  denominamos el núcleo de Minds  Eye.  Esta pieza de software
es  incapaz de hacer  por sí mismo  ningún tipo de trabajo gráfico. En
lugar de  esto, se encarga de manejar  todos los módulos y plug-ins. Se
podría definir como un gran  administrador de recursos.  Es también el
lugar  donde se mantiene la estructura  completa de los datos. Hay una
diferencia esencial  entre un módulo  y un  plug-in  en Minds Eye.   Un
módulo  es un trozo de  código, del cual tiene  noticia el núcleo.  Un
módulo puede  ser cargado y  descargado por el núcleo.  Cuando decimos
que "tiene noticia de", nos referimos a  que el núcleo sabe algo sobre
los módulos.  Por ejemplo, el  módulo de trabajo en  red es una puerta
que conecta varios  núcleos.  El módulo  de trabajo en red podría  ser
visto como un módulo  tonto que reemplaza a  uno de los otros módulos.
Hasta  el momento hemos definido un  conjunto  de módulos básicos, que
son:
¿Quieres saber cuál es la apariencia del programa en la actualidad? 
Aquí está:
Trabajo en red
Editor de modelado
Editor de animación
Editor de materiales
El módulo Entrada/Salida   Uno de los módulos  es el módulo de  animación.  Es básicamente  un
editor 3D especializado en animación.  Emplea nuestro gestor de vistas
que a su vez   usa nuestro código  genérico  de vistas. Todo   nuestro
código es modular y puede ser utilizado  en otras partes del programa.
Como ejemplo,  en  la pantalla de abajo   se pude ver  una  esbozo del
animador, con cuatro vistas.
  
 Para la salida en 3D empleamos OpenGL.   Los archivos de instalación
asumen que se está   empleando MesaGL si se  trabaja  bajo Linux.   El
conjunto  de herramientas GUI que se  puede ver en acción  es el QT de
TrollTech   (http://www.troll.no).
Nosotros hemos elegido  este kit (biblioteca) porque  presenta algunos
elementos    que   necesitábamos  y   que  ningún    otro  kit  podía
proporcionarnos (por  lo  menos al  nivel GPL).    En el  momento  que
comenzamos, con Gtk no nos sentíamos con la suficiente confianza como
para trabajar con  él. Además nosotros teníamos necesidades especiales
que Gtk no era capaz de satisfacer y Qt sí.
  
 Al igual que los  otros programas comerciales, Minds Eye  dispondrá
de un editor de materiales. Como  todas las otras  partes el código de
este módulo está basado en otro código. Por  ejemplo, las ventanas que
muestren a  los  materiales  tendrán la misma  fuente  de  luz que las
ventanas de diálogo. Están derivadas del código que muestra una esfera
de OpenGL con  varias propiedades. Las ventanas  de vistas sabrán cómo
tratar con  todas  estas  propiedades.  El editor  de  materiales sólo
tendrá  que encargarse del control  de  todos los materiales  y de los
datos disponibles en ese momento. Como todas  las partes del programa,
la    filosofía  es:  divide   todas las    partes  en  su  forma  más
básica. Básicamente siguiendo el mismo camino que hizo a Unix del modo
que es ahora.
  
 Para  la  salida   de   render  empleamos...  cualquier   cosa  que
encontramos.    Algunos  programas    de   renderizar    serán  usados
internamente, como  el  SIPP.  Otros renderizadores  serán  utilizados
como  programas externos.  Todo depende  de la naturaleza y complejidad
del  sistema   sobre el que    queramos  realizar el    render.  Si  el
renderizador de  salida es interno,  básicamente  será cargado como un
plug-in.  El módulo de render  sabrá como tratar  con él y le ofrecerá
una   estructura  de datos  y    un buffer para  almacenar  la  imagen
renderizada   junto con algunos  parámetros. En  la actualidad estamos
tratando con SIPP, POVRay y  con Renderman, como programas de  render,
pero los desarrolladores no pueden añadirles  todo lo que quieren. Como
todo lo  demás de Minds Eye todos  los interfaces tendrán una API bien
definida.
        
         Futuras TecnologíasMindsEye espera convertirse en un  programa muy robusto desde el punto
de vista de la arquitectura del  software. Una gran cantidad de nuevas
tecnologías  serán incluidas y  el  programa podría funcionar muy bien
como banco  de pruebas para las  nuevas técnicas de render y modelado.
Las nuevas características que planeamos incluir son:
Es muy probable que  en el futuro las escenas  sean más grandes y
complejas.  Controlar estos  grandes mundos entraña  una gran labor en
sí misma.   MindsEye quiere crear un  modo sencillo de trabajar en una
escena con más de un modelador a la vez.  La posibilidad de hacer esto
ahorra el tiempo de integración y reduce el tiempo total del modelado.
Una  forma  de hacerlo  es desarrollar  una   especie de  RCS (Revisión
Control System)  para escenas  y  mundos.   Por ejemplo  un  modelador
podría estar trabajando con una pequeña cantidad de  datos en una gran
escena. Estos datos    estarían bloqueados, para ese  modelador.  Otra
gente  podría trabajar con otras partes  sin interferir con las partes
bloqueadas por otros modeladores.
Cada   núcleo de MindsEye  no es  nada  más que   una  tarea y un
controlador  de recursos.    Si se  quiere  activar  cualquiera de los
módulos habrá que utilizar el núcleo. Una  de las ventajas de tener un
sistema basado en núcleos es que se puede ver el  conjunto de un modo
similar al LEGO ©.  Veamos como funciona este concepto en la vida
real; bien, supongamos que  tenemos una compañía de  animación llamada
Paxir.   La compañía está  trabajando en una  nueva  película y decide
emplear Minds  Eye   como su principal  plataforma  de  desarrollo. La
compañía   está acostumbrada a trabajar    con grupos de modeladores y
tiene  un  grupo central de render.  Instalar  ese tipo de  sistema con
MindsEye  sería  relativamente fácil  de  conseguir.  En cada máquina,
independientemente  de la clase de  plataforma o propósito, se instala
un sistema   simple  de  Minds  Eye.  Dependiendo   del rol   que deba
desempeñar esa máquina, se  le añaden unos  módulos u otros. Por tanto
una  parte  de los  diseñadores  tendría   un núcleo   y el módulo  de
modelado, junto con  un módulo de render  y un plug-in previo. El grupo
de render por otro  lado tendría el núcleo y  el módulo de  trabajo en
red junto con su plug-in favorito para render. Cada núcleo comprendería
su papel y actuaría en consecuencia.
Programar al estilo LEGO® 
Tal y como se explicó  en la sección  anterior, el render en  red
debería ser mucho más  flexible con Minds Eye. Lo  que se pretende  es
encadenar una   serie de  núcleos  y hacer  que  cada  uno  de  ellos,
renderize  una parte  de  la  animación.  En  efecto,  cada núcleo  es
responsable  de   su  tarea aunque     realmente  son el   módulo   de
render-modelado y el de  render plug-in los que  hacen el trabajo. A lo
largo de todo el  proceso de diseño y  el trabajo de programación  hay
que tener en cuenta una arquitectura modular. Muchas ideas y conceptos
deben ser tenidos en cuenta cuando se  programa para este proyecto. El
soporte para red es sólo una pequeña parte pero como se puede observar
es lo que se encuentra en el corazón de Minds Eye.
Transparencia en trabajo en red UtilizaciónPor el momento Minds Eye es un programa muy interesante desde el punto
de vista del desarrollador/programador. Para el usuario en general no
resulta tan útil. Estamos trabajando para conseguir un núcleo muy bien
hecho.  Cuando   esté  acabado, las  aplicaciones  aparecerán   a gran
velocidad.   Se  puede  ver  un  ejemplo  del  modelador actual  en la
siguiente   figura.  Es   MindsEye-0.5.19  en   un  escritorio de   Enlightenment.        En   el
modelador se    puede  observar  una  escena  cargada  que   se  llama
rings5.nff. Minds Eye tiene  la capacidad de cargar múltiples
escenas.  Aunque no  hay soporte para  muchos formatos  de imagen,  el
código  que  se   encarga de  cargar   y  salvar las   escenas  es muy
flexible.  Se  están diseñando y   construyendo protocolos para añadir
dinámicamente distintos  tipos de archivos. Cada tipo  se carga con el
plug-in  adecuado. MindsEye  será  capaz   de  activar un  "escaneo"   de
plug-ins. Esto significa que  los componentes serán añadidos y quitados
en el momento.
   |