🖌️ Mesh Paint 툴의 확장
언리얼 5.5 부터 Mesh Paint 툴이 확장되어 메시 구성 요소에 저장된 Virtual texture에 페인팅하는 새로운 텍스처 색상 페인팅 모드가 추가되었다. 기존의 Vertex 페인팅과 유사한 워크플로우를 지원하지만 Vertex 수 대신 텍스처 해상도에 따라 확장되므로 Nanite 메시에서 더 효율적으로 작동한다. 또한 Vertex와 Texture 색상 페인팅 간 복사 지원이 추가되어 페인팅하는 동안 Texture 색상을 Vertex 색상으로 자동 전파하는 옵션이 추가되었다.
🖌️ Mesh Painting이란?
Mesh Painting은 메시의 각 Vertex(꼭지점)에 컬러 데이터를 저장하거나 수정하는 방식이다. Vertex 컬러는 메시의 고정된 Vertex 위치에 데이터를 저장한다. 예를 들어 돌 위에 이끼를 칠하거나, 벽에 페인트를 추가하는 등의 작업에 활용될 수 있다.
🖌️ 5.5 버전 이전에서 Nanite 메시 페인팅이 지원되지 않았던 이유
Nanite 기술 구조와 작동 방식이 기존 메시 처리 방식과 크게 다르기 때문이다. Nanite는 초고해상도 메시를 효율적으로 렌더링하기 위해 다각형(폴리곤)을 동적으로 스트리밍하고 화면에 보이는 디테일만 계산하는 기술이다. 일반 메시와는 다르게 화면에 보이는 영역만큼 최적화된 폴리곤 데이터가 로드되므로 메시의 구조가 고정적이지 않는 것이다.
기존의 Mesh Painting은 메시의 고정된 Vertex 위치에 데이터를 저장해야하는데 Nanite는 동적으로 폴리곤을 관리하기 때문에 고정된 Vertex 컬러 데이터를 유지하기 힘들다는 점에서 두 가지가 같이 쓰일 수 없다. 쉽게 말해서 물체가 화면에 따라 자동으로 모양이 바뀌는 Nanite와 물체의 모양이 고정되어 있을 때 사용할 수 있는 Mesh painting을 같이 사용하면 Nanite 특성으로 물체가 변했을 때 Mesh Painting으로 칠한 색이 엉망으로 될 수 있다는 것이다.
🖌️ 이전에 쓰였던 복잡한 과정들..
언리얼 5.5 이전에는 Nanite 메시에 Mesh Painting을 구현하기 위해 몇 가지 우회하는 방법을 사용했다.
대표적으로 Material instance에 텍스처 마스크를 추가하거나 파라미터를 활용하는 방법이다. 브러쉬 위치, 크기, 색상등을 파라미터로 전달하여 동적 페인팅을 구현한다. 단점은 복잡한 머티리얼 그래프가 필요하며 Vertex 데이터가 아닌 Screen space(화면 기반) 효과이므로 정확한 페인팅 구현이 어렵다. 또 다른 방법으로는 RVT(Runtime Virtual Texture)를 활용하는 것이 있다. RVT에 Painting data를 기록하여 특정 영역의 텍스처가 덮어쓰이거나 블렌딩되도록 구현하는 방법이다. 텍스처 단위로 작업하므로 Nanite의 동적 Vertex 처리와 무관하게 작동할 수 있으며 디테일한 페인팅 효과가 가능하다. 하지만 역시 복잡한 셋업이 필요하며 실시간 퍼포먼스에 영향을 줄 수 있다는 단점이 있다.
🖌️ Nanite + Mesh Painting을 어떻게 가능하게 했는지?
이제 복잡한 과정과 제한 사항 없이 언리얼 5.5 업데이트로 Nanite Mesh Painting이 가능해졌다. 어떻게? 언리얼 5.5의 Mesh Painting 툴은 Mesh Painting 데이터를 Vertex가 아닌 Vritual texture에 저장하는 방식을 추가 도입했다. Virtual texture는 메시의 표면에 따라 데이터가 저장되므로, Vertex 개수와 상관없이 텍스처 해상도를 기준으로 페인팅이 가능하다. Nanite 메시는 고정된 Vertex 밀도가 없지만 표면의 텍스처 데이터는 항상 유지되므로 텍스처 기반 페인팅이 안정적으로 작동한다. 이전 Virtual texture를 사용자가 임의로 추가 세팅하여 사용하는 방식과는 다르게 간단한 과정과 최적화된 퍼포먼스를 유지할 수 있다.
심지어 Vertex-Texture 데이터 간 전환 및 호환성을 제공하여, 기존 워크플로를 크게 변경하지 않고도 사용할 수 있다. 이제 Nanite 메시 특성에 맞게 Virtual texture 기술을 활용하여 퍼포먼스와 작업 효율을 모두 높일 수 있다는 점에서 굉장히 유용한 업데이트이다.
🖌️ Nanite Mesh Painting 방법
Texture color 메시 페인트 텍스처는 항상 Virtual texture이므로 프로젝트 세팅에서 Virtual texture 사용을 활성화해야한다. 그리고 Mesh Paint 패널에서 Paint 방법을 선택한다. Texture Color를 선택하고 Select, Paint, Swap... 등 선택된 모드에 대한 메시 페인트 도구를 사용한다.
5.5의 업데이트 된 Mesh Paint 툴 워크플로우에 대한 자세한 내용은 아래 문서를 참고한다.
🖌️ 주의할 점
- Nanite가 활성화된 경우 데이터가 존재하더라도 인스턴스별로 Vertex color를 시각화할 수 없다. Vertex color 데이터를 시각화하려면 에디터에서 Nanite를 일시적으로 비활성화해야 한다. 비활성화하면 Nanite가 활성화되지 않았을 때 사용되는 대체 메시인 Fallback 메시가 이 색상 데이터를 시각화하는 데 사용된다. Nanite를 일시적으로 비활성화하려면 콜솔을 사용하여 r.Nanite 0 으로 설정한다. 다시 활성화하려면 1로 설정한다. 또는 프로젝트 세팅 Rendering > Advanced settings에서 Disallow Nanite를 체크한다.
- Vertex color 와 Texture color 두 가지 방식을 모두 사용하기. 사용하는 플랫폼 경우에 따라서 두 가지 방식의 데이터를 모두 유지하는 것이 필요한 경우가 있다. 이를 위한 머티리얼 설정이 필요한데, 자세한 내용은 아래 언리얼 문서에서 확인할 수 있다.
https://dev.epicgames.com/documentation/en-us/unreal-engine/how-to-share-vertex-color-data-between-instances-in-unreal-engine
'언리얼 엔진 > Art' 카테고리의 다른 글
Variant Manager와 Widget Blueprint 사용하여 언리얼 Configurator 제작하기 (0) | 2025.01.10 |
---|---|
SceneCaptureCube를 사용하여 언리얼에서 HDRI 생성하기 (0) | 2024.12.19 |
Ray Tracing 방식의 새로운 직접 조명 패스 MegaLights (0) | 2024.11.29 |
언리얼 5.5 모션 디자인 Cloner Effector Parameters / Collision (0) | 2024.11.29 |
언리얼 5.4 모션 디자인 모드로 Particle dissolve effect 만들기 (0) | 2024.11.25 |