다음은 MicroProfiler에서 카테고리별로 그룹화된 일반 태그 목록입니다. 태그는 작업, 타이머, 범위, 프로세스 및 레이블이라고도 불립니다. 이름이 무엇이든, 이들은 작업 단위를 나타냅니다.
이 태그를 이해하면 게임에서 문제 있는 코드를 식별하는 데 도움이 될 수 있습니다. 표에는 태그 레이블, 설명 및 성능 개선 및 최적화에 대한 조언이 포함되어 있습니다.
수면
스레드가 작업을 수행하지 않을 때, 스레드는 수면 상태에 들어가며, 스레드가 얼마나 오랫동안 수면 상태였는지를 나타내는 태그가 있습니다. 주어진 시간에 대부분의 작업 스레드가 수면 상태에 있는 것은 매우 일반적입니다.
내비게이션
| 레이블 | 설명 | 성능 조언 |
|---|---|---|
| rasterizeTile | 경로 찾기 요청에 필요한 내비게이션 타일을 업데이트하며, 일반적으로 이러한 타일이 최신 상태여야 하는 computePath가 뒤따릅니다. 메인 스레드에서 NavigationJob/preprocess를 따릅니다. | 경로 찾기 타일 무효화 수를 줄이십시오. 이는 이동하는 비내비게이션 부분으로 인해 발생합니다. |
| computePath | 일반적으로 rasterizeTile 이후에 경로를 계산합니다. | Path:ComputeAsync() 호출의 수와 월드 범위를 줄이십시오. 비슷한 위치에서 시작/종료할 것으로 예상되는 여러 에이전트에 대해 경로를 재사용해 보십시오. |
| preprocess/getPrimitivesOverlapping | 각 경로 찾기 타일에 대한 월드 기하학을 수집하고 경로 찾기 스레드에서 실행될 래스터화 작업을 예약합니다. | 부품 수를 줄이십시오. |
애니메이션 및 휴머노이드
| 레이블 | 설명 | 성능 조언 |
|---|---|---|
| Simulation/gameStepped | Humanoids, Animations 및 심장 박동 콜백과 같은 게임 특정 객체의 처리입니다. | 아래의 gameStepped 레이블을 참조하십시오. |
| Simulation/gameStepped/stepHumanoid | Humanoid 상태 변경 및 이동입니다. | Humanoids의 수를 줄이거나 필요하지 않은 NPC의 Humanoid 상태를 비활성화하십시오. 예를 들어 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 렌더링(플레이어 및 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회 수행됩니다. 이 단계는 대기 중인 스크립트를 실행하기 위한 실행 시간 예산이 있습니다. | 대기 중인 스크립트가 너무 많거나 양보하기 전에 긴 실행 시간을 가진 스크립트가 있는 경우, 이 단계는 제한되고 다시 실행될 때까지 더 오래 기다립니다. 이 단계에서 바인딩된 함수나 긴 계산의 수를 줄이십시오. |
| 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만 시뮬레이션됩니다. | 시간이 어디에 가는지에 따라 다음 세 단계에 따라 다릅니다: stepContacts: 좁은 단계 충돌 감지 기하학 테스트. Solver step: 시간을 통합하고 충돌 및 기타 제약 조건을 해결합니다. updateBroadphase: 충돌 감지 시스템에서 어셈블리의 위치를 업데이트하고 좁은 단계 쌍을 찾습니다. |
| notifyMovingAssemblies | 프리미티브가 얼마나 오랫동안 수면 상태였는지를 추적하는 데 도움이 됩니다. | |
| Simulation/physicsSteppedTotal/physicsStepped/interpolateNetworkedAssemblies | 현재 플레이어가 제어하지 않는 어셈블리를 보간합니다. | 부품의 네트워크 소유자를 현재 플레이어로 설정하여 이를 줄이십시오. 그러나 이는 일반적으로 다른 곳에서 더 많은 물리 작업을 수행하게 할 수 있습니다. |
| Simulation/handleFallenParts | Workspace.FallenPartsDestroyHeight 아래로 떨어진 부품을 제거합니다. | 파괴 높이를 낮추거나 파괴 높이로 떨어지는 부품의 수를 줄이십시오. |
| Heartbeat/heartbeatInternal/workspaceOnHeartbeat/updateVisuallySleeping | notifyMovingAssemblies의 두 번째 부분입니다. | |
| 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-순서 목록을 재구성합니다. | 첫 번째 렌더링 전에 LayerCollectors의 UI 요소 수를 줄이고, 내부의 UI 요소의 부모 및 GuiObject.ZIndex를 자주 변경하지 않도록 하십시오. LayerCollector에 요소가 많을수록 성능이 저하됩니다. |
| Render/PreRender/UpdateUILayouts/Layout | 개별 LayerCollector에서 UI 요소의 위치와 크기를 업데이트합니다. 관련 UI에 대한 정보와 함께 재배치, 업데이트 및 크기 조정의 수를 포함하는 레이블을 포함할 수 있습니다. | UILayout에 의해 관리되는 UI 요소나 TweenService, GuiObject:TweenSize(), 또는 GuiObject:TweenPosition()로 트윈되는 요소의 크기 조정 또는 재배치 수를 줄이십시오. BillboardGuis에 대해 고정 크기를 사용하는 것을 고려하십시오. |