QC/ja

From Valve Developer Community
< QC
Jump to: navigation, search

定義

テキストベースのスクリプトファイルである.QCファイルは、.SMDモデルをゲームで最終的に使用する.MDLモデルへとコンパイルするプロセス全体を制御します。

.QCの内部で、どのような名前の.MDLファイルを作るのか、どの.SMDファイルをリファレンスモデル、物理モデル、そしてLODモデルとして使うのかを設定します。 また.QCでは、様々な物理属性や、表面属性(surface properties - 弾痕として使用するデカル、ぶつかった時の音などの調整が可能)も設定することができます。

.QCファイルで使用できるコマンドの一覧については.QC Commandsを参照してください。

新規.QCファイルの作成

通常のプロップモデル向けの.QCファイルにはあまり差がないので、他のプロップの.QCファイルのコピーを基礎として始めるのが最良です:

  1. 他のプロップモデルの.QCファイルをコピーする
  2. コピーした.QCファイルの名前を自分のプロップの名前に変更する
  3. .QCをテキストエディタ(メモ帳など)で開き、自分のモデルに合うよう変更する

.QCファイルは.SMDモデルファイルと同じフォルダに保存すべきです。

典型的な.QCファイル

以下はワールドプロップモデルの典型的な.QCファイルの例です:

$modelnameprops_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)に作成されます。

例えばVConfigSource 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 directoryscripts\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_referencetree_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_lod1tree_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ファイルが必要不可欠です。

参照