ビットマップ ガンマおよび MAXScript

3ds Max 2014 では、MAXScript のビットマップ ガンマの処理が見直され、長い間放置されていたいくつかの問題が解決されました。

過去の問題

3ds Max 2014 より前のバージョンの MAXScript では、ファイルからロードされた、スクリプトによって作成された、あるいはさまざまなフォーマットでディスク ビットマップ ファイルに保存されたビットマップ値のガンマ設定へのアクセスが制限されていました。

問題のいくつかを以下に示します。

3ds Max 2014 以降のガンマ関連の MAXScript 機能

上記の問題を解決するため、3ds Max 2014 では、ビットマップ値のガンマをスクリプトが適切に処理できるように MAXScript が拡張されました。

いずれの場合も、追加は拡張機能として実装されます。すなわち、古いスクリプトも構文上正しいものとしてそのまま残ります。

ガンマ モード: 自動、上書きおよび既定

3ds Max 2014 以降では、ビットマップ値のガンマは #auto#default あるいは上書きの 3 つの方法によって制御することができます。

次の拡張機能が実装されました:

openBitmap() 関数は、オプションの gamma: キーワード引数を受け付けるようになり、次のように使用することができます。

例:

    a = openBitmap "test.jpg" gamma:#auto -- auto mode
    b = openBitmap "test.exr" gamma:1.0 -- an override

同様に、ビットマップ save() メソッドはオプションの gamma: キーワードにより拡張され、次のように使用することができます。

save a gamma:#auto -- auto mode
save b gamma:1.0 -- an override

また、save() 関数はオプションのキーワード metadata: を提供します。これは、さまざまなビットマップ ファイル名選択関数である SelectSaveBitmap()getBitmapSaveFilename() および getBitmapOpenFilename() から取得されたダイアログ設定を渡すために使用することができます。 詳細については、このページの以降の部分を参照してください。

render() 関数を使用してファイルをレンダリングする場合は、オプションの gamma: キーワードを使用してガンマを設定することもできます。

例:

    render filename:"something.exr" gamma:#auto -- auto mode
    render filename:"somotherthing.jpg" gamma:1.0 -- an override

新規および修正されたビットマップ値のガンマプロパティ

既存の .gamma プロパティはビットマップの実際のガンマを表現するように修正されました。 以前は、出力と入力のガンマが 1 つのパラメータに含まれていて、問題の原因となっていました。

これを解決するため、2 つの新しいプロパティが追加され、入力ガンマおよびそのガンマがどのように取得されたかを明示的に処理するようになりました。

.inputGamma はロードされたファイルのガンマを通知します。 これは #auto、#default、あるいは上書きの値を返します。 これは、たとえばガンマ情報がどこから取得されたかなどを表示するために使用することができます。 また、たとえば、ロードされたビットマップを確実に保存するために使用することもできます。

.inputGammaValue は、使用された実際の値を返します。たとえば、#auto の場合はファイル タイプに応じて 1.0 または 2.2、#default の場合は 2.2、上書きの場合は上書き値を返します。

ビットマップ ファイルのオープンおよび保存ダイアログのメタデータ アクセス

オプションの by-reference 出力パラメータとしてガンマ値、およびダイアログのセットアップ データを返す機能が MAXScript ビットマップ ファイル ダイアログに追加されました。

これらのオプションのパラメータを使用する場合、ガンマ オプションが表示され、有効になります。 使用しない場合、ガンマ オプションは、ファイル ダイアログ内でグレー表示になります。

拡張された機能を以下に示します。

getBitmapOpenFilename()
getBitmapSaveFilename()
SelectSaveBitmap()

これらの各関数では、オプションのキーワード引数 gamma: は、#auto#default あるいは数値を返す by-reference 変数を参照することができます。

例:

    x = SelectSaveBitmap caption:"Select a file" gamma:&gma

関数が正常に返った場合、変数 'gma' にはダイアログからのガンマ値が含まれています。

同様に、ビットマップの[保存] (Save)ダイアログは、[設定] (Setup)ボタンによって格納されたメタデータを、by-reference のオプションの引数 metadata: を介して要求することによって返すことができます。

例:

    x = SelectSaveBitmap caption:"Select a file" gamma:&gma metadata:&data

成功した場合、'gma' 変数はガンマを含み、'data' 変数はビットマップ プラグインによって格納されたデータの配列を含みます。 このデータを、たとえばビットマップの保存操作に使用することができます。

    bitmap.filename = SelectSaveBitmap caption:"Select a file" gamma:&gma metadata:&data
    if (bitmap.filename) do save bitmap gamma:gma metadata:data

ピクセル アクセス - 線形と未加工

関数 getPixels() は、オプションのブール演算パラメータ linear: により拡張されました。

例:

    a = openBitmap "hello.jpg" gamma:#auto --this will set gamma to 2.2
    p = getPixels a [0,0] 50 linear:true  --get the linear pixel values (gamma 1.0)
    p[1].r *= 2.0 --make first pixel twice as red...

次のスクリプト例はすべてのビットマップ テクスチャに適用され、#default (レガシー モード)に設定された場合は、ガンマを 2.2 の上書きに変更します。

ビットマップ値のガンマ(ロード時に書き込まれる)を変更することはできませんのでご注意ください。新しいガンマを使用して元のソース ファイルから再ロードすることは可能です。

スクリプト:

    for tmap in (getClassInstances BitmapTexture) where (tmap.bitmap.inputGamma == #default) do
      tmap.bitmap = openBitmap tmap.bitmap.filename gamma:2.2