Open Inventor , originalmente IRIS Inventor , es un conjunto de herramientas de gráficos 3D en modo retenido orientado a objetos C++ diseñado por SGI para proporcionar una capa superior de programación para OpenGL . Sus principales objetivos son mejorar la comodidad y la eficiencia del programador. Open Inventor existe como software propietario y como software libre y de código abierto , sujeto a los requisitos de la Licencia Pública General Reducida de GNU (LGPL), versión 2.1.
El objetivo principal era hacer accesible la programación 3D mediante la introducción de una API orientada a objetos, que permitiera a los desarrolladores crear escenas complejas sin las complejidades del OpenGL de bajo nivel. El conjunto de herramientas incorporaba funciones como gráficos de escena, formas predefinidas y eliminación automática de oclusiones para agilizar la gestión de escenas. Mientras que Open Inventor se centraba en la facilidad de uso, el proyecto OpenGL Performer, que surgió del mismo contexto, hacía hincapié en la optimización del rendimiento. Los dos proyectos convergieron más tarde en un intento de lograr un equilibrio entre la accesibilidad y el rendimiento, lo que culminó en iniciativas como Cosmo 3D y OpenGL++. Estos proyectos atravesaron varias etapas de desarrollo y refinamiento, lo que contribuyó a la evolución de los paradigmas de programación de gráficos 3D.
Entre 1988 y 1989, Wei Yen le pidió a Rikk Carey que liderara el proyecto IRIS Inventor. Su objetivo era crear un conjunto de herramientas que facilitara el desarrollo de aplicaciones gráficas en 3D. La estrategia se basaba en la premisa de que no se desarrollaban suficientes aplicaciones en 3D con IRIS GL porque era demasiado lento hacerlo con la interfaz de bajo nivel que proporcionaba IRIS GL. Si se facilitara la programación en 3D mediante el uso de una API orientada a objetos, más personas crearían aplicaciones en 3D y SGI se beneficiaría. Por lo tanto, el lema siempre fue “facilidad de uso” antes que “rendimiento”, y pronto se utilizó ampliamente el eslogan “programación en 3D para humanos”.
OpenGL (OGL) es una interfaz de programación de aplicaciones de bajo nivel que toma listas de polígonos simples y los renderiza lo más rápido posible. Para hacer algo más práctico como “dibujar una casa”, el programador debe dividir el objeto en una serie de instrucciones OGL simples y enviarlas al motor para su renderización. Un problema es que el rendimiento de OGL es muy sensible a la forma en que se envían estas instrucciones al sistema, lo que requiere que el usuario sepa qué instrucciones enviar y en qué orden, y lo obliga a seleccionar cuidadosamente los datos para evitar enviar objetos que ni siquiera son visibles en la imagen resultante. Para los programas simples, se debe realizar una enorme cantidad de programación solo para comenzar.
Open Inventor (OI) se escribió para abordar este problema y proporcionar una capa base común con la que empezar a trabajar. Los objetos se podían subclasificar a partir de una serie de formas predefinidas, como cubos y polígonos, y luego modificarse fácilmente para obtener nuevas formas. El “mundo” que se iba a dibujar se colocaba en un gráfico de escena ejecutado por OI, y el sistema aplicaba automáticamente la eliminación de oclusión a los objetos del gráfico. OI también incluía una serie de objetos controladores y sistemas para aplicarlos a la escena, lo que facilitaba las tareas de interacción comunes. Por último, OI también proporcionaba un formato de archivo común para almacenar “mundos” y el código para guardar o cargar automáticamente un mundo desde estos archivos. A continuación, se podían escribir aplicaciones 3D básicas en unos pocos cientos de líneas bajo OI, uniendo partes del conjunto de herramientas con código “pegamento”.
En el lado negativo, OI tendía a ser más lento que el código escrito a mano, ya que las tareas 3D son notoriamente difíciles de hacer funcionar bien sin mezclar los datos en el gráfico de escena a mano. Otro problema práctico era que OI solo se podía usar con su propio formato de archivo, lo que obligaba a los desarrolladores a escribir convertidores hacia y desde el sistema interno.
Aproximadamente un año después de que comenzara el proyecto Inventor, comenzó a surgir una filosofía diferente. En lugar de simplemente facilitar la escritura de aplicaciones en sistemas SGI, se cambió el objetivo para dificultar la escritura de aplicaciones lentas. Los miembros del equipo Inventor se marcharon para formar su propio grupo, que fundó la base del proyecto OpenGL Performer . Performer también se basaba en un gráfico de escena interno, pero se le permitía modificarlo para lograr una mayor velocidad según lo considerara conveniente, incluso eliminando objetos y polígonos "menos importantes" para mantener niveles de rendimiento garantizados. Performer también utilizaba una serie de procesos para ejecutar tareas en paralelo para obtener un rendimiento adicional, lo que le permitía ejecutarse (en una versión) en varios procesadores. A diferencia de Inventor, Performer siguió siendo propietario para que SGI tuviera la agilidad de modificar la API según fuera necesario para mantenerse al día con las últimas mejoras de hardware.
En algún momento a mediados de los años 90, se comprendió que no había ninguna buena razón para que los dos sistemas no pudieran combinarse, lo que dio como resultado una única API de alto nivel con rendimiento y capacidad de programación. SGI comenzó a trabajar en otro proyecto destinado a fusionar los dos, que finalmente culminó en Cosmo 3D. Sin embargo, Cosmo tenía una serie de problemas prácticos que podrían haberse evitado con un mejor diseño.
Finalmente, todas estas ideas se unirían para crear el proyecto OpenGL++ , junto con Intel , IBM y DEC . En esencia, una versión más limpia y "abierta" de Cosmo 3D, el trabajo en Cosmo terminó y SGI se dedicó por completo a OpenGL++. El proyecto OpenGL++ se prolongó y finalmente fue abandonado, y SGI lo intentó de nuevo con Microsoft con el proyecto similar Fahrenheit , que también fracasó. En 1994, SGI licenció Open Inventor a dos desarrolladores externos, Template Graphics Software (TGS) y Portable Graphics; en 1996, TGS compró Portable Graphics, convirtiéndose en el único licenciatario.
Después de muchos años de estar disponible únicamente bajo licencia propietaria de TGS (ahora FEI ), Inventor fue lanzado bajo la licencia de código abierto LGPL en agosto de 2000 y está disponible en SGI. Casi al mismo tiempo, la biblioteca de clones de API de Coin3D fue lanzada por SIM (Systems in Motion). SIM fue adquirida más tarde por el grupo Kongsberg y rebautizada como Kongsberg SIM. La biblioteca Coin había sido escrita en una sala limpia desde cero, sin compartir código con la biblioteca SGI Inventor original pero implementando la misma API por razones de compatibilidad. Kongsberg finalizó el desarrollo de Coin3D en 2011, [2] y lanzó el código bajo la licencia BSD de 3 cláusulas.
La versión de código abierto de SGI no se mantiene y SGI no ha indicado ningún compromiso para seguir desarrollando la biblioteca. Sin embargo, la versión de código abierto se utiliza en MeVisLab (MeVis Medical Solutions AG y Fraunhofer MEVIS) y su desarrollo continúa. [3] Thermo Scientific Open Inventor aún se está desarrollando y ha añadido una serie de mejoras a la API original de Inventor para imágenes médicas , computación de imágenes médicas , sismología de reflexión 3D y modelado de yacimientos de petróleo .
La API de Open Inventor todavía se utiliza habitualmente en una amplia gama de sistemas de visualización científica y de ingeniería en todo el mundo para el desarrollo de software de aplicaciones 3D complejo. TGS fue adquirida por Mercury Computer Systems en 2004. Se convirtió en una empresa independiente, Visualization Sciences Group (VSG), en junio de 2009. En 2012, VSG fue adquirida por FEI Company. FEI Company fue adquirida en 2016 por la División de Análisis Estructural y Materiales de Thermo Fisher Scientific , que continúa desarrollando (y dando soporte) a Open Inventor.