【Unity】GPUインスタンス 人型アニメーターのアニメーションを写真に保存する方法

参考:

  1. GitHub - tkonexhh/RenderHugeByGPUInstance
  2. GPU インスタンス化をサポートするシェーダーの作成 - Unity 手册
  3. Animator-Play - Unity 脚本 API
  4. Unity-Animator徹底シリーズ---API詳細解説-CSDNブログ
  5. Unity は現在再生されているアニメーションのフレームを取得します_Unity は現在再生されているアニメーションのフレームを取得します - CSDN ブログ
  6. https://www.cnblogs.com/WalkingSnail/p/15656780.html
  7. GPU スキニングにより骨格アニメーションが高速化 - Zhihu
  8. UnityShader 基礎 (8) - 画像 - シェーダーカスタム関数とランダムカラー - Zhihu

プラン:

  1. リソースを準備します。
    1. ヒューマノイド規格に準拠したモデル。
    2. 完全なアニメーションを備えた AnimatorController。
  2. ビルド スクリプトを作成します。
    1. Animator ですべてのクリップを取得します。
    2. Animator をフレームごとに再生し、頂点データをテクスチャに保存します。ピクセルの 1 行はアニメーションの 1 フレームのすべての頂点データを表し、各ピクセルは頂点の座標を表します。
    3. すべてのアニメーション データ (ライン数、開始ライン、クリップの長さ、クリップ名) を保存します。
  3. 再生シェーダーを作成します。
    1. UNITY_INSTANCING 関連のマクロを追加します。
    2. v2f vert(appdata v, uint vid: SV_VertexID) でアニメーション データのピクチャ ピクセル データを読み取り、頂点データに変換します。アニメーションの現在のフレームは、ピクチャの行に対応するパラメータとして渡され、 vid 計算列。tex2Dlod メソッドを使用して、色の値 = 頂点座標を取得します。
    3. fix4 frag(v2f i) で頂点カラーを処理します: SV_Target (カラー ディザリングの処理に使用されます。これにより、チーム カラーやレベルなどの色の区別を容易にするために、さまざまな色のモデルを生成できます。色を変更する必要がない場合は、ほっといて)。
  4. 再生制御スクリプトを作成します。
    1. 受信パラメータ (現在のフレーム番号) を制御するには、シェーダと組み合わせる必要があります。
  5. 知らせ:
    1. Animator.Play メソッドのnormalizedTime パラメーターは、0 と 1の間の時間オフセットを表します。
    2. フレーム アニメーションを再生するには Animator.Play を呼び出す必要があるため、生成されたスクリプトを実行するオブジェクトはシーン内に存在する必要があります。
    3. シェーダの tex2Dlod パラメータ 2 のコンポーネント値は 0 ~ 1 の範囲にあるため、_TxelSize を有効に活用します。
  6. コード:
    1. https://gitee.com/grimraider/gpu-instance

おすすめ

転載: blog.csdn.net/GrimRaider/article/details/133387996