[최적화] Automatic quality settings
Unity3D/Script / 2024. 1. 19. 14:29
Unity 2021.3.33f1
----
앱 최초 실행 시, 최적화를 위해 그래픽 품질 관련 자동 설정하는 기능을 찾아보다 적용하고 올려 둠.
참조한 글을 보니 기본적으로 유니티 SystemInfo에서 지원하는 하드웨어 스펙을 보고 판단해서 Quality Level을 메기고 있다.
해당 레벨은 Unity의 UnityEngine.QualityLevel을 참조하고 있어서 대응 하는 enum을 추가(eQualityLevel)하고,
60프레임을 사용하기 위해 해당 부분 값만 수정했다.
필요할 때 AutoChooseQualityLevel()을 호출하고, 반환 받은 eQualityLevel 값에 따라 원하는 설정을 적용해주면 된다.
/// <summary>
/// UnityEngine.QualityLevel에 대응하는 enum
/// </summary>
public enum eQualityLevel : int
{
Fastest,
Fast,
Simple,
Good, // [참고] PC(i7-10700/64GB/RTX3700)에서 Good 나옴
Beautiful,
Fantastic
}
private eQualityLevel AutoChooseQualityLevel()
{
Debug.Assert(Enum.GetNames(typeof(QualityLevel)).Length == Enum.GetNames(typeof(eQualityLevel)).Length, "Please update eQualityLevel to the new quality levels.");
var shaderLevel = SystemInfo.graphicsShaderLevel;
var cpus = SystemInfo.processorCount;
var vram = SystemInfo.graphicsMemorySize;
var fillrate = 0;
// ShaderLevel
if (shaderLevel < 10)
fillrate = 1000;
else if (shaderLevel < 20)
fillrate = 1300;
else if (shaderLevel < 30)
fillrate = 2000;
else
fillrate = 3000;
// CPU Count
if (6 <= cpus)
fillrate *= 3;
else if (3 <= cpus)
fillrate *= 2;
// VRam
if (512 <= vram)
fillrate *= 2;
else if (vram <= 128)
fillrate /= 2;
var resx = Screen.width;
var resy = Screen.height;
var target_fps = 60.0f; // 현재 게임의 타겟 프레임에 맞게 설정
var fillneed = (resx * resy + 400f * 300f) * (target_fps / 1000000.0f);
// Change the values in levelmult to match the relative fill rate
// requirements for each quality level.
var levelmult = new float[] { 5.0f, 30.0f, 80.0f, 130.0f, 200.0f, 320.0f };
const int max_quality = (int)eQualityLevel.Fantastic;
var level = 0;
while (level < max_quality && fillneed * levelmult[level + 1] < fillrate)
++level;
var quality = (eQualityLevel)level;
Debug.Log(string.Format("{0}x{1} need {2} has {3} = {4} level", resx, resy, fillneed, fillrate, quality.ToString()));
return quality;
}
P.s. 참조 글 중에 에셋도 적혀있긴한데 사서 써보진 않음.
[참조] https://stackoverflow.com/questions/20978106/automatic-quality-settings/20978462#20978462
[참조] https://discussions.unity.com/t/auto-detect-quality-settings/24351
반응형
'Unity3D > Script' 카테고리의 다른 글
[펌] OcclusionCulling2D (0) | 2024.03.14 |
---|---|
[펌] GameQualitySettings (0) | 2024.01.19 |
[ChatGPT] Multi-Key Dictionary in Unity? (0) | 2023.08.07 |
[Build] 빌드 시, Builtin 되는 AssetBundle 중 현재 Platform의 AssetBundle만 빌트인 되도록 하기 (0) | 2023.01.18 |
[링크] 유니티 - Scripting Define Symbol 스크립트로 제어하기 (0) | 2022.07.20 |