텍스처 메모리가 성능에 영향이 크다는 루머는 도는데
아무리 찾아봐도 뇌피셜로 그럴것이다하는 추측성 자료들만 존재하고
얼마나 성능에 영향을 주는지 테스트한 자료가 전혀 보이지 않아서 테스트 해보았다
사용된 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TextureMemoryTest : MonoBehaviour
{
public Renderer renderTarget;
public Texture[] textures;
public int max = 800;
public bool useTexture = false;
// Start is called before the first frame update
void Start()
{
var wid = (int)Mathf.Sqrt(textures.Length);
var i = 0;
foreach (var texture in textures)
{
var instance = Instantiate(renderTarget.gameObject);
if (useTexture)
{
instance.GetComponent<Renderer>().material.SetTexture("_MainTex", texture);
}
var x = i % wid;
var y = i / wid;
instance.transform.position = new Vector3(x * 0.5f, y * 0.5f, i * 0.01f);
i++;
if (i>max)
{
return;
}
}
renderTarget.gameObject.SetActive(false);
}
}
-테스트 환경-
CPU : 라이젠 5 1600
메모리 : 32GB 1333Mhz
GPU : RTX 3050 8GB
4k~8k 텍스처 800장 사용
사용된 텍스처 메모리는 14GB
있긴 있는데 무시해도 될정도로 작다
밉맵에 걸려서 그런지 드라이버 단에서 로드를 막는건지
텍스처 메모리는 그래픽 카드 메모리의 2배나 됨에도 불구하고
문제가 전혀 발생하지 않는다
처리량이 최소인 언릿에서도 별 차이 없는데
라이트 처리가 들어가는 스탠다드나 툰쉐이더등에서는 차이가 더 적을것이다
오히려 저 많은 텍스처들을 띄우느라 드로우콜이 엄청나게 늘어나는 바람에
일부러 바보같이 프래그단에서 tex2D함수를 수십번씩 호출하거나 밉맵 다 끄고 쓰거나 카메라 바로앞에 캐릭터가 1000명 서있거나 하지 않는이상이야
일반적인 상황에서는 버텍스와 드로우콜, 쉐이더만 신경 쓰면 될것이다
끝
게임개발자는 다들 이론적으로는 알고있어서 아무래도 좋을 이야기지만
vrchat에서 논란이 되길래 테스트 해봄
이렇게 복잡하게 생각할 필요없이 그렇게 중요한 요소였으면
유니티측에서 Stats탭에 드로우콜과 함께 텍스처 메모리도 같이 표시해줬을것이다(...)
이렇게까지 해줘도 못 믿는 사람들 있을거 같아서
직접 눈으로 볼 수 있도록
아래에 4k텍스처로 도배한 캐릭터들을 세워둔 월드도 공개했다
https://vrchat.com/home/world/wrld_10abac1c-0493-4822-9426-e0f1a5eeedd3
#태그
텍메 최적화 VRChat
'게임 > VRChat' 카테고리의 다른 글
VRChat 아바타 업로드 2024 (0) | 2024.02.28 |
---|---|
VRChat 아에이오우만으로 립싱크 설정 (0) | 2024.01.20 |
부스 출시전 검토 사항 (0) | 2024.01.13 |