Ảnh của Chicken War Studio

Crafting Stylized Dreamy Shaved Ice Cream Shop With Substance 3D & UE5

Bram Tempelaere đã dẫn chúng tôi qua quá trình tạo ra dự án Dream Shaved Ice Cream Shop, giải thích cách tạo ra môi trường với phong cách stylized giống như trong mơ bằng Blender, ZBrush, Substance 3D và Unreal Engine, và chia sẻ các tài nguyên hữu ích.

Ảnh của Chicken War Studio

Introduction


Xin chào! Tôi tên là Bram Tempelaere, và tôi mới tốt nghiệp ngành game art tại Bỉ. Hiện tại, tôi đang tìm kiếm một công việc về 3D environment art.


Trong bài viết này, tôi sẽ hướng dẫn bạn quy trình làm việc của tôi và kết nối bạn với một số nguồn tài liệu học tập (learning resources) mà tôi thấy hữu ích khi làm việc trên stylized 3D environment đầu tiên của mình, Dream Shaved Ice Cream Shop. Dự án này là đỉnh điểm của tình yêu ngày càng lớn của tôi đối với việc tạo ra các đám mây đẹp và stylized art.

Ảnh của Chicken War Studio

Getting Started


Hạt giống cho dự án này bắt đầu từ bài tốt nghiệp của tôi. Tôi đã thử nghiệm với các đám mây volumetric clouds và thử cách để cách điệu (stylize) chúng, vì mây luôn làm tôi ngạc nhiên về vẻ đẹp của chúng. Trong khi tìm kiếm ý tưởng cho dự án cuối cùng của mình cho bằng cử nhân về game art, tôi đã tình cờ thấy concept của Cycle Circle, nơi ông vẽ những đám mây theo phong cách Ghibli/anime. Ngoài việc đây là cơ hội tuyệt vời để khám phá thêm các tuỳ chọn tạo mây ở dạng 3D, tôi còn muốn xem mình có thể thúc đẩy bản thân đến mức nào để tạo ra cảm giác như mơ trong concept của Cycle.

Ảnh của Chicken War Studio

Để bắt đầu, tôi đã sử dụng một công cụ tên là fSpy để khớp với góc nhìn camera của concept: công cụ này có thể tạo ra camera setting mà bạn có thể sử dụng bên trong phần mềm 3D, khớp với các đường phối cảnh (perspective line) mà bạn vẽ trên hình ảnh. Điều này giúp tôi căn chỉnh bố cục cho giống với original artwork và có được tỷ lệ phù hợp. Tôi đã blockout trong Maya và import nó vào Unreal Engine 5 dưới dạng Bản thiết kế phân cấp (hierarchical Blueprint). Điểu này giúp tôi dễ dàng thay thế model bằng các phiên bản chi tiết sau này.

Ảnh của Chicken War Studio

Một trong những yếu tố thách thức nhất là biển báo hình con cá trên đỉnh cửa hàng. Vì đó là điểm nhấn, tôi đã dành rất nhiều thời gian để tinh chỉnh tỷ lệ và texture để thể hiện đúng cá tính của concept. Plug-in chuyển đổi từ fSpy sang Blender đã giúp tôi tả chính xác góc nhìn camera để vẽ texture, đảm bảo con cá vẫn giữ nguyên cá tính như trong concept khi nhìn từ góc chính.


Modeling & Texturing


Tôi đã tạo mô hình cho hầu hết prop trong Maya, mặc dù sau đó tôi đã chuyển sang Blender để tăng tốc quy trình làm việc của mình. Đối với tạo texture cho prop, tôi đã sử dụng Substance 3D Painter và phát triển một smart material để giữ cho phong cách nhất quán:

- Base layer để thiết lập color, roughness và giá trị metallic;


- 4 layer để thêm hiệu ứng chuyển màu (gradient) dựa trên up/down lighting và top/bottom position map;


- Các folder riêng biệt với các chi tiết vân gỗ (woodgrain) và nhiễu (anisotropic noise)


- Thiết lập 3-layered để thêm highlight dựa trên curvature map (wider, less wide, slimmest mask: least bright, brighter, brightest color) dựa theo hướng dẫn trên Youtube của Lara DэAdda, người hướng dẫn cách tạo ra một stylized colormaps đẹp:

Ảnh của Chicken War StudioẢnh của Chicken War StudioẢnh của Chicken War Studio

Để tạo cho prop cảm giác như được sơn, tôi thường sử dụng hiệu ứng slope blurs và overlaid tiling brushstroke texture, được tạo trong Substance 3D Designer. Tôi cũng sử dụng một số tiling brushstroke texture làm lớp phủ (overlay) lên màu để thêm cảm giác stylized cho prop.


Phần nội thất ban đầu không nằm trong phạm vi của tôi, nhưng khi tôi gần hoàn thành phần ngoại thất, tôi nhận ra rằng môi trường sẽ không trọn vẹn nếu thiếu nó. Tôi muốn tạo cảm giác như đây là một nơi thực sự để mọi người đến và ăn kem với tất cả các món ăn vặt cần thiết. Pinterest là nơi tôi thích nhất để tìm ảnh tham khảo; nó có những kết quả hình ảnh tuyệt vời, thường chính xác hơn nhiều so với các từ khoá tôi sử dụng để tìm kiếm so với khi sử dụng Google. Sử dụng Pinterest để lấy cảm hứng, tôi soạn một danh sách cách prop phù hợp với mood của không gian mà tôi hình dung trong đầu. Làm cho từng prop phù hợp với nhau là một thách thức vì tôi phát triển phong cách cho khung cảnh song song với việc làm prop. Tôi đã chuyển qua lại nhiều lần giữa Substance 3D và Unreal Engine.


Tôi đã model bằng mid-poly workflow. Bắt đầu bằng một khối blockout nắm bắt tỷ lệ, tôi đã tạo một model với topology mà có thể dễ dàng subdivide sau này. Sau khi tạo high-poly model từ đó, tôi quay lại mid-poly và tối ưu hoá nó thành phiên bản low-poly. Tôi sử dụng Substance 3D Painter để bake normal từ khối high sang khối low-poly, đây là quá trình biến thông tin normal hoặc shading thành texture map, sau đó chuyển nó sang phiên bản lưới có độ phân giải thấp hơn.


Đối với các viên gạch, tôi tạo high-poly trong ZBrush, và đối với low-poly, tôi sử dụng Decimation Master của ZBrush, công cụ này tự động loại bỏ các vertice khỏi các mặt phẳng, sau đó tôi thực hiện tiếp một số công việc tối ưu hóa thủ công trong Maya.

Ảnh của Chicken War Studio

Tôi làm việc với 4 material chính: một cho vật liệu ốp lát (tiling material) như tường và ván gỗ, một cho prop có texture đặc biệt, một cho texture tường của các căn nhà, sử dụng Vertex Paint blending để lộ ra các màu khác nhau, và cuối cùng, một cho những tấm trang trí (trim sheet). Tôi cũng có một số material cho mây, lá cây và các vật thể đung đưa trong gió, và một void material cho các đường ống.


Tôi đã tạo tiling material bằng Substance 3D Designer. Đối với wall material, tôi tạo thông tin chiều cao (height) trực tiếp bằng các Shape node trong 3D Designer. Đối với trim sheet material, tôi đã điêu khắc thông tin chiều cao (height) trong ZBrush và sau đó sử dụng thông tin đó để tạo ra các map khác trong Substance 3D Designer.

Ảnh của Chicken War Studio

Đối với bức tường, tôi đã tạo height map trong Substance 3d Designer. Các node Flood Fill trong Substance 3D Designer là một công cụ tuyệt vời để tạo ra sự đa dạng trong height map của bức tường, tôi đã học được rất nhiều về cách sử dụng chúng thông qua hướng dẫn trên kênh Youtube của Johnny Nodes:

Node Flood Fill to the Gradient tạo ra một gradient cho mỗi tile, bạn có thể điều chỉnh nó bằng cách sử dụng levels để vát bớt (chip) các góc. Xếp lớp (layering) các lớp này, thì các tile bắt đầu định hình.

Ảnh của Chicken War Studio

Sử dụng Flood Fill to Bounding Box node rất hữu ích để thêm các vết cắt (chip) lớn. Tôi đã thêm rêu vào wall material trong engine để có thể kiểm soát nhiều hơn. Tôi muốn tạo ra nhiều biến thể của các đốm rêu bão hoà (saturation) như trong concept, và tôi cũng muốn có một gradient từ trên xuống, cùng với những đốm rêu cục bộ (localized blobs), cái mà tôi có thể tạo bằng vertex painting. Tôi thấy cần thiết để bổ sung tất cả các điều khiển (control) này vào rêu để đạt được hình ảnh bức tường mà tôi mong muốn, vì bức tường chiếm một phần lớn trong khung cảnh.

Ảnh của Chicken War StudioẢnh của Chicken War Studio

Tôi tạo ra directional rocky noise và sau đó lượng tử hoá (quantize) nó để có được dáng vẻ stylize. Node Vector Warp giúp ngăn noise tràn sang các tile khác.

Ảnh của Chicken War StudioẢnh của Chicken War Studio

Cloud


Để tạo ra một performant cloud , tôi sử dụng các photo-textured card. Tôi đã tạo mask trong Photoshop cho các điểm hightlight và shadow, cho phép tôi kiểm soát màu sắc của cả hai trong material instance. Ban đầu tôi sử dụng một card duy nhất với các đám mây tương đối giống với concept. Sau đó, tôi thử nghiệm xếp lớp (layering) nhiều card với các giá trị material khác nhau, và điều đó giúp cho các hình dạng gần giống với concept hơn. Để cho cảm giác giống với 2D và để nhiều card hoạt động cùng nhau tốt hơn mà không nổi rõ đường seam, tôi tạo ra material xử lý hậu kỳ (post-process) với kỹ thuật filter Kuwahara, mà tôi đã học được thông qua hướng dẫn của Matthijs Verkuijlen, để làm mờ texture của các đám mây.

Kuwahara filter là một kỹ thuật xử lý hình ảnh giúp làm mịn hình ảnh, giữ cho các cạnh sắc nét và tạo cảm giác như tranh vẽ. Tôi đã nhân bản một scene-depth-texture-based mask trước khi xuất material xử lý hậu kỳ chỉ để tạo ra các đám mây/các vật thể ở xa bị ảnh hưởng bởi Kuwahara filter. Một điều cần lưu ý ở đây là tôi phải đảm bảo đặt tỷ lệ viewport thành 100% để mọi thứ hoạt động bình thường trong viewport, vì filter hoạt động dựa theo kích thước của viewport.


Rendering & Lighting


Tôi chia cảnh trong Outliner của mình thành các folder tiền cảnh (foreground), trung cảnh (midground) và hậu cảnh (background). Tôi cũng sử dụng các empty actor trong Unreal để làm parent group cho các object. Theo cách này, tôi có thể di chuyển những đoạn lớn trong cảnh dễ dàng hơn để phục vụ cho bố cục (composition). Để tạo render với camera crop theo chiều dọc, tôi phải thay đổi tỷ lệ khung hình trong Cine Camera Actor thành giá trị thấp hơn 1.


Để tạo ra được cùng một mood như 2D concept, tôi đã chú ý kỹ đến các giá trị của hình ảnh. Điều này có nghĩa là đảm bảo shadow không quá tối, điều chỉnh ánh sáng và tinh chỉnh texture để đạt được các giá trị phù hợp trong bản render. Trong Post-Process Volume, tôi có thể tinh chỉnh cách shadow xuất hiện và thêm một số hiệu ứng bloom vào hình ảnh để các giá trị hòa trộn với nhau tốt hơn. Tôi cũng đã thay đổi Toe setting kết hợp với tinh chỉnh color grading settings.


Tôi khuyên bạn nên sử dụng threshold adjustment layer trong Photoshop lên ảnh chụp cảnh đang render của bạn và ảnh tham khảo để xem sự khác biệt giá trị giữa ảnh của bạn và ảnh tham khảo là ở đâu. Ngoài ra, việc đặt một layer lên ảnh chụp màn hình, fill nó với màu đèn và thiết lập layer to color có thể giúp bạn thấy rõ hơn nơi mà giá trị của tác phẩm của bạn khác với ảnh tham khảo.

Ảnh của Chicken War StudioẢnh của Chicken War Studio

Đối với bầu trời, đầu tiên tôi sử dụng plug-in HDRI Backdrop, nó đi kèm với Unreal Engine, bạn chỉ cần bật plugin này trong menu Plug-ins. Sau đó, tôi tách environment dome mesh bên trong Blueprint khỏi Sky Light bằng cách kéo chúng vào cảnh riêng biệt để tôi có thể kiểm soát nhiều hơn.


Để tạo cảm giác mềm mại giống trong concept, tôi sử dụng Spotlight để làm sáng shadow. Tắt setting cast shadow hoặc thay đổi specular scale thành 0 trong details panel của Fill light sẽ giúp loại bỏ những shadow không mong muốn. Để tạo shadow trong các đường ống và chỉnh cho độ tối vừa đủ trong khi vẫn giữ đủ ánh sáng cho scene, tôi đã tạo Fresnel-masked void material và apply nó vào cho một nửa quả cầu bị móp (squashed sphere).


Có một box chứa void material (base color=0, roughness=1) bên dưới bánh xe ô tô để đảm bảo ánh sáng phản chiếu dưới mặt đất sẽ không xuyên qua theo góc nhìn của camera chính, vì độ tương phản rõ rệt giữ mặt đất và chiếc xe tối màu sẽ gây mất tập trung khỏi điểm tiêu cự chính (focal point).


Tôi đã sử dụng material xử lý hậu kỳ (post-process) để thêm các đường line màu cho từng object, giúp tạo cảm giác 2D. Trong ảnh, bạn có thể thấy cách tôi lấy mẫu màu cho các đường line dựa trên màu của object trên pixel. Tôi đã nội suy tuyến tính (linearly interpolated) với Lerp node giữa Scenetex và màu dựa trên line art mask, kỹ thuật này tôi học được Kamil Hepner trên YouTube:

Ảnh của Chicken War Studio

Conclusion


Tôi bắt đầu dự án này trong năm học gần cuối của mình như một phần của khóa học về môi trường. Sau khi tốt nghiệp, tôi đã xem lại dự án trong hai tháng làm việc part-time, tinh chỉnh texture và prop để nâng cao chất lượng cuối cùng. Nhìn chung, dự án mất hai tháng làm việc toàn thời gian.


Lời khuyên của tôi là hãy lùi lại một bước! Tầm nhìn của bản thân dễ bị thu hẹp khi làm việc trên một dự án trong thời gian dài, nhưng sau khi tôi quay lại dự án này sau gần một năm, tôi đã có rất nhiều ý tưởng mới về cách tiếp cận asset và làm cho chúng hiệu quả hơn. Nếu không làm vậy, tôi chắc chắn sẽ không đạt được chất lượng như bây giờ! Khoảng thời gian bạn rời xa dự án sẽ cho bạn cơ hội sáng tạo khi bạn quay lại với nó!


Nếu bạn đọc bài viết này và muốn biết rõ hơn về một phần nào đó, bạn có thể liên hệ với tôi trên LinkedIn hoặc ArtStation để thảo luận thêm!


Nguồn : https://80.lv/

Tài Huỳnh of Tự Học 3D Online