【Unity】GPUインスタンス 人型アニメーターのアニメーションを写真に保存する方法
開発
2023-10-01 02:12:38
訪問数: null
参考:
- GitHub - tkonexhh/RenderHugeByGPUInstance
- GPU インスタンス化をサポートするシェーダーの作成 - Unity 手册
- Animator-Play - Unity 脚本 API
- Unity-Animator徹底シリーズ---API詳細解説-CSDNブログ
- Unity は現在再生されているアニメーションのフレームを取得します_Unity は現在再生されているアニメーションのフレームを取得します - CSDN ブログ
- https://www.cnblogs.com/WalkingSnail/p/15656780.html
- GPU スキニングにより骨格アニメーションが高速化 - Zhihu
- UnityShader 基礎 (8) - 画像 - シェーダーカスタム関数とランダムカラー - Zhihu
プラン:
-
リソースを準備します。
- ヒューマノイド規格に準拠したモデル。
- 完全なアニメーションを備えた AnimatorController。
-
ビルド スクリプトを作成します。
- Animator ですべてのクリップを取得します。
- Animator をフレームごとに再生し、頂点データをテクスチャに保存します。ピクセルの 1 行はアニメーションの 1 フレームのすべての頂点データを表し、各ピクセルは頂点の座標を表します。
- すべてのアニメーション データ (ライン数、開始ライン、クリップの長さ、クリップ名) を保存します。
-
再生シェーダーを作成します。
- UNITY_INSTANCING 関連のマクロを追加します。
- v2f vert(appdata v, uint vid: SV_VertexID) でアニメーション データのピクチャ ピクセル データを読み取り、頂点データに変換します。アニメーションの現在のフレームは、ピクチャの行に対応するパラメータとして渡され、 vid 計算列。tex2Dlod メソッドを使用して、色の値 = 頂点座標を取得します。
- fix4 frag(v2f i) で頂点カラーを処理します: SV_Target (カラー ディザリングの処理に使用されます。これにより、チーム カラーやレベルなどの色の区別を容易にするために、さまざまな色のモデルを生成できます。色を変更する必要がない場合は、ほっといて)。
-
再生制御スクリプトを作成します。
- 受信パラメータ (現在のフレーム番号) を制御するには、シェーダと組み合わせる必要があります。
-
知らせ:
- Animator.Play メソッドのnormalizedTime パラメーターは、0 と 1の間の時間オフセットを表します。
- フレーム アニメーションを再生するには Animator.Play を呼び出す必要があるため、生成されたスクリプトを実行するオブジェクトはシーン内に存在する必要があります。
- シェーダの tex2Dlod パラメータ 2 のコンポーネント値は 0 ~ 1 の範囲にあるため、_TxelSize を有効に活用します。
-
コード:
- https://gitee.com/grimraider/gpu-instance
転載: blog.csdn.net/GrimRaider/article/details/133387996