U
02 / 22 · 9 phút
Hỏi đáp

Import model 3D: tỉ lệ, hướng xoay và texture bị mất

câu trả lời ngắn

Vì sao model import vào bị bé tí, bị xoay, hoặc trắng bệch?

Ba phần mềm không thống nhất với nhau, không phải file hỏng. Sửa tỉ lệ bằng Convert Units ở tab Model chứ đừng sửa Transform, sửa cú xoay −90 bằng Bake Axis Conversion hoặc apply rotation trong Blender trước khi xuất, và lấy lại màu bằng cách chép texture vào rồi bấm Extract Materials. Màu hồng là thiếu shader, không phải thiếu texture.

Một model import vào bị nhỏ gấp trăm lần, nằm úp mặt xuống và trắng bệch thì không phải file hỏng. Đó là ba phần mềm không thống nhất với nhau về một mét là bao nhiêu, hướng nào là trên, và texture nằm ở đâu — mỗi chỗ lệch đều có cách sửa làm một lần trong trình import, chứ không phải đi scale object trong cảnh.

Quá nhỏ, hoặc quá to

Unity đo bằng mét. Blender cũng đo bằng mét nhưng mặc định xuất FBX ở tỉ lệ 0.01, nên nhân vật cao hai mét về tới nơi chỉ còn hai centimet. 3ds Max làm việc bằng centimet và gửi đúng nhân vật đó sang, to gấp trăm lần.

  1. 1

    Chọn model trong cửa sổ Project. Trong Inspector lúc này bạn đang nhìn trình import, không phải object — các tab ghi Model, Rig, Animation, Materials.

  2. 2

    Ở tab Model, tick Convert Units. Unity sẽ đọc đơn vị mà file khai báo rồi quy đổi, và cách đó đúng thường xuyên hơn hẳn việc bạn tự gõ một con số.

  3. 3

    Vẫn sai thì đặt Scale Factor thành 100 cho file Blender vào bé tí, hoặc 0.01 cho file Max vào quá khổ. Bấm Apply.

Nằm úp mặt

Blender coi Z là trục hướng lên; Unity coi Y là hướng lên. Trình xuất lẽ ra phải xoay model lúc đưa ra, và khi nó không làm thì bạn nhận được nhân vật bị xoay −90 độ quanh trục X.

  • Cách sửa tốt nhất, làm trong Blender: apply rotation và scale cho object (Ctrl+A) trước khi xuất, và trong bảng xuất FBX đặt Forward là −Z, Up là Y.

  • Sửa trong Unity nếu không xuất lại được: ở tab Model tick Bake Axis Conversion. Unity nung phần xoay vào thẳng mesh thay vì để lại trên Transform.

  • Cách chữa cháy nên tránh: một object cha rỗng xoay 90 độ, nhét model vào trong. Nó chạy được cho tới khi có thứ gì đọc transform.forward — lúc đó nhân vật đi ngang.

Trắng, xám, hoặc hồng

File FBX không mang theo texture. Nó mang theo tên các material và đường dẫn tới mấy file ảnh từng tồn tại trên máy đã xuất nó. Unity import cái tên, không tìm thấy ảnh, và đưa bạn material trắng mặc định.

  1. 1

    Tự chép mấy file texture vào project, đặt vào một thư mục cạnh model.

  2. 2

    Chọn model, mở tab Materials, đặt Material Creation Mode thành Standard rồi bấm Extract Materials. Giờ bạn có material thật, sửa được.

  3. 3

    Kéo từng texture vào đúng ô: màu vào Base Map, normal vào Normal Map. Unity sẽ hỏi có sửa normal map chưa được đánh dấu đúng loại không — chọn có.

Nói thêm về file .blend

Unity import thẳng file .blend được, nhưng bằng cách chạy ngầm Blender để quy đổi, nên ai trong dự án cũng phải cài Blender đúng phiên bản tương thích. Hãy xuất FBX rồi commit file đó: kết quả import như nhau, mà project vẫn mở được trên máy chưa từng biết Blender là gì.