Troubleshooting 3D Asset Import in Unity
문제 설명
- https://essssam.itch.io/3d-leap-land
- 위의 애셋을 쓰고 싶었음
- 다운을 받아서 보니 fbx, obj, tex 폴더로 나눠짐
- fbx 폴더에는 fbx 파일들이 들어있고, tex에는 color pallete png 파일이 들어 있었음
- fbx 폴더와 tex 폴더를 그대로 import함
- import된 fbx들을 확인해보니 몇몇은 Metalic, 몇몇은 Non Metalic이라는 머테리얼이 자동으로 적용되어 있었음
- 하지만 Metalic과 Non Metalic 머테리얼의 차이는 존재하지 않았음
- Metalic map은 둘 다 0으로 설정돼있고, 그밖의 속성들도 전부 같았음
- 무엇보다, 이 머테리얼들에는 색이 적용돼있지 않았음
- 머테리얼을 만들고 Base map에 color pallete png를 삽입함
- 이 머테리얼로 Metalic이나 Non Metalic Material들을 대체하면 색이 나오긴 함
- fbx 끌어다 씬에 놓은 후에 생긴 오브젝트에 머테리얼 끌어다 놓아도 색이 나오고
- fbx 파일 > Inspector > Metalic 또는 Non Metalic이라 쓰여있는 항목에 머테리얼 끌어다 놓아도 색이 나옴
- 그러니까, ‘수동’으로 일일이 모델마다 머테리얼 껴서 색을 입혀주는 것까진 됨
- 하지만 60여개에 달하는 모델에 일일이 머테리얼을 적용한다는게 말이 안된다고 생각함
- itch.io 페이지에서 애셋 제작자의 댓글들을 확인해봤지만, 자신은 Unity를 해본지 오래됐고, 머테리얼에 텍스쳐를 입혀서 그 머테리얼을 다시 적용하라는 것 이외에 유의미한 정보를 얻지 못함.
내가 생각한 해결책
- Lit 셰이더를 적용한 Metalic과 Non Metalic 머테리얼을 새로 만든 후에 이름에 맞게 Metalic map의 값을 조절한다
- 유니티 에디터 코드를 작성하여 작업을 자동화한다
- 각 fbx 파일에 대해 이름에 맞게 새로운 Metalic, Non Metalic 머테리얼을 적용
- color pallete 머테리얼을 추가한다
o1에게 질문
- import하는 과정에서 무언가 놓친 점이 있었는가?
- 굳이 에디터 코드까지 작성하지 않고도 머테리얼들을 새로 할당하는 간단한 방법이 있는가?
- 왜 이런 일이 발생하였는가? fbx 파일에는 material 정보가 들어있는 걸로 알고 있고, 실제로 그러한 정보를 받아와서 Material이 ‘생성’까지는 된 것으로 생각되는데, 최소한 Metalic map 정보는 가져와야 하는 것 아닌가? 단순히 ‘특정 플랫폼을 위하여 만들지 않았다면 호환이 잘 되지 않는다’는 이유에 불과한가? 그렇다면 그 호환이 되지 않는 이유는 무엇인가?
아티스트/에셋 제작자마다 FBX 내부에 포함된 머티리얼 설정 및 텍스쳐 임베드 방식을 제각각 사용하기 때문에, Unity 쪽으로 가져왔을 때 머테리얼이나 텍스쳐가 자동으로 잘 할당되지 않는 상황은 흔히 발생합니다. 질문해주신 사항을 하나씩 짚어보겠습니다.
1. Import하는 과정에서 무언가 놓친 점이 있었는가?
(1) FBX 내부 머테리얼 정보의 한계
- FBX 파일은 내부적으로 머테리얼/셰이더 설정을 담을 수 있지만, Unity의 Standard (URP/HDRP Lit) 셰이더와는 호환되지 않는 정보인 경우가 많습니다.
- 특히 FBX 내 “메탈릭” 정보가 있어도, 그것이 Unity가 기대하는 방식(메탈릭/러프니스 맵 등)으로 내장돼 있지 않다면 Unity에서 자동으로 인식하지 못합니다.
(2) 텍스쳐의 임베디드 여부
- FBX에 텍스쳐를 “임베디드 텍스쳐(Embed Media)”로 내보냈다면, Unity가 FBX importer에서 일정 부분 자동 매핑을 시도할 수 있습니다.
- 그러나 실제로는 많은 툴에서 FBX에 텍스쳐가 임베디드되지 않고, 별도의 PNG/JPG 파일로 따로 제공되는 경우가 대부분입니다.
- 질문 내용상, “tex” 폴더에 따로 PNG가 들어 있고 FBX에는 별다른 텍스쳐 정보가 없었던 것으로 보입니다.
(3) Unity FBX Import Settings
- Unity [Project Settings → Editor] 또는 FBX 임포트 Inspector에서 “재질(Material) Import” 옵션이 있습니다.
- “Use External Materials (Legacy)” 등 여러 방식이 있는데, 일반적으로 자동 생성되는 머테리얼은 ‘포인트’만 잡혀 있을 뿐, 텍스쳐가 자동 할당되지 않을 가능성이 높습니다.
결론적으로, Import 과정에서 ‘설정 상’ 놓쳤다기보다, FBX 자체가 Unity가 바로 이해할 수 있는 메탈릭/컬러 정보를 잘 제공하고 있지 않았을 확률이 큽니다.
2. 굳이 에디터 코드까지 작성하지 않고도 머테리얼들을 새로 할당하는 간단한 방법이 있는가?
(1) 프로젝트 내 “머테리얼 자동 매핑” 기능 활용
- Unity 2022 이상에서는 FBX 임포트 시 머테리얼을 검색(재할당)하는 규칙(Remap) 설정이 있습니다.
- FBX 파일을 선택 → Inspector → Materials 탭 → “Location”, “Naming”, “Search” 옵션 등을 조절
- 예: “Search by Name”, “Material Folder” 등을 설정하여, 프로젝트 어딘가에 있는 동일한 이름의 머테리얼을 자동으로 매핑하도록 유도할 수 있습니다.
- 이 기능을 활용하려면, 미리 같은 이름을 가진 머테리얼(예:
Metalic.mat
,NonMetalic.mat
)을 만들어놓고, FBX 임포트 설정에서 Search 옵션을 적절히 잡아주면 자동 할당이 될 수 있습니다. (단, FBX 내부 재질 이름이 정확히 같아야 합니다.)
(2) Prefab 또는 Override 세팅 이용
- 만약 이미 씬에 배치한 모델이 있다면, 그 모델에 원하는 머테리얼(새로 만든 Metallic/Non Metallic)을 할당하고, 그 상태를 Prefab으로 저장해두는 방식을 사용할 수 있습니다.
- 이후 똑같은 모델을 다시 씬에 배치할 때는 Prefab을 불러와서 배치하면, 수동으로 머테리얼을 붙이지 않아도 됩니다.
(3) 여러 오브젝트를 동시에 선택 후 머테리얼 드래그&드롭
- 하이어라키(혹은 프로젝트 뷰)에서 여러 FBX(Model) 오브젝트를 한꺼번에 선택한 뒤, 프로젝트 뷰에서 머테리얼을 드래그&드롭하면 일괄 적용이 가능합니다.
- 60개 모델을 한 번에 바꾸기는 조금 까다롭더라도, 10개 단위 등 묶어서 드래그하는 식으로 시간을 단축할 수 있습니다.
→ 이건 시도해봤는데 안됐음
3. 왜 이런 일이 발생했는가? (FBX 파일 내부 Material 정보 호환성)
(1) FBX가 Unity용으로 ‘특화된’ 것이 아님
- FBX 포맷은 여러 3D 툴(블렌더, 3dsMax, Maya 등)에서 공용으로 쓰이지만, 각 툴의 셰이더 구조가 달라서 1:1 매핑이 쉽지 않습니다.
- 에셋 제작자가 “Unity에서 쓸 생각으로 만든 FBX”가 아니라면, FBX에 들어간 머테리얼 정보가 Unity Standard/PBR 방식과 전혀 다르게 설정되었을 수 있습니다.
(2) FBX Material은 대부분 “PlaceHolder” 역할
- FBX 임포트 시 자동으로 생성되는 머테리얼들은 대체로 ‘이름’과 ‘색상’ 정도만 가지고 있는 placeholder일 가능성이 높습니다.
- 실제로 “Metalic”, “NonMetalic”이라는 이름은 붙어있어도, Unity가 인식하기 위해서는 메탈릭 맵, 스무스니스(러프니스) 맵, 오클루전 등 PBR 채널 정보를 별도로 적용해줘야 합니다.
- FBX에서 “메탈릭 값이 0으로 설정되어 있다” → 사실상 Unity가 읽어올만한 메탈릭 텍스쳐나 float 값이 없었고, 그냥 0으로 초기화된 것입니다.
(3) ‘특정 플랫폼을 위해 만들어지지 않았다면 호환이 잘 안된다’
- 이것은 사실입니다. Unity 전용 툴(예: Unity Package 형태)로 만들어진 모델이 아니라면, FBX 안에 있는 재질과 텍스쳐 정보가 대부분 호환성 이슈가 생깁니다.
- “호환이 되지 않는 이유”는, FBX는 표준 포맷이지만 셰이더 파이프라인까지 표준으로 정의하지 않기 때문입니다.
- 예: Blender에서 Principled BSDF(메탈릭/러프니스)를 설정해도, 이를 Unity Standard Shader로 바로 1:1 매핑하기엔 여러 정보 손실/불일치가 있을 수 있음.
추가 팁 및 정리
-
FBX Import → Materials 탭에서 “Extract Materials”
- Unity에서 FBX 임포트를 할 때, FBX 내부 재질을 별도로 추출(Extract)할 수 있습니다. 추출 이후 해당 폴더에 위치한 머테리얼들에 직접 텍스쳐를 할당하거나 이름을 변경하여, 후처리를 자동화할 수도 있습니다.
-
머테리얼 이름 매칭 + Color Pallete Texture
- 작성해두신 “Color Pallete” 텍스쳐를 사용하는 새 ‘Standard/Lit’ 머테리얼을 만들어 두고, FBX 재질 이름과 같게 맞춰 놓으면 Unity가 FBX 임포트 시 검색해서 자동 할당해줄 가능성이 높아집니다.
- 예: FBX 내부 머테리얼 이름이 “Metalic”, “NonMetalic”이라면, 프로젝트 폴더에도 “Metalic.mat”, “NonMetalic.mat” 같은 식으로 만들어 두고, FBX Import [Materials → Search → Project] 등으로 설정.
-
에디터 스크립트 / AssetPostprocessor
- 많은 모델 파일에 대해 일괄적으로 머테리얼 할당 과정을 처리해야 한다면, Editor 스크립트(AssetPostprocessor)를 작성해두면 유용합니다.
- 단순 매핑 규칙(“이름에 ‘Metalic’ 포함 → Metallic.mat 할당”) 등을 만들어두면 대량의 FBX 임포트 작업을 자동화할 수 있습니다.
-
왜 메탈릭 맵 정보는 가져오지 않았는가?
- 질문에 대한 직접적인 답변: FBX가 Unity 표준 PBR 구조를 반영해 텍스쳐를 임베디드해주거나, 혹은 별도로 텍스쳐 연결 정보를 넣어주지 않았기 때문입니다.
- 심지어 FBX 마다 “Shading Model”이라는 필드가 다를 수도 있고, Unity가 “FBX 재질 → Standard Shader”로 변환하면서 잡아줄 수 있는 파라미터만 기본값으로 세팅한 것이죠.
결론적으로…
-
놓친 점?
- 큰 맥락에서 “놓친 것”이라기보다는, FBX가 Unity에 맞춰진 형식이 아니어서 발생한 당연한 현상입니다.
- Unity FBX importer가 “메탈릭=0”인 재질을 자동 생성하는 것은 흔한 일입니다.
-
에디터 코드 없이 간단히 매핑하는 법
- FBX Import Settings → Materials 탭에서 [Search] 설정을 활용해보세요.
- 또는, 다량의 모델 오브젝트를 동시에 선택 후, 준비해둔 머테리얼을 한꺼번에 드래그&드롭도 가능합니다.
-
이유와 호환성 문제
- FBX에 포함된 머테리얼 정보가 Unity Standard/PBR에서 요구하는 메탈릭 및 텍스쳐 슬롯과 1:1 대응되지 않기 때문입니다.
- 표준 포맷인 FBX조차도, 셰이더/재질 구조가 달라 호환성이 완벽하지 않습니다.
- 따라서 “이름만 맞아떨어지는 Placeholder 머테리얼이 자동 생성된 뒤, 메탈릭 값은 0으로 초기화”된 것입니다.
이후에도 다양한 3D 모델 에셋을 가져올 일이 많으실 텐데,
- 가장 확실한 방법은 “Unity에서 사용하는 머테리얼(.mat)에 텍스쳐를 세팅하고, FBX 임포트 시 이름 매칭 또는 에디터 스크립트로 자동 할당하는 파이프라인을 구축”하는 것입니다.
- 수작업이 너무 많다면, 짧게라도 Editor 스크립트를 작성해 두면 장기적으로 시간을 크게 줄일 수 있습니다.
이상이 도움이 되길 바랍니다!