Warning: Particle System is trying to spawn on a mesh with zero surface area

この記事は約5分で読めます。

アバターのパーティクルで確認すべき設定がある場合、表題のWarningが表示されます。

このWarningが発生しても直ちに問題が発生することはありませんが、放置しているとパフォーマンスに悪影響を及ぼす恐れがあります。

これはUnity全般の問題ですが、VRChatでも例外なく発生します。

この警告はどこに出力されますか?

VRChatのクライアントログに出力されます。

Warning    -  Particle System is trying to spawn on a mesh with zero surface area

ならびにアバターの改変作業のためにUnity Editorを使用している場合は、そのParticle Systemを選択していたり、実行状態にあったりするとConsoleにWarningが出力されます。

Feedback - Improve "Particle System is trying to spawn on a mesh with zero surface area" warning
Our game sometimes outputs this warning: Particle System is trying to spawn on a mesh with zero surface area It would be...

問題が発生している場合、該当のUnityアプリケーションがフリーズしたり、応答なしになったりするなどの症状を引き起こす恐れがあります。

なぜ、この問題が発生するのか?

粒子系统中由于制作问题而导致的警告和错误
最近一直在做优化相关的事情, 记录一下过程中遇到的一些问题以及原理, 产生原因和解决办法.

Particle Systemで、辺または面が見つからない場合に問題が発生します。
なぜか、頂点が見つからない場合は問題が発生しないようです。

具体的には、次のすべての条件を満たすParticle Systemコンポーネントが存在するとこの問題を引き起こします。

  • Particle SystemでShapeが有効になっている。
  • ShapeがMesh/Mesh Renderer/Skinned Mesh Rendererのいずれかに設定されている。
  • TypeがEdge/Triangleのいずれかに設定されている(Vertexは対象外)。
  • Meshに何もメッシュが設定されておらず、”None”となっている。
    • または、そのメッシュのfbxでRead/Write Enabledが無効になっている。

VRChatでは、アバターにRead/Write Enabledが無効となっているfbxを含む場合はアップロードできないようにVRChat SDKでエラーが表示されるため、この可能性は低いです。

Unity EditorではRead/Write Enabledが常に有効であるとみなされて実行されるため、ビルド後に実機で動作させた場合に初めて問題が発覚することとなります。

Read/Write Enabledが有効になっている場合、メッシュデータがUnityから実行時にアクセスできるようになります。
ただし、CPUとGPU両方のメモリ(つまりメインメモリとVRAMの両方)にメッシュデータを保持するため、単純なメモリ使用量は2倍になります。

VRChatではRead/Write Enabledの設定は強制であるため、常にこの状態となります。

詳しくは、公式ドキュメントをご覧ください。

Model タブ - Unity マニュアル
モデルを選択すると、モデルファイルの インポート設定 が Inspector ウインドウの Model タブに表示されます。これらの設定は、モデル内に格納されるさまざまな要素やプロパティに影響します。Unity はこれらの設定を使用して各ア...

たとえば、次のようなParticle Systemの設定は問題があります。

このような設定のParticle Systemが存在する場合、Particle Systemの動作時にConsoleに次のようなWarningが大量に出力されます。
VRChatでアバターとして実行した場合、そのパーティクルを見ている全員のパソコンのクライアントログに出力されます。

点検して、修正するには?

アバター内のすべてのParticle Systemを、次の手順で点検してください。

アバターのプロジェクトとシーンを開いてください。
Hierarchyの上部に検索窓があります。次の文字列を一字一句間違えずに入力してください。

t:particlesystem

先頭のtは小文字にしてください。particlesystemは大文字小文字を問いませんが、間に空白や記号を入れないでください。
例えば”t:Particle System”や”T:particlesystem”では正しく検索できません(“t:ParticleSystem”は可能です)。

HierarchyにParticle Systemを含むGameObjectがすべて表示されます。
GameObjectをすべて選択し、Shapeの欄を展開してください(このとき、チェックを付けたり外したりはしないでください)。

Shapeの欄を展開したら、1つずつGameObjectを選択して問題のあるParticle Systemがないかを確認してください。
VRChatではアバターでRead/Write Enabledが無効となっているfbxのアップロードはVRChat SDKでエラーとして扱われるため、MeshがNoneとなっているGameObjectが無いかを点検してください。

もしあることを発見した場合は、適切なメッシュもしくはShapeを選択するか、Shapeのチェックを外してください。

メッシュパーティクルを使用するつもりなのにMeshが設定されていない場合、メッシュパーティクルとして使用するべきメッシュがそもそも存在しないことになります。

したがって、そもそも想定した通りの動作にならないはずです。

タイトルとURLをコピーしました