Open Inventor , первоначально IRIS Inventor , — это объектно-ориентированный набор инструментов для трехмерной графики на языке C++ , разработанный SGI для обеспечения более высокого уровня программирования для OpenGL . Его основными целями являются повышение удобства и эффективности программиста. Open Inventor существует как проприетарное программное обеспечение , так и бесплатное программное обеспечение с открытым исходным кодом , в соответствии с требованиями GNU Lesser General Public License (LGPL) версии 2.1.
Основной целью было сделать 3D-программирование доступным путем внедрения объектно-ориентированного API, что позволило бы разработчикам создавать сложные сцены без тонкостей низкоуровневого OpenGL. Инструментарий включал такие функции, как графы сцен, предопределенные формы и автоматическое исключение окклюзии для упрощения управления сценами. В то время как Open Inventor фокусировался на простоте использования, проект OpenGL Performer, порожденный тем же контекстом, делал упор на оптимизацию производительности. Позднее эти два проекта объединились в попытке найти баланс между доступностью и производительностью, что привело к таким инициативам, как Cosmo 3D и OpenGL++. Эти проекты прошли различные этапы разработки и усовершенствования, способствуя эволюции парадигм программирования 3D-графики.
Около 1988–1989 годов Вэй Йен попросил Рикка Кэри возглавить проект IRIS Inventor. Их целью было создание инструментария, который упростил бы разработку приложений для 3D-графики. Стратегия основывалась на предпосылке, что люди не разрабатывали достаточно 3D-приложений с помощью IRIS GL, поскольку это было слишком трудоемко с низкоуровневым интерфейсом, предоставляемым IRIS GL. Если бы 3D-программирование было упрощено с помощью объектно-ориентированного API, то больше людей создавали бы 3D-приложения, и SGI бы от этого выиграла. Поэтому кредо всегда было «простота использования» перед «производительностью», и вскоре слоган «3D-программирование для людей» стал широко использоваться.
OpenGL (OGL) — это низкоуровневый интерфейс прикладного программирования , который берет списки простых полигонов и отображает их как можно быстрее. Чтобы сделать что-то более практичное, например «нарисовать дом», программист должен разбить объект на ряд простых инструкций OGL и отправить их в движок для рендеринга. Одна из проблем заключается в том, что производительность OGL очень чувствительна к тому, как эти инструкции отправляются в систему, требуя от пользователя знать, какие инструкции отправлять и в каком порядке, и заставляя его тщательно отбирать данные, чтобы избежать отправки объектов, которые даже не видны на полученном изображении. Для простых программ требуется выполнить огромный объем программирования, чтобы просто начать.
Open Inventor (OI) был написан для решения этой проблемы и предоставления общего базового слоя для начала работы. Объекты могли быть подклассифицированы из ряда предварительно скрученных форм, таких как кубы и многоугольники, а затем легко изменены в новые формы. «Мир», который нужно было нарисовать, был помещен в граф сцены, запущенный OI, при этом система автоматически применяла отбраковку окклюзии к объектам в графе. OI также включал ряд объектов контроллера и систем для их применения к сцене, что упрощало общие задачи взаимодействия. Наконец, OI также предоставлял общий формат файла для хранения «миров» и код для автоматического сохранения или загрузки мира из этих файлов. Затем базовые 3D-приложения можно было написать в несколько сотен строк в OI, связав части набора инструментов с помощью кода «склеивания».
С другой стороны, OI, как правило, был медленнее, чем написанный вручную код, поскольку 3D-задачи, как известно, трудно заставить хорошо работать без ручной перетасовки данных в графе сцены. Другая практическая проблема заключалась в том, что OI можно было использовать только с его собственным форматом файла, что заставляло разработчиков писать конвертеры во внутреннюю систему и из нее.
Примерно через год после начала проекта Inventor начала формироваться другая философия. Вместо того, чтобы просто упростить написание приложений на системах SGI, цель была изменена, чтобы затруднить написание медленных приложений. Члены команды Inventor ушли, чтобы сформировать свою собственную группу, которая заложила основу проекта OpenGL Performer . Performer также был основан на внутреннем графе сцены, но ему было разрешено изменять его для лучшей скорости по своему усмотрению, даже удаляя «менее важные» объекты и полигоны, чтобы поддерживать гарантированные уровни производительности. Performer также использовал ряд процессов для параллельного выполнения задач для повышения производительности, что позволяло запускать его (в одной версии) на нескольких процессорах. В отличие от Inventor, Performer оставался проприетарным, так что SGI имела возможность изменять API по мере необходимости, чтобы идти в ногу с последними усовершенствованиями оборудования.
В какой-то момент в середине 1990-х годов стало ясно, что нет никаких веских причин, по которым эти две системы нельзя объединить, что привело к единому высокоуровневому API с производительностью и программируемостью. SGI начала работу над еще одним проектом, направленным на слияние двух систем, что в конечном итоге привело к появлению Cosmo 3D. Однако у Cosmo было несколько практических проблем, которых можно было бы избежать, если бы улучшили дизайн.
В конце концов все эти идеи объединились, чтобы создать OpenGL++ , вместе с Intel , IBM и DEC . По сути, очищенная и более «открытая» версия Cosmo 3D, работа над Cosmo была прекращена, и SGI полностью переключилась на OpenGL++. Работа над OpenGL++ затянулась и в конечном итоге была прекращена, а затем SGI снова попыталась с Microsoft с похожим проектом Fahrenheit , который также прекратил свое существование. В 1994 году SGI лицензировала Open Inventor двум сторонним разработчикам, Template Graphics Software (TGS) и Portable Graphics; в 1996 году TGS купила Portable Graphics, сделав их единственным лицензиатом.
После многих лет исключительной доступности по проприетарному лицензированию от TGS (теперь FEI ), Inventor был выпущен под лицензией LGPL с открытым исходным кодом в августе 2000 года и доступен от SGI. Примерно в то же время библиотека-клон API Coin3D была выпущена SIM (Systems in Motion). Позднее SIM была приобретена группой Kongsberg и переименована в Kongsberg SIM. Библиотека Coin была написана в стиле чистой комнаты с нуля, не разделяя код с оригинальной библиотекой SGI Inventor, но реализуя тот же API из соображений совместимости. Kongsberg завершил разработку Coin3D в 2011 году [2] и выпустил код под лицензией BSD с 3 пунктами.
Версия с открытым исходным кодом от SGI не поддерживается, и SGI не заявила о своей приверженности дальнейшей разработке библиотеки. Однако версия с открытым исходным кодом используется в MeVisLab (MeVis Medical Solutions AG и Fraunhofer MEVIS), и ее разработка продолжается. [3] Thermo Scientific Open Inventor все еще находится в разработке и добавил ряд улучшений к исходному API Inventor для медицинской визуализации , вычислений медицинских изображений , сейсмологии отражений 3D и моделирования нефтяных резервуаров .
Open Inventor API по-прежнему широко используется для широкого спектра научных и инженерных систем визуализации по всему миру для разработки сложного программного обеспечения для 3D-приложений. TGS была приобретена Mercury Computer Systems в 2004 году. Она стала независимой компанией Visualization Sciences Group (VSG) в июне 2009 года. В 2012 году VSG была приобретена FEI Company. FEI Company была приобретена в 2016 году Thermo Fisher Scientific Materials & Structural Analysis Division, которая продолжает разрабатывать (и поддерживать) Open Inventor.