시작하기
언리얼 엔진의 메시 텍스쳐 컬러(Mesh Texture Color)를 인스턴스 당 칠하는 버텍스 컬러 대신 사용하는 게 좋을 것 같습니다.
언리얼 엔진에서는 스태틱 메시 인스턴스별로 버텍스 컬러를 칠할 수 있는 기능이 있습니다. 하지만 인스턴스 별로 버텍스 컬러를 칠하는 것은 몇 가지 문제점을 가질 수 있습니다.
- UE5.6 기준 나나이트 메시는 더 이상 컴포넌트 단위 버텍스 컬러를 지원하지 않습니다. 메시 에셋 자체는 버텍스 컬러를 가지고 있을 수 있지만 인스턴스 당 다른 버텍스 컬러를 가질 수 없습니다.
- 비나나이트 메시 인스턴스가 버텍스 컬러 데이터를 가지고 있을 때 버텍스 컬러 데이터의 크기는 메시의 버텍스 갯수에 비례합니다.
- 따라서 버텍스 컬러 데이터만 개별적으로 스케일링하기가 어렵습니다.
- 이런 점은 런타임 VRAM 메모리 관리에 제약을 줍니다. VRAM이 부족해도 버텍스 컬러가 칠해진 총 버텍스 갯수만큼 버텍스 컬러 데이터가 VRAM에 올라와야 합니다.
- 이런 점은 버텍스 컬러 데이터에 할애해야하는 패키지 용량도 조절이 어렵습니다. 버텍스 컬러가 칠해진 총 버텍스 갯수만큼 버텍스 컬러 데이터가 패키지에 저장되어야 합니다. (인스턴스에 오버라이드 된 버텍스 컬러 데이터는 컴포넌트에 저장되기 때문에 예상컨대 OFPA에 저장되지 않을까 싶습니다.)
- 버텍스 컬러가 칠해진 스태틱 메시 컴포넌트는 인스턴싱이 되지 않습니다. 별도의 드로우콜이 호출됩니다.
버텍스 컬러는 언뜻보면 편리하나 위와 같은 이유로 언리얼 엔진에서는 인스턴스 별로 버텍스 컬러를 칠하는 것이 좋은 선택지가 되지 못할 때가 있습니다. 근데 최근에 메시 텍스쳐 컬러(Mesh Texture Color)라는 버츄얼 텍스쳐 기반 시스템이 도입되었습니다.
버텍스 컬러를 그래도 사용하고자 한다면
그래도 비나나이트 메시로 (혹은 다른 종류의 엔진에서도 인스턴스 당 버텍스 컬러 데이터 구조는 비슷할 것으로 예상하기 때문에) 인스턴스 당 버텍스 컬러를 사용하고자 할 때는 아래와 같은 사항을 유념하고 사용하는 게 좋습니다.
- 버텍스 갯수가 많은 메시에는 사용하지 않습니다. 버텍스 갯수가 많은 메시는 버텍스 컬러 데이터의 양도 많아야 하므로 주의합니다.
- 버텍스 컬러를 칠하는 스태틱 메시 컴포넌트의 갯수를 최대한 적게 유지합니다. 버텍스 컬러 데이터 양과 인스턴싱을 위해서입니다.
UE5의 메시 텍스쳐 컬러(Mesh Texture Color)
UE5.5에 메시 텍스쳐 컬러(Mesh Texture Color) 기능이 도입되었습니다.
주요 특징은 아래와 같습니다.
- 버텍스 컬러처럼 스태틱 메시 컴포넌트 별로 메시에 컬러 데이터를 페인팅 해 저장할 수 있습니다.
- 메시 페인트 텍스쳐를 샘플링하는 방식으로 머테리얼에서 사용 가능합니다.

- 버츄얼 텍스쳐에 데이터를 저장하고 버츄얼 텍스쳐 풀에서 관리됩니다.
- 텍스쳐 크기를 조절할 수 있습니다. 프로젝트 세팅에서 전역적으로 조절도 가능하고 메시 에셋에서 뿐만 아니라 인스턴스 당 조절도 가능합니다. 디바이스별 스케일링, 동적인 스케일링도 물론 가능합니다.
- 따라서 패키지 용량 관리에 용이합니다. 특히 버텍스가 많은 메시에 해상도가 높지 않은 텍스쳐를 사용할 경우 버텍스 컬러보다 적은 용량을 사용합니다.
- 텍스쳐는 메시 인스턴스에 저장됩니다. 단, 버텍스 데이터를 변경하진 않으므로 인스턴싱이 됩니다. 드로우콜이 통합됩니다.
버텍스 컬러를 다르게 칠했을 때 | 메시 텍스쳐 컬러를 다르게 칠했을 때 |
---|
 |  |
단 아래와 같은 점들을 주의해야 합니다
- 렌더링 관점에선 버텍스 컬러가 훨씬 유리합니다. 버텍스 컬러는 버텍스 셰이더에서 그 정보를 읽어오지만 텍스쳐는 픽셀 셰이더에서 읽어와야합니다. Vertices fetch는 texture fetch 보다 훨씬 가볍습니다.
- 다만 버텍스가 많아질수록 버텍스 컬러 정보를 읽어들이는 과정도 무거워집니다.
- 텍스쳐이므로 메시 UV의 영향을 받습니다. UV가 겹치면 겹친대로 텍스쳐가 맵핑됩니다. 별도의 UV가 필요할 수도 있으며 이는 추가적인 데이터를 의미합니다.
결론
- 메모리 관리와 스케일링이 더 중요할 것으로 판단되는 경우 메시 텍스쳐 컬러 사용을 고려해보는 것이 좋을 것 같습니다.
- 렌더링 최적화를 원한다면 버텍스 컬러를 사용하는 것이 좋습니다.
참고 페이지