Quy trình: Đem chi tiết từ Zbrush sang Unity

Khi tôi bắt đầu làm game, thì đây là điều khiến tôi phải tốn khá nhiều thời gian để tìm ra cách đem các chi tiết từ Zbrush sang đối tượng trong game. Và đây là tôi cách tôi làm được điều đó. Đây không phải là cách duy nhất, nhưng tôi nghĩ cách này khá hiệu quả và giúp bạn có khả năng điều khiển mức độ chi tiết mà bạn muốn đạt được. Nên nhớ đây chỉ một tutorial về quy trình nên tôi không trải uv (unwrapping) một cách tối ưu nhất. Có rất nhiều bài hướng dẫn về unwrapping và dựng hình (modeling) mà bạn có thể tìm trên mạng.

1. Bạn cần một base mesh (khối cơ bản)

Tôi thích bắt đầu từ Max, nhưng nếu bạn là Zbrush user thì cứ việc bắt đầu thẳng từ Zbrush. Nếu bạn bắt đầu từ Zbrush thì nên chắc là đôi tượng của bạn có-thể-sculpt-được. Điều này có nghĩa là một đối tượng chia đều (các poly gần như hình vuông). Số lượng polygons lúc này chưa quan trọng, nhưng cần phải đảm bảo poly có dạng vuông vức, nói cách khác là không có poly nào quá dài (thêm edgeloops nếu cần).

001

2. Bây giờ bạn có thể xuất (export) sang Zbrush (.obj)

Chúng ta có GoZ, nhưng tôi vẫn thích dùng cách cũ: xuất đối tượng dạng .obj

3. Khởi động Zbrush và nhập (import) đối tượng .obj

Xóa UVs (nếu có), để giảm bộ nhớ (RAM), vì ta không cần UVs trong Zbrush (theo qui trình này).

Bây giờ, hãy để tâm hồn nghệ sĩ bay bổng và bắt đầu sculpt! Nên nhớ ăn, ngủ và save thường xuyên. :)
(Tắt smooth trong Geometry khi bạn divide đối tượng hardsurface như bức tường trong bài này)

002

4. Khi bạn đã hài lòng với tác phẩm của bạn, tôi khuyên bạn nên save thêm 1 lần nữa.

003

5. Xuất (lần 1) đối tượng đã sculpt này (high poly) và đặt tên sao cho dễ nhớ.

Và xuất (lần 2) đối tượng đã giảm poly (nhưng có mức độ chi tiết gần giống với high-poly) bằng cách dùng Decimation Master (hướng dẫn dùng Decimation Master: link). Hoặc bạn có thể đi xuống subdivision nhỏ hơn và xuất đối tượng. Dù cách nào đi nữa, thì bạn nên giảm poly count xuống còn khoảng 150 000. Điều này sẽ giúp bạn thao tác dễ hơn khi import đối tượng này trở lại Max.

004

6. Trở lại Max và nhập đối tượng xuất (lần 2).

Nếu bạn không di chuyển gì đối tượng trong Zbrush thì nó sẽ nhập lại đúng y vị trí của khối cơ bản bạn tạo lúc trước.

005

7. Lúc này bạn cần tạo đối tượng dành cho game.

Từ đối tượng cơ bản (low poly), bạn cần chỉnh sửa để nó có thể trở thành đối tượng game. Bây giờ bạn có thể chỉnh lại khối, xóa edgeloops mà bạn tạo lúc đầu để giảm polycount.

006

8. Đối tượng dành cho game (in-game mesh) của bạn phải bao phủ đối tượng mà bạn import từ Zbrush, càng khít càng tốt. Số lượng polycount mà bạn được phép sử dụng sẽ ảnh hướng rất nhiều đến khả năng bao phủ đối tượng chi tiết.

9. Khi bạn hài lòng với đối tượng in-game, bạn cần trải UV cho nó.

10. Một khi UVs của bạn hoàn thành, collapse tất cả các modifier mà bạn đã dùng và xuất đối tượng in-game.

11. Khởi động xNormal (link). Mở menu “high definition meshes”, click phải vào chọn add meshes – bạn chọn đối tượng không có decimated (đối tượng high poly xuất lần 1). Sau đó vào menu “low definition meshes” và chọn đối tượng in-game.

007

12. Bây giờ sang menu Tools và chọn “Ray distance calculator”, xác nhận đối tượng chọn là đúng rồi sau đó nhấn “Go!”. Giờ thì hãy uống 1 cốc cà phê, bạn cần xNormal động não trong vài phút. Càng lâu xNormal tính toán càng đúng, nhưng 2 phút thường là đủ. Khi bạn chờ xong, thì nhấn Stop và “copy”.

13. Chuyển sang Baking options. Trong ví dụ này tôi chỉ bake normal map, nên tôi chỉ chọn vào normal map mà không chọn các map khác. Kích cỡ tôi chọn là 2048 px với padding 4px. Nhấn nút tròn bự ở góc phải: Generate maps và tiến trình xuất maps sẽ bắt đầu. Nếu mọi thứ được thực hiện đúng, bạn sẽ thấy chi tiết của bạn xuất hiện trong normal maps.

14. Khởi động Unity và nhập đối tượng in-game. Trong ví dụ này, tôi dùng chung đối tượng obj mà tôi đã dùng để baking (xuất maps), nhưng thường thì tôi dùng FBX.

15. Mang normal map của bạn vào. Nhớ đánh dấu chọn normal map và bỏ đánh dấu generate from grayscale khi import.

16. Áp chất liệu bumped diffuse vào đối tượng của bạn và kéo normal map vào kênh của chất liệu. Bạn sẽ thấy chi tiết từ Zbrush ở game engine.

008

* Điểm khác biệt giữa cách làm này và cách tạo normal maps thẳng từ Zbrush?

+ Với cách này (cách trình bày ở trên) thì đối tượng low poly không cần có cùng UV và topology với đối tượng high-poly.
+ Polygon của bạn có thể có mặt tam giác (tris), và các polygon có thể kéo dài (để tiết kiệm số lượng poly trong game engine)
+ Nếu bạn tạo maps trong Zbrush, thì đối tượng trong game và đối tượng trong Zbrush (cả low và high poly) phải có cùng UVs.

Tác giả: vasco
Nguồn: Workflow tip: Bringing ZBrush detail to Unity assets

Dịch: cvbtruong

Về Truong
CG Artist

5 Responses to Quy trình: Đem chi tiết từ Zbrush sang Unity

  1. Pingback: Hỏi và Đáp: Zbrush « Truong's blog

  2. LiLa nói:

    Mình có một số vấn đề chưa rõ ở đây…
    Thứ nhất:
    Ở bước thứ 7. Lúc này bạn cần tạo đối tượng dành cho game.
    Từ đối tượng cơ bản (low poly), bạn cần chỉnh sửa để nó có thể trở thành đối tượng game?.
    Vậy thực chất việc import đối tượng low poly từ zbrush sang MAx để làm gì? Theo mình nghĩ thì đối tượng cuối cùng mà mình đưa vào game vẫn là based mesh ban đầu?
    Thứ hai: Bạn có thể hướng dẫn cụ thể hơn làm cách nào import tấm normal map vào chất liệu và giúp nó hiển thị lên đối tượng…
    Cảm ơn bạn nhiều!

    • Truong nói:

      “Vậy thực chất việc import đối tượng low poly từ zbrush sang MAx để làm gì? Theo mình nghĩ thì đối tượng cuối cùng mà mình đưa vào game vẫn là based mesh ban đầu?”

      – Đúng, đối tượng vẫn là base mesh ban đầu nhưng phải Import Model Zbrush vào Max là để: khi xóa edges và chỉnh sửa khối ta có một khối high poly (ở cùng 1 vị trí) để so sánh mà không chỉnh sửa quá lệch giữa low poly model và high poly model.

      – Tr không dùng Unity hay game engine nào cả nên không giúp bạn dc. sorry.
      Bạn có thể vào: http://gamedev.vn/archived/
      Hoặc search google như cách Tr làm mỗi ngày: “How to import normal map into game engine?”

  3. Tan nói:

    chào anh Trường, phần Đem chi tiết từ Zbrush sang Unity anh có thể làm môt cái video về nó được không chứ em đọc đi đọc lại mà không hiểu gì hết. thank anh

    • Truong nói:

      anh ko làm game, anh chỉ làm phim hoạt hình. Bài này anh dịch lại.

      Chỗ nào em không hiểu? copy paste đoạn đó vào comment để anh xem. Có khi anh giải thích được.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: