Open Inventor

Open Inventor は、C++用のオブジェクト指向3次元グラフィックスAPIであり、SGIがOpenGLのより抽象化されたプログラミング層を提供するべく設計した。当初の名称は IRIS Inventor。プログラマにとってより便利で効率的であることを目標としている。

初期の歴史 
1988年から1989年ごろ、SGIの重役だった  が  に IRIS Inventor プロジェクトを任せた。プロジェクトの目的は、3次元グラフィックスアプリケーションの開発を容易にするツールキットの開発だった。この戦略が決定された背景には、IRIS GL（後のOpenGL）のあまりにも低レベルなインタフェースのせいで3次元グラフィックスアプリケーションの開発に時間がかかり、そのため思うようにアプリケーションが増えないという事情があった。オブジェクト指向のAPIを使って3DCGプログラミングが容易になれば、より多くの3DCGアプリケーションが開発されるようになり、SGIにとっても良い結果になると予想された。したがって、性能よりも使いやすさが優先され、間もなく「人類のための3Dプログラミング ()」がキャッチフレーズとして広く使われるようになった。

背景と概要 
OpenGLは低レベルなライブラリであり、単純なポリゴンのリストを入力として、それらを可能な限り高速に描画する。「家を描画する」といったもっと現実的な何かをしようとすると、プログラマはそれを単純なOpenGL命令列に分解し、それらを逐次的に実行させる必要がある。問題はその命令列の順序であり、OpenGLの性能はどういう順序で命令を与えるかに大きく左右される。そのため、プログラマは最終的な画像では見えない部分を注意深くより分ける必要があった。単純なプログラムであっても、プログラミング量は非常に多くなった。

Open Inventor はこの問題への解決策として開発された。まず、立方体やポリゴンといった基本形状がクラスとして用意され、それらを容易に新たな形状に変形できるようにした。Open Inventor が実行しているに描画すべき "world" を置く。そのとき、自動的にオブジェクト間の遮蔽 () を適用する。また Open Inventor にはいくつかのコントローラオブジェクトがあり、それをシーンに適用することで一般的な対話型タスクが容易に作れる。Open Inventor は "worlds" を格納するファイルフォーマットを用意しており、自動的なセーブとロードのためのコードも付属していた。これらの機能により、簡単な3DCGアプリケーションを数百行以内で書くことができる。

Open Inventor の欠点は、OpenGLを直接使った場合よりも性能が低下する点である。もう1つの問題は、Open Inventor が自前のファイルフォーマット以外をロードできない点で、開発者は変換プログラムを書く必要があった。

TGS Open Inventor 
Open Inventor は後に（IRIS GL から OpenGL に名称が変更されたとき）サードパーティへのライセンス提供が開始された。ライセンス提供を受けたサードパーティとして、Template Graphics Software (TGS) と Portable Graphics がある。TGSは後に Portable Graphics を買収したため、唯一のライセンシーとなった。2004年、TGSは Mercury Computer Systems に買収され、同社が Open Inventor の開発と保守を継続している。

Performer 
IRIS Inventor プロジェクトが始まって約1年後、別の考え方が生まれた。すなわち、SGIのシステム上でアプリケーションの開発を容易にするのではなく、性能の悪いアプリケーションを書きにくくするという考え方である。そこで Inventor チームの一部が独立して  プロジェクトを開始することになる。Performer も内部にシーングラフを持つが、性能を重視して更新することができ、重要でないオブジェクトやポリゴンを描画しないなどして性能目標を達成できるようにする。Performer は複数のプロセスで構成されているため、マルチプロセッサ上で動作させることで性能が向上する。Inventor とは異なり、Performer は SGI 以外にライセンス供与されることがなかった。そのため、SGIは自社のハードウェアの進化に合わせてそのAPIを変更することができた。

1990年代中ごろ 
1990年代中ごろ、Inventor と Performer を分けておく理由はないとの認識が広まり、性能とプログラムの容易性を兼ね備えた高レベルのAPIを開発するプロジェクトが開始された。その成果が Cosmo 3D である。しかし、Cosmo 3D は設計段階がまずかったためか、実用面でいくつか問題を抱えていた。

最終的にこれらの成果がインテル、IBM、DECとの OpenGL++ の開発に繋がっていった。これは、Cosmo 3D をよりクリーンアップしてオープンにしたバージョンであり、SGI は Cosmo 3D プロジェクトを中止してこちらに全力で取り組んだ。結果として OpenGL++ は失敗に終わった。この時点でSGIは Open Inventor に関する事業を完全に廃止し、全てを TGS に譲り渡した。

その後の歴史 
その後、Open Inventor は TGS がプロプライエタリなライセンスで販売しているだけだったが、2000年8月、オープンソースライセンスでのリリースが SGI から行われた。

ほぼ同じ頃、SIM (Systems in Motion) がAPI互換のクローンライブラリをリリースした。SIM は後にに買収され、 と改称している。Coin3Dはクリーンルーム設計で一から書かれており、SGIの Open Inventor とはコードを全く共有していない。SIMのCoin3Dは、フリーソフトウェア開発向けのGNU GPLと、商用開発向けの商用販売ライセンスのデュアルライセンスだった。

SGIのリリースしたオープンソース版は今後の開発や保守がどうなるか不透明だったため、ほとんど注目されなかった。

Kongsberg SIM の Coin3D と TGS の Inventor は活発に開発が続けられており、当初のAPIにはなかった機能を追加している（VRML対応など）。

開発された年代はやや古いが、Open Inventor の API は今でもよく使われており（科学や工学での視覚化など）、複雑な3DCGアプリケーションの開発を容易にしていることは確かである。

脚注

外部リンク 
 SGI Open Inventor 公式サイト
 Coin3D, このAPIの独自実装
 Open Inventor by FEI, このAPIの商用実装
 Kongsberg SIM
Open Inventor Users Forum

OpenGL
グラフィックライブラリ
API