Введение
3D графическое ядро Open Inventor, изначально IRIS Inventor, — это объектно-ориентированный инструментарий для 3D-графики на C++, разработанный SGI для обеспечения более высокоуровневого программирования для OpenGL. Его основными задачами являются повышение удобства и эффективности для разработчиков. Open Inventor существует как в виде проприетарного программного обеспечения, так и в виде свободного программного обеспечения с открытым исходным кодом, распространяемого по лицензии GNU Lesser General Public License (LGPL), версия 2.1. Главной целью было сделать 3D-программирование более доступным за счет внедрения объектно-ориентированного API, позволяющего разработчикам создавать сложные сцены, избегая сложностей низкоуровневого OpenGL. Инструментарий включал в себя такие возможности, как графы сцен, предопределенные фигуры и автоматическое отсечение невидимых объектов для упрощения управления сценами. В то время как Open Inventor делал акцент на простоте использования, проект OpenGL Performer, возникший в той же среде, был ориентирован на оптимизацию производительности. Позже эти два проекта объединились в попытке найти баланс между доступностью и производительностью, что привело к появлению инициатив, таких как Cosmo 3D и OpenGL++. Эти проекты прошли различные этапы разработки и совершенствования, внеся вклад в эволюцию парадигм программирования 3D-графики.
Open Inventor, originally IRIS Inventor, is a C++ object oriented retained mode 3D graphics toolkit designed by SGI to provide a higher layer of programming for OpenGL. Its main goals are better programmer convenience and efficiency. Open Inventor exists as both proprietary software and free and open source software, subject to the requirements of the GNU Lesser General Public License (LGPL), version 2.1. The primary objective was to make 3D programming accessible by introducing an object oriented API, allowing developers to create complex scenes without the intricacies of low level OpenGL. The toolkit incorporated features like scene graphs, pre defined shapes, and automatic occlusion culling to streamline scene management. While Open Inventor focused on ease of use, the OpenGL Performer project, spawned from the same context, emphasized performance optimization. The two projects later converged in an attempt to strike a balance between accessibility and performance, culminating in initiatives like Cosmo 3D and OpenGL++. These projects underwent various stages of development and refinement, contributing to the evolution of 3D graphics programming paradigms.
Ранняя история
Около 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-х годов
В какой-то момент в середине 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, став единственным лицензиатом.
Новейшая история
После многих лет, когда Inventor был доступен только по проприетарной лицензии от TGS (ныне FEI), он был выпущен под лицензией LGPL с открытым исходным кодом в августе 2000 года и доступен от SGI. Примерно в то же время, библиотека-клон Coin3D API была выпущена SIM (Systems in Motion). Позже SIM была приобретена группой Kongsberg и переименована в Kongsberg SIM. Библиотека Coin была написана с нуля в условиях "чистой комнаты", не имея общего кода с оригинальной библиотекой SGI Inventor, но реализуя тот же API для обеспечения совместимости. Kongsberg прекратила разработку Coin3D в 2011 году и выпустила код под лицензией BSD 3. Версия с открытым исходным кодом от SGI не поддерживается, и SGI не выразила намерения продолжать развитие библиотеки. Однако в MeVisLab (MeVis Medical Solutions AG и Fraunhofer MEVIS) используется версия с открытым исходным кодом, и её разработка продолжается. Thermo Scientific Open Inventor всё ещё находится в разработке и включает в себя ряд улучшений оригинального API Inventor для медицинской визуализации, вычислительной медицинской визуализации, 3D-рефлекционной сейсморазведки и моделирования нефтяных пластов. API Open Inventor до сих пор широко используется во всем мире в различных научных и инженерных системах визуализации для разработки сложных 3D-приложений. TGS была приобретена Mercury Computer Systems в 2004 году. В июне 2009 года компания стала независимой Visualization Sciences Group (VSG). В 2012 году VSG была приобретена FEI Company. FEI Company была приобретена в 2016 году подразделением Thermo Fisher Scientific Materials & Structural Analysis, которое продолжает разрабатывать (и поддерживать) Open Inventor.