区間指定ループ
前回の記事で、ISMでインスタンシング表示をしても法線が正しく出力される方法を書きました。
今回はさらにISMで現実的なインスタンシングができるようになるようアニメーションのループ区間を指定できるようにします。
なぜ必要なのか
標準のVATマテリアルそのままだとインスタンシングしても、すべて同じテイク、タイミングになってしまいます。かといってアニメーションごとにISMを分けてしまってはインスタンシングのうま味が薄らいでしまいます。そこで、複数のテイクを一つにまとめたアニメーションを区間指定ループによってランダムに再生することによって、単一ISM内でムラを出します。
また、ISMを使わない場合でも、同一VAT内で再生範囲が選べるとゲームの実装時も何かと便利です。
アニメーションの準備
まず、↓のように歩きと走りのテイクが一つのアニメーションにまとまったVATを作ります。
これから、次の工程でこれを走りと歩きに分けてループ再生できるようにしていきます。
マテリアルの改造、(第一段階)
実装は簡単で、VATマテリアルのフレーム計算部分に↓のように4~5個のノードを追加し、繋ぎ変えるだけです。※赤丸の部分が区間指定のパラメータです。
これにより、歩きと走りそれぞれのループを抽出できるようになりました。
歩きループを抽出
走りループを抽出
マテリアルの改造、ランダム対応
次に、インスタンス毎に再生するループをランダムに選択できるようにしてみました。
今回はデモ的な実装なので適当に2つだけをPerInstanceRandomで切り替えています。
赤丸部分で2種類のループの指定をしています。
※インスタンス数が少なすぎると、PerInstanceRandomの偏りが目立つ場合があります。
結果
↓のように同一ISM内で複数のアニメーションを再生する事ができました。
本番で実装するにはもう少し洗練する必要があると思いますが、何かの足しになれば幸いです。
使用上の注意
区間指定ループを使う場合、VATの補完スイッチを入れると正しくループできないので注意してください。