はじめに

※注意: この文章は正式な物ではありません。
あくまでも、International Laser Display Association本家のILDA規格書を翻訳、+αとして自分用にまとめたものです。
以下、ILDA規格によるILDAファイルフォーマットのメモとなります。

ILDAのインターフェース規格についてはこちらを参照。

ILDAファイルフォーマット概要

この規格の正式名称は”ILDA Image Data Transfer Format”または”ILDA Format”と呼びます。
そして、この規格に準じているファイルを”ILDA Format Files”と呼びます。
ここでは以下より、”ILDA Format Files”を”ILDAファイル”と説明します。

ILDAファイルは以下のセクションから構成されているファイルです。

  • 2次元座標イメージ
  • 3次元座標イメージ
  • カラーパレット情報
  • 24ビットカラー(True Color)情報
    ファイル拡張子は “.ild” となります。

バイトオーダー

ILDAフォーマットでは1バイトでは表わしきれない数(256以上)を扱うことがあります。
複数のバイトにまたがって値が代入されている場合には、リトルエンディアンではなくビッグエンディアンの扱いとなります。
つまり、2バイト2進数11111111 00000000は、10進数で255ではなく、65280を表します。

想定外のセクション

現段階で想定されていないセクションが登場した場合には、次のセクションまでスキップする必要があります。
具体的には存在しないフォーマットコードの指定、データ長指定より多いデータの混入などが挙げられます。

内蔵カラーパレットの扱い

現段階、ここに掲載している “Revision 006, April 2004” のILDA規格では、カラーパレットヘッダを使うことを推奨しています。
“Revision 004, June 1992” 以前の規格には内蔵カラーパレットが定められており、
1バイトの値で最大256の色を決定することが可能です。
どちらも使用することが可能ですが、各ソフトウェアのメーカーによって配色が違ったため、互換性が無いということを配慮しなければなりません。
内蔵カラーパレットの詳細はページ下部に記載します。

ILDAセクション

以下のセクションヘッダは最も一般的なセクションとなります。
しかし、5-8バイト中に示されるフォーマットコードによってセクションの構造が異なる場合があります。
各フォーマットコードごとのセクション説明を参照してください。

ILDAセクションヘッダ

バイト 内容 説明
1-4 “I”,”L”,”D”,”A” ASCII文字列で”ILDA”を示します。
これはILDAセクションのヘッダとして認識されます。
5-8 フォーマットコード 符号なし 32ビット、ビッグエンディアン。
0: 3次元座標イメージ
1: 2次元座標イメージ
2: カラーパレット
3: 24ビットカラー(True Color)対応表
(実際のところ下1桁しか使用されない。
上位3バイトは0固定と考えてしまって問題ない。)
9-12 データ長 フォーマットコードが”3″以上の場合に使用されます。
(0-2の場合は、セクションごとの説明を参照)
13バイト目から、データの長さをバイト数で示します。
13- データ このヘッダに続くデータが配置されます。

ILDA True Colorセクション (フォーマットコード:3)

このセクションは座標イメージに対する色情報のため、座標イメージのセクションを続けて記述しなければなりません。

True Colorヘッダ

バイト 内容 説明
1-4 “I”,”L”,”D”,”A” ASCII文字列で”ILDA”を示します。
これはILDAセクションのヘッダとして認識されます。
5-8 0, 0, 0, 3 符号なし 32ビット、ビッグエンディアン。
フォーマットコード”3″は、True Colorセクションを示します。
9-12 データ長 13バイト目から、データの長さをバイト数で示します。
13-16 総ポイント数 このフレームの総ポイント数を示します。
対応するセクションの総ポイント数と一致しなければならない。
もし、ポイント数が”0″であればファイルの終わりということになります。

True Colorデータ

バイト 内容 説明
17 赤色 赤色レーザーの強度を示す、符号なし8ビットの値。
値は”0″(消灯)から”255″(完全な赤)まで変化します。
18 緑色 緑色レーザーの強度を示す、符号なし8ビットの値。
値は”0″(消灯)から”255″(完全な緑)まで変化します。
19 青色 青色レーザーの強度を示す、符号なし8ビットの値。
値は”0″(消灯)から”255″(完全な青)まで変化します。
20-N 次ポイントの色情報 最後のポイントまで以上の情報を繰り返します。
N+1 次のヘッダ 次のILDAヘッダが続きます。

ILDA 2次元座標イメージセクション (フォーマットコード:1)

2次元座標イメージヘッダ

バイト 内容 説明
1-4 “I”,”L”,”D”,”A” ASCII文字列で”ILDA”を示します。
これはILDAセクションのヘッダとして認識されます。
5-8 0, 0, 0, 1 符号なし 32ビット、ビッグエンディアン。
フォーマットコード”1″は、2次元座標イメージセクションを示します。
9-16 フレーム名 フレーム名を8バイトのASCII文字列で示します。
17-24 会社名 作成した会社名を8バイトのASCII文字列で示します。
25-26 総ポイント数 このフレームの総ポイント数を”1″から”65535″の範囲で表記します。
総ポイント数が”0″の場合はイメージヘッダは最後まで続きますが、
ファイルの終わりとなるために、次に続くデータはありません。
27-28 フレーム番号 アニメーションとして動作させる場合などフレーム(セクション)が複数存在する場合、
フレーム番号を”0″から最大”65535″までの範囲で表記します。
(実際、そこまで使うファイルは存在しないので問題ないが、最大”65534″の間違い?)
29-30 総フレーム数 総フレーム数を”1″から”65535″の範囲で表します。
31 スキャナーヘッド このフレームを表示させるためのスキャナーヘッド、もしくはプロジェクターの番号。
複数のプロジェクターを用意して別々に表示させるために使用します。
範囲は”0″から”255″です。
32 予備 今後、使用されることを想定した場所です。”0″に設定しなければなりません。

2次元座標イメージデータ

バイト 内容 説明
33-34 X座標 16ビットの符号付き2進数を使用します。
左端は”-32768″から、右端”+32767″で表されます。
前面投影で使用することが想定されています。
35-36 Y座標 16ビットの符号付き2進数を使用します。
下端は”-32768″から、上端”+32767″で表されます。
前面投影で使用することが想定されています。
37 ステータス 2進数で表現した1バイト(8ビット)のデータ列のうち、最上位(MSB)側の2ビットを使用します。
最上位の1ビットは、ラストポイントビットを表します。
このビットが”1″になった場合に、データの終わりを示します。
正式には総ポイント数(Bytes 25-26)が”0″のイメージヘッダを入れることでファイルの終わりとしますが、
既存のシステムとの互換性を保つために、最後のポイントではラストポイントビットを”1″にする必要があります。

最上位から2番目のビットは、ブランキングビットを表します。
このビットが”1″になった場合に、レーザーをOFF(ブランク状態)にする必要があります。
“0”の場合はレーザーをON(描画状態)にします。

最下位(LSB)側の6ビットは今後使用されることが想定されているため、すべて”0″にする必要があります。
38 色情報 符号なし 8ビットの値はカラーパレットに使用されます。
詳細はページ下部の内蔵カラーパレットを参照してください。
39-N 次のX座標 最後のポイントが書かれるまで繰り返します。
N+1 次のヘッダ 次のILDAヘッダが続きます。
もし、総ポイント数(Bytes 25-26)が”0″のイメージヘッダが続くのであれば、
ファイルの終わりが示され、閉じることが可能になります。

ILDA 3次元座標イメージセクション (フォーマットコード:0)

3次元座標イメージヘッダ

バイト 内容 説明
1-4 “I”,”L”,”D”,”A” ASCII文字列で”ILDA”を示します。
これはILDAセクションのヘッダとして認識されます。
5-8 0, 0, 0, 0 符号なし 32ビット、ビッグエンディアン。
フォーマットコード”0″は、3次元座標イメージセクションを示します。
9-16 フレーム名 フレーム名を8バイトのASCII文字列で示します。
17-24 会社名 作成した会社名を8バイトのASCII文字列で示します。
25-26 総ポイント数 このフレームの総ポイント数を”1″から”65535″の範囲で表記します。
総ポイント数が”0″の場合はイメージヘッダは最後まで続きますが、
ファイルの終わりとなるために、次に続くデータはありません。
27-28 フレーム番号 アニメーションとして動作させる場合などフレーム(セクション)が複数存在する場合、
フレーム番号を”0″から最大”65535″までの範囲で表記します。
(実際、そこまで使うファイルは存在しないので問題ないが、最大”65534″の間違い?)
29-30 総フレーム数 総フレーム数を”1″から”65535″の範囲で表します。
31 スキャナーヘッド このフレームを表示させるためのスキャナーヘッド、もしくはプロジェクターの番号。
複数のプロジェクターを用意して別々に表示させるために使用します。
範囲は”0″から”255″です。
32 予備 今後、使用されることを想定した場所です。”0″に設定しなければなりません。

3次元座標イメージデータ

バイト 内容 説明
33-34 X座標 16ビットの符号付き2進数を使用します。
左端は”-32768″から、右端”+32767″で表されます。
前面投影で使用することが想定されています。
35-36 Y座標 16ビットの符号付き2進数を使用します。
下端は”-32768″から、上端”+32767″で表されます。
前面投影で使用することが想定されています。
37-38 Z座標 16ビットの符号付き2進数を使用します。
最後面(スクリーン背面)”-32768″から、最前面(スクリーン前面)”+32767″で表されます。
2次元座標イメージセクションとの差異は、このZ座標の2バイトとフォーマットコードです。
39 ステータス 2進数で表現した1バイト(8ビット)のデータ列のうち、最上位(MSB)側の2ビットを使用します。
最上位の1ビットは、ラストポイントビットを表します。
このビットが”1″になった場合に、データの終わりを示します。
正式には総ポイント数(Bytes 25-26)が”0″のイメージヘッダを入れることでファイルの終わりとしますが、
既存のシステムとの互換性を保つために、最後のポイントではラストポイントビットを”1″にする必要があります。

最上位から2番目のビットは、ブランキングビットを表します。
このビットが”1″になった場合に、レーザーをOFF(ブランク状態)にする必要があります。
“0”の場合はレーザーをON(描画状態)にします。

最下位(LSB)側の6ビットは今後使用されることが想定されているため、すべて”0″にする必要があります。
40 色情報 符号なし 8ビットの値はカラーパレットに使用されます。
詳細はページ下部の内蔵カラーパレットを参照してください。
41-N 次のX座標 最後のポイントが書かれるまで繰り返します。
N+1 次のヘッダ 次のILDAヘッダが続きます。
もし、総ポイント数(Bytes 25-26)が”0″のイメージヘッダが続くのであれば、
ファイルの終わりが示され、閉じることが可能になります。

ILDA カラーパレットセクション (フォーマットコード:2)

カラーパレットヘッダ

バイト 内容 説明
1-4 “I”,”L”,”D”,”A” ASCII文字列で”ILDA”を示します。
これはILDAセクションのヘッダとして認識されます。
5-8 0, 0, 0, 2 符号なし 32ビット、ビッグエンディアン。
フォーマットコード”2″は、カラーパレットセクションを示します。
9-16 フレーム名 フレーム名を8バイトのASCII文字列で示します。
17-24 会社名 作成した会社名を8バイトのASCII文字列で示します。
25-26 Total colors Total number of RGB values defined in lookup table. For example, a digital
RGB system with 1 bit each for R, G and B would specify eight colors.
Although two bytes are used here, the number of colors must be between
2 and 255. This is because the color Status Code is limited to 8 bits total.
Single-color systems should specify two colors, even if they do not support
blanking. Color #0 should have RGB values of 0-0-0, Color #1 should have
RGB values of 255-255-255.
A value of 0 is reserved.
27-28 Palette number A software program may have more than one palette lookup table. These
bytes describe which lookup table is being defined. Counting begins with
palette 0. Palette range is 0-65535.
Systems with absolute color can use one lookup table per frame. This
allows any frame to contain up to 256 colors.
29-30 予備 今後、使用されることを想定した場所です。”0″に設定しなければなりません。
31 スキャナーヘッド This represents which head or scanner pair the lookup table(s) is being
defined for.このフレームを表示させるためのスキャナーヘッド、もしくはプロジェクターの番号。
複数のプロジェクターを用意して別々に表示させるために使用します。
範囲は”0″から”255″です。
32 予備 今後、使用されることを想定した場所です。”0″に設定しなければなりません。

カラーパレットデータ

バイト 内容 説明
33 Red # 0 value Intensity value of red for first color in
table (color # 0). Value ranges from 0
(off) to 255 (full on).
34 Green # 0 value Intensity value of green for color # 0.
35 Blue # 0 value Intensity value of blue for color # 0.
36 Red # 1 value Intensity value of red for second color in
table (color # 1).
37 Green # 1 value Intensity value of green for color # 1.
38 Blue # 1 value Intensity value of blue for color # 1.
39+ Repeat red, green and blue for each
entry. Total entries must equal value in
color header bytes 25-26.

内蔵カラーパレットについて

カラーパレットセクションを含んでいない座標イメージデータを読み込むときに必要になります。
ILDAスタンダードパレットをメインに、各ソフトウェア別に様々なパレットが存在します。
http://www.photonlexicon.com/forums/showthread.php/3070-ILDA-file-default-color-tables

参考リンク

International Laser Display Association – Technology: Standards 本家、ILDA規格書。
ILDA – International Laser Display Association ILDA規格、ILDAスタンダードパレット、プログラムでの実装方法など。
LaserBoy – Linux Laser Projector ILDA規格、プログラムでの実装方法、サンプルILDAファイル配布。
www.LaserFX.com – Laser Show Systems – Scanning Systems ILDAテストパターンファイル配布。
www.LaserFX.com – Archives and Download その他、ILDA関係ファイルダウンロード。
Anarchy Editor – LASER ACTION Ltd. その他カラーパレットの詳細。ソフトウェアダウンロード後、”.pal”ファイル参照。
ILDA File Format – Format Code 4 and 5
Open Laser Show Controller API (OLSC)
本来の規格には存在しないフォーマットコードについて
OLA – Original Laser Art – SVG to ILDA conversion proggy
laserGL – laser Graphics Library
SVG – ILDA変換ソフトウェア
ILDA file output for AutoTrace AutoTraceへのILDAファイル出力実装。