3DSファイルフォーマット

概要

Autodesk社の3D Studioというソフト用のファイルフォーマットです。
多くのCGソフトがサポートし、CGソフトの中間ファイルフォーマットとして広く使用されています。
3D Studio は、3D Studio ⇒ 3D Studio Max ⇒ 3ds Max と、ソフト名が変わっています。

マテリアルデータ、立面図データ、光源データ、視点データの記録にも対応しています。

3DSファイルフォーマットは、バイナリーフォーマットです。

公式の仕様書

筆者は、公式の仕様書の所在を知りません。
公式の仕様書の所在をご存知の方はご一報ください。(「ホーム > コンタクト」)

フォーマット

構文

バイト数 データ内容
2 チャンクID
4 子や孫のチャンクデータを含めたデータサイズ
チャンク種類ごとに異なる チャンクデータ
2 チャンクID
4 子や孫のチャンクデータを含めたデータサイズ
チャンク種類ごとに異なる チャンクデータ
2 チャンクID
4 子や孫のチャンクデータを含めたデータサイズ
チャンク種類ごとに異なる チャンクデータ
2 チャンクID
4 子や孫のチャンクデータを含めたデータサイズ
チャンク種類ごとに異なる チャンクデータ

解説

エンディアン(endian、byte order)に関してはLittle Endian、Big Endianのどちらが正しいのかは不明です。

「チャンク」というデータ単位の概念があります。

「チャンク」というデータ単位の概念は、ツリー構造になっています。
(下のツリー構造図の各ノードは、
 チャンクID (チャンク種類の通称)
 となっています。)

0x4D4D (Main chunk)
 ┣0x3D3D (3D editor chunk)
 ┃ ┣0x4000 (Object block)
 ┃ ┃ ┣0x4100 (Triangular mesh)
 ┃ ┃ ┃ ┣0x4110 (Vertices list)
 ┃ ┃ ┃ ┣0x4120 (Faces description)
 ┃ ┃ ┃ ┃ ┗0x4130 (Face material list)
 ┃ ┃ ┃ ┗(省略)
 ┃ ┃ ┗(省略)
 ┃ ┣0xAFFF (Material block)
 ┃ ┃ ┣0xA000 (Material name)
 ┃ ┃ ┣0xA010 (Ambient color)
 ┃ ┃ ┣0xA020 (Diffuse color)
 ┃ ┃ ┣0xA030 (Specular color)
 ┃ ┃ ┣0xA040 (Shininess percent)
 ┃ ┃ ┗(省略)
 ┃ ┗(省略)
 ┗(省略)

2バイトのチャンクID、4バイトの「子や孫のチャンクデータを含めたデータサイズ」、「チャンク種類ごとに異なる」バイトのチャンクデータと続きます。

たとえば、チャンクIDが0x4D4Dのとき、すなわち、Main chunkのとき、「子や孫のチャンクデータを含めたデータサイズ」には、Main chunkのデータだけでなく、子や孫にあたる3D editor chunkデータやObject blockデータやTriangular meshデータやVertices listデータを含めたデータサイズになります。
3D editor chunkのときの「子や孫のチャンクデータを含めたデータサイズ」も、3D Editor chunkのデータだけでなく、子や孫のデータを含めたデータサイズになります。

チャンクデータの記録フォーマットは、チャンク種類ごとに異なります。

3DSファイルフォーマットのすべてを解説するのは困難なので、3Dモデル表現に関するフォーマット部分にフォーカスして解説します。

3Dモデル表現に関係のあるチャンクは、Object block、Vertices list、Faces descriptionです。

Object block
オブジェクト名を表す任意の長さの文字列が記録されます。
Vertices list
まず、2バイトで、頂点数が記録されます。
続いて、頂点数分の頂点データの記録が続きます。
1つの頂点データは、単精度浮動少数点型(=4バイト) × 3成分(x, y, z) の12バイトで記録されます。
Faces description
まず、2バイトで、三角形数が記録されます。
続いて、三角形数分の三角形データの記録が続きます。
1つの三角形データは、頂点番号(=2バイト) × 3頂点 と、3頂点の可視不可視フラグ(2バイト)の8バイトで記録されます。

ダウンロード

サンプルファイル

cube.3ds ( 10x10x10 立方体 )