今日の話題:
1)GPU Skinningは有効になりません
2)convex hullを選択することによる警告表示
3)Unity 2019 画像圧縮フォーマットの選択
4)AndroidでExportしたパッケージが圧縮への影響
5)AndroidのメモリにおけるUnknown部分のリーク
Rendering##
Q:Unityバージョン:2019.3.0f6
Shader:GPUSkinningUnlitSkin2
テストScene :Adam_Player_Crowd
テストスマホ :Samsung S5
質問です。GitのGPU Skinningを使用して、PCでテストされたDrawCall数は減少しています。同時にAnimator.updateのコストはなくて、Instancingがあります。しかし、Samaung S5にbuildして、Unity Profilerで確認すると、Animator.updateのコストもなくて、DrawCallも減少しておらず、さらにInstancingもありません。これはどこの部分がよく設定されなかったということでしょうか。
またGPU SkinningはInstancingを使用したら、OpenGL ES 3.0にしか使えませんか。またはOpenGL ES 2.0にも使えますか?
Samsung S5
A:公式サイトのドキュメントを参照して、以下のように、OpenGL ES 2.0をサポートしません。
Mesh
Q:ある複雑なモデルに警告が表示されました:
Couldn’t create a Convex Mesh from source mesh “**” within the maximum polygons limit (256). The partial hull will be used. Consider simplifying your mesh.
SimpleLodでポリリデュースしても、256個のポリにリデュースされなかったが、この警告は表示しなくなりました。一体この警告はどういうことでしょうか。モデリングする時どうすれば避けられますか。
A: 生成されたConvex Meshには、せいぜい255個の三角形しか含めることができません。元のモデルは複雑すぎて、255個の三角形では足りなくて、アウトラインを表すのに十分ではありません。
Texture
Q:画像圧縮フォーマットの選択について、この前のブログには、AndroidならETC2を選択し、iosならPVRTC選択すると推薦してくれましたが。現在のプロジェクトはUnity 2019.2.21f1までにアップグレードして、もっと多くのフォーマットが増えています。それに、以下のいくつかの質問があります:(Unityバージョン:2019.2.21f1)
- 新しいバージョンUnity 2019におけるFormatに関して、Android とios にそれぞれどういうようなフォーマットを選択すべきか?
- AndroidにはASTCフォーマットを使用できますか。市場占有率はどれぐらいでしょうか。
- Resize Algorithm、Override ETC2 fallback、それぞれの意味および選択基準は?
- HDR 、6X6、10X10、どちらを選択したら良いですか。
Q1、iosならASTCを選択し、AndroidならETC2を選択することをお勧めします;
Q3&4については、Textureの公式ドキュメントを参照してください。大体わかった上に、プロジェクトに応じて、きっとよりよくの選択があるはずです。
A2:現在txの新しいプロジェクトには、すでにASTCの使用が普及し始まった。したがってすべてASTCを選択します。2019でimportの時にASTCをデフォルトと設定したら、特にイルミネーションのスタンプと法線には効果があります。Unityのデフォルトは6x6です、プロジェクトに応じてほかのサイズも選択できます。
AssetBundle
Q:Android Gradleのプロジェクトに、build.gradleは以下のような配置があります:
aaptOptions
{
noCompress ‘.unity3d’, ‘.ress’, ‘.resource’, ‘.obb’
}
現在のテストでは、AssetBundleが非圧縮に配置されていない場合、パッケージ本体は少し縮小されます。これは、AssetBundleに対するLZMA圧縮の効果とほぼ同じです。圧縮されたパッケージがこの方法で2回圧縮された場合、解凍プロセスはどのようになりますか?実行時のパフォーマンスにどんな影響がありますか?
今、私の個人的な経験に基づいて、AndroidのAPKパッケージはインストール時に解凍されると推測します。つまり、インストールが完了すると、2回圧縮されているかどうかに関係なく、ハードディスク内で同じように表示されます。経験のある誰かにも説明してもらいたいと思います。
A:AndroidのAPKパッケージはインストール後に解凍されないため、理論的には、実行時に「2回圧縮」のBundleを取得するには解凍手順が必要です。 実際、「2回圧縮」に変更すると、AssetBundleのローディングとAssetBundleからのアセットのローディングにかかる時間が大幅に長くなったという開発者からのフィードバックがあります。
したがって、変更する前に、自らのプロジェクトにおけるAssetBundleアセットを使用してテストを実行してみてください。そして、この2つの部分が時間コストにおける相違が明白かどうかを確認することをお勧めします。
Memory##
Q: 一般的にAndroidのメモリにおけるUnknownの部分は何ですか?一つのシーンに何度も出入りすることで、Unityのアセットは正常にリークすることなく解放されますが、このUnknownのものは増え続けています。
A:この部分はmmapを介して分配された匿名メモリです。LuaJITを用いて、Luaメモリはここに存在しています;従来のLuaメモリはmallocを介して分配されて、Native Heapに現れます;もう一つの大部分はMonoメモリです。Boehm GCはAndroidにもmmapによって分配されました;または第三者におけるsoライブラリのメモリ分配です。
UWA公式サイト:https://jp.uwa4d.com
UWA公式ブログ:https://blog.jp.uwa4d.com
UWA公式Q&Aコミュニティ(中国語注意):https://answer.uwa4d.com!