付録 F: イメージ プラグインの追加
 
 
 

Maya の特長は、固有のイメージ ファイル トランスレータ機能を作成できる外部プラグイン モジュール機構です。これは Maya に新しいイメージを追加するためのシステムであり、Maya API とは異なります。これらのプラグイン モジュールは、アプリケーションを開始するときにいつでも使用可能です。イメージ ファイルにアクセスする場合に表示されるイメージ ファイル タイプのリストからこれらにアクセスできます。

プラグイン イメージ モジュールは動的な共有オブジェクトとして実装され(DSO または DLL)、C または C++ で記述できます。この場合、イメージ ファイルの読み取りと書き込みを行うアルゴリズムを実装するだけです。ユーザ インタフェースとフロー制御は Maya によって暗黙的に処理されます。

この文書では、イメージ プラグイン モジュールを記述するためのプロトコルについて説明します。複数のフレームまたはムービー ファイルのサポート方法については説明しません。サンプル コードは Developer’s Kit の image サブディレクトリに収められています。

このセクションでは次の項目について説明します。

イメージ ファイル フォーマット プラグインを書き込むと、これをコンパイルして、Maya にロードできる共有オブジェクトを作成する必要があります。gcc コンパイラを使用したサンプルを構築するための、Makefile と buildconfig が Developer’s Kit に用意されています。Windows では、Visual C++ でイメージ プラグインを構築するためのソリューションとプロジェクト ファイルが用意されています。イメージ プラグインのサンプルを構築する前に、最初に MAYA_LOCATION を設定する必要があります。構築するプラグインは、Maya が新しいイメージ フォーマットにアクセスする前に、$MAYA_LOCATION/bin/plug-ins/image ディレクトリにコピーしてください。イメージ プラグインは、Maya にロードできるように用意されたコンパイラとリンカのフラグを使用して構築する必要があります。

概要

Maya は、主にイメージ ファイルの読み取りと書き込みのためにイメージ プラグインから関数を起動します。これが発生する場所には、レンダリング ウィンドウなどがあります。このウィンドウでは、特定のフォーマットとしてイメージを保存することを選択できます。さらに、このウィンドウに既存のレンダリング イメージをロードすることも可能です。このウィンドウの読み取り操作および書き込み操作用に定義したカスタム フォーマットを選択することができます。

エントリ ポイント

各プラグインには、定義数のエントリ ポイントがあります。Maya はこれらのエントリ ポイントを使用して、イメージ プラグインがサポートする機能を定義します。

エントリ ポイントは変数や関数などです。たとえば、プラグインの名前は変数エントリ ポイント imageName で定義され、読み取り用のイメージ ファイルを開く関数は、関数エントリ ポイント imageReadOpen で定義されます。

エントリ ポイントには必須とオプションのものがあります。必須のエントリ ポイントについては次のセクションで説明します。オプションのエントリ ポイントについては「オプション エントリ ポイント」で説明します。

ヒント:作成するプラグインに Maya との互換性を持たせる場合、必須のエントリ ポイントを実装するだけです。作成するプラグインのオプションのエントリ ポイントは、Maya で起動できない場合があるため、必須ではありません。

必須のエントリ ポイント

次のエントリ ポイントは定義する必要があります。

必須のエントリ ポイントが削除されると、プラグインがロードされないため、その名前はメニューに表示されません。

program

定義

char *program

説明

このエントリ ポイントは、プラグインを使用できるアプリケーションを指定します。すべてのアプリケーションがこのプラグインでサポートされるイメージ ファイルの読み取りと書き込みを実行できるようにするには、これに Wavefront を設定します。

注:このエントリ ポイントの定義は必須です。

char *program = "Wavefront";

type

定義

char *type

説明

このエントリ ポイントは、構築するプラグインのタイプを示します。Maya のイメージ ファイル プラグインのタイプは、image です。

注:このエントリ ポイントの定義は必須です。

char *type = "image";

version

定義

char *version

説明

このエントリ ポイントは、プラグインを記述したプロトコルのバージョンを示します。常に IMF_PROTOCOL_CURRENT を使用します。

注:このエントリ ポイントの定義は必須です。

char *version = IMF_PROTOCOL_CURRENT;

imageKey

定義

char *imageKey

説明

このエントリ ポイントは、プラグインを特定するための固有のキーを指定します。

注:このエントリ ポイントの定義は必須です。

char *imageKey = "myFormat";

imageName

定義

char *imageName

説明

このエントリ ポイントは、メニューに表示されるプラグインの名前を定義します。ユーザが区別できるように固有の名前を定義する必要があります。

注:このエントリ ポイントの定義は必須です。

char *imageName = "My Image Format";

imageReadOpen

定義

int imageReadOpen

(

IMF_OBJECT *imf

}

パラメータ 説明
imf

Modified

イメージ ファイル ヘッダ

戻り値  

IMF_C_NORMAL イメージが正常に開かれた場合。IMF_C_ エラーが発生した場合。

説明

この関数は、読み取り用にファイルを開くときに呼び出されます。

imf パラメータには、ファイルの読み取りに必要なすべての情報が含まれます。imageReadOpen を呼び出す前に、ここにファイル名を含めます。このルーチンの実行後、ここにファイルにアクセスするルーチンへのポインタ、サイズの情報、読み取るイメージの他のアトリビュート、イメージの走査線を読み込むバッファなども含める必要があります。

この関数を記述する基本ステップを以下に示します。

  1. ファイル名が完全でない場合は補完します。次に、指定したファイルを開きます。正常に開かれた場合にのみ続行します。失敗した場合は、ERR_printf を使用してメッセージを生成し、imf__errIMF_C_CANNOT_OPEN を設定して、FALSE を返します。
  2. イメージ カウントを 1 に設定して、1 つのイメージ構造を配分および初期化して、このイメージに関する情報を含めます。
    imf->info.count = 1;
    imf->info.image = malloc( sizeof( IMF_IMAGE ) );
    (void) imf__init_ifd( imf );
  3. malloc を使用して、配分した固有のデータ構造に、ファイルを記述するフォーマット固有の情報を保存します。このプライベート データ構造には、カレント ファイル記述子、最新のスキャンラインの読み取り、アクティブ ウィンドウなどの項目を含めることができます。
    private = malloc( sizeof( PRIVATE ) );
    private->... = ...;
    imf->data = malloc( sizeof( POINTER ) );
    imf->data[0] = private;
  4. イメージ アクセス ルーチンを imf->scanimf->close に割り当てます。イメージ ファイルがルックアップ テーブルを含む場合は、imf->lut_read にルックアップ テーブルを読み取るルーチンも指定します。
  5. ファイル フォーマットが入力機能を定義する場合、imf->info.settings から抽出します (詳細については、 IMF_CAPABILITY を参照してください)。
  6. ファイルからヘッダ情報を読み取り、プライベート データ構造にこれを格納します。さらに、imf->infoimf->info.image[0] データ構造に各種フィールドを定義する必要があります。

    imf->info 構造では、イメージがルックアップ テーブルを含むかどうかに応じて、lut_exists field を設定します。

    ファイル自体に格納する場合は、programmachineuserdatetimeframe 番号、job_num、および色度情報(red_prigreen_priblue_priwhite_pt)を設定することもできます。

    また、imf->info.image[0] にすべてのフィールドを設定する必要があります。aux_formataux_countaux_type、および aux_bits フィールドは z チャンネル情報を示します。curve.gamma フィールドには、ファイルに定義されるガンマを設定するか、あるいは IMF_def_input_gamma を呼び出すことによってデフォルト ガンマを設定する必要があります。

  7. スキャンラインの読み取りルーチンが 1 行のピクセルを読み取るスキャンライン バッファを配分します。
    private_data_ptr->buffer = IMF_chan_alloc(
    imf->info.image, image_width,
    imf->info.key, NULL );
  8. 関数が正常に開き、イメージ ファイル ヘッダを読み取った場合は TRUE、エラーが発生した場合は FALSE を返します。
    注:このエントリ ポイントの定義は必須です。

スキャンライン読み取り関数

定義

int your_scan_read_func

(

POINTER data,

int scan,

POINTER **line_buff

)

パラメータ 説明
data

入力

イメージにコネクトするプライベート データ

scan 入力

読み取るスキャンライン

line_buff 出力

imageReadOpen に配分されるスキャンライン バッファ。読み取られたピクセル行を含みます。

戻り値  

IMF_C_BAD_SCAN スキャンがイメージの範囲外である場合。IMF_C_NORMAL スキャンラインが正常に読み取られた場合。および IMF_C_READ_ERR エラーが発生した場合。

説明

この関数は Maya によって呼び出され、イメージ ファイルからスキャンラインを読み取ります。イメージ ファイルはイメージの方向に基づいて、下から上または上から下のいずれかの方向に読み取られます。

以下のステップに従って、スキャンライン読み取り関数を作成します。

  1. 指定したスキャンラインを読み取ります。スキャンライン番号は下から上の順序に基づきます。たとえば、イメージ サイズが 480 ラインで、方向が IMF_C_TOP_LEFT である場合、スキャンラインは 479(一番上)、47 (上から 2 番目)、477、... 0(一番下)の順序で読み取られます。順序が IMF_C_BOT_LEFT である場合、0(一番下)、1(下から 2 番目)、2、...479(一番上)の順序で読み取られます。
  2. imageReadOpen に配分されたバッファにスキャンラインを転送します。IMF_chan_alloc によって配分されたバッファには、ファイルのチャンネル単位のビット数に応じて、8、16、32 ビットの符号なしの数字が含まれます (チャンネル単位のビット数はニアレストの数字に切り上げられます)。

    スキャンラインの各成分は個別の隣接しているバッファに格納されます。これらはパラメータ line_buff に返され、配分した成分へのポインタの配列になります。

    /*

    * 符号なし char は 1 ~ 8 ビットの値に使用されます。

    * 符号なし short は 8 ~ 16 ビットの値に使用されます。

    * 符号なし long は 17 ~ 32 ビットの値に使用されます。

    */

    *line_buff = data->buffer;

    pr = (unsigned char *) data->buffer[0];

    pg = (unsigned char *) data->buffer[1];

    pb = (unsigned char *) data->buffer[2];

    pm = (unsigned char *) data->buffer[3];

    for ( i = 0; i < data->image_width; ++i )

    {

    *(pr++) = red_values[i];

    *(pg++) = green_values[i];

    *(pb++) = blue_values[i];

    *(pm++) = matte_values[i];

    }

    ファイルにルックアップ テーブルが含まれる場合は、line_buff でルックアップ テーブルにインデックスではなく、RGB データを返す必要があります。

  3. 適宜、IMF_C_BAD_SCANIMF_C_NORMAL、または IMF_C_READ_ERR を返します。

    スキャンライン読み取り関数は、イメージの最新のスキャンラインを読み取るとは限りません。これは Maya が読み取る必要のない最新のスキャンラインをスキップする場合があるためです。プラグインでは、imageReadOpen の呼び出し後に Maya が いつでも終了関数を呼び出すことを許可する必要があります。

終了関数

定義

int your_close_func

(

IMF_OBJECT *imf

)

パラメータ 説明
imf

Modified

イメージ ファイル記述子

戻り値  

IMF_C_NORMAL ファイルが閉じられ、メモリの再配分が成功した場合。IMF_C_failure_code エラーが発生した場合(IMF_C_WRITE_ERR など)。

説明

この関数は、Maya がイメージ ファイルの読み取りと書き込みを完了するたびに呼び出されます。以下のステップに従って、終了関数を作成します。

  1. イメージ ファイルを閉じます。
  2. imf->data に示されるプライベート データの配分を解除して、imf->dataNULL を設定します。imageReadOpen または imageWriteOpen のスキャンライン バッファの配分を解除するには、IMF_chan_free を使用します。
  3. ファイルが閉じられ、メモリのクリーンアップに成功した場合は、IMF_C_NORMAL を返します。失敗した場合は、IMF_C_failure_code を返します。

imageWriteOpen

定義

int imageWriteOpen

(

IMF_OBJECT *imf

)

パラメータ 説明
imf

Modified

イメージ ファイル記述子

戻り値  

TRUE イメージが正常に開かれた場合。FALSE エラーが発生した場合。

説明

この関数は、書き込み用にファイルを開くときに呼び出されます。

imf パラメータには、ファイルの書き込みに必要なすべての情報が含まれます。imageWriteOpen を呼び出す前に、ここにファイル名を含めます。このルーチンの実行後、ファイルにアクセスするルーチンのポインタ、サイズの情報、および書き込むイメージの他のアトリビュートなども含める必要があります。

この関数を作成する基本ステップを以下に示します。

詳細なステップを次に示します。

  1. 指定したファイルを開きます。正常に開かれた場合にのみ続行します。失敗した場合は、ERR_printf を使用してメッセージを生成し、imf__errIMF_C_CANNOT_OPEN を設定して、FALSE を返します。
  2. imf->info および imf->info.image[0] を使用して、書き込むファイルに関するアトリビュートを抽出します。
  3. malloc を使用して、配分した固有のデータ構造に、ファイルを記述するフォーマット固有の情報を保存します。このプライベート データ構造には、カレント ファイル記述子、アクティブ ウィンドウなどの項目を含めることができます。
    private = malloc( sizeof( PRIVATE ) );
    private->... = ...;
    imf->data = malloc( sizeof( POINTER ) );
    imf->data[0] = private;
  4. イメージ アクセス ルーチンを imf->scan および imf->close に指定します。
  5. ファイル フォーマットが出力機能を定義する場合、imf->info.settings から抽出します (詳細については、 IMF_CAPABILITY を参照してください)。
  6. 定義する場合は、ファイル ヘッダとルックアップ テーブルを書き込みます。
  7. 関数が正常に開き、イメージ ファイル ヘッダを読み取った場合は IMF_C_NORMAL を返します。エラーが発生した場合は、IMF_C_failure_code を返します。

    イメージ ファイルを開くことに失敗した場合には、Maya は imf__free_obj( imf ) を呼び出して、imageWriteOpen に渡された IMF_OBJECT を解放します。したがって、エラー処理コードで imf__free_obj を呼び出さないでください。

    注:このエントリ ポイントの定義は必須です。

スキャンライン書き込み関数

定義

int your_scan_write_func

(

POINTER data,

int scan,

POINTER *line_buff

)

パラメータ 説明
data

入力

イメージにコネクトするプライベート データ

scan 入力

書き込むスキャンライン

line_buff 出力

カレント スキャンラインのピクセルを含むバッファ

戻り値  

IMF_C_BAD_SCAN スキャンがイメージの範囲外である場合。IMF_C_NORMAL スキャンラインが正常に書き込まれた場合。IMF_C_WRITE_ERR エラーが発生した場合。

説明

この関数は Maya によって呼び出され、スキャンラインをイメージ ファイルに書き込みます。イメージ ファイルはイメージの方向に基づいて、下から上または上から下のいずれかの方向に書き込まれます。

以下のステップに従って、スキャンライン書き込み関数を作成します。

  1. 指定したスキャンラインを書き込みます。スキャンライン番号は下から上の順序に基づきます。たとえば、イメージ サイズが 480 ラインで、方向が IMF_C_TOP_LEFT である場合、スキャンラインは 479(一番上)、478(上から 2 番目)、477、... 0(一番下)の順序で書き込まれます。順序が IMF_C_BOT_LEFT である場合、0(一番下)、1(下から 2 番目)、2、...479(一番上)の順序で書き込まれます。
  2. line_buff が Maya によって渡されたスキャンライン バッファである場合、line_buff[0] からは赤、line_buff[1] からは緑、line_buff[2] からは青のカラー チャンネル情報を読み出します。マット チャンネルは、line_buff[3] にあります(存在する場合)。z チャンネルは、line_buff[4] にあります(存在する場合)。ピクセルは左から右に格納されます。
    pr = (unsigned char *) line_buff[0];
    pg = (unsigned char *) line_buff[1];
    pb = (unsigned char *) line_buff[2];
    pm = (unsigned char *) line_buff[3];
    for ( i = 0; i < data->image_width; ++i )
    {
     red_values[i] = *(pr++);
     green_values[i] = *(pg++);
     blue_values[i] = *(pb++);
     matte_values[i] = *(pm++);
    }

    ファイル フォーマットで使用されるフォーマットに値を変換して、スキャンラインをファイルに書き込みます。

  3. IMF_C_BAD_SCANIMF_C_NORMAL、または IMF_C_READ_ERR を返します。

オプションのエントリ ポイント

いくつかの追加のエントリ ポイントが存在します。オプションのエントリ ポイントが定義されていない場合、デフォルト値が使用されます。使用するファイル フォーマットが機能をサポートしていない場合、無視されるオプションのエントリ ポイントもあります。

imageAccess

定義

unsigned int imageAccess

説明

この変数はプラグインがサポートする読み取りおよび書き込みメソッドを指定します。記述する定数はビット フィールドです。

imageBitsPerChannel

定義

unsigned int imageBitsPerChannel

説明

この変数は、サポートされるカラー チャンネル単位のビット数を定義します。これは赤、緑、および青のチャンネルにのみ適用されます。

この変数はビット フィールドであり、各チャンネルがサポートできるビット数(1 ~ 32)を定義するために使用します。最も低いビットを設定すると、フォーマットはカラー チャンネル単位に 32 ビットをサポートします。最も高いビットを設定すると、フォーマットはカラー チャンネル単位に 32 ビットをサポートします。フォーマットがサポートするすべてのチャンネル単位のビット数に基づいて、この変数にビットを設定する必要があります。

デフォルト値は 0x00000080、つまりカラー チャンネル単位に 8 ビットです。

この 1 番目の例は、カラー チャンネル単位に 8 ビットのみをサポートします。2 番目の例 は 8、10、および 16 ビットをサポートします。

unsigned int imageBitsPerChannel = 0x00000080;

unsigned int imageBitsPerChannel = 0x00008280;

imageBitsPerMatte

定義

unsigned int imageBitsPerMatte;

説明

この変数は、マット チャンネルによってサポートされるビット数を記述する点を除いては、imageBitsPerChannel と同じです。

デフォルト値は 0x00000000、つまりフォーマットはマット チャンネルをサポートしません。

この 1 番目の例は、マット チャンネルに 8 ビットのみをサポートします。2 番目の例は 8、10、および 16 ビットをサポートします。

unsigned int imageBitsPerMatte = 0x00000080;

unsigned int imageBitsPerMatte = 0x00008280;

imageBitsPerZChannel

定義

unsigned int imageBitsPerZChannel

説明

この変数は、z チャンネルによってサポートされるビット数を記述する点を除いては、imageBitsPerChannel と同じです。

デフォルト値は 0x00000000、つまりフォーマットは z チャンネルをサポートしません。

この 1 番目の例は、z チャンネルに 8 ビットのみをサポートします。2 番目の例は 8、10、および 16 ビットをサポートします。

unsigned int imageBitsPerZChannel = 0x00000080;

unsigned int imageBitsPerZChannel = 0x00008280;

imageCapability

定義

void imageCapability

(

IMF_CAPABILITY **capabilities,

int *num_input,

int *num_output,

int *total

)

パラメータ 説明
capabilities

出力

このファイル タイプの機能のポインタを返します。

num_input 出力

ファイルの読み取りに適用可能な機能数

num_output 出力

ファイルの書き込みに適用可能な機能数

total 出力

機能の総数

説明

この関数は、Maya がメニューに表示する機能を定義する場合、初期化時に呼び出されます。機能の詳細については、 IMF_CAPABILITY を参照してください。

この汎用コード フラグメントは、機能のプラグインのリストをループします。

int i;

*capabilities = your_capabilities;

for ( *num_input = *num_output = *total = i = 0;

i < number_elements_in( your_capabilities );

++i )

{

if ( your_capabilities[i].imc_when_avail

& IMF_CAPABILITY_WHEN_INPUT )

{

++( *num_input );

}

if ( your_capabilities[i].imc_when_avail

& IMF_CAPABILITY_WHEN_OUTPUT )

{

++( *num_output );

}

if ( your_capabilities[i].imc_when_avail

& ( IMF_CAPABILITY_WHEN_INPUT

| IMF_CAPABILITY_WHEN_OUTPUT ) )

{

++( *total );

}

}

imageDescription

定義

char *imageDescription

説明

この変数は、ファイル フォーマットの詳細を記述するための文字列です。メニューに表示されるときに imageName を補足します。

デフォルト値は NULL、つまり追加の記述は存在しません。

char *imageDescription = "Version 2";

imageDone

定義

void imageDone( void )

説明

このオプション ルーチンは、Maya を終了するときに呼び出されます。プラグインが特別なライセンス発行を必要とする場合、このポイントでライセンスをリリースする必要があります。

imageExtension

定義

char *imageExtension

説明

この変数は、プラグインのファイル名を生成するときのデフォルト拡張子を定義します。前にピリオドを含める必要があります。デフォルト値は NULL、つまりフォーマットは通常、拡張子を使用しません。

この変数は、ファイル タイプに Determine from extension が定義されている場合に、イメージ ファイルのフォーマットを定義するために使用します。

char *imageExtension = ".gif";

imageFormatString

定義

char *imageFormatString

説明

この変数は、ファイル名のデフォルト フォーマットを定義し、ルートの名前、フレーム番号、および拡張子を含みます。sprintf と同じ表記法を使用します。

変数の 1 番目の %s はルートの名前に使用します。%d はフレーム番号に使用します。2 番 目の %s は拡張子に使用します。デフォルト値は %s.%04.4d.%s です。

この例は、ルートの名前の直後にゼロ パディングされていないフレーム番号、その後にピリオドで分離された拡張子が続く構文を定義します。

char *imageFormatString = "%s%d.%s";

imageHardLinkDuplicates(UNIX のみ)

定義

BOOLEAN imageHardLinkDuplicates

説明

この変数は、Maya がシーケンスに作成される同じファイルにハード リンクを作成するかどうかを示します。たとえば、image.1.extimage.2.ext、および image.3.ext が同じである場合、この変数に TRUE を設定すると、Maya は 1 つのファイルしか作成できませんが、他の 2 つのファイルから新規作成したファイルにハード リンクを作成できます。この変数が FALSE である場合、3 つのファイルは分離しますが、同じファイルが作成されます。

デフォルト値は TRUE です。

BOOLEAN imageHardLinkDuplicates = FALSE;

imageInit

定義

int imageInit( void )

説明

これを定義すると、このルーチンはプラグインの機能が Maya に追加される前に起動します。戻り値が TRUE の場合、プラグインは通常どおりにロードされます。ただし、戻り値が FALSE の場合、プラグインはアンロードされます。

この初期化ルーチンを imageDone ルーチンと一緒に使用すると、実装するライセンス発行スキームの開始と終了の方法を取得できます。プラグインが複数の言語サポートを提供する場合、このルーチンでは、任意の言語の文字列を使用できます。この呼び出しでは、imageExtensionimageNameSyntax のデフォルト値を設定することもできます。

imageIsFile

定義

BOOLEAN imageIsFile(

char *fn,

FILE *fp

}

パラメータ 説明

fn

char*

ファイル名(fpNULL の場合にのみ使用されます)。

fp

FILE*

ファイル ポインタ。

戻り値  

TRUE fn または fp がこのプラグインによってサポートされるファイルを示す場合。

説明

ファイル名またはポインタがこのプラグインでサポートされるタイプにマッチするかどうかをチェックします。

注:このエントリ ポイントの定義は必須です。

if ( fp == NULL )

{

fp = fopen( fn, "r" ) );

}

/* fp からヘッダを読み取り、このプラグインとのマッチをチェックします。*/

fread( &magic, 1, sizeof( magic ), fp );

return ( magic & FORMATS_MAGIC_NUMBER )

imageNameSyntax

定義

char *imageNameSyntax

説明

この変数は、ファイル名のデフォルト フォーマットを定義し、ルートの名前、フレーム番号、および拡張子を含みます。

名前の構文は、次の 4 つの文字列を認識します。

これらは目的のファイル名を生成するために、自由に組み合わせることができます。名前、フレーム番号、および拡張子はそれぞれ 1 回しか使用されませんが、# は繰り返してフレーム番号のゼロ パディングに使用できます。

デフォルト値は NULL です。

この文字列指定は Maya に認識されません。

この例はフレーム番号に使用される最低 2 桁を含む名前を生成します。名前とフレーム番号の間に句読点はありませんが、フレーム番号と拡張子の間にピリオドが配置されています。

char *imageNameSyntax = "Name##.Ext";

imageNumberOfChannels

定義

int imageNumberOfChannels

説明

この変数は、ファイル フォーマットがサポートするカラー チャンネルの最大数を定義します。マット チャンネルは含まれません。通常、RGB イメージでは 3、グレースケールのみをサポートするフォーマットでは 1 です。

デフォルト値は 3 です。

int imageNumberOfChannels = 3;

imageNumberOfMattes

定義

int imageNumberOfMattes;

説明

この変数は、ファイル フォーマットがサポートするマット チャンネルまたはアルファ チャンネルの最大数を定義します。通常、フォーマットがマットをサポートする場合は 1、サポートしない場合は 0 です。

デフォルト値は 0 です。

int imageNumberOfMattes = 1;

imageNumberOfZChannels

定義

int imageNumberOfZChannels

説明

この変数は、ファイル フォーマットがサポートする z チャンネルまたはデプス チャンネルの最大数を定義します。通常、フォーマットが z をサポートする場合は 1、サポートしない場合は 0 です。

デフォルト値は 0 です。

int imageNumberOfZChannels = 1;

imageSupportRemoteAccess

定義

BOOLEAN imageSupportRemoteAccess

説明

この変数は、プラグインがリモート ファイル アクセスをサポートするかどうかを定義します。サポートする場合は、TRUE に設定します。サポートしない場合は、Maya は可能な場合にリモート ファイル アクセスを実行し、ファイル名から先頭の remotehost: を削除してからプラグインに渡します。

デフォルト値は FALSE です。

BOOLEAN imageSupportRemoteAccess = TRUE;

imageSupportsActiveWindow

定義

int imageSupportsActiveWindow

説明

この変数は、フォーマットがアクティブ ウィンドウをサポートするかどうかを定義します。デフォルト値は FALSE です。

int imageSupportsActiveWindow = FALSE;

ルックアップ テーブル(LUT)読み取り関数

定義

int your_lut_read_func

(

POINTER data,

IMF_LUT **imf_lut

)

パラメータ 説明

data

入力

イメージにコネクトするプライベート データ

imf_lut

出力

新しく配分されるルックアップ テーブルのポインタ

戻り値  

TRUE LUT が正常に配分され、読み取られた場合。FALSE エラーが発生した場合。

説明

Maya はこの関数を呼び出して、イメージ ファイルのカラー ルックアップ テーブルを読み取ります。LUT は通常、容量が少ないため、imageReadOpen で読み取り、イメージにコネクトされるプライベート データに格納することをお勧めします。したがって、your_lut_read_func では新しい IMF_LUT を配分して格納した LUT データにコピーするだけです。

ライブラリ関数

imf__build_handle

定義

char *imf__build_handle

(

char *path,

char *handle,

char *ext

)

パラメータ 説明
path

入力

使用する検索パス

handle 入力

ファイル名

ext 入力

ファイル名の拡張子

戻り値  

完全なファイル名

説明

この関数は、pathhandle、および ext からファイル名を構成します。ファイルを開くときに返される文字列を使用します。

char *filename;

FILE *fp = NULL;

...

*info = &imf->info;

if ( info->handle_complete )

{

filename = info->handle;

}

else

{

filename = imf__build_handle( NULL, info->handle,

info->ext );

if ( ( fp = fopen( filename, "rb" ) ) == NULL )

{

filename = imf__build_handle( getenv(

"WF_IMG_DIR" ),

info->handle, info->ext );

}

}

if ( fp == NULL )

{

fp = fopen( filename, "rb" );

}

IMF_chan_alloc

定義

POINTER *IMF_chan_alloc

(

IMF_IMAGE *image,

int res,

char *key,

int *size

)

パラメータ 説明
image

入力

イメージ情報は、配分されるチャンネル数、たとえば、カラー チャンネル数、マット チャンネル数、Z チャンネル数などを指定します。

res 入力

ピクセル単位のスキャンラインの幅

key 入力

プラグインのキー。エラー メッセージに使用します。

size 出力

配分されるスキャンラインのサイズ

戻り値  

メモリが不足している場合は NULL、それ以外は、スキャンライン バッファのポインタが返されます。

説明

この関数は、スキャンライン データを Maya とスキャンラインの読み取りおよび書き込み関数間で渡すために使用されるスキャンライン バッファ セットを配分します。このバッファは、スキャンライン バッファのポインタの配列としてセットアップされます。1 番目の行にはカラー チャンネル データ(赤、緑、青)、続いてマット チャンネルおよび z チャンネル(プラグインで定義されている場合)が含まれます。この関数は、imageReadOpen ルーチンから呼び出します。

IMF_chan_alloc は、プラグイン コードの上部に定義する imageBitsPerPaletteEntryimageBitsPerChannelimageBitsPerMatte、および imageBitsPerZChannel エントリ ポイントに応じて異なります。エントリ ポイントがチャンネル単位に 1 ~ 8 ビットを定義する場合、バイト サイズのピクセルが配分されます。チャンネル単位に 9 ~ 16 ビットを定義する場合、16 ビットのショート ピクセルが配分されます。チャンネル単位に 17 ~ 32 ビットを定義する場合、32 ビットのロング ピクセルが配分されます。すべての値は符号なし形式です。スキャンラインの読み取り関数と書き込み関数には、チャンネル データの解釈を 8 ビットの符号なし文字、16 ビットのショート、あるいは 32 ビットのロングのどれで行うかを知らせておく必要があります。

このサンプル コード フラグメントはスキャンライン バッファを配分し、IMF_chan_alloc によって配分されたスキャンライン バッファにアクセスする方法を示します。ピクセル単位に 8 ビットのカラー チャンネルが 3 つ、ピクセル単位に 12 ビットのマット チャンネルが 1 つ、ピクセル単位に 32 ビットの z チャンネルが 1 つ存在します。imfIMF_OBJECT 構造であり、imageReadOpen 関数に渡されます。imageWriteOpenIMF_chan_alloc を呼び出しません。これは、Maya アプリケーションがスキャンライン書き込み関数に渡されるスキャンライン バッファを配分するためです。

POINTER *p_buffer;

p_buffer = IMF_chan_alloc( imf->info.image,

image_width, imf->info.key, NULL);

スキャンライン読み取り関数では、以下のようにデータをバッファに格納します。

unsigned char *p_red = p_buffer[0];

unsigned char *p_blue = p_buffer[1];

unsigned char *p_green = p_buffer[2];

unsigned short *p_matte = p_buffer[3];

unsigned long *p_z = p_buffer[4];

for ( i = 0; i < image_width; ++i )

{

p_red[i] = red_values[i];

p_blue[i] = blue_values[i];

p_green[i] = green_values[i];

p_matte[i] = matte_values[i];

p_z[i] = z_values[i];

}

スキャンライン書き込み関数では、同様の方法でバッファにアクセスします。

関連関数

IMF_chan_free

IMF_chan_free

定義

int IMF_chan_free

(

POINTER *chan_data

)

パラメータ 説明

chan_data

Modified

IMF_chan_alloc によって配分されるスキャンライン バッファのポインタのアドレス

戻り値  

未使用

説明

この関数は、以前に IMF_chan_alloc によって配分されたスキャンライン バッファ セットの配分を解除します。

data->buffer がスキャンライン バッファを示す場合、次を使用してバッファを解放します。

IMF_chan_free( data->buffer );
関連関数

IMF_chan_alloc

imf__free_obj

定義

int imf__free_obj

(

IMF_OBJECT *imf

)

パラメータ 説明
imf

Modified

幅や高さなどのイメージ特性を格納する構造

戻り値  

未使用

説明

この関数は、IMF_OBJECT 構造によって占有された空間の配分を解除します。この関数は終了関数で呼び出します。

imf->dataNULL でない場合、imf__free_objimf->data[0] によって示される空間を解放し、imf->data を解放します。したがって、imf->data[1] または他の追加の空間を配分した場合、imageReadOpenimageWriteOpen の終了関数およびエラー処理ルーチンはこの空間の配分を解除して、メモリ リークを防止する必要があります。

イメージ ファイルを開くことに失敗した場合には、Maya は imf__free_obj( imf ) を呼び出して、imageReadOpen に渡された IMF_OBJECT を解放します。したがって、エラー処理コードで imf__free_obj を呼び出さないでください。終了関数を呼び出して、エラー処理とクリーンアップを実行する場合、終了関数はファイルを開くことに失敗したあとの閉じる処理と、イメージ ファイルの読み取りに成功したあとの閉じる処理を区別する必要があります。終了関数は、イメージ ファイルが正常に読み取られた場合にのみ imf__free_obj を呼び出す必要があります。

imf__free_obj( imf );

関連関数

imf__init_ifd

imf__init_ifd

定義

int imf__init_ifd

(

IMF_OBJECT *imf

)

パラメータ 説明

imf

Modified

幅や高さなどのイメージ特性を格納する構造

戻り値  

未使用

説明

この関数は imf->info.image によって示されるイメージ ファイル記述子の構造を初期化します。この関数は imageReadOpen 関数で呼び出します。imf->info.image フィールドは imf__init_ifd を起動する前に、関数によって配分しておく必要があります。

次のように、IMF_IMAGE 構造のデフォルト値を定義します。

機能設定

イメージ プラグインを実装する場合、プラグインがサポートするファイル フォーマット機能を定義し、ユーザがイメージ ファイルにアクセスするためにファイル ブラウザでこれらの機能を指定できるようにするか、およびその指定方法を定義する必要があります。Maya はファイルにアクセスするときに、これらの機能を自動的にイメージ プラグインに渡します。これは機能設定と呼ばれます。たとえば、ディスクにイメージを書き込むとき、ユーザは使用する圧縮タイプを選択できます。ファイル フォーマットに特別な機能がなく、機能設定が必要でない場合もあります。

ユーザ インタフェースは次の 2 つの定義済み機能タイプをサポートします。

データ構造

IMF_CAPABILITY

定義

typedef struct imf_capability

{

U_SHORT imc_code;

char *imc_name;

MSGCAT_DEFN imc_name_msg;

U_CHAR imc_type;

POINTER imc_value;

U_CHAR imc_when_avail;

} IMF_CAPABILITY;

用途

特別なタイプ固有のパラメータを持つイメージ ファイルでは、IMF_CAPABILITY 構造を使用してドライバのタイプ固有の機能を定義します。機能は配列として格納され、機能単位に 1 つのエントリが含まれます。たとえば、SGI ドライバは 2 つの機能を備えています。1 つは圧縮モード用(未処理と RGB)で、もう 1 つは、ファイルにマット チャンネルを作成するかどうかを定義するための機能です。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

imc_code

IMF_CAPABILITY 配列に定義されるすべての機能の中で固有の 16 ビット数

imc_name

機能を説明するユーザ インタフェースに表示される文字列

imc_name_msg

imc_name の国際化バージョン

imc_type

機能タイプ。現在、IMF_CAPABILITY_TYPE_LIST または IMF_CAPABILITY_TYPE_NUMBER のいずれかです。

imc_value

IMF_CAPABILITY_LIST または IMF_CAPABILITY_NUMBER 構造のいずれかのポインタ。imc_type に応じて異なります。

imc_when_avail

この機能が有効な場合に定義します。イメージの読み取りと書き込みの両方を行う場合は、IMF_CAPABILITY_WHEN_ALWAYS に設定します。イメージの読み取りを行う場合は、IMF_CAPABILITY_WHEN_INPUT に設定します。イメージの書き込みを行う場合は、IMF_CAPABILITY_WHEN_OUTPUT に設定します。

capabilities は汎用パラメータです。imageReadOpen または imageWriteOpen が呼び出されると、機能の特定のユーザ定義インスタンスが settings として渡されます。このサンプル コード フラグメントはこれらの設定の意味を抽出する方法を示します。

static BOOLEAN your_get_capability_settings
(
 IMF_OBJECT			*imf,
 int			*mode
)
{
 IMF_CAPABILITY			*capability;
 IMF_CAP_SETTING			*setting;
 IMF_CAP_SETTING			**settings;
 if ( ( settings = imf->info.settings ) == NULL )
 {
 return( TRUE );
 }
for ( /* Nothing */; setting = *settings; ++settings )
{
 /*
 * Lookup the capability by code.
 */
 	for ( capability = your__capabilities; capability->imc_name_msg.mcd_set!= 0; ++capability )
 {
 if ( capability->imc_code == setting->imcs_code )
 {
 break;
 }
 }
 if ( capability->imc_name_msg.mcd_set == 0 )
 {
 ERR_printf( "Bad capability found." );
 return( FALSE );
 }
 switch ( capability->imc_code )
 {
 case YOUR_CAPABILITY_IMC_CODE:
 *mode =setting->imcs_value.imcs_list;
 break;
 case ANOTHER_CAPABILITY_IMC_CODE:
 ...;
 break;
 case ...:
 default:
 ERR_printf( "Bad capability found.");
 return( FALSE );
 }
 }
 return( TRUE );
}

IMF_CAPABILITY_ENTRY

定義

typedef struct imf_capability_entry

{

U_SHORT ice_code;

char *ice_name;

MSGCAT_DEFN ice_name_msg;

} IMF_CAPABILITY_ENTRY;

用途

この構造は IMF_CAPABILITY_LIST の単一のエントリを定義するために使用します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

imc_code

IMF_CAPABILITY LIST に定義されるすべての機能エントリの中で固有の 16 ビット数。この数字は imageReadOpenimageWriteOpen コードで使用され、ユーザが選択したリスト エントリを定義します。

imc_name

このリスト項目用にユーザ インタフェースに表示されるキャラクタ文字列

imc_name_msg

ice_name の国際化バージョン

IMF_CAPABILITY_LIST

定義

typedef struct imf_capability_list

{

int icl_default;

int icl_n_entries;

IMF_CAPABILITY_ENTRY *icl_entries;

} IMF_CAPABILITY_LIST;

用途

IMF_CAPABILITY レコードが IMF_CAPABILITY_TYPE_LIST タイプである場合、imc_value フィールドは、IMF_CAPABILITY_ENTRY レコードの配列である icl_entries ポインタの IMF_CAPABILITY_LIST レコードを示します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

icl_default

デフォルト リスト エントリの ice_code

icl_n_entries

リスト内のエントリ数

icl_entries

エントリのリスト

IMF_CAPABILITY_NUMBER

定義

typedef struct imf_capability_number

{

float icn_default;

BOOLEAN icn_minimum_dfnd;

float icn_minimum;

BOOLEAN icn_maximum_dfnd;

float icn_maximum;

floay icn_increment;

} IMF_CAPABILITY_NUMBER;

用途

IMF_CAPABILITY レコードが IMF_CAPABILITY_TYPE_NUMBER タイプを含む場合に、この構造はデフォルト値と機能で許可される値の範囲を定義するために使用します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

icn_default

この番号の機能のデフォルト値

icn_minimum_dfnd

最小値を定義するかどうかを示します。定義する場合は TRUE、定義しない場合は FALSE です。

icn_minimum

最小値。icn_minimum_dfnd に TRUE が設定されている場合にのみ適用されます。

icn_maximum_dfnd

最大値を定義するかどうかを示します。定義する場合は TRUE、定義しない場合は FALSE です。

icn_maximum

最大値。icn_maximum_dfnd に TRUE が設定されている場合にのみ適用されます。

icn_increment

スライダまたはサムホイールによって使用されるインクリメント

icn_minimum_dfndicn_maximum_dfnd が両方とも TRUE である場合、テキスト フィールドの横にスライダが表示されます。それ以外は、サムホイールが表示されます。

IMF_CAP_SETTING

定義

typedef struct imf_cap_setting

{

U_SHORT imcs_code;

union

{

float imcs_number;

int imcs_list;

} imcs_value;

} IMF_CAP_SETTING;

用途

この構造は、ファイルを開くときに機能のカレント設定をプラグインに渡すために使用します。

フィールド 説明

imcs_code

設定の imc_code

imcs_number

機能が IMF_CAPABILITY_TYPE_NUMBER である場合の値。

imcs_list

機能が IMF_CAPABILITY_TYPE_LIST である場合の値。これはリストのゼロベースのインデックスです。

IMF_IMAGE

定義

typedef struct

{

int usage;

IMF_COLOR_RESPONSE curve;

FMT_ASPECT_INFO aspect;

WINDOW_I window;

WINDOW_I active;

int chan_config;

int chan_orient;

char *chan_format;

int chan_count;

int chan_type;

int chan_bits;

char *matte_format;

int matte_count;

int matte_type;

int matte_bits;

char *aux_format;

int aux_count;

int aux_type;

int aux_bits;

char *index_format;

int index_count;

int index_type;

int index_bits;

} IMF_IMAGE;

用途

IMF_IMAGE はファイルから単一のイメージの内容を定義します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

usage

イメージ タイプを記述するビット フィールド: 任意のイメージ タイプの場合は IMF_C_IMAGE_ANY。汎用イメージの場合は IMF_C_GENERICimf__init_ifd で設定されるデフォルト セット)。ルックアップ テーブルベースのイメージの場合は IMF_C_INDEX_LUT

curve

カラー補正情報

aspect

イメージのアスペクト情報

window

ゼロベースの数字を使用するイメージ ウィンドウの境界

active

アクティブ ウィンドウの境界

chan_config

チャンネル平面。このフィールドは、スキャンラインの読み取り関数と書き込み関数にスキャンライン データを渡す方法に影響を与えます。2 つのオプションがあります。

  • 赤、緑、および青の IMF_C_PLANAR_CONTIGUOUS は、1 つの大規模なスキャンライン バッファに収められます。値は、R、G、B、R、G、B という順序で配置されます。または、
  • 赤、緑、青の IMF_C_PLANAR_SEPARATE は個別の配列収められます(標準使用)。
chan_orient

チャンネル方向: 下から上の順序の場合は IMF_C_ORIENT_BOT_LEFT。上から下の順序の場合は IMF_C_ORIENT_TOP_LEFT

chan_format

カラー チャンネルのフォーマット

chan_count

カラー チャンネルの数

chan_type

カラー チャンネルの格納タイプ: 正の整数の場合は IMF_C_INTEGERimf__init_ifd によって割り当てられたデフォルト値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

chan_bits

カラー チャンネル値単位のビット数

matte_format

マット チャンネルのフォーマット

matte_count

マット チャンネルの数

matte_type

マット チャンネルの格納タイプ: 正の整数の場合は IMF_C_INTEGERimf__init_ifd によって割り当てられたデフォルト値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

matte_bits

マット チャンネル値単位のビット数

aux_format

補助(z)チャンネルのフォーマット

aux_count

(z)補助チャンネルの数

aux_type

補助(z)チャンネルの格納タイプ: 正の整数の場合は IMF_C_INTEGERimf__init_ifd によって割り当てられたデフォルト値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

aux_bits

補助(z)チャンネル値単位のビット数

index_format

カラー インデックスのフォーマット

index_count

カラー インデックス イメージ データのチャンネルの数

index_type

カラー インデックス データ チャンネルの格納タイプ: 正の整数の場合は IMF_C_INTEGERimf__init_ifd によって割り当てられたデフォルト値)。単精度 float 値の場合は IMF_C_FLOAT。倍精度 double 値の場合は IMF_C_DOUBLE

index_bits

パレット インデックスのピクセル単位のビット数

IMF_INFO

定義

typedef struct

{

char *key;

char *handle;

BOOLEAN handle_complete;

char *name;

char *ext;

char *desc;

char *program;

char *machine;

char *user;

char *date;

char *time;

char *filter;

char *compress;

IMF_CAP_SETTING **settings;

BOOLEAN lut_exists;

IMF_LUT *write_lut;

int job_num;

int frame;

int field;

U_LONG init_flag;

COLOR_XYZ_3F red_pri;

COLOR_XYZ_3F green_pri;

COLOR_XYZ_3F blue_pri;

COLOR_XYZ_3F white_pt;

int count;

IMF_IMAGE *image;

int track_num_frames;

float track_frame_rate;

int track_start_frame;

int num_audio_tracks;

int num_video_tracks;

} IMF_INFO;

用途

イメージ ファイルを記述する情報を含みます。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

key

プラグインの固有の識別子キー

handle

イメージのファイル名

handle_complete

handle を完全に構築するかどうかを示します。FALSE の場合は、プラグインが imf__build_handle を使用してファイル名の完全なパスを構築する必要があります。

name

イメージ ファイルの名前

ext

ファイル名の拡張子

desc

イメージ ファイル タイプの説明

program

イメージを作成したプログラム

machine

イメージが作成されたマシン

user

イメージを作成したユーザ

date

イメージの作成日付

time

ファイルの作成所要時間

filter

イメージで使用されるフィルタ機能

compress

イメージで使用される圧縮機能

settings

ユーザが設定した機能設定

lut_exists

ルックアップ テーブル(LUT)がスキャンライン バッファのイメージ データに使用される場合は TRUE です。データが RGB の場合は FALSE です。

write_lut

LUT のポインタ。パレットベースのイメージ ファイルを書き込むときにのみ使用されます。

job_num

ジョブのアカウント情報を処理します。

frame

フレーム番号

field

フィールド レンダリング フラグ

init_flag

呼び出し側が IMF_info_init を起動したかどうかを示します。

red_pri

赤の彩度

green_pri

緑の彩度

blue_pri

青の彩度

white_pt

白の彩度

count

イメージ フィールドによって示されるイメージ サブ ヘッダの数

image

詳細なイメージ情報を含むイメージ サブ ヘッダの配列

track_num_frames

カレント トラックのフレーム番号

track_frame_rate

トラックのフレーム数/秒

track_start_frame

カレント トラックの 1 番目のフレーム番号

num_audio_tracks

カレント ファイルのオーディオ トラックの番号

num_video_tracks

カレント ファイルのビデオ トラックの番号

IMF_LUT

定義

typedef struct imf_lut

{

IMF_LUT_ENTRY *imu_lut;

int imu_maximum;

int imu_n_entries;

float imu_gamma;

} IMF_LUT;

用途

この構造はルックアップ テーブル(LUT)を定義します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

imu_lut

ルックアップ テーブルのエントリ

imu_maximum

各 LUT エントリが含むことができる最大値

imu_n_entries

imu_lut によって示される LUT エントリの数

imu_gamma

LUT エントリのガンマ値

IMF_LUT_ENTRY

定義

typedef struct imf_lut_entry

{

U_SHORT ile_red;

U_SHORT ile_green;

U_SHORT ile_blue;

U_CHAR ile_mode:7;

U_CHAR ile_transparent:1;

} IMF_LUT_ENTRY;

用途

この構造はルックアップ テーブルのエントリを定義します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

ile_red

このエントリの赤の値。

ile_green

このエントリの緑の値。

ile_blue

このエントリの青の値。

ile_mode

IMF_LUT_MODE_FREE エントリが未使用である場合。IMF_LUT_MODE_LOCKED エントリがロックされ、使用不可である場合。IMF_LUT_MODE_RESERVED エントリが予約され、使用不可である場合。IMF_LUT_MODE_USED エントリが使用中で、修正可能である場合。

ile_transparent

エントリが透明でない(たとえば不透明)場合は 0 に設定し、透明な場合は 1 に設定します。

IMF_OBJECT

定義

typedef struct imf_object

{

POINTER *data;

IMF_INFO info;

int access;

IMF_lutReadProc lut_read;

IMF_scanProc scan;

IMF_closeProc close;

IMF_playbackBindProc playback_bind;

IMF_playbackGotoProc playback_goto;

IMF_playbackPlayProc playback_play;

IMF_playbackParamsProc playback_params;

IMF_playbackStopProc playback_stop;

IMF_getFrameProc get_frame;

IMF_getRasterProc get_raster;

IMF_getRegionProc get region;

IMF_setFrameProc set_frame;

} IMF_OBJECT;

用途

この構造は、imageReadOpenimageWriteOpen を呼び出すときに使用します。

説明

次の表は、各フィールドについて説明したものです。

フィールド 説明

data

イメージにコネクトするプライベート データ

info

イメージ ファイル情報

access

イメージ アクセス タイプ

lut_read

イメージ ファイルからルックアップ テーブル情報を読み出す関数

scan

スキャンライン アクセス関数

close

イメージ終了関数

playback_bind

NULL を設定します。

playback_goto

NULL を設定します。

playback_play

NULL を設定します。

playback_params

NULL を設定します。

playback_stop

NULL を設定します。

get_frame

NULL を設定します。

get_raster

NULL を設定します。

get_region

NULL を設定します。

set_frame

NULL を設定します。

プラグインのコンパイル

イメージ ファイル フォーマット プラグインを書き込むと、これをコンパイルして、Maya にロードできる共有オブジェクトを作成する必要があります。gcc コンパイラを使用したサンプルを構築するための、Makefile と buildconfig が Developer’s Kit に用意されています。Windows では、Visual C++ でイメージ プラグインを構築するためのソリューションとプロジェクト ファイルが用意されています。イメージ プラグインのサンプルを構築する前に、最初に MAYA_LOCATION を設定する必要があります。構築するプラグインは、Maya が新しいイメージ フォーマットにアクセスする前に、$MAYA_LOCATION/bin/plug-ins/image ディレクトリにコピーしてください。イメージ プラグインは、Maya にロードできるように用意されたコンパイラとリンカのフラグを使用して構築する必要があります。