以下は、MicroProfilerの一般的なタグのリストで、カテゴリ別にグループ化されています。タグは、タスク、タイマー、スコープ、プロセス、ラベルと呼ばれることもあります。いずれの名前でも、それらは作業の単位を表します。
これらのタグを理解することで、ゲーム内の問題のあるコードを特定する手助けになります。テーブルにはタグラベル、説明、およびパフォーマンス向上およびゲームの最適化に関するアドバイスが含まれています。
スリープ
スレッドがアクティブにタスクを実行していないとき、スレッドはスリープ状態に入ります。タグは、そのスレッドがどれだけ長くスリープしていたかを示します。任意の時点で、ほとんどのワーカースレッドがスリープ状態にあるのは非常に一般的です。
ナビゲーション
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| rasterizeTile | パスファインディングリクエストに必要なナビゲーションタイルを更新します。通常、これに続いてcomputePathが必要なタイルを最新の状態にするために実行されます。メインスレッドでNavigationJob/preprocessの後に続きます。 | パスファインディングタイルの無効化の数を減らしてください。これにより、そのパスを再計算する必要があります。無効化は移動することができない部分によって引き起こされます。 |
| computePath | 通常、rasterizeTileの後にパスを計算します。 | Path:ComputeAsync()の呼び出しの数とワールドの範囲を減らしてください。期待される開始/終了位置が類似している場合は、複数のエージェントに対してパスを再利用してみてください。 |
| preprocess/getPrimitivesOverlapping | 各パスファインディングタイルのワールドジオメトリを収集し、パスファインディングスレッドによって実行されるラスタリゼーションタスクをスケジュールします。 | パート数を減らしてください。 |
アニメーションとヒューマノイド
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Simulation/gameStepped | Humanoids、Animationsやハートビートコールバックなど、ゲーム固有のオブジェクトの処理。 | 以下のgameSteppedラベルを参照してください。 |
| Simulation/gameStepped/stepHumanoid | Humanoidの状態変更と移動。 | Humanoidsの数を減らすか、ClimbingやSwimmingのように、必要のないNPCのHumanoid状態を無効にしてください。Humanoid.StateChangedへのコールバックを減らすか、RunningやDiedのような状態変更を減らしてください。 |
| Simulation/gameStepped/stepAnimation | Animatorsが現在再生中のアニメーションを前進させます。 | Animatorsの数またはアニメーションされた関節の数を減らして、このステップの作業負荷を軽減してください。AnimationTrack.KeyframeReachedやAnimationTrack.Endedなどのアニメーションイベントへのコールバックの数を減らしてください。 |
| Simulation/gameStepped/RunService.Stepped | RunService.Steppedイベントに接続された関数を実行します。 | このイベントに接続された関数の数または作業負荷を減らしてください。高価な計算を遅延させたり、置き換えたり、計算を複数のフレームに分散させることを検討してください。 |
オーディオ
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Sound | 音響シミュレーションを処理し、アクティブ再生中のサウンドを更新します。 | 以下のSoundラベルを参照してください。 |
| Sound/stepInstances | ワークスペース内のアクティブサウンドの音量を更新します。 | アクティブに再生されているサウンドの数を減らしてください。 |
ネットワーキング
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Net PacketReceive | ネットワークパケットを受信します。オブジェクトやイベントが多数複製されている場合、このステップは長くなります。 | 複製するオブジェクトやイベントの数を減らしてください。 |
| Replicator/ProcessPackets | モーション、イベントの呼び出し、およびプロパティの変更など、ネットワークパケットの内容を処理します。 | 複製されるオブジェクトの数やサイズを減らすか、段階的に行ってください。マップサイズが増加すると、全体的なアクティビティが増える傾向があります。 |
| Allocate Bandwidth and Run Senders/Dispatch Physics Senders and TouchSenders | ゲーム内のアクティビティに関するデータを送信します。 | 移動するオブジェクトやタッチの数を減らしてください。次のセクションを参照してください。 |
| Allocate Bandwidth and Run Senders/Dispatch StreamJob | ストリーミング機能で特定のクライアントに特定の領域を送信します。 | 最小およびターゲットストリーミング半径を減らしてください。 |
| Allocate Bandwidth and Run Senders/Dispatch Data Senders | プロパティの変更、リモートイベントの呼び出し、Humanoidの状態変更、アニメーションの状態変更、および新しいインスタンスの複製を送信します。 | データモデルへの複製された変更の数を減らしてください。 |
| Replicator SendCluster | クライアントにTerrainデータを送信します。 | 地形変更の数やサイズを減らしてください。 |
| ModelCompleteness Mega Job | サーバーのみ: 完全性は内部概念です。モデルが完全に送信されたとき、モデル完全性イベントが送信されます。 | インスタンスの追加や削除を減らしてください。 |
| deserializePacket | 低レベルのネットワークパケット処理。Replicator/ProcessPacketsの準備をします。 | 更新の数を減らすか、更新を小さくしてください。 |
レンダリング
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Prepare | メインスレッドからの情報を収集し、レンダリングに使用されるさまざまなデータ構造を更新します。 | 以下のPrepareラベルを参照してください。 |
| Prepare/Pass3dAdorn | オブジェクトの上にあるテキストラベルなど、さまざまなオブジェクトの装飾のレンダリングを処理します。Humanoidラベルがオクルージョンを持つ場合、このステップでは、視認性を確認するためにレイキャスティングが含まれます。デバッグ可視化を支援するために、非透明部分も含まれます。 | 視認可能な装飾オブジェクト(例:BillboardGuis、Humanoidの名前/健康ラベルなど)の数を減らしてください。視認可能な部分の数を減らしてください。 |
| Prepare/Pass2d | 2D UIレンダリング(プレイヤーおよびRoblox UIの両方)の準備をします。 | UI要素の量や複雑さを減らしてください。 |
| Prepare/UpdatePrepare/updateInvalidParts | いくつかのプロパティが変更または追加されたパーツを更新します。 | ワールド上のプロパティ変更の数を減らしてください。スクリプトが大量のオブジェクトプロパティを更新する場合は、フレームに分割してください。 |
| Prepare/UpdatePrepare/updateInvalidatedFastClusters | Humanoidsとスキンメッシュ MeshPartsのレンダリングに使用される「FastCluster」ジオメトリを準備します。ラベルは、部分、頂点、および頂点のサイズを指定します。 | HumanoidsやスキンメッシュのMeshPartsに対する視覚的変化を減らしてください。 |
| Prepare/UpdatePrepare/updateDynamicParts | レンダリングのためにBeams、ParticleEmitters、Humanoidsを準備します。 | 視認可能なBeams、ParticleEmitters、およびHumanoidsの数を減らしてください。 |
| Prepare/UpdatePrepare/updateInstancedClusters | パーツなど、インスタンス化されたレンダリングを使用しているジオメトリを更新します。ラベルはClustersとInstancesで、更新された数を示します。 | ヒットボックスを暗黙的に更新する作業を減らしてください。たとえば、BasePart.CFrame、BasePart.Size、またはMotor6D.Transformなどです。Bone.Transformなどのクリエイティブプロパティの更新は役立ちます。 |
| Perform | 実際のレンダリングコマンドが作成され、発行されます。 | 以下のPerformラベルを参照してください。 |
| Perform/fillGuiVertices | レンダリングの準備のためにUI頂点でバッファを埋めます。gui countラベルは、そのフレームで視認可能なLayerCollectorsの数を示します。 | コストが高い場合は、UI要素による数、密度、および占有スペースを減らしてください。Process GuiEffectラベルが多すぎる場合、テキストラベルにおけるUIGradientやUICornerの使用を減らすことを検討してください。 |
| Perform/Scene/queryFrustumOrdered | フラスタムカリングを適用し、視認できないオブジェクトをレンダリングしないようにします。 | コストが高い場合は、要素が多すぎる可能性があります。1つのメッシュがより多くの詳細を持つ大きなメッシュの使用を検討してください。 |
| Perform/Scene/computeLightingPerform | カメラの近くのライティングの計算。 | 光源の数を調整するか、カメラの移動を減らして、ライティングの再計算にかかる時間を短縮してください。 |
| Perform/Scene/computeLightingPerform/LightGridCPU | ボクセルライティングを更新します。これは、低品質レベルで使用されます。 | チャンクの占有状態の更新に時間がかかっている場合は、解像度の低いジオメトリを使用するか、パーツの数を減らすか、パーツを固定してください。他のラベルに時間がかかる場合は、光源の数を減らし、移動して占有状態を無効にするオブジェクトには影を落とさないジオメトリを使用してください。 |
| Perform/Scene/computeLightingPerform/ShadowMapSystem | シャドウマップを更新します。品質レベル4以下では実行されません。 | 光源の数を減らしてください。Light.ShadowsやBasePart.CastShadowを使用して、重要度の低いインスタンスでの影の投影を無効にすることもできます。 パフォーマンスを改善を参照してください。 |
| Perform/Scene/Glow, ColorCorrection, MSAA, SSAO, and SSAOApply | ポストプロセッシングのレンダリング。 | ポストプロセッシングエフェクトの数を減らしてください。通常、これは大きな影響はありません。 |
| Perform/Scene/UI | UIのレンダリング。Id_Screenには、使用されるバッチ、マテリアル、三角形の数がラベルとしてあります。 | 視認可能なUI要素の数を減らしてください。CanvasGroupsを使用することで、メモリ使用量の増加を伴う助けになります。 |
| Perform/Scene/UpdateView/updateParticles, updateParticleBoundings | パーティクルの位置と境界を更新します。 | パーティクルエミッターの数、発生率、寿命などを減らしてください。エミッターの移動を制限してください。 |
| Scene/Id_Opaque, RenderView/Id_Opaque | シーン内の全体的に透明度が0.01以下のパーツ。 | パーツの使用と密度を減らしてください。 |
| Scene/Id_Transparent, RenderView/Id_Transparent | シーン内の透明度が0.01から1の間のパーツ。 | 部分的透明度の使用を減らしてください。 |
| Scene/Id_Decals, RenderView/Id_Decals | シーン内のデカール。 | 複雑なメッシュ上のデカールの使用を減らしてください。 |
| Scene/Shadows | シーン内のシャドウ再計算。通常、動的シーンや典型的なゲームプレイで実施されます。透明度に関係なく、パーツはデカールを含む前提で影を落とします。品質レベル4以下では実行されません。 | このステップが長すぎる場合、複雑なメッシュ、ハイパーツ部分透明、重要度の低いインスタンスではBasePart.CastShadowを無効にすることを検討してください。デカールが必要ない完全に透明なパーツはBasePart.CastShadowを無効にしてください。 パフォーマンスを改善を参照してください。 |
| Perform/Present | GPUスレッドに転送してレンダリングコマンドを実行します。 | 一般的に、シーンの複雑さを減らしてください。このステップが長くかかる場合、GPUによって制限されている可能性があります。 |
| Perform/Present/waitUntilCompleted | GPUが前のフレームのレンダリングを完了するのを待ちます。 | これが頻繁に発生する場合、レンダリングされる物の量が多すぎます。フレームレートマネージャーはこれをバランスよくするのに役立ちますが、高止まりする場合、各Sceneタグからのパフォーマンスアドバイスに従ってください。 |
| LoadImage | エンジンが使用できる形式に画像を処理します。 | 大きな画像の使用を減らしてください。 |
スクリプト
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Render/PreRender/fireBindToRenderSteppedCallbacks | RunService:BindToRenderStep()を介してレンダーステップにバインドされた関数を実行します。 | このイベントに接続された関数ができるだけ少ない作業を行うようにしてください。 |
| Render/PreRender/RunService.RenderStepped | RunService.RenderSteppedイベントに接続された関数を実行します。 | このイベントに接続された関数ができるだけ少ない作業を行うようにしてください。 |
| WaitingHybridScriptJob | Instance:WaitForChild()またはGlobals.Roblox.wait()を使用して待機しているスクリプトを再開します。通常、1秒間に30回実行されます。このステップには、待機中のスクリプトを実行するための時間制限があります。 | 待機中のスクリプトが多すぎるか、長い実行時間を持つスクリプトがある場合、このステップは制限され、再度実行できるまでに長く待機します。バインドされた関数やこのステップで実行される長い計算の数を減らしてください。 |
| GC | Luauのガーベジコレクションサイクル。 | テーブルやその他の収集可能なオブジェクトをプールするか、一時テーブルの作成を減らしてください。 |
| Heartbeat/RunService.Heartbeat | RunService.Heartbeatイベントに接続された関数を実行します。 | このイベントに接続された関数の数または作業負荷を減らしてください。高価な計算を遅延させたり、置き換えたり、計算を複数のフレームに分散させることを検討してください。 |
シミュレーション
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Distributed Physics Ownership | サーバーまたはクライアントが、パーツなどの特定のインスタンスに対して権限を持つかどうかを決定します。 | ネットワーク所有権が頻繁に切り替わるパーツの数を減らしてください。特に、一般的なインタラクションを持つものに注意してください。 |
| Simulation/assemble | 物理エンジンで使用される接続オブジェクトのツリー(アセンブリ)を更新します。 | 作成または破棄されるジョイントの数を減らしてください。 |
| Simulation/physicsSteppedTotal/physicsStepped | 物理シミュレーションを実行します。 | 物理シミュレートされたボディの数と複雑さを減らしてください。 |
| Simulation/physicsSteppedTotal/physicsStepped/SpatialFilter/filterStep | シミュレーションアイランドを更新し、ネットワーク所有権やローカルシミュレーションに応じてパーツを配置します。アイランドは、独立してシミュレートできる非相互作用のパーツ群です。 | ネットワーク所有権を頻繁に設定しないでください。パーツのグループが十分に離れていることを確認して、別々にシミュレートできるようにしてください。 |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepContacts | オブジェクト間の接触を更新します。 | 同時に衝突するボディの数を減らすか、シンプルな衝突ボックスを使用してください。キューブは複雑なメッシュよりも優れています。 |
| Simulation/physicsSteppedTotal/physicsStepped/worldStep/stepWorld OR stepWorldThrottled | コネクタ、浮力、Humanoidsに関連する物理方程式を解決します。エンジンが過負荷になり、すべてをリアルタイムでシミュレートできない場合、いくつかのステップが制限され(stepWorldThrottled)、Humanoidsなどの「リアルタイムアセンブリ」だけがシミュレートされます。 | 以下の3つのフェーズに基づいて時間がどのように消費されるかによります。stepContacts: ナローフェーズの衝突検出ジオメトリテスト。Solver step: 時間を統合し、衝突や他の制約を解決する。updateBroadphase: 衝突検出システム内のアセンブリの位置を更新し、ナローフェーズペアを見つけます。 |
| notifyMovingAssemblies | プリミティブがスリープしている時間を追跡するのに役立ちます。 | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | 現在のプレイヤーによって制御されていないアセンブリを補間します。 | このために、パーツのネットワーク所有者を現在のプレイヤーに設定してください。ただし、これにより他の場所でより多くの物理作業が必要になる場合があります。 |
| Simulation/handleFallenParts | Workspace.FallenPartsDestroyHeightを下回ったパーツを取り除きます。 | 破壊高さを下げるか、破壊高さに落下するパーツの数を減らしてください。 |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | notifyMovingAssembliesの第二部。 | |
| Heartbeat/RunService.Heartbeat | シミュレーションおよびスクリプトの接触に関連するRunService.Heartbeatイベントに接続された関数を実行します。現在の説明は一般的すぎるため、間違いではありません。 | RunService.Heartbeatに接続された関数の数または作業負荷を減らしてください。 |
| worldStep/stepContacts | 物理シミュレーションステップで多くの接触を処理するのに役立ちます。 | 衝突するオブジェクトの数を減らしてください。 |
| SolveBatch | 物理シミュレーションがオブジェクトの動きを解決するのを手伝います。 |
UI
| ラベル | 説明 | パフォーマンスアドバイス |
|---|---|---|
| Render/PreRender/UpdateInput | ユーザーが前のフレーム以降に入力した場合、すべてのユーザー入力関連のイベントを更新して発火します。 | 入力を取得する際に過度の作業を行わないようにしてください。入力に対して最小限の処理を行い、より大きな計算は後で発生する別のスレッドにオフロードすることを検討してください。 |
| Render/PreRender/TweenService | TweenServiceを使用して補間中のオブジェクトを更新し、GuiObject:TweenSize()やGuiObject:TweenPosition()に提供される完了コールバックを呼び出します。 | TweenServiceを使用して補間中のオブジェクトの数を減らし、コールバックができるだけ少ない作業を行うようにしてください。 |
| Heartbeat/TweenService | サーバーでは、TweenServiceはRunService.Heartbeatで実行され、RunService.PreRenderでは実行されません。 | TweenServiceを使用して補間中のオブジェクトの数を減らし、コールバックができるだけ少ない作業を行うようにしてください。 |
| Render/PreRender/UpdateUILayouts | すべての有効なLayerCollectorsに対してUI要素の位置とサイズを更新します。 | 以下のUpdateUILayoutsラベルを参照してください。 |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | UI要素のZ順をソートします(内部用語で、GuiObject.ZIndexと混同しないでください)。UI要素のティアリングを防ぎます。 | 同じGuiObject.ZIndexを持つUI要素の数を減らしてください。 |
| Render/PreRender/UpdateUILayouts/Layout | 個別のLayerCollector内のUI要素の位置とサイズを更新します。関連するUIに関する情報およびリレイアウト、アップデート、リサイズの数を示すラベルを含むことがあります。 | UILayoutで管理される要素や、TweenService、GuiObject:TweenSize()、GuiObject:TweenPosition()で補間されるもののサイズ変更や再配置の数を減らしてください。BillboardGuisの固定サイズを使用することを検討してください。 |