QC
定義
テキストベースのスクリプトファイルである.QCファイルは、.SMDモデルをゲームで最終的に使用する.MDLモデルへとコンパイルするプロセス全体を制御します。
.QCの内部で、どのような名前の.MDLファイルを作るのか、どの.SMDファイルをリファレンスモデル、物理モデル、そしてLODモデルとして使うのかを設定します。 また.QCでは、様々な物理属性や、表面属性(surface properties - 弾痕として使用するデカル、ぶつかった時の音などの調整が可能)も設定することができます。
.QCファイルで使用できるコマンドの一覧については.QC Commands を参照してください。
新規.QCファイルの作成
通常のプロップモデル向けの.QCファイルにはあまり差がないので、他のプロップの.QCファイルのコピーを基礎として始めるのが最良です:
- 他のプロップモデルの.QCファイルをコピーする
- コピーした.QCファイルの名前を自分のプロップの名前に変更する
- .QCをテキストエディタ(メモ帳など)で開き、自分のモデルに合うよう変更する
.QCファイルは.SMDモデルファイルと同じフォルダに保存すべきです。
典型的な.QCファイル
以下はワールドプロップモデルの典型的な.QCファイルの例です:
$modelname props_foliage/tree_deciduous_01a.mdl $body "Body" "tree_deciduous_01a_reference.smd" $scale 1.0 $staticprop $surfaceprop "wood_solid" $upaxis Y $sequence "idle" "tree_deciduous_01a_reference" fps 30 $lod 50 { replacemodel "tree_deciduous_01a_reference" "tree_deciduous_01a_lod1" } $collisionmodel "tree_deciduous_01a_physbox.smd" { //Mass in kilograms $mass 350.0 $concave }
この.QCは衝突モデル(physbox)とLODモデル(level of detailモデル)を持つモデルを作るのに十分なものです。
個々のコマンド
上の.QCのそれぞれの行についての説明は以下です:
$modelname props_foliage/tree_deciduous_01a.mdl
$modelname
というコマンドは、作成されるMDLファイルの名前と場所を指定します。 このMDLはtree_deciduous_01a.mdl
という名前になり、models/props_foliage
フォルダに置かれます。 modelsフォルダの中に置かれるということを.QCファイルで指定する必要はありません。Studiomdl (.QCファイルを使用してMDLモデルファイルを作るプログラム)はmodelsにモデルを置くことを前提にしています。
また、このモデルがどのゲーム向けかの指定がないことにも注意してください。 モデルは現在選択しているgame directory (Current Game)に作成されます。
例えばVConfig かSource SDK Windowでcurrent gameをでCounter Strike: Sourceに設定していたら、この.QCによるモデルは以下の場所に作られます。Steam/SteamApps/username/counter-strike source/cstrike/models/props_foliage/tree_deciduous_01a.mdl
$body "Body" "tree_deciduous_01a_reference.smd"
$body
コマンドはボディグループ(body group)を設定します。ボディグループを使うことで一つのMDLファイルに複数のサブモデルを持たせることができます。(例えば、街灯のMDLファイルに複数のボディグループを持たせて様々な街灯スタイルを表現することができます) サブボディグループを設定しないのなら、リファレンスとして使用する.SMDファイルの名前をただ書き込んでください。
$scale 1.0
$scale
コマンドでモデルをコンパイル時に拡大縮小することができます。 通常これは1.0のままにして、拡大縮小は.SMDをエクスポートする前の3Dパッケージ内で行うべきです。 このコマンドはモデルの簡単なテスト目的だけに使われるべきです。
$staticprop
$staticprop
コマンドはモデルがstatic propとしてのみ機能するよう設定します。 Static propはSource Engineのモデルクラスの一つで、物理システムによって動かされないものです。 それでも物理モデルを持つことができるので、オブジェクト/プレイヤー/弾丸と衝突することはできます。 $staticprop
として設定することの利点は、static_propは物理プロップよりコストが安いということにあります。 モデルが動かないのなら、常に$staticprop
を使ってください。
$surfaceprop "wood_solid"
$surfaceprop
コマンドはオブジェクトの表面属性(surface properties)を設定します。 これはテクスチャとはまったく関係せず、オブジェクトの物理的属性により関係しています。 ここで設定した材質はオブジェクトがぶつかったときの音、撃たれたときに現れるデカル(木のように割れるのか、石のように飛び散るのか)といったことに影響します。ゲームで使用できる表面材質のリストはgame directory のscripts\surfaceproperties.txt
にあります。 もしその場所にファイルがなければ、見るためには.GCF からファイルを抽出する必要があります。
$upaxis Y
$upaxis
コマンドは.SMDのどの軸が上方向かを設定します。 Mayaからモデルをエクスポートするのなら、Mayaの初期値はY軸が上なので$upaxisを"Y"に設定する必要があります。 .QCファイルで$upaxisを設定しない場合、StudioMDLはモデルの$upaxisがZである(MaxとXSI)と推定します。
Sequences
$sequence "idle" "tree_deciduous_01a_reference" fps 30
$sequence
コマンドはアニメーションシークエンスの設定に使用されます。 どのモデルも"idle"アニメーションを持つ必要があります。これはモデルが静止している(idling)ときに再生されるアニメーションです。
コマンドの文法は以下です:
$sequence "sequenceの名前" "sequenceで使用するSMDファイルの名前" フレームレート
このモデルはまったくアニメーションを行わないので、リファレンスモデル(モデルのポリゴン面全てを持つ.SMDモデル)をそのままアニメーションモデルとして使うことができます。
アニメーションをエクスポートする時には、全ての面とボーンの情報を持つリファレンスモデルをエクスポートします。 次に、アニメーションを別の.SMDファイルでエクスポートします。例えばsolider_reference.smd
(兵士モデル、リグ入り)とボーンアニメーションだけをもったsolider_run_anim.smd
の2つをエクスポートします。 そして.QCでこのsolider_run_anim.smd
を別のシークエンスとして設定します。例えばidle
の代わりにrun
という名前にします。
Levels of Detail
$lod 50 { replacemodel "tree_deciduous_01a_reference" "tree_deciduous_01a_lod1" }
$lod
コマンドはlevels of detail (LOD) モデルの設定に使用されます。 モデルは任意数のLODを持つことができますが、それぞれのLODの段階で少なくとも140ポリゴンを削減していないと、LODを用意しないよりコストが高くなってしまいます!
$lod
の後ろの数字は、そのLODモデルに切り替わって欲しい距離を表します。 必ず上手くいくマジックナンバーはありません。それぞれのモデルは多様なスケールとディティールを持つからです。 一般的に、最初のLODを40前後に設定してHalf-Life Model Viewer (モデルを見るために使う分離したアプリケーション)でどのように見えるか確かめましょう。 HLMVでは設定したLOD切り替え付きでモデルを見ることができます。
replacemodel
コマンドがある距離で.SMDモデルを別のものに切り替える実際の指定になります。 上の例では、50ユニットの距離でtree_deciduous_01a_reference
がtree_deciduous_01a_lod1
に交換されます。
もし100ユニットの距離でもう一つLODモデルを用意したいなら、LODのセクションは以下のようになります:
$lod 50 { replacemodel "tree_deciduous_01a_reference" "tree_deciduous_01a_lod1" } $lod 100 { replacemodel "tree_deciduous_01a_reference" "tree_deciduous_01a_lod2" }
上の例では、100ユニットの距離でtree_deciduous_01a_lod1
がtree_deciduous_01a_lod2
に交換されます。
まとめると、リファレンスモデルが50ユニット以内で使われ、50ユニットの距離で最初のLODモデルに交換されます。 そして、100ユニットの距離でこのLOD1モデルが次のLODモデルに交換されます。
衝突モデル
$collisionmodel "tree_deciduous_01a_physbox.smd" { //Mass in kilograms $mass 350.0 $concave }
$collisionmodel
コマンドは物理ボックス/衝突モデルの設定を行います。 $collisionmodel
のすぐ後に衝突モデルとして使用する.SMDファイルの名前を指定します。 リファレンスモデルを衝突モデルとして使うのではなく、常に独自の物理モデルを作るべきです。
//Mass in kilograms
という行はただのコメントで、.QCファイルのコンパイルには影響しません。 //から始まる行は全て無視されます。 $mass
コマンドはオブジェクトの質量を設定します。 これはモデルがstatic propではなく、physics propの場合に適用されます。 この質量を正しく設定しないと、オブジェクトは非現実的な動きをすることになります。 $concave
の行は物理オブジェクトが一つの大きい凸胞ではなく、複数の凸胞の組み合わせてできていることを示しています。
結論
Source Engineのモデルをコンパイル するにはこの.QCファイル、そして.QCから参照している.SMDファイルが必要不可欠です。
参照