렌더링 프로파일러는 씬 렌더링을 위해 CPU 및 GPU가 수행하는 작업에 대한 렌더링 통계 및 정보를 표시합니다. 이러한 통계를 사용하면 씬의 여러 영역에 대한 리소스 소모량을 측정할 수 있으므로, 최적화에 유용합니다.
차트에는 애플리케이션이 렌더링한 배치, SetPass 호출, 렌더링된 삼각형 및 버텍스의 숫자가 표시됩니다. 하단 창에는 GameView Rendering Statistics 창에 표시되는 통계와 일치하는 추가 렌더링 통계가 표시됩니다.
렌더링 프로파일러 모듈의 차트는 다음의 네 개 카테고리로 구성됩니다.
차트 | 설명 |
---|---|
Batches Count | Unity가 프레임 1개 중 처리한 배치 수입니다. |
SetPass Calls Count | Unity가 프레임 동안 게임 오브젝트 렌더링에 사용된 셰이더 패스를 전환한 횟수입니다. 셰이더에는 여러 셰이더 패스가 포함될 수 있으며, 각 패스는 씬에서 게임 오브젝트를 다른 방식으로 렌더링합니다. |
Triangles Count | Unity가 프레임 1개 중 처리한 삼각형 수입니다. |
Vertices Count | Unity가 프레임 1개 중 처리한 버텍스 수입니다. |
Rendering Profiler 모듈을 클릭하면 창 하단의 세부 정보 창에 자세한 렌더링 통계가 표시됩니다. 이 통계는 Rendering Statistics 창에 표시되는 통계와 비슷합니다.
세부 정보 창의 왼쪽 상단에서 Open Frame Debugger를 선택하여 프레임 디버거를 엽니다. 여기에는 프레임을 렌더링한 개별 드로우 콜의 정보가 나와 있습니다.
이러한 통계는 ProfilerRecorder API 및 프로파일러 모듈 에디터를 통해서도 제공되므로 커스텀 프로파일러 모듈에 추가할 수 있습니다.
통계 | 설명 | 릴리스 플레이어에서 액세스 가능 |
---|---|---|
SetPass Calls Count | Unity가 프레임 동안 게임 오브젝트 렌더링에 사용된 셰이더 패스를 전환한 횟수입니다. 셰이더에는 여러 셰이더 패스가 포함될 수 있으며, 각 패스는 씬에서 게임 오브젝트를 다른 방식으로 렌더링합니다. | 지원 |
Draw Calls Count | 프레임 동안 Unity가 실행한 총 드로우 콜 횟수입니다. Unity는 게임 오브젝트를 화면에 렌더링할 때 드로우 콜을 실행합니다. 이 횟수에는 배칭되지 않은 드로우 콜과 동적 및 정적 배칭된 드로우 콜이 포함됩니다. | 지원 |
Total Batches Count | Unity가 프레임 1개 중 처리한 총 배치 수입니다. 이 값에는 정적 배치와 동적 배치가 포함됩니다. | 지원 |
Triangles Count | Unity가 프레임 1개 중 처리한 삼각형 수입니다. | 지원 |
Vertices Count | Unity가 프레임 1개 중 처리한 버텍스 수입니다. | 지원 |
(동적 배칭) | 이 섹션에는 동적 배칭에 대한 통계가 포함되어 있습니다. | 지원 안 함 |
Dynamic Batched Draw Calls Count | Unity가 동적 배치로 결합한 드로우 콜 수입니다. | 지원 안 함 |
Dynamic Batches Count | 프레임 동안 Unity가 처리한 동적 배치 수입니다. | 지원 안 함 |
Dynamic Batched Triangles Count | 동적 배치에 포함된 게임 오브젝트의 삼각형 수입니다. | 지원 안 함 |
Dynamic Batched Vertices Count | 동적 배치에 포함된 게임 오브젝트의 버텍스 수입니다. | 지원 안 함 |
Dynamic Batching Time | Unity가 동적 배칭 구조를 생성하는 데 소비한 시간입니다. | 지원 안 함 |
(정적 배칭) | 이 섹션에는 정적 배칭에 대한 통계가 포함되어 있습니다. | 지원 안 함 |
Static Batched Draw Calls Count | Unity가 정적 배치로 결합한 드로우 콜 수입니다. | 지원 안 함 |
Static Batches Count | 프레임 동안 Unity가 처리한 정적 배치 수입니다. | 지원 안 함 |
Static Batched Triangles Count | 정적 배치에 포함된 게임 오브젝트의 삼각형 수입니다. | 지원 안 함 |
Static Batched Vertices Count | 정적 배치에 포함된 게임 오브젝트의 버텍스 수입니다. | 지원 안 함 |
(인스턴싱) | 이 섹션에는 GPU 인스턴싱에 대한 통계가 포함되어 있습니다. | 지원 안 함 |
Instanced Batched Draw Calls Count | Unity가 인스턴스 배치로 결합한 드로우 콜 수입니다. | 지원 안 함 |
Instanced Batches Count | Unity가 프레임 1개 중 인스턴스화 게임 오브젝트를 렌더링하기 위해 처리한 배치 수입니다. | 지원 안 함 |
Instanced Batched Triangles Count | 인스턴스화된 게임 오브젝트의 삼각형 수입니다. | 지원 안 함 |
Instanced Batched Vertices Count | 인스턴스화된 게임 오브젝트의 버텍스 수입니다. | 지원 안 함 |
Used Textures Count Used Textures Bytes |
Unity가 프레임 중 사용한 텍스처 수와 텍스처가 사용한 메모리 용량입니다. | 지원 안 함 |
Render Textures Count Render Textures Bytes |
Unity가 프레임 중 사용한 렌더 텍스처 수와 렌더 텍스처가 사용한 메모리 용량입니다. | 지원 |
Render Textures Changes Count | 프레임 동안 Unity가 렌더링 타겟으로 하나 또는 여러 개의 렌더 텍스처를 설정한 횟수입니다. | 지원 |
Used Buffers Count Used Buffers Bytes |
사용된 총 GPU 버퍼 수와 메모리 양입니다. 여기에는 버텍스, 인덱스 및 컴퓨팅 버퍼와 렌더링에 필요한 모든 내부 버퍼가 포함됩니다. | 지원 |
Vertex Buffer Upload In Frame Count Vertex Buffer Upload In Frame Bytes |
프레임에서 CPU가 GPU에 업로드한 지오메트리 양입니다. 이는 vertex/normal/texcoord 데이터를 나타냅니다. GPU에 일부 지오메트리가 이미 있을 수 있습니다. 이 통계는 프레임에서 Unity가 전송하는 지오메트리만 포함합니다. | 지원 |
Index Buffer Upload In Frame Count Index Buffer Upload In Frame Bytes |
프레임에서 CPU가 GPU에 업로드한 지오메트리 양입니다. 이는 삼각형 인덱스 데이터를 나타냅니다. GPU에 일부 지오메트리가 이미 있을 수 있습니다. 이 통계는 프레임에서 Unity가 전송하는 지오메트리만 포함합니다. | 지원 |
Shadow Casters Count | 프레임에서 그림자를 드리우는 게임 오브젝트 수입니다. 여러 광원으로 인해 게임 오브젝트가 여러 개의 그림자를 드리우는 경우 드리우는 그림자당 하나의 항목으로 표시됩니다. | 지원 |
렌더링 모듈 프로파일러 카운터는 플레이어에서도 이용할 수 있습니다. ProfilerRecorder API를 사용하여 플레이어의 렌더 프로파일러 모듈 정보에 액세스하십시오. 고수준 카운터는 릴리스 플레이어에서도 제공됩니다.
다음 예제에는 “SetPass Calls Count”, “Draw Calls Count” 및 “Vertices Count” 지표를 수집하고 이를 TextArea로 표시하는 간단한 스크립트가 포함되어 있습니다.
using System.Text;
using Unity.Profiling;
using UnityEngine;
public class RenderStatsScript : MonoBehaviour
{
string statsText;
ProfilerRecorder setPassCallsRecorder;
ProfilerRecorder drawCallsRecorder;
ProfilerRecorder verticesRecorder;
void OnEnable()
{
setPassCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "SetPass Calls Count");
drawCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "Draw Calls Count");
verticesRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "Vertices Count");
}
void OnDisable()
{
setPassCallsRecorder.Dispose();
drawCallsRecorder.Dispose();
verticesRecorder.Dispose();
}
void Update()
{
var sb = new StringBuilder(500);
if (setPassCallsRecorder.Valid)
sb.AppendLine($"SetPass Calls: {setPassCallsRecorder.LastValue}");
if (drawCallsRecorder.Valid)
sb.AppendLine($"Draw Calls: {drawCallsRecorder.LastValue}");
if (verticesRecorder.Valid)
sb.AppendLine($"Vertices: {verticesRecorder.LastValue}");
statsText = sb.ToString();
}
void OnGUI()
{
GUI.TextArea(new Rect(10, 30, 250, 50), statsText);
}
}
렌더링 프로파일러 모듈 정보는 ProfilerCategory.Render 프로파일러 카테고리에 속합니다.
커스텀 모듈에서 선택된 렌더링 카운터를 강조 표시하려면 모듈 에디터를 사용하여 차트와 세부 정보 뷰를 설정하십시오.