실시간 마켓플레이스용 3D 에셋을 제작하는 과정에서 텍스처 아틀라스를 숙달하는 것이 성능과 전문성을 위해 필수적이라는 것을 깨달았습니다. 이 가이드는 여러 텍스처를 단일 아틀라스로 결합하는 저의 실질적인 워크플로우를 자세히 설명합니다. 이 기술은 드로우 콜과 메모리 사용량을 획기적으로 줄여 에셋을 더 빠르고 개발자에게 더 매력적으로 만듭니다. 아틀라스 계획, 베이킹 및 구현에 대한 저의 실제 단계를 안내하고, 엔진별 모범 사례를 공유하며, 제출 준비가 완료된 고성능 에셋을 준비하는 방법을 보여드리겠습니다. 이 가이드는 미적 품질뿐만 아니라 기술적 품질로도 마켓플레이스에서 돋보이는 제품을 만들고자 하는 3D 아티스트를 위한 것입니다.
핵심 요약:
모델의 모든 고유한 머티리얼과 텍스처는 일반적으로 CPU에서 GPU로 별도의 드로우 콜을 필요로 합니다. 수백 개의 에셋이 있는 복잡한 장면에서는 이러한 콜이 쌓여 프레임 속도의 주요 병목 현상이 됩니다. 또한, 각 작은 텍스처 파일은 자체 밉맵 체인과 GPU 업로드를 위한 메모리 오버헤드를 가집니다. 제가 발견한 것은 10개의 1k 텍스처가 10개의 표면을 모두 포함하는 하나의 잘 압축된 4k 아틀라스보다 훨씬 더 많은 메모리를 사용하고 더 많은 CPU 오버헤드를 유발한다는 것입니다. 성능 향상은 미미한 것이 아니라 실시간 애플리케이션의 기본입니다.
최근 모듈형 던전 키트에서 복잡한 기둥 에셋의 드로우 콜을 12개에서 2개로 줄였습니다. 돌, 금속, 그렁지 데칼을 아틀라스로 만들었기 때문입니다. 엔진 내에서 이는 50개 인스턴스가 있는 스트레스 테스트 장면에서 15%의 프레임 속도 향상으로 이어졌습니다. 마켓플레이스 에셋의 경우 이러한 종류의 최적화는 중요한 판매 포인트입니다. 개발자들은 성능 예산을 망치지 않을 콘텐츠를 적극적으로 찾고 있으며, 깔끔한 단일 머티리얼 에셋은 수십 개의 머티리얼 슬롯이 있는 에셋보다 즉시 더 매력적입니다.
저는 항상 단일 에셋 또는 함께 사용하도록 고안된 모듈형 세트의 텍스처를 아틀라스로 만듭니다. 경험상 규칙은 다음과 같습니다. 표면이 동시에 렌더링될 가능성이 높으면 아틀라스에 속합니다. 그러나 완전히 관련 없는 머티리얼을 가진 고유한 영웅 에셋이나 서로 다른 오브젝트에서 독립적으로 스케일링해야 하는 타일링 텍스처는 아틀라스로 만들지 않습니다. 캐릭터의 경우 옷과 피부는 아틀라스로 만들지만, 눈은 고유한 셰이더 효과가 필요하면 분리된 상태로 둘 수 있습니다.
베이킹 도구를 만지기 전에 계획부터 합니다. 모델의 표면을 논리적으로 그룹화합니다. 예를 들어, 모든 돌 부분, 모든 금속 부분, 모든 가죽 부분. 이러한 그룹은 스트레칭을 최소화하기 위해 모델의 공간적 근접성을 반영해야 합니다. UV 편집기에서 시각적 중요도에 따라 0-1 UV 사각형에 공간을 할당합니다. 크고 평평한 표면은 작고 상세한 볼트보다 더 많은 공간을 얻습니다. 밉맵핑 중 필터링 아티팩트를 방지하기 위해 UV 아일랜드 사이에 항상 블리드 마진(일반적으로 2-4픽셀)을 남겨둡니다.
저의 계획 체크리스트:
저는 3D 스위트의 베이킹 도구(Blender 또는 Substance Painter와 같은)를 사용하여 하이폴리 디테일 맵(노멀, 앰비언트 오클루전, 러프니스 등)을 로우폴리 모델의 새 UV 레이아웃에 베이킹합니다. 중요한 단계는 모든 머티리얼 그룹에 대한 각 맵 유형을 하나의 큰 텍스처로 베이킹하는 것입니다. 실제로 저는 모든 것을 4k 텍스처로 베이킹합니다. 그런 다음 Photoshop 또는 유사한 2D 도구에서 이러한 베이킹된 맵을 합성하여 UV 계획에 따라 돌 노멀은 한 사분면에, 금속 노멀은 다른 사분면에 배치하는 식입니다. 모든 맵 유형(알베도, 노멀, 러프니스)에서 일관성이 가장 중요합니다.
모든 알베도, 노멀, 러프니스/메탈니스 데이터를 포함하는 마스터 4k 아틀라스가 준비되면, 대상 엔진에서 단일 머티리얼을 생성합니다. 셰이더에서는 모델의 UV 좌표를 사용하여 이 단일 텍스처를 샘플링합니다. 이때 효과가 나타납니다. 엔진은 이제 하나의 머티리얼, 하나의 텍스처 세트를 보고 하나의 드로우 콜을 발행합니다. 밉맵이 올바르게 생성되고 낮은 텍스처 해상도에서 눈에 띄는 블리딩이나 이음새가 없는지 항상 확인합니다.
구현 방식은 다릅니다. Unity에서는 일반적으로 Standard 또는 URP/Lit 셰이더를 사용하고, 텍스처의 임포트 설정을 색상 데이터의 경우 "Perceptual"로, 노멀 데이터의 경우 "Normal Map"으로 설정합니다. 아틀라스의 압축은 까다로울 수 있습니다. 때로는 4k 텍스처를 ASTC 6x6으로 압축하여 좋은 균형을 맞춥니다. Unreal Engine에서는 텍스처 좌표 입력이 있는 마스터 머티리얼을 만들고 내장된 TextureSample 노드를 사용합니다. Unreal의 텍스처 스트리밍 및 가상 텍스처링 시스템은 큰 아틀라스와 매우 잘 작동하지만, 스트리밍 문제를 피하기 위해 텍스처 밀도가 일관적인지 확인합니다.
Level of Detail (LOD) 모델을 만들 때 동일한 UV 레이아웃을 유지합니다. 이것이 매우 중요합니다. LOD1이 다른 UV 언랩을 사용하면 아틀라스가 작동하지 않아 별도의 텍스처가 필요하게 되어 최적화가 깨집니다. 모든 텍스처가 하나의 파일에 있기 때문에 밉맵핑은 균일하게 작동합니다. 전체 아틀라스가 함께 다운스케일되어 상대적인 디테일을 보존합니다. 중요한 디테일이 흐릿하고 읽을 수 없는 덩어리가 되지 않도록 항상 엔진에서 가장 낮은 밉 레벨을 확인합니다.
이전 워크플로우에서 상당한 시간을 잡아먹었던 부분은 텍셀 밀도를 최대화하기 위해 UV 패킹을 수동으로 최적화하는 것이었습니다. 이제 저는 종종 Tripo의 지능형 UV 도구를 제 프로세스에 사용합니다. 지오메트리를 확정한 후, Tripo를 사용하여 우수한 공간 활용도를 가진 초기, 고효율 UV 레이아웃을 생성할 수 있습니다. 그런 다음 이 레이아웃을 제 주요 소프트웨어로 다시 가져와 최종 수정 및 베이킹을 합니다. 이 AI 지원 단계는 수동 패킹 및 아일랜드 배치에 드는 시간을 몇 시간 단축하여 예술적인 이음새 배치 및 우선 영역에 집중할 수 있도록 해줍니다.
기술적으로 완벽한 에셋이라도 최종 사용자가 이해할 수 없다면 쓸모없습니다. 저는 항상 에셋이 텍스처 아틀라스를 사용한다는 것을 설명하는 간단한 텍스트 파일이나 머티리얼 내 주석을 포함합니다. 사용자가 텍스처의 어떤 부분이 모델의 어떤 부분에 해당하는지 볼 수 있도록 UV 레이아웃 맵을 .png로 제공합니다. 제 씬 파일은 깔끔합니다. 숨겨진 지오메트리, 추가 히스토리 없이 명확하게 이름이 지정된 단일 머티리얼 할당만 있습니다.
제출하기 전에 빈 씬에서 에셋을 테스트하고, 여러 인스턴스가 있는 스트레스 테스트 씬에서도 테스트합니다. 엔진의 프로파일링 도구(Unity의 Profiler 또는 Unreal의 Stat Unit과 같은)를 사용하여 드로우 콜 수를 확인합니다. 가능하다면 저사양 타겟 하드웨어에서도 테스트합니다. 제 목표는 에셋이 일반적인 사용 조건에서 광고된 대로(단일 드로우 콜) 작동하는지 확인하는 것입니다.
/Models, /Textures, /Docs).moving at the speed of creativity, achieving the depths of imagination.
텍스트·이미지를 3D 모델로 변환
매월 무료 크레딧 제공
압도적인 디테일 복원력