LoginSignup
0
0

More than 1 year has passed since last update.

Humanoidアニメーションの表示がGenericと不一致

Last updated at Posted at 2021-05-24

今回の主な話題:Humanoidアニメーションの表示がGenericと不一致、Resources.UnloadAsset()でロードされた画像をアンロードすると異常になります、コンストラクターのGCが大きすぎます、特定の設備にある白すぎる問題、GPU Skinningに基づく色の変化の拡大を実現する方法。


Animation

Q1:私たちのプロジェクトのキャラクターは腕にいくつかのリボンがあります。一部のリボンはHumanoidに設置された後に、変な回転角度になり、Max及びGenericで表示するアニメーションと異なります。例えば、Maxで腕リボンの垂れアニメーションを設置したら、Humanoidの下にある2つのリボンがX字型の十字として表示されます。

現在確認した内容は以下のとおりです。
1、Avatarにあるボーンを再び正常に設定し、そしてT-Poseであり、腕のリボン以外に、他のボーンのアニメーションは正常です。
2、アニメーションインポート設定のmaskはすでにボーン全体をチェックしました。
3、前には腕Twistボーンが引き起こしたエラーと思いましたが、後でTwistボーンの無い状況のアニメーションをテストした時には依然として異常です。
4、Avatar設置のMuscle Setupで、Upper Arm TwistパラメーターとLower Arm Twistパラメーターを調整すれば問題を少し修正できますが、完全に修復することはできません。そして他の部分のアニメーションにも問題が発生する可能性があります。
5、2つのモードのAnimationファイルを比較すると、対応するフレームのデータに違いがあることがわかります。同じボーンが同じフレームの2つモードのtransform値が異なります。

Humanoidに変更すると、ボーンには空間変換と中間ボーンの挿入値があるため、位置情報が完全に対応していない可能性があります。問題主が1つのDemoをアップロードする方がよりいいと感じます。または、Humanoidがマップするボーンではなくで、追加ボーンにリボンを掛けることを試せますか?これで追加ボーンはGenericに沿って、Humanoidの影響に避けられます。

問題主は、AvatarのT-poseにある腕リボンのボーンたちの位置が異常かどうかを確認しましたか?PCでの3D Maxがアンインストールされているため、テストが不便です。RetargetingをするときにUnityのT-poseに問題のあるボーン位置は、3D Maxのデフォルトposeのボーン位置と一致するかどうかを注意ください。

HumanoidタイプのアニメーションがAvatarを選択した後、差分値を格納するように変更されます。これらの値は、アニメーションの毎フレームposeとT-poseの「減算」であり、実行する時に差分値をターゲットモデルに適用されます。同じモデルで、理論上の結果はGenericの結果とまったく同じである必要があります。そうではない場合、アニメーションファイルまたはモデルファイルのあるposeの違いが原因であるはずです。

Demo検証を行うのは不便ですが、問題主に提案をします。同じアニメーションファイルから1つのMeshと1つのアニメーションをエクスポートし、このリソースのセットを検証し、アニメーション効果が正しいかどうかを確認できます。これが可能であれば、私が言ったことを確認できます。

現在、1つの解決策があります。
1.png
前の質問で述べたように、AvatarのMuscle Settingで、Upper Arm TwistパラメーターとLower Arm Twistパラメーターを調整すると、問題をわずかに修正できます。後で、これらのパラメーターを深く探究したところ、以前のチューニング方法が間違っている可能性があることがわかりました。
2.png
3.png
HumanoidはTwistボーンのマッピングをサポートしていないと推測するため、これら2つのパラメータを追加して、腕の追加ボーンの移動を実現します。
4.png
Lower Arm Twistはデフォルトで0.5の場合、前腕リボンは手首によってある程度回転します。
5.png
Lower Arm Twistは0である場合、前腕の回転は肘の影響のみを受け、効果はGenericと同じです。

ボーンのレイヤーは次とおります。
6.png


Asset

Q2: Resources.UnloadAsset()を使用してロードされた画像をアンロードしましたが、アンロードが無効であることがわかりました。コードは次のとおりです。
7.png
初めてLoadする後に、メモリはこのようになりました。
8.png
Resources.UnloadAssetをコールすると、メモリに変化が起こされましたが、まだメモリにあります。
9.png
Resources.UnloadUnusedAssets()を最後にコールますまで、メモリから完全にクリアされます。
10.png
アンロードされていないように感じます。UnloadAssetの後に、ロードされたSpriteは依然として使用できます。
11.png
私の理解では、Resources.UnloadAssetをコールして、1つのSpriteを解放した後、このSpriteを引用したImageもアセットを失うはずです。私の理解が間違いたかどうかはわかりませんが、現在の状況では、UnloadAssetを実行しても、このImageの引用画像がまだ残っています。

貴方の理解は正しいです。貴方のコードはSpriteでのみ動作し、Spriteによってインデックス付けされたTextureではありませんので、UnloadAssetはTextureをアンロードしません。インデックスがない場合、UnloadUnusedAssetsを介してのみアンロードできます。


GC

Q3: プロジェクトにネットにあるJSONをロードし、メモリにOpenCTMを介してUnity Meshを生成します。ただし、OpenCTM形式を逆シリアル化すると、大量のGCが生成されます。位置は下層のコンストラクターにあります。これに対して何か解決策ありませんか?
12.png

使用されているプラ​​グインはOpenCTMのC#ライブラリです。この問題は主に、OpenCTMデータ分析中にインスタンス化されるOutWindowクラスが多すぎるために発生します。これにより、大量のガベージが生成され、GCがトリガーされ、データの解析時間は特別に長くなります。

最適化方法は、OutWindowインスタンスをキャッシュすることです。
13.png


Render

Q4: 特定の設備の画面が白くすぎる問題を解決するにはどうすればよいですか?

以前もこのような問題にあることがありました。特定の設備(例えばiPhone Xなど)で画面が白くすぎで、見ると黒い点を生成するところの計算にエラーがあるようです。

テスト状況:プログラマーがコードを確認すると、DOF階段に問題が起こし、Bloomが問題を拡大したことを推測しました。コードを変更したけど問題が解決しませんでした。当時に、問題のあるところがFresnel効果に引き起こされ、pow(1-NdotV,exp)の計算に、1-NdotVは0である時にトリガーさあれ、Max(1-NdotV, 1e-4)に変更します(1e-4は10の-4乗、つまり0.0001です)。


Render

Q5: GPU Skinningに基づいて色変更機能を拡張したいと思います。つまり、下図のように、チームごとに色が異なります。
14_1.png
15.png
私が現在使用している方法:Shaderを自分で変更しました。非実行状態でのパフォーマンスは問題ありませんが、起動して実行すると、すべてのインスタンスが同じになります。

Shared Materialを自分がnewするMaterialに変更してもダメです。その後、1つの新しいShaderを作成しました。実行する後、Shaderのパラメーターはまた強制的に統一されます。つまり、表現は同じようになります。そして、2枚のTextureを作成して違うShaderを指定しても、起動すると同じままでした。Shaderが同じなら、何を取り替えや変更しても、実行すると同じ1つものに取り替えると感じます。

私の考えが間違っているかどうか、またはその過程で何かに気づいたなかったものがあるかどうか、教えてください。感謝します!

HSVは、Property介して直接割り当てることはできません。次のようにすることはダメです。
16.png
このシステムで使用するマテリアルは最終的にホストされますから、貴方が作成したShaderではありません。

一部のパラメーターをカスタマイズしたい場合、MaterialPropertyBlockを使用する必要があります。GPU SkinningPlayer.csでこのMaterialPropertyBlockを見つけられ、そして自分が望む値を設置したら大丈夫です。次のようです。
17.png
18.png
19.png


UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析最適化ソリューション及びコンサルティングサービスを提供している会社でございます。

今なら、UWA GOTローカルツールが15日間に無償試用できます!!
よければ、ぜひ!

UWA公式サイト:https://jp.uwa4d.com
UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html
UWA公式ブログ:https://blog.jp.uwa4d.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0