Unityエンジンに表示される頂点が多すぎるのはなぜですか?

今回の主な話題:UVの継ぎ目の解決する方法、Unityにインポートした後に頂点/面の数が変更された原因、アニメーションオブジェクトのスムーズさを改善する方法、Socketを使用してネットワークプロトコルの送受信戦略を処理する方法。


エディター

Q1: 同じモデルがUnityに表示される頂点と面の数は、3dsMAXに表示される頂点/面の数よりはるかに多くなりますが、これがなぜですか?

問題主はUnity公式のドキュメントを参照できます。

https://docs.unity3d.com/Manual/FBXImporter-Model.html

https://docs.unity3d.com/Manual/class-Mesh.html

最後の段落に、

The Unity Editor shows too many vertices or triangles (compared to what my 3D app says)

This is correct. What you are looking at is the number of vertices/triangles actually being sent to the GPU for rendering. In addition to the case where the material requires them to be sent twice, other things like hard-normals and non-contiguous UVs increase vertex/triangle counts significantly compared to what a modeling app tells you. Triangles need to be contiguous in both 3D and UV space to form a strip, so when you have UV seams, degenerate triangles have to be made to form strips - this bumps up the count.


制作

Q2: 3DモデルをUnityにインポートした後、UVの継ぎ目は明らかに見えましたが、モデリングソフトでの表示は正常であり、UV展開が正しいことを確認できます。これはなぜですか?

これはMipmapが原因である可能性があります。 テクスチャは自動的にスケーリングされるため、エッジの情報が不足しているため、継ぎ目が明らかになります。 インポート設定でMipmapを閉じて、まだ問題があるかどうかを確認できます。

別の方法は、UVエッジの外側に数ピクセル拡張することです。たとえば、1024 * 1024のテクスチャエッジは8ピクセル外側に拡張します。


レンダリング

Q3: アニメーションオブジェクトのエッジを滑らかにしたいので、設定は次とおります。MSAAはもうオンになっていて、Rendering設定で8xアンチエイリアスを使いました。ただし、シーン内の静的オブジェクトのエッジは比較的滑らかですが、アニメーションオブジェクトは明らかなギザギザのエッジがあります。 滑らかさを改善し続ける方法は?

問題主はHDRをオフにして、改善するかどうかを確認できます。 Intel GPUで、HDRとMSAAをともに使用する場合、いくつかの問題を引き起こす可能性があります。 さらに、MSAAの代わりにPost Processing Stackを使用できます。


アセット管理

Q4: CommandBuffer.DrawMeshを使用してもSetPass Callsを減らすことができません。Renderで直接レンダリングすることと異なり、同じマテリアルを使用しても、SetPass Callsを減らすことはできません。Unityはマテリアルによって並べ替える機能を開けますか?

メッシュは単なる仮想概念であり、本質的には点、三角形、およびその他の属性です。Rendererも「直接レンダリング」ではありません、StaticBatchingもDynamicBatchingも、Unity自体が複数のMeshを合併し、一緒にDraw Callすることであります。

したがって、問題主の質問に対して、マテリアルの同じMeshを合併し、CommandBuffer.DrawMeshをコールすれば大丈夫はずです。


ロジックコード

Q5: UnityでC#のSocketを使用してネットワークプロトコルの送受信を処理する場合、独立スレッド処理、または非同期メソッド(BeginReceiveなど)を使用することのどちらが効率的ですか?

一般的な方法は、独立スレッド+非同期です。メインスレッドに配置せれば必ず他の論理シーケンスによって制限され、処理は遅延になります。非同期性も同じで、繁な読み取りを減らし、最下層に処理により簡単な状態を与えます。

Writeは通常、メインスレッド+非同期の方法で行います。Writeにはタイムリーな処理の問題がなく、単独にスレッドを設定する必要はありません、データのメンテナンスを減らすこともできます。非同期は、異常な状況がメインスレッドで妨害するのを防ぐことができます。


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式Q&Aコミュニティ(中国語注意)https://answer.uwa4d.com