以下は、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 | フラスタムカリングを適用し、表示されないオブジェクトがレンダリングされないようにします。 | コストが高い場合は、多くの要素があることを意味します。単一のメッシュが多くの詳細を持つ場合は、いくつかの大きなメッシュを使用することを検討してください。 |
| 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 | パーティクルの位置と境界を更新します。 | ParticleEmitters、放出率、寿命などの数を減らしてください。エミッターの移動を制限してください。 |
| 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の第2部。 | |
| 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 | 最初のレンダリング時または新しい要素が追加、削除、またはGuiObject.ZIndexが変更されたときに、UI要素の内部Zオーダーリストを再構築します(GuiObject.ZIndexと混同しないでください)。 | 最初のレンダリング前にLayerCollectors内のUI要素の数を減らし、頻繁に親やGuiObject.ZIndexを変更しないでください。LayerCollectorが持つ要素が多いほど、パフォーマンスが悪化します。 |
| Render/PreRender/UpdateUILayouts/Layout | 個々のLayerCollector内のUI要素の位置とサイズを更新します。関連するUIに関する情報や、リレイアウト、更新、リサイズの数を含むラベルを含むことがあります。 | UILayoutによって管理されるものや、TweenService、GuiObject:TweenSize()、またはGuiObject:TweenPosition()で補間されるものなど、サイズ変更または再配置されるUI要素の数を減らしてください。BillboardGuisに固定サイズを使用することを検討してください。 |