Materials for models
概要
ソースエンジンのマテリアルの構成要素は以下です。元ファイル(.TGAファイルと.TXTファイル)、マテリアル定義ファイル(.VMT)、そしてVtexから出力される.VTFファイル(エンジンで表示されるもの)です。
元になるTGA画像
元となる.TGAの作成には好きなアプリケーションを使うことができます。大多数は必要に応じてPhotoshop、Painter、ZbrushやDeep Paintを選びます。.VTFに変換するレイヤーを統合してサイズを縮小したバージョンの別に、レイヤー構造を持ったフルサイズのバージョンも保管すべきです。
VMTによるマテリアル定義
ソースエンジンのマテリアルはそれぞれ.VMTファイルを必要とします。.VMTファイルは光源モデル(lighting model)、ベースとなるテクスチャ画像(base texture)、そして追加して使用するチャンネル:スペキュラー(光沢)、自己照明、法線マッピング(normal mapping)、透明度(transparency)、透光性(translucency)、プロキシシェーダなどを定義します。ここにHL2から例となる.VMTを示します:
"VertexLitGeneric" { "$baseTexture" "Models/Combine_soldier/Combine_elite" "$envmap" "env_cubemap" "$bumpmap" "models/combine_soldier/combine_elite_normal" "$normalmapalphaenvmapmask" 1 "$envmapcontrast" 1 "$model" 1 "$selfillum" 1 }
この例はポリゴンモデルに適用するマテリアルで、"VertexLitGenric
"マテリアルを使用しています。basetexture、別名diffuseマップは"$baseTexture
" "Models/Combine_soldier/Combine_elite"
で、環境マップ(environment map)は"$envmap"
"env_cubemap"
で定義されています。env_cubemap
はマップ内に配置されたエンティティを指し、cubemapエンティティが正しく配置されていればこのキャラクタの光沢反射は常にマップの周りのものを反映します。代わりにカスタムcubemapを使うこともできます。
次に法線マップ(normal map)が"$bumpmap
" "models/combine_soldier/combine_elite_normal"
と定義されています。次の行の"$normalmapalphaenvmapmask" 1
ではレンダリングの際にモデルの一部分だけがenv_cubemapを反射するように光沢にたいしてマスクの指定をしています。この場合normal mapの画像のアルファチャンネルをマスクにするように定義しています。"$basealphaenvmapmask 1"
を使ってとbasetextureのアルファチャンネルを、"$envmapmask"
models/modelname/mymask"
コマンドで別のマスク用ファイルを指定することもできます。このモデルでは"$envmapcontrast" 1
によって環境マスクが掛け算され、よりコントラストの高い反射を作り出しています。
モデルに適用するマテリアルは、これがStudioMDLで作られたポリゴンモデルであるということをレンダラーに示すために"$model" 1
コマンドを含む必要があります。最後の行"$selfillum" 1
は、basematerialのアルファチャンネルが自己照明を行う部分で、アルファチャンネルで指定された部分はモデルの中で発光して描画されます。
プロキシシェーダ
ソースエンジンのマテリアルシステムで一番強力な要素はプロキシシェーダシステムです。プロキシシェーダで何が可能になるかという例はsdkに含まれるshaderzooマップを参照してください。詳細なドキュメンテーションはマテリアルドキュメントにあります。
VTEXテクスチャ変換
Vtexは.TGAファイルをソースエンジンのテクスチャ形式(.VTF)に変換するアプリケーションです。Vtexを使う一番簡単な方法はvtex.exeへのショートカットをデスクトップに作り、.TGAをそのショートカットにドラッグすることです。これで.TGAファイルと同じ名前の.VTFファイルがmaterialsディレクトリに作られます。TGAファイルをVtexにドラッグして開くと、TGAと同じディレクトリに.TXTファイルが作られ、ここにVtex用のコマンドを書き込んで圧縮状態を変更することができます。
手早くマテリアルを作成するには、Vtexのショートカットのプロパティで"-shader VertexLitGeneric"をオプションに追加してください。これは他のシェーダタイプを指定しても動きます。テクスチャ画像をこの変更したショートカットにドラッグすると、通常のように.VTFを作った後、指定したシェーダとbasetextureが設定された.VMTファイルを自動作成します。
チェッカーボードテクスチャ
UV座標のレイアウトを始める時にチェッカーボードテクスチャを使うのはよい方法です。歪み、筋、継ぎ目といった直すべき箇所をすばやく見つけることができます。また、チェッカーボードテクスチャはモデルの各部分のテクスチャ密度を測るよい方法でもあります。UVを定義する際には、顔は他の部分より密度が必要ですが、全体としてはモデル全体で一環した密度を目指すことになります。XSIのデフォルトのnoicon.picもよい選択ですし、SDKに含まれるチェッカーボードテクスチャを使うこともできます。
XSIでのテクスチャの適用
XSIでのテクスチャ適用はとても簡単です。マテリアルが複数テクスチャを必要とする場合以外、1つのベーステクスチャだけを使うようにすべきです。モデルで複数のテクスチャを使うことはレンダリングにかかる時間に大きく影響することがあります。XSIでモデルにテクスチャを適用するには、モデルを選択し、所得>マテリアル>blinn(get>material>blinn)を選び、次に取得>テクスチャ>イメージを実行します。そしてXSIに画像の場所を入力します。もし1つのモデルに複数のテクスチャを設定したい場合、まず最初に設定したい一群のポリゴンを選択して、クラスタを作り、そのクラスタにマテリアルと画像を適用します。プリファレンスのRenderingで「フォーカス時に外部で編集されたイメージクリップを再ロード」"reload externally modified images on focus"を設定するのを忘れないでください。これを設定しておくとPhotoshopのような外部プログラムからAlt-Tabで戻ったときにテクスチャが再読み込みされ、時間の節約になります。
適切なプレビュー
テクスチャを設定したキャラクタの進歩を判断するのはソースエンジンの中で直接行うべきで、マテリアルが進行しすぎる前に、vtf、vmtを作成し、mdlファイルをビルドしてエンジンの中でモデルを見てください。テクスチャとシェーダパラメータの最適点を探す作業はエンジンでのモデルを見てからしかできません。
マテリアルの大きさはどれくらいが適当でしょうか?.VTFをできるだけ初期の段階で作り、エンジンでモデルをプレビューします。コンソールでmat_showmiplevelコマンドを使い、ゲームプレイで遭遇する状態のmipレベルを確かめます。大きいほうがよいように思えるかもしれませんが、これはいつも正しいわけではありません。Mipマップが大きいテクスチャを小さいサイズに縮小しぼかしてしまうこともありえます。