다음은 MicroProfiler에서 카테고리별로 그룹화된 일반 태그 목록입니다. 태그는 작업, 타이머, 스코프, 프로세스 및 레이블이라고도 불립니다. 이름에 관계없이, 이들은 작업 단위를 나타냅니다.
이러한 태그를 이해하면 게임 내 문제 코드 식별에 도움이 될 수 있습니다. 표에는 태그 레이블, 설명 및 성능 개선 및 게임 최적화를 위한 조언이 포함되어 있습니다.
수면
스레드가 활동적으로 작업을 수행하지 않을 때, 스레드는 수면 상태로 들어가며 스레드가 얼마나 오랫동안 수면 상태에 있었는지를 나타내는 태그가 있습니다. 특정 시간에 대부분의 작업자 스레드가 수면 상태에 있는 것은 매우 일반적입니다.
내비게이션
| 레이블 | 설명 | 성능 조언 |
|---|---|---|
| rasterizeTile | 경로 찾기 요청에 필요한 내비게이션 타일을 업데이트합니다. 보통은 해당 타일이 최신 상태여야 하는 computePath가 뒤따릅니다. 메인 스레드에서 NavigationJob/preprocess를 따릅니다. | 경로 찾기 타일 무효화를 줄이십시오. 이는 이동하는 비내비게이션 부분으로 인해 발생합니다. |
| computePath | 경로를 계산합니다. 일반적으로 rasterizeTile 이후에 실행됩니다. | Path:ComputeAsync() 호출의 수와 월드 범위를 줄이십시오. 유사한 위치에서 시작/종료할 것으로 예상되는 경우 여러 에이전트에 대해 경로를 재사용하려고 하십시오. |
| preprocess/getPrimitivesOverlapping | 각 경로 찾기 타일에 대한 세계 기하학을 수집하고 내비게이션 스레드에서 실행할 레스터화 작업을 예약합니다. | 부분 수를 줄이십시오. |
애니메이션 및 휴머노이드
| 레이블 | 설명 | 성능 조언 |
|---|---|---|
| Simulation/gameStepped | Humanoids, Animations 및 심장 박동 콜백과 같은 게임 특정 개체의 처리를 나타냅니다. | 아래 gameStepped 레이블을 참조하십시오. |
| Simulation/gameStepped/stepHumanoid | Humanoid 상태 변경 및 이동을 나타냅니다. | 필요하지 않은 NPC에 대해 Humanoid 상태를 비활성화하거나 Humanoids 수를 줄이십시오. Climbing 또는 Swimming과 같은 상태를 줄이고, 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 렌더링을 준비합니다 (플레이어 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()를 사용하여 대기 중인 스크립트를 재개합니다. 일반적으로 초당 30회 수행됩니다. 이 단계에는 대기 중인 스크립트를 실행하기 위한 실행 시간 예산이 있습니다. | 대기 중인 스크립트나 Yield 전에 실행 시간이 긴 스크립트가 너무 많으면, 이 단계는 제한되고 다시 실행되기까지 오랜 시간이 걸립니다. 이 단계에서 바인딩된 함수나 긴 계산의 수를 줄이십시오. |
| 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) "실시간 어셈블리"만 시뮬레이션됩니다. | 시간이 어디로 가는지에 따라 세 가지 단계에 따라 다릅니다: 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()와 같이 제공된completion 콜백을 호출합니다. | TweenService를 사용하여 애니메이션 처리 중인 객체 수를 줄이고 콜백이 가능한 한 적은 작업을 수행하도록 하십시오. |
| Heartbeat/TweenService | 서버에서 TweenService는 RunService.Heartbeat에서 실행되며 RunService.PreRender에서는 실행되지 않습니다. | TweenService를 사용하여 애니메이션 처리 중인 객체 수를 줄이고 콜백이 가능한 한 적은 작업을 수행하도록 하십시오. |
| Render/PreRender/UpdateUILayouts | 모든 활성화된 LayerCollectors의 UI 요소에 대한 위치와 크기를 업데이트합니다. | 아래 UpdateUILayouts 레이블을 참조하십시오. |
| Render/PreRender/UpdateUILayouts/Rebuild Z-order list | UI 요소의 Z-순서를 정렬하여 UI 요소의 찢어짐을 방지합니다 (내부 용어로 GuiObject.ZIndex와 혼동하면 안 됩니다). | 같은 GuiObject.ZIndex를 가진 UI 요소의 수를 줄이십시오. |
| Render/PreRender/UpdateUILayouts/Layout | 개별 LayerCollector의 UI 요소에 대한 위치와 크기를 업데이트합니다. 관련 UI에 대한 정보와 함께 리레이아웃, 업데이트 및 리사이즈 수에 대한 레이블을 포함할 수 있습니다. | UILayout에 의해 관리되는 애니메이션 처리 중인 UI 요소(예: TweenService, GuiObject:TweenSize(), 또는 GuiObject:TweenPosition())의 크기를 줄이거나 재배치하십시오. BillboardGuis에 대해 고정 크기를 사용하는 것을 고려하십시오. |