HDRP のモーションベクトル
モーションベクトルは、1 つのフレームから次のフレームにかけて、ゲームオブジェクトのスクリーンスペースの動きをピクセルごとにキャプチャします。HDRP は、現在と過去のフレームにおけるゲームオブジェクトの位置の違いを使って、ゲームオブジェクトのモーションベクトルを計算します。
HDRP は Temporal Anti-aliasing (TAA) やモーションブラーなど、様々なエフェクトにモーションベクトルを使います。
HDRP は 2 つのステージでモーションベクトルを計算します。
- HDRP はまず、オブジェクトモーションベクトルを計算します。オブジェクトモーションベクトルとは、HDRP がゲームオブジェクトのスクリーンスペースの動作を基にして計算する、モーションベクトルです。
- HDRP はその後、カメラモーションベクトルを計算します。これはカメラの動きから発生するモーションベクトルです。HDRP は最初のステージでモーションベクトルを書かなかったピクセルに対し、カメラモーションベクトルを計算します。
モーションベクトルの使用
HDRP でモーションベクトルを使うためには、まず有効化しなければなりません。
- Unity プロジェクトの HDRP アセット で行う場合は以下の手順に従ってください。
- HDRP Asset を選択し、Inspector ウィンドウで表示します。
- Rendering セクションへ行き Motion Vectors を有効にします。
- フレーム設定 で行う場合は以下の手順に従ってください。モーションベクトルはすべてのカメラに、またはカメラレベルで個別に有効にすることができます。
- すべてのカメラに対してモーションベクトルを有効にするには、Project Settings の HDRP Default Settings タブ (メニュー: Edit > Project Settings > HDRP Default Settings) を開いてから、Default Frame Settings For を Camera に設定します。特定のカメラに対してモーションベクトルを有効にするには、Camera を選択し、Inspector で Custom Frame Settings を有効にします。
- Rendering セクションで Motion Vectors を有効にします。これでカメラモーションベクトルが有効になります。
- 不透明ゲームオブジェクトに対してモーションベクトルを有効にするには、Opaque Object Motion を有効にします。透明ゲームオブジェクトに対してモーションベクトルを有効にするには、Transparent Object Motion を有効にします。
これで HDRP がモーションベクトルをレンダリングできるようになります。オブジェクトモーションベクトルを有効にする場合は、デフォルトにより、新しいメッシュレンダラーがオブジェクトモーションベクトルを書きますので、注意してください。この動作を変更するには、メッシュレンダラーを選択し、Inspector で Motion Vectors プロパティーの値を変更します。
オプションは以下の通りです。
- Camera Motion Only: HDRP はゲームオブジェクトが埋める画面エリアに対してのみ、カメラモーションベクトルを計算します。
- Per Object Motion: HDRP は以下の条件を満たす場合に、ゲームオブジェクトに対してモーションベクトルを計算します。
- ゲームオブジェクトは動き、カメラは動かない場合。
- カメラは動き、ゲームオブジェクトは動かない場合。
- ゲームオブジェクトとカメラの両方が動く場合。
- Force No Motion: HDRP はゲームオブジェクトが埋める画面エリアに対して、カメラモーションベクトルを計算しません。
透明ゲームオブジェクトに対するモーションベクトル
HDRP はデフォルトにより、透明マテリアルに対するモーションベクトルをレンダリングしません。これは透明ゲームオブジェクトのモーションベクトルが、背後にあるゲームオブジェクトに対するモーションベクトルを上書きするためです。例えば、窓はその後ろで飛ぶ鳥のモーションベクトルを上書きします。
HDRP が透明マテリアルに対してモーションベクトルをレンダリングするように変更するには、モーションベクトルの使用 の手順に従って Transparent Object Motion を有効化します。
透明オブジェクトが指定のピクセルでモーションベクトルを書くとき際は、ピクセルの以前のモーションベクトルが置き換えられます。これは髪の毛のようなアルファクリッピングを使うマテリアルに特に役立ちます。
透明ゲームオブジェクトとモーションブラーを組み合わせて使う場合は、モーションブラーも深度情報を利用することに注意してください。つまり、マテリアルも深度情報を書くようにしなければならないということです。これを実行するには Surface Options へ行き、Transparent Depth Postpass チェックボックスを有効にします。