コンピューターグラフィックスに関する本を読んでいますが、ある時点で、.datファイルから作成された3Dモデルを示しています。
.datファイルを作成するためのいくつかのルールを次に示します。
- 頂点の位置/面のリストで構成
- 反時計回りに書かれた
- 面はドット(。)で終わります
- 分数も許容されます
これが標準かどうか、そうでない場合は、3Dオブジェクトを定義する標準的な方法を知りたいと思います。
また、仕様がある場合、誰がそれを定義し、どこで見つけることができますか?
コンピューターグラフィックスに関する本を読んでいますが、ある時点で、.datファイルから作成された3Dモデルを示しています。
.datファイルを作成するためのいくつかのルールを次に示します。
これが標準かどうか、そうでない場合は、3Dオブジェクトを定義する標準的な方法を知りたいと思います。
また、仕様がある場合、誰がそれを定義し、どこで見つけることができますか?
回答:
ファイル形式について話すとき、3Dモデル/ジオメトリに関連するいくつかのデータを永続化することについて話します。3Dジオメトリを保持するためのファイル形式に関する普遍的な標準はありません。他の形式よりも支配的な形式はわずかです。
画像ファイル形式と同様に、PNGとJPEGは現在最も一般的な形式ですが、どちらか一方を使用することに関してアプリケーション間で普遍的な合意はありません。各アプリは、その目的に最適なものを使用します。
3Dデータを保存するファイル形式でも同じことが起こります。通常、各3Dモデリングソフトウェアには、1つまたは一連の優先フォーマットがあります。ほとんどの場合、特定のバージョンのツールでのみ機能するカスタム形式を定義します。これは、アプリケーションの内部動作の単純化やファイルの読み込みの高速化から、意図的にユーザーを特定のツールにバインドすることなど、さまざまな理由で発生します。
この.dat
形式は、この本の著者によって作成されたカスタム形式であり、おそらく単純さを念頭に置いて設計されています。これはWavefront OBJ形式に類似したテキストファイルのようです。これは今では静的ジオメトリを格納するための非常に人気のある形式ですが、今では少し古くなっています。.OBJ
フォーマットは.BMP
3Dモデルフォーマットであると言えます。
他の一般的な3Dモデル形式は次のとおりです。
そして、他の多くの。ここでより一般的な説明。
また、冒頭で述べたように、これらは3Dモデルまたはジオメトリをオフラインストレージに保存/保持するためのフォーマットであることに注意してください。これらを使用するアプリケーションが、ファイルと同じレイアウトを使用してデータをメモリに内部的に保存することを意味するわけではありません(通常はそうではありません)。通常、この種のデータは、ファイルからロードされた後、たとえば画面に表示されるまで、多くの処理を受けます。
3Dモデルの標準形式はありません。いくつかの一般的なものはglampertの回答にリストされていますが、このSEの回答にはさらに多くのものがあります。
独自の目的のために独自の形式を設計している場合(実際にはかなり一般的なことです)、モデルデータの使用方法を調べることは良い最初のステップです。たとえば、レンダリングに重点を置いている場合は、グラフィックスライブラリが想定している形式を使用できます。ソフトウェアのロード時間を可能な限り短縮したい場合は、実行しなければならない解析と処理の量を減らすことが役立ちます。エンジンが期待する形式でファイルを出力できるシンプルなユーティリティは、単にファイルをメモリにマップし、グラフィックライブラリにポインタを渡すことができることを意味します。
一方、レンダリングが主な関心事ではなく、編集がより重要な場合は、翼のあるエッジなど、編集により適した形式を検討することができます。汎用モデル形式を使用すると、プロジェクトの開始時に目的に合っている場合がありますが、最終的に3Dモデルでできることはたくさんあり、それぞれの形式には長所と短所があるため、最適な形式を選択できます。
3Dモデルのストレージを定義する単一の標準はありません。グラフィックスAPIは、頂点と、どの頂点が三角形を形成するかを示すインデックスによって定義される三角形のみを考慮します。
多くの企業が、さまざまな機能と目標を持つ独自のモデル形式を作成しています。最も単純なものの1つは、.obj(Wavefront Object)形式です。頂点の位置、法線、テクスチャ座標のリストと、三角形を構成するインデックスのリストが含まれています。また、テクスチャ、拡散、鏡面反射色などのいくつかの基本的なプロパティを持つマテリアルも含まれています。
オートデスクが使用する.fbx(FilmBox)などのより高度なモデル形式には、モデリングソフトウェアに必要な追加情報が含まれています。これらには、スキニングなどに使用されるボーン、階層、さらに多くの頂点プロパティが含まれる可能性があります。そのため、「標準」はありますが、プログラムごとに異なる情報が必要になるため、実際には統一されていません。しかし、多くのモデリングアプリケーションがWavefrontにエクスポートでき、インポーターを簡単に記述(検索)できるため、wavefrontは非常に良い選択です。
他の答えが述べたように、3Dデータを保存するための複数の競合する形式があります。
ただし、この質問が尋ねられてから、「標準」に期待される多くの特性を持つ特定の形式、glTF形式が登場しました。
glTFは、Khronos Group(OpenGLとVulkanの背後にある組織)によって公開された3D標準であり、Colladaの欠陥を補うことを目的としています。
主な利点は次のとおりです。
JSONベースであるため、ネットワーク経由での解析、シリアル化、読み取り、送信が非常に簡単になります。
標準にはあいまいさや冗長性はほとんどありません(ただし、*はあります)。単位、利き手、テクスチャ座標記号などはすべて標準化されています。すべてが常にインデックスベースであるため、データの冗長性はありません。これにより、インポーターを簡単に作成できます。
ドキュメントは非常にきれいで網羅的です。
データのレイアウトはOpenGL / WebGLワークフローに基づいています。つまり、インポートされたモデルは、配管をほとんど必要とせずにエンジン内データとして使用できます。
標準はオープンソースであり、仕様はGithubでホストされています。つまり、標準は常に利用可能であり、無料で使用でき、開発プロセスは誰でも見ることができます。反対により、クローズドソース標準の将来は、個人の利益によって決定され、これは本質的に危険です。
glTFは、Khronos(Adobe、Google、Microsoft、Mozilla、Unity)を通じて多くの業界の巨人によってサポートされています。Blenderでエクスポートでき(Mayaからのエクスポートはまだ正式にはサポートされていません)、Unreal、Unity、Godotでインポートできます。
こちらもご覧ください:
*握りやすさの接線は無意味だと確信しています。
他の答えに追加するために、実際には中間とランタイムの2種類の形式があります。中間形式(例:COLLADA)はより冗長/低速であり、ツール間で最終的に特定のアプリケーション/ハードウェア向けに最適化されたカスタムランタイム形式に変換されます。パフォーマンスを重視しない単純なアプリケーションでは、中間形式を直接使用できます。