Khoa Huynh – 3d Character Artist

Ở bài này, mình sẽ viết về workflow xây dựng 1 nhân vật cho game di động, từ khâu modeling cho tới hoàn thành texture (do cũng nhiều người hỏi nên mới viết ) . Đây cũng là workflow mình dùng cho game Chiến Binh CS http://chienbinh.cgame.vn/

  • Mấy em nó ở đây 😀
  • Yêu cầu: nắm vững Zbrush, 3dsmax, Photoshop hoặc những phần mềm tương tự Bài viết này mình cũng nhắm tới những bạn mới học thông qua việc cung cấp cái nguồn tài liệu về các kiến thức căn bản (mà mình nghĩ mấy người làm lâu năm cũng chưa chắc họ nắm vững hết, đây là sự thật X_X).
  • Yêu cầu: bạn biết một chút tiếng Anh để đọc hiểu được những tài liệu mình cung cấp qua các link dẫn. Thật ra bạn cũng không cần đọc hoặc hiểu (nếu chả có nhu cầu vì cứ làm theo thì cũng ra nhưng mình khuyến khích nên đọc vì đó là nền tảng giúp mình khắc phục hầu hết các lỗi kỹ thuật mình gặp trong lúc làm mà mình có thể sẽ không nêu ra hết được trong bài viết).

Bài hướng dẫn bắt đầu ở đây

Nhân vật chiến binh chibi người da đỏ

 Các công cụ mình dùng: Zbrush, 3ds Max, Xnormal, Photoshop Workflow: Highpoly Model -> LowPoly Model -> Baking Map -> Texturing

Giải thích những từ trên: Highpoly model là model mình kết hợp giữa 3ds max và Zbrush để tạo nên, ko quan tâm đến số lượng poly hay cấu trúc poly nhiều vì mình dùng chỉ để lấy chi tiết, mình sẽ không nói về cách dùng ZBrush gì ở đây (đây là kỹ năng bắt buộc phải có, nếu bạn đọc bài này mà chưa biết dùng Zbrush thì là một bất lợi 😀 )

Cho project này mình tạo 1 base mesh ( dùng zsphere và dynamesh ) thu thập hình tham khảo cần thiết (xem rõ hơn cứ click vào hình 😀 )

tiếp tục sculpt để đạt được chi tiết tương đối ưng ý

hoàn thành hết  quần áo trên người nhân vật, trong quá trình sculpt cần chủ động các phương pháp để đạt được cùng một kết quả nhưng tốc độ nhanh hơn. Phải xác định đây là model dùng cho baking maps, bạn chỉ cần đạt được chi tiết cuối cùng mình mong muốn ở lowpoly khi lên texture. Dynamesh, Zremesher hay bất cứ gì cũng được, lưới bao nhiêu không quan trọng nhưng nên kiểm soát ở mức hợp lý đủ dùng để không hạn chế tốc độ xử lý của máy và crash đột ngột (mình chắc bị crash zbrush 1000 lần rồi haha )  

Sau khi hoàn thành xong model high ở bước này, mình có thể lựa chọn 2 hướng, một là polypaint luôn trong Zbrush, 2 là phần color này để sau cũng được. Hồi làm Chiến Binh thì mình paint luôn trong Zbrush (HÌNH ẢNH VÍ DỤ TỪ CHIẾN BINH) rồi lúc bake cho ra luôn color rồi vào Photoshop vẽ tiếp. Luôn phải hình dung là khi lên game texture nó sẽ hiển thị được bao nhiêu, mình dùng size bao nhiêu cho nên đừng phí thời gian ngồi tả kỹ quá rồi khi lên game hiệu quả không khác biệt, không phù hợp với size nhỏ khi render ra v..v.. Decimate hết các subtool rồi merge những phần nào mình xác định sẽ bake chung 1 model lại với nhau, xóa bớt phần bị che ( cho nhẹ poly, render map sẽ nhanh hơn ). Xuất các model high ra obj (Zbrush sẽ lưu được vertex color trên model, nhưng đừng nhập xuất lần nữa vì nó sẽ mất ( thật ra mình k biết cách giữ được, bạn tin mình chứ =))  )

  • Lowpoly: cách sử dụng: https://www.youtube.com/watch?v=mPNMpoxvzVQ mình dug các công cụ của 3ds max. Mọi người có thể hỏi sao không dùng Topogun hay mấy tool khác chuyên hơn v..v.. Thật ra mình thấy 3ds max cũng đầy đủ công cụ cần thiết để retopology . Và mình còn linh động hơn khi đây là lowpoly cho game di động, mình chủ động hơn vì có thể move vertex tùy ý để phù hợp và hiệu quả hơn khi đáp ứng các nhu cầu kỹ thuật.
  • Model low này có thể sẽ thay đổi tiếp sau khi bake xong, chẳng hạn như chỉnh silhouette ( đường bóng của nhân vật ) , giảm bớt lưới , test deformation rồi lại cắt thêm lưới v..v..
  • Ngay cả trong khi reto mình cũng phải suy tới trường hợp đi lưới ra sao bake đẹp rồi mình merge điểm lại sau mà vẫn giữ cấu trúc hợp lý.
  • Về số lượng poly, thì việc model nặng hay nhẹ thì phụ thuộc vào số vertex chứ không phải số tris như mọi người thường hay nói, vì tính tris trực quan hơn ( bạn không thể cứ tỉ mỉ dè dặt từng vertex khi unwrap, set smoothing groups (hard edge, smooth edge bên maya) như bạn dùng cap đậy lại những lỗ như phân dưới bụng model chẳng hạn, thì vòng bụng có 10 cạnh thì khi cap lại model lại tăng thêm 10 tris, bạn tiếc 10 tris nên ko cap lại, thật ra thì nó vẫn chỉ thêm 1 vertex ở giữa cái cap đó và ko khác biệt mấy. Nhưng nếu ở đó set là hard edge ( smoothing group khác ) hoặc trên UV nó lại tách thành 2 điểm thì lúc này lại khác nữa,    

hahaha phần này có ở khái niệm về vertex normal

http://wiki.polycount.com/NormalMap/#Smoothing_Groups_.26_Hard_Edges   tóm lại là với mình thì cap hay ko cap, đừng bận tâm về số poly ở đó, nếu lúc deform dễ bị hở thì cap lại, set smoothing group rồi unwrap nó quăng ở đâu đó. Tại sao không snap trên Uv rồi weld hết điểm lại trên UV như vậy sẽ đỡ tốn số vertex Đến đây mình tạm ngưng quá trình làm này một chút để qua tìm hiểu về những khái niệm normal map, Uv, hard edge, smoothing groups,  v..v.. trước khi đi tiếp 😀 ( super recommended ) http://wiki.polycount.com/NormalMap/

Phần cơ bản quan trọng là phần các chương trình render tính tia sáng chiếu tới để tạo ra normal map (raycast, vertex normal, cage) Đây là một bài cung cấp thông tin vô cùng hữu ích ở phần giải thích nguyên lý của không gian tiếp tuyến http://www.paultosca.com/makingofvarga.html

.Nhiều bạn sẽ thắc mắc sao bake Normal map mà cứ bị seam, bị lỗi liên tục, thì nên đọc và nghiên cứu kỹ càng, mất cả ngày cũng được chẳng sao. Sau khi hoàn thành low poly thì mình chuyển sang unwrap       . Mình dùng 3ds max để unwrap ( cũng như retop với mình 3ds max cung cấp vừa đủ công cụ cần thiết cho lowpoly kiểu vầy ). Lưu ý khi unwrap, ở những đường seam lớn, tốt nhất là canh nó nằm thẳng đứng hoặc ngang vuông góc với cạnh của ô vuông, và các điểm trùng nhau cũng phải năm trên đường vuông góc. Cái này nói hơi lung tung, địa khái là ở chỗ đường seam, 1 điểm trên model sẽ tách thành 2 điểm trên UV, và 2 điểm đó nên nằm trên 1 đường thẳng vuông góc với 1 cạnh của hình vuông UV. Lý do thì cứ xem kỹ lại bài viết của polycount về normal map ở trên 😀 đại khái là làm vậy sẽ hạn chế được lỗi seam normal map khi đưa vào engine

  • BAKE MAPS: Xnormal cũng liên quan tới các vấn đề normal map, hard edge, smoothe edge, Uv, v…v… https://www.youtube.com/watch?v=kGszEIT4Kww tut này cũng cung cấp khá nhiều kiến thức hữu ích, về cách sử dụng Xnormal cơ bản, về hard edge, smoothe edge, Uv, để hiểu rõ thêm cách sử dụng thì có thể tham khảo thêm trên Youtube 😀 Quay lại con mọi da đỏ, sau khi mình xuất hết model high và low ra phù hợp, sẽ render từng phần rồi gộp lại sau trong photoshop. Với chiến binh thì mình render 1 normal map, 1 Ambient Occlusion, 1 Vertex Color (để lấy color layer trong file Diffuse cuối cùng ) có thể tham khảo ở đây https://www.youtube.com/watch?v=MSk_kZLagVo đây là setting của mình khi render mình sẽ luôn render normal map trước vì nhanh để check xem có lỗi nào không, sau đó sẽ chỉnh lại thông số ray distance trên low poly ( thường mình để Xnormal tính ). Còn chỉnh tay ko được thì cách cuối cùng là phải tạo cage rồi nhập cage vào. Cage có thể tạo từ lowpoly bên 3ds max, chỉnh sao cho vừa bao hết được highpoly model và vị trí của từng điểm trên cage đừng nằm quá lệch so với điểm tương ứng trên lowpoly model. Những định nghĩa và nguyên tắc này bạn có thể xem lại ở link trên.
  • Về thông số EdgePadding http://wiki.polycount.com/EdgePadding thì là để phụ hợp với engine khi nó tính mipmap
  • Khi render mình luôn ren size lớn gấp đôi với size gốc đối với texture size nhỏ hơn 1024^2 Như chiến binh là 1024^2, thì mình sẽ vẽ trên texture size 2049^2 và render với size là 4096^2. Khi bỏ vào photoshop giảm size đi thì nhớ check mục Best for Reduction.
  • Sau khi normal ổn rồi thì mình sẽ render Ambient Occlusion, thường thì mình sẽ test trước lỗi lần nữa cho chắc, anti-alising sẽ set về x1. Khi bake mình dùng thêm một object khác, bỏ vào mục High poly Mesh của Xnormal, object đó có dạng là nủa hình cầu để tạo ra một tấm AO có thêm cả khối, vì đây là game di động nên mình thấy cách này cực kỳ hiệu quả khi cho ra ánh sáng nổi khối tốt.

Sau đó mình gộp tất cả lại trong file Photoshop.

Riêng normal map mình sẽ dùng Xnormal lần nữa để cho ra 2 tấm cavity

cách này tham khảo ở đây http://www.donaldphan.com/tutorials/xnormal/xnormal_occ.html

Đây là model chỉ với AO trong 3ds max ( size texture là 512^2 ) (chưa có cavity )

Đây là file Photopshop của mình. Group Cavity set ở Overlay với khoảng 40-60 % opacity, tùy trường hợp

AO thì gốm 2 layer, 1 là được render từ Xnormal như setting ở trên, trên nó là 1 layer được fill màu R 90 G 90 B 90 và set ở screen với opacity khoảng 40~60% để phần màu đen trên tấm AO gốc được giảm đi. Group set ở multiply ~ 80%, và group dưới cùng là color, gồm có các layer màu bake từ xnormal ra kết hợp thêm vẽ tay

đây là texture sau khi hoàn thành và model trong 3ds max

ở trên là 1 trong những cách mình hay dùng để lên texture trong nhân vật, những cách khác có thể google thêm, có nhiều dạng khác như hand painting texture, hay một nửa hand painting một nửa dùng highpoly model, một cách khác có thể tham khảo ở đây http://media.steampowered.com/apps/dota2/workshop/Dota2CharacterTextureGuide.pdf

chẳng hạn mình dùng thêm 1 cach khác kết hợp với RampShader 😀 cho ra kết quả vầy

MỌI NGƯỜI CÓ THẮC MẮC GÌ CỨ COMMENT BÊN DƯỚI, NHƯNG ĐỪNG HỎI VỀ NHỮNG THỨ NHƯ CÔNG CỤ ZBRUSH, DÙNG CÁI NÀY SAO CÁI KIA SAO HAY TOOL NÀY NỌ

Trang này sử dụng cookie. Tìm hiểu cách kiểm soát ở trong: Chính Sách Cookie
  • Theo dõi Đã theo dõi
    • Khoa Huynh
    • Theo dõi ngay
    • Đã có tài khoản WordPress.com? Đăng nhập.
    • Khoa Huynh
    • Theo dõi Đã theo dõi
    • Đăng ký
    • Đăng nhập
    • Báo cáo nội dung
    • Đọc trong WordPress
    • Quản lý theo dõi
    • Ẩn menu
Tạo trang giống vầy với WordPress.comHãy bắt đầu

Từ khóa » Giảm Lưới Trong Zbrush