Physics and Ragdolls

From Valve Developer Community
< Ja
Jump to navigation Jump to search
English (en)日本語 (ja)Translate (Translate)

physboxes(物理モデル)の作成

衝突モデル(collision model)の作成

分離しているオブジェクトはそれぞれ凸包(Convex hull)に変換されます。1つのオブジェクトに属する面全ては単一のスムージンググループとテクスチャを持つようにする必要があります。またオブジェクトの範囲を決めるのに単純な頂点接続を見るので、単独の凸包に変換したくないものは接続しないでください。Studiomdlはメッシュの最適化を行わずにただ凸包を作り出します。

また経験則として、1インチ立方より小さい詳細をモデリングしてはいけません。この面においては荒くあるべきで、ボルトやボタンといった詳細部分を分離した凸包部品にすべきではありません。 一般的に凸包部品が重なるのには問題がありません。モデルを少ない(そのかわり大きい)凸包部品で作れるのなら、パフォーマンスが向上します。できるだけ凸包部品の数を少なくしたいとおもうでしょう。頂点数はそれほど重要ではありませんが、レンダリングされるモデルのLODより低いものであるべきです。1インチの不正確さに気がつくことはないでしょう - プレイヤーが先に気がつく他の要素は多くあります。

$autocenterの使用

$autocenterはモデルの原点(origin)がバウンディングボックスの中央になるように移動します。

これはまた元々の原点からのオフセットした"placementOrigin"attachmentポイントを追加します。 これはgib(破片、肉片)を作るのに役立ちます。XSIで配置したい場所に集合として複数のgibのモデリングを行います。それぞれのgibを別に出力し、.qcに$autocenterを加えます。これでライティングやバインディングボックスなどに適切な原点設定がされ、親となるモデルが破壊されてgibを出すときに正しい場所に発生させることができます。

役立つコマンド

$mass

  • オブジェクトの重さをキログラムで設定します
      // set the mass to 100 kg
      $mass 100

$automass

  • 衝突モデル(collisionmodel)に適用されたマテリアルの密度・厚さを使って自動的に重さを計算します。
      // automatically compute mass
      $automass

$concave

  • これはstudiomdlに衝突モデルが凹部を持つ(つまり凸部分の組み合わせ)であることを伝えます。 通常studiomdlはモデルが単独の凸包であると推定します。
      // collision model is not a single convex piece
      $concave

ラグドールの作成

衝突モデルの作成

既存のキャラクタをガイドとして使い、それぞれのボーンに1つずつオブジェクトを作ります。これらのオブジェクトはできるだけ簡単にしますが、あまりキャラクタの形からはなれすぎることがないようにしてください。物理システムはそれぞれのボーンを凸包にすることに気をつけてください。今のところ複数ボーンの使用なしでは凹オブジェクトを作ることはできません。これらのモデルは基本的に非常にローポリゴンで、頂点は1つのボーンだけに割り当てるようにする必要があります。表面にカバーできてない場所があってもかまいません(コンバイン兵士やゾンビのモデルを参照してください)。

モデルの一部のボーンだけに衝突オブジェクトを追加するべきです。数が多すぎると、後で誰かの作業を増やすことになります。パフォーマンス制限では処理量を考えるとそれぞれのキャラクタで大体15-20のボーンしかシミュレーションできません。2足モデルでは、すでにあるモデルをテンプレートにしてください。HL2ではシミュレーションでの2足モデルを以下のように削減しています:

  • サポートする背骨区間は2つだけ
  • 指とつま先は全てスキップ
  • 大抵の場合追加装備は別のボーンにマージ(コンバイン兵士のバックパックなど)

その結果人間キャラクタの大部分は大体15のボーンになります。 このモデルをSMDファイルとして出力し、ragdoll.smdと名前をつけます。モデルの他のアニメーションがあるディレクトリに保存します。SMDをリファレンスとして出力する必要があります。

ラグドールポーズの作成

モデルを一番リラックスした状態のポーズにします。このポーズがシミュレーションされていないボーンで再生されるアニメーションになります。人間モデルでは、指を削減しているので、このアニメーションで指をポーズさせるのが必須です。こうすることで、キャラクタが銃をもっている時に死んでも、引き金の指を開いて倒れることはありません。

このポーズをSMDファイルとしてragdoll_pose.smdという名前で出力します。

ragdoll.qcファイルの追加

同じ、もしくは非常に近いスケルトンを持つキャラクタがいるなら、そのモデルのragdoll.qcをコピーするだけです。そうでないなら、$hl2/models/ragdoll.qcを自分のモデルのディレクトリにコピーしてください。モデル本体のqcファイルの最後に"$include “ragdoll.qc”"という行を追加します。

モデルのコンパイル

モデルにstudiomdlを実行します。ジョイント衝突モデルを作成している(building a jointed collision model)という表示がでるはずです。

HLMVを実行し、ジョイントを編集

ではHLMVを実行します。まず、"Physics Model"チェックボックスをチェックします。ワイヤフレームの物理モデルが正しくコンパイルされ、頂点の割り当てもただしいことを確かめます。physicsタブをクリックします。ここでそれぞれのジョイントの各軸に対して角度の制限を行います。qcに他のキャラクターのものをコピーしていれば、そのジョイント制限から編集を行えます。massに正しい重量を設定する(キログラム)ことを忘れないでください。1キログラムは2.2ポンドです。 制限の調整が終わったら、"Generate QC"ボタンをクリックします。新しいQCファイルがクリップボードに保存されました。ragdoll.qcにその内容をコピーしてモデルを再コンパイルします。