DirectX Ops スクリプト コマンド
DirectX Ops (dxops.exe) で、一連のスクリプト コマンド、ファイル、およびオプション引数が含まれた式の文字列を指定できるようになりました。各式は、1 つ以上のスクリプト コマンドから構成されます。スクリプト コマンドは、コマンドライン引数としてまたはスクリプト ファイルからツールに入力できます。
どのスクリプト コマンドも、名前と値のペア (名前と値がコロンで区切られている) として渡されるゼロ個以上の引数を持ちます。すべてのコマンドは、I/O 用コマンドであるか、ロードされたメッシュに対する何らかのオペレーションを実行するコマンドのいずれかです。ほとんどすべてのスクリプト コマンドには、DirectX SDK に対応す API (複数可) が存在しています。これらの API はほぼ同じ処理を実行します。
DirectX Ops スクリプト コマンドを、次の表に示します。
I/O スクリプト コマンド | 説明 |
---|---|
load | モデルまたはテクスチャー ファイルをロードします。 |
save | モデルまたはテクスチャーをファイルに保存します。 |
unload | テクスチャーまたはモデルを DXOps から削除します。 |
メッシュ スクリプト コマンド | 説明 |
addvdata | 頂点要素をメッシュ頂点ストリームに追加します。 |
clean | メッシュをクリーンアップします。 |
clonevdata | 既存の要素からデータがコピーされた新しい頂点要素を追加します。 |
delvdata | 頂点要素をメッシュ頂点ストリームから削除します。 |
flatten | メッシュから階層を削除します。 |
genadjacency | メッシュの隣接データを生成します。 |
gennormals | メッシュの法線を生成します。 |
gentangentframes | メッシュの接線フレームを生成します。 |
meshes | ロードされているメッシュに関する情報を出力します。 |
optimize | メッシュを最適化します。 |
reset | DXOps をリセットします。 |
stripify | メッシュを一連のトライアングル ストリップに変換します。 |
uvatlas | メッシュの UVAtlas を作成します。 |
validate | メッシュの検証を実行します。 |
テクスチャー スクリプト コマンド | 説明 |
genmipmaps | テクスチャー (複数可) のミップマップを生成します。 |
newtex2d | 新しいテクスチャーを作成します。 |
newtex3d | 新しいボリューム テクスチャーを作成します。 |
newtexcube | 新しいキューブ テクスチャーを作成します。 |
reformat | テクスチャー フォーマットを変更します。 |
resize | テクスチャーのサイズを変更します。 |
shade | テクスチャーにシェーダーを適用します。 |
slice2d | 既存のテクスチャー サーフェスから新しい 2D テクスチャーを作成します。 |
splice2d | サーフェスを既存のテクスチャーに挿入します。 |
textures | ロードされているテクスチャーに関する情報を出力します。 |
addvdata
メッシュに関連付けられている頂点ストリームに頂点要素を追加します。
構文
appvdata src:string type:string usage:string usageIdx:integer;
パラメーター | 説明 |
---|---|
src:string | 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、正規表現を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトが対象になります。 |
type:string | データ型。D3DDECLTYPE の値を、プレフィックス D3DDECLTYPE_ なしで指定します (例: type:FLOAT3)。既定値はありません。この引数は必須ですが、名前は付けなくてもかまいません。つまり、type:'FLOAT3' の代わりに FLOAT3 として渡すことができます。 |
usage:string | 要素の名前。D3DDECLUSAGE の値を、プレフィックス D3DDECLUSAGE_ なしで指定します (例: usage:TANGENT)。デフォルト値は TEXCOORD です。 |
usageIdx:integer; | 新しい頂点宣言エントリの使用方法インデックスで使用する整数値。既定値は、指定した使用方法における最初の有効なインデックスです。 |
例
addvdata type:FLOAT3 usage:TANGENT usageIdx:0;
解説
新しい要素は、頂点宣言の末尾と、頂点バッファー内の各頂点の末尾に追加されます。このコマンドは、各頂点に追加された新しいデータを初期化しないことに注意してください。たとえば、法線を追加する場合は、法線が宣言に追加された後、gennormals を呼び出して、各頂点に有効な法線値を生成する必要があります。
clean
説明 :
メッシュ (複数可) をクリーンアップします。
構文 :
clean src:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
例 :
clean src:tiger;
解説 :
clean は内部的に検証を呼び出します。検証に失敗すると、メッシュをクリーンアップすることができません。
メッシュに関する以下の問題がクリアされます。
- バックフェイシング - 一連の同じ頂点インデックスを共有するものの、面の法線が反対方向になっているトライアングル (バックフェイシング トライアングル) が結合される。三角形が複製された頂点によって分割されない限り、2 つの三角形からのメッシュ隣接データは競合します。
- ボウタイ - 2 つのトライアングル ファンの先端 (ボウタイ) が頂点であり、そのいずれかのファンにメッシュ オペレーションが影響を与える場合は、共有頂点が 2 つの新しい頂点に分割される。ボウタイは、メッシュ単純化による頂点の削除などの操作のために、問題を起こす場合があります。なぜなら、1 つの頂点を削除すると 2 つの異なる三角形のセットに影響を与えるからです。
このスクリプト コマンドは、D3DXCleanMesh を使用します。
clonevdata
説明 :
メッシュに関連付けられている頂点ストリームに、新しい頂点要素 (データは、既存の要素からコピーされる) を追加します。
構文 :
clonevdata usage:string usageIdx:int newUsage:string;
この場合
- usage:string - 頂点データのコピー元となる頂点要素。メッシュに、指定された使用法の頂点データが含まれていない場合、そのメッシュはオペレーションによって無視されます。この引数は必須ですが、名前を付けなくてもかまいません (つまり、usage:'TANGENT' の代わりに 'TANGENT' として渡すことができます)。
- usageIdx:int - 頂点データのコピー元となる頂点要素をさらに指定するための整数。usageIdx が指定されていない場合は、このコマンドは指定された使用方法に一致する最初の有効な要素に一致します。
- newUsage:string - 新しい頂点要素の名前。D3DDECLUSAGE の値を、プレフィックス D3DDECLUSAGE_ なしで指定します (例: usage:TANGENT)。既定値は TEXCOORD です。
例 :
clonevdata usage:TANGENT usageIdx:0 newUsage:TEXCOORD newUsageIdx:1;
解説 :
新しい要素は、頂点および頂点宣言の末尾に追加されます。
delvdata
説明 :
メッシュに関連付けられている頂点ストリームから頂点要素を削除します。
構文 :
delvdata src:string usage:string usageIdx:int;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- usage:string - 削除される要素の名前。この要素名は、D3DDECLUSAGE で定義されています (プレフィックス D3DDECLUSAGE_ なし)。既定値はありません。指定したパラメーターが、所定のメッシュに含まれていない場合、このオペレーションは該当するメッシュに対して実行されません。この引数は必須ですが、名前を付けなくてもかまいません (つまり、usage:'TANGENT' の代わりに 'TANGENT' として渡すことができます)。
- usageIdx:int - 削除する頂点要素をさらに指定するための整数。usageIdx が指定されていない場合は、このコマンドは指定された使用方法に一致する最初の有効な要素に一致します。
例 :
delvdata usage:TANGENT usageIdx:1;
解説 :
指定した要素は、宣言だけでなく頂点自体からも削除されます。
flatten
説明 :
1 つのモデル内のすべてのメッシュが、階層のない単一のメッシュに変換されます。
構文 :
flatten dst:string src:string;
この場合
- dst:string - 平面化が実行された後のモデル名。この引数は必須ですが、名前を付けなくてもかまいません (つまり、dst:'nonHierarchicalModel' の代わりに 'nonHierarchicalModel' として渡すこともできます)。
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
例 :
flatten dst:christmasTreeOneMesh src:christmasTreeWithSeparateOrnaments;
解説 :
スキンまたはアニメーション情報もメッシュから削除されます。
このスクリプト コマンドは、D3DXConcatenateMeshes を使用します。
genadjacency
説明 :
メッシュの隣接データを生成します。既存のデータがある場合は、置き換えます。
構文 :
genadjacency src:string type:[topological|geometric] epsilon:float;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- type:[topological|geometric] - 隣接データの作成方法を指定します。topological (既定値) または geometric です。
- epsilon:float - Epsilon 値。既定値は 10e-6f。
例 :
genadjacency type:topological;
解説 :
このスクリプト コマンドは、隣接データの作成方法が topological の場合は ID3DXBaseMesh::ConvertPointRepsToAdjacency、geometric の場合は ID3DXBaseMesh::GenerateAdjacency を使用します。
genmipmaps
説明 :
指定したテクスチャーのミップマップを生成します。
構文 :
genmipmaps src:string start:int dither:int filter:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- start:int - 生成するミップマップのソースとして使用するミップマップのインデックス (ゼロベース) 。デフォルトは 0 です。
- dither:int - ミップマップ生成時のディザリングの有効/無効を指定します。false の場合は 0、true の場合は 1。デフォルトは 1 です。
- filter:string - ミップマップの生成時に使用するミップマップ フィルター。None、Point、Linear、Triangle、または Box。Box が既定値です。
例 :
genmipmaps src:LobbyCube start:0 filter:Linear;
解説 :
このスクリプト コマンドは、D3DXFilterTexture を使用します。
gennormals
説明 :
各メッシュの頂点法線を計算します。
構文 :
gennormals src:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
例 :
gennormals src:tiger;
解説 :
このコマンドが呼び出される前に法線がメッシュに 1 つも格納されていない場合は、addvdata コマンドを先に呼び出す必要があります。それにより、法線データが頂点宣言に追加され、空の値が法線に割り当てられます。頂点宣言に法線が追加された後でこのコマンドを呼び出すと、法線が有効な値になります。
このスクリプト コマンドは、D3DXComputeNormals を使用します。
gentangentframes
説明 :
各メッシュの接線フレームを計算します。
構文 :
gentangentframes src:string texIdx:int ortho:string normalizePartials:[0|1] weight:string wrap:string threashPE:float threashSP:float threashNE:float;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- texIdx:int - 接線の計算に使用されるテクスチャー座標のセットを指定します。0 は先頭のテクスチャー座標セット、1 は 2 番目のテクスチャー座標セット、のように指定します。既定値は 0 です。
- ortho:string - 指定できる値はNone、U、V、UV で、None が既定値です。None を指定すると、接線フレームが正規直交化されません。U を指定すると、正規直交化されていない接線ベクトルの最終計算に基づいて、接線フレームが正規直交化されます。V を指定すると、正規直交化されていない従法線ベクトルの最終計算に基づいて、接線フレームが正規直交化されます。UV を指定すると、正規直交化されていない接線ベクトルおよび従法線ベクトルに最も近いマトリックスに対して、接線フレームが正規直交化されます。
- normalizePartials:[0|1] - 指定できる値は 0 または 1 で、1 が既定値です。0 を指定すると、テクスチャー座標に関して偏微分が正規化されません。正規化されていない場合、偏微分のスケーリングは、(u、v) 空間の三角形のスケーリングによって分割される 3D モデルのスケーリングに比例します。このスケーリング値は、指定された方向にテクスチャーがどのくらい伸ばされているかを測定したものになります。結果として生じるベクトルの長さは、偏微分の長さの加重和です。
- weight:string - 指定できる値は Area、Equal、Default で、Default が既定値です。Equal を指定すると、入力メッシュの各トライアングルの単位長法線ベクトルが計算されます。Area を指定すると、頂点にアタッチされているトライアングルの面積に従って、計算された頂点ごとの法線ベクトルまたは偏微分ベクトルの方向の重み付けが実行されます。Default を指定すると、角度に従って重み付けが実行され、頂点に対してトライアングルがカバーする角度に基づいて重み付けが実行されます。Default を指定する方が、より意味のある結果が得られる傾向にあります。
- wrap:string - 指定できる値はNone、U、V、UV で、None が既定値です。詳細については、「テクスチャー ラッピング (Direct3D 9)」を参照してください。
- threshPE:float - 既定値は 0.8f です。相互に互換性が認められない 2 つの偏微分が成す角度の最大サインを指定します。隣接する三角形にある 2 つの偏微分の方向の内積がこのしきい値以下の場合、これらの三角形の間で共有される頂点は分割されます。
- threshSP:float - 既定値は 0.5f です。単独と見なされる頂点の偏微分の最大マグニチュードを指定します。一連の接線フレームが隣接している単一ポイントでは、トライアングルが複数存在することが多いものの、(球の最上部でのように) 全体的に互いに相殺するため、偏微分の大きさは減少します。マグニチュードがこのしきい値以下の場合、このマグニチュードを含むすべての三角形に頂点が分割されます。
- threshNE:float - 既定値は 0.8f です。threshPE の場合と同様に、トライアングル間で共有される頂点が分割される直前のしきい値である、2 つの法線間の角度の最大コサインを指定します。2 つの法線の内積がこのしきい値以下の場合、共有される頂点は分割され、隣接する三角形の間にハード エッジを形成します。しきい値が内積より大きい場合は、隣接する三角形自体の法線が補間されます。
例 :
gentangentframes texIdx:1 ortho:U weight:Area threshNE:0.5f;
解説 :
このスクリプト コマンドは、D3DXComputeTangentFrameEx を使用します。
load
説明 :
モデルまたはテクスチャー ファイルをロードします。
構文 :
load fileName:string srgb:int;
この場合
- fileName:string - モデルまたはテクスチャー ファイルの名前。モデル ファイルの場合は、拡張子 .x を使用します。サポートされているテクスチャー フォーマットは、BMP、DDS、DIB、HDR、JPG、PFM、PNG、PPM、および TGA です。このパラメーターは、ワイルドカードをサポートしています。そのため、*.jpg と指定すると、-m オプションで指定したすべてのパスと現在の作業ディレクトリ内のすべての jpg ファイルがロードされます。この引数は必須ですが、名前を付けなくてもかまいません (つまり、fileName:'tiger.x' の代わりに 'tiger.x' として渡すこともできます)。
- srgb:int - イメージを sRGB として処理するかどうか。true の場合は 1、false の場合は 0。既定値は 0。
例 :
load fileName:tiger.x;
解説 :
モデル ファイルに階層がある場合、その階層はロード時に維持されます。ファイル名にワイルドカードが含まれる場合は、ファイルの指定に一致するすべてのファイルがロードされます。ファイル名が絶対パスでない場合、パスは現在の作業ディレクトリを基準とする相対パスであるとみなされます。
このスクリプト コマンドは、メッシュをロードする場合は D3DXLoadMeshHierarchyFromX、テクスチャーをロードする場合は D3DXCreateTextureFromFile を使用します。
meshes
説明 :
すべてのモデルおよびそのメッシュに関する情報が、コマンドライン引数で指定したログ ファイルに記録されます。
構文 :
meshes src:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
例 :
meshes src:tiger;
newtex2d
説明 :
新しい 2D テクスチャーを作成します。
構文 :
newtex2d dst:string format:string width:int height:int mips:int src:string;
この場合
- dst:string - 新しいテクスチャーの名前。この引数は必須ですが、名前を付けなくてもかまいません (つまり、dst:'newTex' の代わりに 'newTex' として渡すこともできます)。
- format:string - 次の任意のフォーマットを指定できます。A16B16G16R16、A16B16G16R16F、A1R5G5B5、A2B10G10R10、A2R10G10B10、A2W10V10U10、A32B32G32R32F、A4L4、A4R4G4B4、A8、A8B8G8R8、A8L8、A8R3G3B2、A8R8G8B8、DXT1、DXT2、DXT3、DXT4、DXT5、G16R16、G16R16F、G32R32F、L16、L8、R16F、R32F、R3G3B2、R5G6B5、R8G8B8、X1R5G5B5、X4R4G4B4、X8B8G8R8、または X8R8G8B8。各フォーマットの詳細については、「D3DFORMAT」を参照してください。必須の引数です。
- width:int - テクスチャーの幅 (ピクセル単位) を指定します。必須の引数です。
- height:int - テクスチャーの高さ (ピクセル単位) を指定します。必須の引数です。
- mips:int - テクスチャー内で割り当てるミップマップの数。既定値は 0 で、その場合は幅と高さに必要なだけのミップマップが作成されます。
- src:string - 新しいテクスチャーの初期化に使用されるソース テクスチャーの名前。ロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
例 :
newtex2d dst:newLobby format:A16B16G16R16 width:500 height:500;
解説 :
このスクリプト コマンドは、IDirect3DDevice9::CreateTexture を使用します。
newtex3d
説明 :
新しいキューブ テクスチャーを作成します。
構文 :
newtex3d dst:string format:string width:int height:int depth:int mips:int src:string;
この場合
- dst:string - 新しいテクスチャーの名前。この引数は必須ですが、名前を付けなくてもかまいません (つまり、dst:'newTex' の代わりに 'newTex' として渡すこともできます)。
- format:string - 次の任意のフォーマットを指定できます。A16B16G16R16、A16B16G16R16F、A1R5G5B5、A2B10G10R10、A2R10G10B10、A2W10V10U10、A32B32G32R32F、A4L4、A4R4G4B4、A8、A8B8G8R8、A8L8、A8R3G3B2、A8R8G8B8、DXT1、DXT2、DXT3、DXT4、DXT5、G16R16、G16R16F、G32R32F、L16、L8、R16F、R32F、R3G3B2、R5G6B5、R8G8B8、X1R5G5B5、X4R4G4B4、X8B8G8R8、または X8R8G8B8。各フォーマットの詳細については、「D3DFORMAT」を参照してください。必須の引数です。
- width:int - テクスチャーの幅 (ピクセル単位) を指定します。必須の引数です。
- height:int - テクスチャーの高さ (ピクセル単位) を指定します。必須の引数です。
- depth:int - テクスチャーの深度を指定します。必須の引数です。
- mips:int - テクスチャー内で割り当てるミップマップの数。既定値は 0 で、その場合はサイズに必要なだけのミップマップが作成されます。
- src:string - 新しいテクスチャーの初期化に使用されるソース テクスチャーの名前。ロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
例 :
newtex3d dst:newLobby3D format:A16B16G16R16F width:500 height:500;
解説 :
このスクリプト コマンドは、IDirect3DDevice9::CreateVolumeTexture を使用します。
newtexcube
説明 :
新しいキューブ テクスチャーを作成します。
構文 :
newtexcube dst:string format:string size:int mips:int srcXP:string srcXM:string srcYP:string srcYM:string srcZP:string srcZM:string;
この場合
- dst:string - 新しいテクスチャーの名前。この引数は必須ですが、名前を付けなくてもかまいません (つまり、dst:'newTex' の代わりに 'newTex' として渡すこともできます)。
- format:string - 次の任意のフォーマットを指定できます。A16B16G16R16、A16B16G16R16F、A1R5G5B5、A2B10G10R10、A2R10G10B10、A2W10V10U10、A32B32G32R32F、A4L4、A4R4G4B4、A8、A8B8G8R8、A8L8、A8R3G3B2、A8R8G8B8、DXT1、DXT2、DXT3、DXT4、DXT5、G16R16、G16R16F、G32R32F、L16、L8、R16F、R32F、R3G3B2、R5G6B5、R8G8B8、X1R5G5B5、X4R4G4B4、X8B8G8R8、または X8R8G8B8。各フォーマットの詳細については、D3DFORMAT を参照してください。必須の引数です。
- size:int - キューブ テクスチャーのエッジのサイズ (ピクセル単位)。必須の引数です。
- mips:int - テクスチャー内で割り当てるミップマップの数。既定値は 0 で、その場合はサイズに必要なだけのミップマップが作成されます。
- srcXP:string - 正方向の x 面の初期化に使用されるソース テクスチャーの名前。メモリーにロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
- srcXM:string - 負方向の x 面の初期化に使用されるソース テクスチャーの名前。メモリーにロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
- srcYP:string - 正方向の y 面の初期化に使用されるソース テクスチャーの名前。メモリーにロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
- srcYM:string - 負方向の y 面の初期化に使用されるソース テクスチャーの名前。メモリーにロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
- srcZP:string - 正方向の z 面の初期化に使用されるソース テクスチャーの名前。メモリーにロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
- srcZM:string - 負方向の z 面の初期化に使用されるソース テクスチャーの名前。メモリーにロード済みである必要があります。既定値は 0 で、その場合はソース テクスチャーが使用されません。
例 :
newtexcube dst:newEnvironmentMap format:A16B16G16R16F size:512;
解説 :
このスクリプト コマンドは、IDirect3DDevice9::CreateCubeTexture を使用します。
optimize
説明 :
メッシュの頂点の最適化と結合を実行します。
構文 :
optimize src:string splits:int noCache:int weldAll:[none|epsilon|all] e:float P:float W:float N:float T:float B:float UV:float D:float S:float PS:float F:float;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- splits:int - 属性グループ間で共有されている頂点を分割できるかどうか。1 の場合は分割が許可されず、0 (既定値) の場合は分割が許可されます。
- noCache:int - 現在のデバイスの情報に基づいて最適化で頂点キャッシュ サイズを使用するかどうか。既定値は 1 であり、その場合はデバイスの頂点キャッシュが無視されます。
- weldAll:[none|epsilon|all] - epsilon が既定値です。何も指定されていない場合は、頂点の結合は実行されません。epsilon を指定した場合、頂点は指定した Epsilon 値の範囲内にある場合にだけ、結合されます。all を指定すると、頂点は Epsilon 値とは無関係に結合されます。
- e:float - すべてのコンポーネントに渡って使用される結合アルゴリズムの Epsilon 値。既定値は 10e-6f。指定されている場合、他のすべての Epsilon 値にこの値が代入されます。
- P:float - 位置の Epsilon 値。結合アルゴリズムは、2 つの頂点の結合が必要であるかどうかを判断する際、他のすべての Epsilon 値より前にこの値をチェックします。
- W:float - ブレンドの重みの Epsilon 値。
- N:float - 法線の Epsilon 値。
- T:float - 接線の Epsilon 値。
- B:float - 従法線 (または複接線) の Epsilon 値。
- UV:float - テクスチャー座標の Epsilon 値。
- D:float - 拡散色の Epsilon 値。
- S:float - 反射色の Epsilon 値。
- PS:float - ポイントの Epsilon 値。
- F:float - テッセレーション係数の Epsilon 値。
例 :
optimize e:10e-9f;
解説 :
この最適化により、メッシュのパフォーマンスを向上できます。このコマンドによる主な最適化は頂点の結合であり、重複した頂点の削除によりメッシュが最適化されます。
このスクリプト コマンドは、D3DXWeldVertices および ID3DXMesh::Optimize を使用します。
reformat
説明 :
指定したテクスチャーのフォーマットを変更します。
構文 :
reformat src:string format:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- format:string - 次の任意のフォーマットを指定できます。A16B16G16R16、A16B16G16R16F、A1R5G5B5、A2B10G10R10、A2R10G10B10、A2W10V10U10、A32B32G32R32F、A4L4、A4R4G4B4、A8、A8B8G8R8、A8L8、A8R3G3B2、A8R8G8B8、DXT1、DXT2、DXT3、DXT4、DXT5、G16R16、G16R16F、G32R32F、L16、L8、R16F、R32F、R3G3B2、R5G6B5、R8G8B8、X1R5G5B5、X4R4G4B4、X8B8G8R8、または X8R8G8B8。各フォーマットの詳細については、「D3DFORMAT」を参照してください。この引数は必須ですが、名前を付けなくてもかまいません (つまり、format:'A8L8' の代わりに 'A8L8' として渡すこともできます)。
例 :
reformat format:A4R4G4B4;
解説 :
このスクリプト コマンドは、D3DXLoadSurfaceFromSurface を使用します。
reset
説明 :
DXOps が再起動されたときと同じように、リセットを実行します。すべてのオブジェクトに対して unload を呼び出すことと同じです。
構文 :
reset;
resize
説明 :
テクスチャーのサイズを変更します。
構文 :
resize src:string width:int height:int depth:int dither:int filter:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- width:int - テクスチャーの幅 (ピクセル単位) を指定します。必須の引数です。
- height:int - テクスチャーの高さ (ピクセル単位) を指定します。必須の引数です。
- depth:int - テクスチャーの深度を指定します。
- dither:int - ミップマップ生成時のディザリングの有効/無効を指定します。false の場合は 0、true の場合は 1。デフォルトは 1 です。
- filter:string - ミップマップの生成時に使用するミップマップ フィルター。None、Point、Linear、Triangle、または Box。Box が既定値です。
例 :
resize width:200 height:200;
解説 :
このスクリプト コマンドは、D3DXLoadSurfaceFromSurface を使用します。
save
説明 :
モデルまたはテクスチャーをファイルに保存します。
構文 :
save src:string fileName:string xFileType:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、保存するものを指定します。この文字列では、 を使用することもできますが、式の結果は 1 つのアイテムである必要があります。既定値は ".*" で、現在ロードされている全アイテムにこのオペレーションが実行されることになります。
- fileName:string - 保存先の出力ファイルの名前。この引数は必須ですが、名前を付けなくてもかまいません (つまり、fileName:'tiger.x' の代わりに 'tiger.x' として渡すこともできます)。
- xFileType:string - x ファイルに保存する場合は、このパラメーターを使用して、x ファイルのタイプが決定されます。text (既定値)、binary、または compressed を指定できます。推奨フォーマットは、text です。
例 :
save src:tiger fileName:tiger_modded.x xFileType:text;
解説 :
モデルを保存する場合、このスクリプト コマンドは D3DXSaveMeshHierarchyToFile を使用します。
shade
説明 :
テクスチャーを変更するためのユーザー定義の HLSL シェーダーを呼び出します。
構文 :
shade src:string shader:string fileName:string ...parameters...;
この場合
- src:string - ターゲット テクスチャーの名前。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全テクスチャーにこのオペレーションが実行されることになります。
- shader:string - 使用するシェーダーの名前。デフォルト値は main です。
- fileName:string - HLSL シェーダーが含まれるテキスト ファイルの名前。この引数は必須ですが、名前を付けなくてもかまいません (つまり、fileName:'texShader.psh' の代わりに 'texShader.psh' として渡すこともできます)。
- ...parameters...- HLSL シェーダー ファイル内で指定するパラメーターの名前に対応します。次の「シェーダーにパラメーターを渡す」を参照してください。
シェーダーにパラメーターを渡す
shade スクリプト コマンドを使用すると、HLSL シェーダー内のパラメーターを初期化できます。その場合は、<name of parameter>:string という基本的な構文に従います。この文字列は指定したパラメーターの初期化に使用され、この文字列のフォーマットは初期化対象のパラメーターのデータ型に依存します。
整数、浮動小数点数、およびマトリックスの場合、値は数値のカンマ区切りリストとして渡されます。次に例を示します。
float pi;
float3 viewVec;
matrix4x4 viewMat;
次のように指定することで、shade コマンドで初期化されます。
pi:'3.14' viewVec:'0,1,0' viewMat:'1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1'
テクスチャーは、サンプラーの名前により、シェーダーに渡されます。次に例を示します。
textureCUBE TableClothTex;
samplerCUBE TableClothSamp = sampler_state
{
Texture = (TableClothTex);
MinFilter = Linear;
MagFilter = Linear;
};
次のように指定することで、shade コマンドで初期化されます。
TableClothSamp:'TabCloth'
TabCloth は、shade コマンドが呼び出される前に DXOps にロードされているテクスチャーです。後述の shade スクリプト コマンドの使用例では、y 方向に白から黒にブレンドするテクスチャーを作成しています。
HLSL ファイルで "Target" という名前を持つサンプラー パラメーターを定義すると、shade スクリプト コマンドはそのパラメーターにターゲット テクスチャーを自動的に代入します。「shade スクリプト コマンドの使用方法」の例を参照してください。
HLSL 関数の要件
これらの HLSL テクスチャー シェーダーの関数定義では、頂点シェーダーおよびピクセル シェーダーとは少し異なる構文に従います。テクスチャー シェーダー関数は 3 種類 (2D テクスチャー、3D テクスチャー、キューブ テクスチャー用にそれぞれ 1 つ) あり、それぞれ以下の表記方法に従います。
2D テクスチャー用 :
float4 main(float2 UV : TEXCOORD0, float2 PixelSize : TEXCOORD1) : COLOR
UV は 0 ~ 1。
3D テクスチャー用 :
float4 main(float3 UVW : TEXCOORD0, float3 PixelSize : TEXCOORD1) : COLOR
UVW は 0 ~ 1。
キューブ テクスチャー用 :
float4 main(float3 UVW : TEXCOORD0, float3 PixelSize : TEXCOORD1) : COLOR
UVW は -1 ~ 1。
PixelSize は、いずれか 1 つの軸上でゼロになります。これは、現在シェード中のキューブの軸を示します。UVW 変数の対応する軸の符号を見れば、軸に沿って正方向の面と負方向の面のどちらに処理を実行しているのかがわかります。「shade スクリプト コマンドの使用方法」の例を参照してください。
例 :
newtex2d dst:'test' format:A8R8G8B8 width:64 height:64 mips:0;
shade fileName:'ramp.psh' top:'1,1,1' bottom:'0,0,0';
save fileName:'t-ShadeTex2.dds';
ramp.psh は以下のとおりです。
float3 top;
float3 bottom;
float4 main(float2 UV : TEXCOORD0, float2 PixelSize : TEXCOORD1) : COLOR
{
return float4( lerp(bottom, top, UV.yyy ), 1);
}
この例の場合は、次のようなイメージが生成されます。
解説 :
これは、DXT 圧縮テクスチャーに対しては機能しません。DXT 圧縮テクスチャーがあり、それに対して shade コマンドを実行する場合は、レンダー ターゲットとして有効なフォーマットにテクスチャーを再フォーマットした後、それを目的のフォーマットに再フォーマットしてください。
reformat 'A16B16G16R16F';
shade 'RedXGreenYPlusTarget-cube.psh';
reformat 'Dxt1';
このスクリプト コマンドは、D3DXFillTextureTX を使用します。
slice2d
説明 :
既存のテクスチャー サーフェスから新しい 2D テクスチャーを作成します。
構文 :
slice2d dst:string src:string volume:int face:string mipMap:int;
この場合
- dst:string - 生成対象のテクスチャーの名前。この引数は必須です。この引数では、正規表現を使用できますが、1 つの名前に解決される必要があります。この引数は必須ですが、名前を付けなくてもかまいません (つまり、dst:'resizedTex' の代わりに 'resizedTex' として渡すこともできます。
- src:string - サーフェスの抽出元イメージ。ロード済みである必要があります。必須の引数です。
- volume:int - ボリューム テクスチャーから抽出する場合は、抽出対象のサーフェスを指定します。0 から始まるインデックスを使用します。既定値は 0 です。
- volume:int - キューブ テクスチャーから抽出する場合は、抽出対象のフェイスを指定します。+x、-x、+y、-y、+z、または -z を指定することができ、既定値は +x です。
- mipMap:int - ミップマップ テクスチャーから抽出する場合は、ミップマップに対する 0 から始まるインデックスを指定します。既定値は 0 です。
例 :
slice2d dst:bliss2 src:bliss;
解説 :
このスクリプト コマンドは、D3DXLoadSurfaceFromSurface を使用します。
splice2d
説明 :
サーフェスを既存のテクスチャーに挿入します。
構文 :
splice2d dst:string src:string volume:int face:string mipMap:int;
この場合
- dst:string - 挿入先テクスチャーの名前。ここで正規表現を指定し、挿入先を複数指定することもできます。この引数は必須ですが、名前を付けなくてもかまいません (つまり、dst:'destTex' の代わりに 'destTex' として渡すこともできます)。
- src:string - ソース テクスチャーの名前。メモリーにロード済みである必要があります。必須の引数です。
- volume:int - ボリューム テクスチャーに貼り付ける場合は、0 から始まるインデックスを使用して、貼り付け先のサーフェスを指定します。既定値は 0 です。
- face:string - キューブ テクスチャーに貼り付ける場合は、貼り付け先のフェイスを指定します。+x、-x、+y、-y、+z、または -z を指定することができ、既定値は +x です。
- mipMap:int - ミップマップ テクスチャーに貼り付ける場合は、0 から始まるインデックスを使用して、貼り付け先のサーフェスを指定します。既定値は 0 です。
例 :
splice2d dst:bliss src:azul;
解説 :
このスクリプト コマンドは、D3DXLoadSurfaceFromSurface を使用します。
stripify
説明 :
メッシュのトライアングルをストリップにすることにより、メッシュの最適化が試行されます。
構文 :
stripify src:string splits:[0|1];
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- splits:[0|1] - 複製の頂点の導入を許可するかどうか。複製の頂点の導入を許可することをお勧めします。許可しないと、トライアングル ストリップのレンダリングが非効率的になる可能性があります。既定値は 1 です。
例 :
stripify src:tiger;
解説 :
以下の処理が実行されます。
- 属性ソートの実行による属性グループ数の最小化。
- メッシュ フェイスの順序変更によるストリップ長の最大化。
- 単一のトライアングル ストリップへの各メッシュの各メッシュ サブセットの変換。
このスクリプト コマンドは、ID3DXMesh::Optimize を使用します (D3DXMESHOPT_STRIPREORDER を使用)。
textures
説明 :
すべてのメッシュに関する情報を、コマンドライン引数で指定したログ ファイルに記録します。
構文 :
textures src:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
unload
説明 :
指定したテクスチャー (複数可) またはモデル (複数可) を DXOps から削除します。
構文 :
unload src:string type:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。この引数は必須ですが、名前を付けなくてもかまいません (つまり、src:'tiger' の代わりに 'tiger' として渡すこともできます)。
- type:string - 指定できる値は models または textures です。アンロードするオブジェクトのタイプを指定します。
例 :
unload tiger type:models;
uvatlas
説明 :
メッシュの UVAtlas の分割およびパックを実行します。
構文 :
uvatlas src:string maxCharts:int stretch:float gutter:int width:int height:int;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
- maxCharts:int - メッシュの分割先チャートの最大数。引き伸ばしに基づいて Atlas をパラメーター化するように D3DX に対して指示するには、0 を使用します。
- stretch:float - 許可する引き伸ばしの量。0 は引き伸ばしを許可しないことを意味し、1 は任意の量の引き伸ばしを使用できることを意味します。
- gutter:int - Atlas 上の 2 つのチャート間の最小距離 (テクセル単位)。余白は常に幅に合わせてスケーリングされます。したがって、512x512 のテクスチャーで 2.5 の余白が使用される場合、2 つのチャート間の最小距離は 2.5 / 512.0 テクセルになります。
- width:int - テクスチャーの幅。
- height:int - テクスチャーの高さ。
例 :
uvatlas maxCharts:0 stretch:0.5 gutter:2.5 width:512 height:512;
解説 :
このスクリプト コマンドは、D3DXUVAtlasCreate を使用します。
validate
説明 :
メッシュの検証を実行し、警告 (存在する場合) をログに送信します。
構文 :
validate src:string;
この場合
- src:string - 現在ロードされているオブジェクトのなかで、このオペレーションを実行するものを指定します。この文字列では、 を使用することもできます。既定値は ".*" で、その場合は現在ロードされている全オブジェクトにこのオペレーションが実行されることになります。
例 :
validate src:tiger;
解説 :
以下のデータがチェックされます。
- バックフェイシング - 一連の同じ頂点インデックスを共有するものの、面の法線が反対方向になっているトライアングル (バックフェイシング トライアングル)。
- ボウタイ - 2 つのトライアングル ファンの先端 (ボウタイ) が頂点であり、そのいずれかのファンにメッシュ オペレーションが影響を与える場合。ボウタイは、頂点を削除するメッシュ単純化などのオペレーションで問題になる場合があります。
このスクリプト コマンドは、D3DXValidMesh を使用します。