Open Game Engine Exchange ( OpenGEX )は、ゲームエンジンや 3D モデリング アプリケーションを含む3D グラフィックス アプリケーション間で複雑なシーン データをアプリケーションに依存しない方法で転送するのに役立つフォーマットです。データ ストレージには、人間が読みやすい任意のデータ ストレージ方法であるOpen Data Description Languageを使用します。OpenGEX ファイル フォーマットは、インターネット割り当て番号機関(IANA)にメディア タイプとして登録されていますmodel/vnd.opengex。[ 1 ]
OpenGEXフォーマットは、Open Game Engine Exchange Specification [ 2 ]によって定義されており、公式ウェブサイトopengex.orgで入手可能です。
OpenGEX形式で書き出すエクスポートプラグインは、Autodesk Mayaと3D Studio Maxで利用可能であり、 Blender用の非公式プラグインも存在する。
最も基本的なレベルでは、OpenGEXファイルは、ノード階層、オブジェクトセット、マテリアルセット、およびグローバル単位と軸の向きに関する追加情報で構成されます。さまざまなノード、オブジェクト、マテリアル構造には、OpenGEXで定義された追加タイプの構造の階層内に、ジオメトリデータやアニメーショントラックなどのすべての詳細が含まれています。OpenGEXファイルには、次のタイプのデータを含めることができます。
緑色の立方体を記述した完全な OpenGEX ファイルの非常にシンプルな例を以下に示します。まず、Metric測定単位とグローバルな上方向を定義する構造体のグループから始まります。次に、GeometryNode立方体の名前と変換を提供する単一の構造体が続きます。立方体の幾何学的データは、GeometryObjectジオメトリ ノードによって参照される構造体に格納されます。ジオメトリ オブジェクト構造体には、頂点ごとの位置、法線、テクスチャ座標を含む三角形プリミティブの単一のメッシュが含まれています。最後に、ファイルの末尾にある構造体には、緑色の拡散反射色が含まれています。Material
メトリック(キー = "距離") {float {0.01}} メトリック(キー = "up") {string {"z"}} ジオメトリノード $node1 { 名前 {string {"Cube"}} オブジェクト参照 {ref {$geometry1}} マテリアル参照 {ref {$material1}} 変身 { float[12] { {1.0, 0.0, 0.0, 0.0、1.0、0.0、 0.0、0.0、1.0、 50.0、50.0、0.0} } } } GeometryObject $geometry1 // 立方体 { メッシュ(基本要素=「三角形」) { 頂点配列(属性 = "position") { float[3] // 24 { {-50.0, -50.0, 0.0}, {-50.0, 50.0, 0.0}, {50.0, 50.0, 0.0}, {50.0, -50.0, 0.0}, {-50.0, -50.0, 100.0}, {50.0, -50.0, 100.0}, {50.0, 50.0, 100.0}, {-50.0, 50.0, 100.0}, {-50.0, -50.0, 0.0}, {50.0, -50.0, 0.0}, {50.0, -50.0, 100.0}, {-50.0, -50.0, 100.0}, {50.0, -50.0, 0.0}, {50.0, 50.0, 0.0}, {50.0, 50.0, 100.0}, {50.0, -50.0, 100.0}, {50.0, 50.0, 0.0}, {-50.0, 50.0, 0.0}, {-50.0, 50.0, 100.0}, {50.0, 50.0, 100.0}, {-50.0, 50.0, 0.0}, {-50.0, -50.0, 0.0}, {-50.0, -50.0, 100.0}, {-50.0, 50.0, 100.0} } } VertexArray (attrib = "normal") { float[3] // 24 { {0.0, 0.0, -1.0}, {0.0, 0.0, -1.0}, {0.0, 0.0, -1.0}, {0.0, 0.0, -1.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, 1.0}, {0.0, -1.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {1.0, 0.0, 0.0}, {1.0, 0.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 1.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0} } } VertexArray (attrib = "texcoord") { float[2] // 24 { {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0}, {0.0, 0.0}, {1.0, 0.0}, {1.0, 1.0}, {0.0, 1.0} } } IndexArray { uint32[3] // 12 { {0, 1, 2}, {2, 3, 0}, {4, 5, 6}, {6, 7, 4}, {8, 9, 10}, {10, 11, 8}, {12, 13, 14}, {14, 15, 12}, {16, 17, 18}, {18, 19, 16}, {20, 21, 22}, {22, 23, 20} } } } } 材料 $material1 { 名前 {string {"Green"}} 色 (attrib = "diffuse") {float[3] {{0, 1, 0}}} } OpenGEXフォーマットの開発は、2013年5月8日に終了したクラウドソーシングキャンペーン[ 3 ]によって資金提供されました。フォーマットの設計と並行して、 OpenGEXが構築される汎用ベース言語としてOpen Data Description Languageも作成されました。OpenGEXフォーマットのサポートは、当初C4 Engineバージョン3.5で実装されました。