오픈 인벤터

**오픈 인벤터**(Open Inventor, 원 명칭: **IRIS 인벤터**, IRIS Inventor)는 SGI가 OpenGL용으로 더 높은 계층의 프로그래밍을 제공하기 위해 설계한 C++ 객체 지향 리테인 모드 3D 그래픽 툴킷이다. 주요 목표는 프로그래머의 편의성과 효율성을 높이는 것이다. 오픈 인벤터는 사유 소프트웨어와 자유-오픈 소스 소프트웨어로 모두 존재하며, GNU 약소 일반 공중 사용 허가서 (LGPL) 버전 2.1의 요구 사항을 따른다.

주요 목표는 객체 지향 API를 도입하여 3D 프로그래밍에 접근성을 높이고, 개발자가 저수준 OpenGL의 복잡성 없이 복잡한 장면을 만들 수 있도록 하는 것이었다. 이 툴킷은 장면 그래프, 사전 정의된 모양, 자동 폐색 컬링과 같은 기능을 통합하여 장면 관리를 간소화했다. 오픈 인벤터는 사용 편의성에 중점을 두었지만, 동일한 맥락에서 파생된 OpenGL Performer 프로젝트는 성능 최적화에 중점을 두었다. 두 프로젝트는 나중에 접근성과 성능 사이의 균형을 맞추기 위해 통합되었으며, Cosmo 3D 및 OpenGL++와 같은 이니셔티브로 절정을 이루었다. 이러한 프로젝트는 다양한 개발 및 개선 단계를 거쳐 3D 그래픽 프로그래밍 패러다임의 발전에 기여했다.

## 초기 역사
1988년~1989년경 웨이 옌은 릭 캐리에게 IRIS Inventor 프로젝트를 이끌어달라고 요청했다. 그들의 목표는 3D 그래픽 응용 프로그램 개발을 더 쉽게 만드는 툴킷을 만드는 것이었다. 이 전략은 IRIS GL이 제공하는 저수준 인터페이스로는 너무 많은 시간이 소요되어 사람들이 IRIS GL로 충분한 3D 응용 프로그램을 개발하지 않는다는 전제에 기반을 두었다. 객체 지향 API를 사용하여 3D 프로그래밍이 더 쉬워지면 더 많은 사람들이 3D 응용 프로그램을 만들 것이고 SGI는 이득을 볼 것이었다. 따라서 신조는 항상 "성능"보다 "사용 편의성"이었으며, 곧 "인간을 위한 3D 프로그래밍"이라는 슬로건이 널리 사용되었다.

## 사용
OpenGL (OGL)은 단순한 다각형 목록을 최대한 빠르게 렌더링하는 저수준 응용 프로그래밍 인터페이스이다. "집을 그리다"와 같은 더 실용적인 작업을 수행하려면 프로그래머는 객체를 일련의 간단한 OGL 명령으로 분해하여 렌더링 엔진으로 보내야 한다. 한 가지 문제는 OGL 성능이 이러한 명령이 시스템으로 전송되는 방식에 매우 민감하다는 것이다. 이는 사용자가 어떤 명령을 어떤 순서로 보내야 하는지 알아야 하고, 결과 이미지에 보이지 않는 객체를 보내는 것을 피하기 위해 데이터를 신중하게 컬링해야 함을 의미한다. 간단한 프로그램의 경우 시작하기 위해 엄청난 양의 프로그래밍을 해야 한다.

오픈 인벤터(OI)는 이 문제를 해결하고 작업 시작을 위한 공통 기본 계층을 제공하기 위해 작성되었다. 객체는 큐브 및 다각형과 같은 여러 사전 제작된 모양에서 서브클래싱된 다음 새 모양으로 쉽게 수정될 수 있었다. 그려질 "월드"는 OI가 실행하는 장면 그래프에 배치되었고, 시스템은 그래프의 객체에 대해 폐색 컬링을 자동으로 적용했다. OI에는 또한 여러 컨트롤러 객체와 장면 적용을 위한 시스템이 포함되어 있어 일반적인 상호 작용 작업을 더 쉽게 만들었다. 마지막으로 OI는 "월드"를 저장하기 위한 공통 파일 형식과 이 파일에서 월드를 자동으로 저장하거나 로드하는 코드를 제공했다. 따라서 OI에서는 툴킷의 일부를 "접착제" 코드로 묶어 몇 백 줄로 기본적인 3D 응용 프로그램을 작성할 수 있었다.

단점은 3D 작업은 장면 그래프의 데이터를 직접 조작하지 않고는 성능을 잘 내기 어렵기 때문에 OI가 수동으로 작성된 코드보다 느린 경향이 있었다는 것이다. 또 다른 실제적인 문제는 OI가 자체 파일 형식으로만 사용될 수 있어 개발자들이 내부 시스템으로 또는 내부 시스템에서 변환기를 작성해야 했다는 점이다.

## 퍼포머
인벤터 프로젝트가 시작된 지 약 1년 후, 다른 철학이 나타나기 시작했다. 단순히 SGI 시스템에서 응용 프로그램을 쉽게 작성하는 것을 넘어, 느린 응용 프로그램을 작성하기 어렵게 만드는 것으로 목표가 변경되었다. 인벤터 팀원들은 자신의 그룹을 만들기 위해 떠났고, 이것이 OpenGL Performer 프로젝트의 기반이 되었다. Performer 또한 내부 장면 그래프를 기반으로 했지만, 보장된 성능 수준을 유지하기 위해 "덜 중요한" 객체와 다각형을 삭제하는 등 필요에 따라 더 나은 속도를 위해 수정할 수 있었다. Performer는 또한 추가 성능을 위해 여러 프로세스를 사용하여 작업을 병렬로 실행할 수 있었고, (한 버전에서는) 여러 프로세서에서 실행될 수 있었다. 인벤터와 달리 Performer는 SGI가 최신 하드웨어 개선 사항에 발맞춰 API를 필요에 따라 수정할 수 있는 유연성을 갖기 위해 독점적으로 유지되었다.

## 1990년대 중반
1990년대 중반 어느 시점에 두 시스템을 결합하여 성능과 프로그래밍 가능성을 모두 갖춘 단일 고수준 API를 만들 수 없는 이유가 없다는 것을 깨달았다. SGI는 두 시스템을 병합하는 것을 목표로 또 다른 프로젝트를 시작했고, 결국 코스모 3D로 결실을 맺었다. 그러나 코스모는 더 나은 설계로 피할 수 있었던 여러 실질적인 문제가 있었다.

결국 이 모든 아이디어는 인텔, IBM, DEC와 함께 OpenGL++ 노력을 만들어냈다. 본질적으로 코스모 3D의 정리되고 더 "개방적인" 버전이었으며, 코스모 작업이 끝나고 SGI는 OpenGL++에 전념했다. OpenGL++ 노력은 지지부진하다 결국 중단되었고, SGI는 마이크로소프트와 유사한 화씨 프로젝트로 다시 시도했지만 이 역시 실패했다. 1994년에 SGI는 오픈 인벤터를 두 명의 타사 개발자인 템플릿 그래픽스 소프트웨어 (TGS)와 포터블 그래픽스에 라이선스했고, 1996년에 TGS는 포터블 그래픽스를 인수하여 유일한 라이선스 보유자가 되었다.

## 최근 역사

TGS(현재 FEI)로부터 수년간 독점 라이선스로만 제공되던 Inventor는 2000년 8월 LGPL 오픈 소스 라이선스로 출시되었고 SGI에서 사용할 수 있다. 비슷한 시기에 SIM (Systems in Motion)은 Coin3D API 클론 라이브러리를 출시했다. SIM은 나중에 콩스베르그 그룹에 인수되어 콩스베르그 SIM으로 이름이 변경되었다. Coin 라이브러리는 원래 SGI Inventor 라이브러리와 코드를 공유하지 않고 호환성을 위해 동일한 API를 구현하는 방식으로 클린 룸 디자인 방식으로 처음부터 작성되었다. 콩스베르그는 2011년에 Coin3D 개발을 중단했고, 코드를 BSD 3-clause 라이선스로 공개했다.

SGI의 오픈 소스 버전은 유지 관리되지 않으며, SGI는 라이브러리 추가 개발에 대한 약속을 표명하지 않았다. 그러나 오픈 소스 릴리스는 MeVisLab (MeVis Medical Solutions AG 및 Fraunhofer MEVIS)에서 사용되며, 개발이 계속되고 있다. 써모 사이언티픽 오픈 인벤터(Thermo Scientific Open Inventor)는 여전히 개발 중이며, 의학촬영, 의학 이미지 처리, 3D 반사파 지진학, 석유층 모델링을 위한 원래 Inventor API에 여러 개선 사항을 추가했다.

오픈 인벤터 API는 전 세계적으로 복잡한 3D 응용 소프트웨어 개발을 위한 광범위한 과학 및 공학 시각화 시스템에 여전히 일반적으로 사용되고 있다.
TGS는 2004년에 머큐리 컴퓨터 시스템즈에 인수되었다. 2009년 6월에는 독립 회사인 비주얼라이제이션 사이언스 그룹 (VSG)이 되었다. 2012년 VSG는 FEI Company에 인수되었다. FEI Company는 2016년에 써모 피셔 사이언티픽의 재료 및 구조 분석 부서에 인수되었으며, 이 부서는 오픈 인벤터를 계속 개발(및 지원)한다.

## 각주

## 외부 링크
* 공식 SGI 오픈 인벤터 사이트
* Thermo Scientific 오픈 인벤터, API의 상업적 구현
* 오픈 인벤터 사용자 포럼
* Coin3D, API의 독립적인 구현
* Koin3D, Coin3D의 LWJGL 포트

분류:API
분류:자바 라이브러리
분류:C++ 라이브러리
분류:가상 현실
분류:그래픽 라이브러리
분류:자바 개발 도구
분류:크로스 플랫폼 소프트웨어
분류:OpenGL
분류:Qt를 사용하는 소프트웨어
분류:소프트웨어 개발 키트