Phần đầu tiên trong chuỗi hướng dẫn sẽ nói về các kỹ thuật tối ưu hóa về mặt hình học trong 3ds Max.
Rất nhiều người gặp phải khó khăn trong việc tối ưu hóa khung cảnh 3D của họ để giúp việc rendering diễn ra nhanh và ổn định hơn, tôi cũng là một trong số đó. Vì thế tôi đã quyết định viết chuỗi bài hướng dẫn về tối ưu hóa tốc độ rendering trong hầu hết các ứng dụng 3D và trình renderer này.
TỐI ƯU HÓA KHUNG CẢNH 3D ĐỂ CẢI THIỆN TỐC ĐỘ RENDERING
Bài viết được đúc kết từ chính kinh nghiệm và kiến thức có được trong khoảng thời gian làm việc freelancer, cũng như làm render của bản thân. Phần đầu trong chuỗi hướng dẫn này sẽ viết về các kỹ thuật tối ưu hóa về mặt hình học trong 3ds Max. Hy vọng sẽ giúp ích được cho mọi người.
Sau nhiều đêm làm việc quên ăn quên ngủ, cuối cùng bạn cũng có được một khung cảnh ưng ý để tiến hành rendering, nhưng rồi bạn phát hiện ra rằng nó tốn quá nhiều RAM và công suất tính toán để hoàn thành trong một khoảng thời gian hợp lý.
Kết quả là:
• Bộ nhớ RAM sử dụng cao có thể khiến quá trình rendering bị đứng hoặc dừng đột ngột, hoặc sẽ render rất chậm. Đơn giản là vì chương trình cần liên tục đọc và ghi dữ liệu tạm từ ổ cứng. Mà ổ cứng thì chậm hơn cả ngàn lần so với RAM, kể cả các ổ SSDs cũng rất chậm.
• Các thiết lập khung cảnh quá mức như polycount, chất lượng đầu ra và việc lấy mẫu có thể khiến thời gian render tăng lên đáng kể, và có thể dẫn đến việc chậm trễ deadline, hoặc nếu phải làm việc với render farms, chi phí sẽ tăng khá nhiều.
• Các file trong dự án càng lớn (bao gồm cả các file khung cảnh và các file liên quan như texture, map…), thời gian load chúng vào 3ds Max sẽ càng lầu. Khi rendering trên máy cục bộ, có thể đây không phải là vấn đề quá lớn, nhưng khi rendering trong một mạng máy tính,bạn sẽ không cảm nhận rõ thời gian rendering lâu hơn đáng kể. Đặc biệt là trên các render farms thương mại hóa, thời gian load càng lâu đồng nghĩa với chi phí bỏ ra càng nhiều.
Bài hướng dẫn này dành cho những ai?
Bài viết cung cấp một số kỹ thuật tối ưu hóa khá hữu ích cho cả những người mới bắt đầu và người đã có kinh nghiệm. Nếu đã dùng lâu, có thể bạn đã biết đến hầu hết chúng, nhưng biết đâu được bạn sẽ tìm thấy một vài thông tin mới thì sao. Có một câu nói rằng “Bạn không thể biết được những gì mình chưa biết là gì”
Các phương pháp tối ưu liệt kê ở đây đặc biệt hữu ích cho những người làm animation, vì chỉ cần rút ngắn được một vài giây rendering trên mỗi frame, nhân lên nhiều frame hình sẽ có thể tiết kiệm được rất nhiều thời gian cho bạn.
Do đó, mục đích của bài viết này rất rõ ràng – giảm thời gian render và dung lượng RAM sử dụng, nhờ đó có nhiều thời gian hơn cho công việc sáng tạo, tiết kiệm thời gian và tiền bạc và làm hài lòng khách hàng hơn.
PHẦN 1. TỐI ƯU VỀ MẶT HÌNH HỌC
Khung cảnh 3ds Max càng có nhiều polycount, dung lượng file sẽ càng nặng và cần càng nhiều RAM để rendered, cũng như thời gian rendering sẽ lâu hơn.
Bạn có thể thử dùng các cách bên dưới để giảm lượng polycount trong khung cảnh của mình:
1.1 Kiểm tra số lượng polycount
• Nhấn phím “7” để kích hoạt việc hiển thị trạng thái khung cảnh trong Viewport
• Hoặc click chuột vào nút ‘+’ ở góc trên bên trái của Viewport, chọn “xView”->“Show Statistics”
Bạn cũng có thể chọn bật hoặc tắt nhiều tùy chọn trạng thái khác nhau bằng cách nhấn vào nút ‘+’ ở góc trên bên trái của Viewport, chọn “Configure Viewports” → và đi đến tab “Statistics”.
• Total –Hiển thị trạng thái cho toàn bộ khung cảnh.
• Selection –Hiển thị trạng thái cho vùng được chọn hiện hành.
• Total + Selection –Hiển thị trạng thái cho toàn bộ khung cảnh và vùng được chọn hiện hành.
Bạn có thể tìm hiểu rõ hơn về việc hiển thị trạng thái cho khung cảnh trong mục Autodesk help.
1.2 Tìm kiếm các mô hình quá nặng
Mở cửa sổ “Select by name” (hoặc nhấn nút “h”), sau đó thêm vào cột “Faces”
Bạn có thể làm điều này bằng cách click chuột phải lên cột “Name” và chọn “Configure Columns”, sau đó chọn “Faces” từ bảng danh sách hiện ra.
Cột “Faces” này sẽ giúp liệt kê và sắp xếp tất cả các chi tiết có trong khung cảnh theo thứ tự số lượng polygons của chúng.
.1.3 Loại bỏ các phần chi tiết hình học không cần thiết.
Cần loại bỏ những gì:
• Loại bỏ tất cả các phần chi tiết hình học nằm ngoài phạm vi hướng nhìn của camera và không xuất hiện trong bản render cuối.
• Loại bỏ các phần chi tiết hình học bị ẩn bên trong hoặc bị che phủ bởi các chi tiết khác bên ngoài.
• Loại bỏ tất cả các mô hình bị ẩn, các mô hình thuộc lớp layer bị ẩn, các blueprints và bản vẽ CAD đã được sử dụng xong
Tìm các chi tiết ẩn như thế nào?
• Trong cửa sổ “Select by Name” hãy click vào biểu tượng “display all”.
• Bạn có thể tìm thấy các chi tiết đang bị ẩn trong khung cảnh bằng cách thêm vào cột “Hidden”, tương tự như cách thêm cột “Faces” đã trình bày ở trên. Các chi tiết ẩn và các chi tiết thuộc lớp layer ẩn sẽ có dấu ticked xuất hiện ở cột “Hidden” như hình bên dưới.
Để tránh bị thiếu hoặc mất chi tiết, bạn có thể click chuột phải trong Viewport, chọn “unhide all”, với tùy chọn “Unhide objects on hidden layers” được chọn. Sau đó, chọn tùy chọn “zoom extents” ở góc phải bên dưới và nhấn “ctrl + a” để chọn tất cả các mô hình có trong khung cảnh. Các mô hình bị mất hoặc thiếu sẽ được hiển thị.
.1.4 Hãy sử dụng instances thay thế cho copies.
Trong 3ds Max, bạn có thể copy một chi tiết theo cả 2 dạng copy hoặc instance.
Khi copy một mesh theo dạng “copy”, 3ds Max sẽ tạo ra một mesh mới lưu trong khung cảnh và cả trên ổ cứng và RAM, điều này khiến số polycount tăng lên.
Ngược lại, khi tạo theo dạng “instance”, 3ds Max sẽ chỉ lưu trữ thông tin rằng mesh này còn có một bản copy ở một vị trí khác trong khung cảnh mà thôi, dung lượng file mesh không bị tăng lên.
Nhờ có “instance”, bạn có thể tạo ra một số lượng lớn các chi tiết giống nhau mà lượng RAM tiêu thụ và độ lớn file gần như không thay đổi.
Bất lợi duy nhất của phương pháp này là các meshes copied phải được giữ đồng nhất hoàn toàn với chi tiết ban đầu.
Ví dụ:
.1.5 Tối ưu các mô hình
Cố gắng tối ưu các mô hình dựa theo khoảng cách giữa chúng đến camera và mức độ chi tiết yêu cầu (level of detail)
Thay đổi độ chi tiết của các mô hình theo độ hiển thị của chúng trong bản render cuối. Ví dụ, nếu một chiếc xe ở quá xa so với camera, bạn có thể sử dụng các mô hình đơn giản hơn để thay thế, hoặc tối ưu chúng hơn. Một bờ tường gần camera cần được hiển thị độ vát góc rõ ràng, nhưng có thể bỏ qua các chi tiết vát góc này với những bờ tường ở phía xa.
Không nên sử dụng Turbosmooth hoặc Meshsmooth modifiers nếu không thực sự cần thiết, nếu sử dụng hãy giữ giá trị “Iterations” thấp nhất có thể.
1.6 Sử dụng các bộ tối ưu hóa- 3ds Max optimizing modifiers
Chúng có thể giúp giảm số lượng polygons trong mô hình một cách nhanh chóng, nhưng cũng có thể gây méo mó biến dạng mô hình.
Tốt nhất là nên dùng phương pháp này với các chi tiết ở xa so với camera, hoặc với các chi tiết có lượng poly lớn (ví dụ như mô hình chiếc xesau khi sử dụng Turbosmooth modifier).
Hãy thử thay đổi với các thiết lập của bộ modifier sao cho làm giảm lượng polygons, đồng thời vẫn giữ độ chi tiết ở mức chấp nhận được.
• Bạn chỉ cần thêm polygons để tăng độ chi tiết cho mô hình, do đó những mô hình với lưới mesh dày đặc trên các bề mặt phẳng là lý tưởng nhất để áp dụng thủ thuật tối ưu này.
• Những vật thể có hình dáng không đồng đều (như đá chẳng hạn) sẽ không cần duy trì một cách chính xác hình dạng hình học của chúng, do đó chúng cũng có thể được áp dụng thủ thuật tối ưu này.
Để làm giảm độ lớn khung cảnh và các nguồn lực mà chúng sử dụng, bạn sẽ cần làm tinh gọn mô hình với các bộ tối ưu hóa được áp dụng trước khi rendering, đặc biệt là khi render thông qua một network, hãy luôn ghi nhớ lưu một bản copy dự phòng trước khi thực hiện các thay đổi, để có thể phục hồi dữ liệu cũ một cách nhanh chóng khi cần thiết.
Các bộ tối ưu – Optimizing modifiers dành cho 3ds Max
1.6.1 – Optimize Modifier
Optimize Modifier cho phép bạn giảm số lượng các bề mặt và chóp đỉnh trong một vật thể. Nó giúp làm tinh giảm mô hình về mặt hình học, tăng tốc độ rendering, trong khi vẫn duy trì chất lượng bức hình ở mức chấp nhận được. Bộ hiển thị Before/After cho phép bạn kiểm tra và đối chiếu một cách chính xác về độ tinh giảm sau mỗi lần thực hiện các thay đổi.
Xem thêm về bộ modifier này tại Autodesk Help.
.1.6.2 – MultiRes Modifier
MultiRes Modifier giúp giảm tổng dung lượng bộ nhớ cần thiết để render mô hình bằng cách giảm số lượng các chóp đỉnh và lượng polygons. MultiRes có số ưu điểm vượt trội hơn so với Optimize modifier, bao gồm việc thực thi nhanh hơn và khả năng chỉ định mức tinh giảm theo giá trị % hoặc theo số lượng chóp đỉnh (vertex count).
Xem thêm về bộ modifier này tại Autodesk Help.
.1.6.3 – Prooptimizer Modifier.
ProOptimizer Modifier cho phép bạn chọn các chi tiết và thực hiện tối ưu một cách tương tác lên chúng.
Xem thêm về bộ modifier này tại Autodesk Help.
1.6.4 – Batch ProOptimizer utility.
ProOptimizer trang bị một công cụ tối ưu hóa giúp bạn giảm được số lượng các chóp đỉnh (cũng như số lượng các bề mặt) trên một vật thể, trong khi vẫn bảo toàn độ hiển thị của vật thể đó. Các tùy chọn cho phép bạn giữ lại các thông tin về vật liệu, mapping, màu vertex… trong mô hình sau khi được tối ưu hóa.
Xem thêm về bộ modifier này tại Autodesk Help.
.1.7 Xử dụng các mặt phẳng đã được rendered trước kèm với textures thay cho việc phải render mô hình + các shaders
Nhiều khi bạn cần tạo ra một môi trường cho khung cảnh của mình, nằm ngoài phạm vi camera, nhưng vẫn ảnh hưởng lên khung cảnh về độ phản xạ, độ đổ bóng, hoặc có tác dụng chiếu sáng khung cảnh với nguồn sáng gián tiếp (GI)
Trong trường hợp này, hãy giữ mô hình tạo môi trường cho khung cảnh đơn giản thôi, hoặc thay thế chúng bằng các mặt phẳng đã được rendered trước đi kèm với các textures được thêm vào, và cắt chúng đi với các opacity map nếu cần thiết.
Bạn cũng có thể sử dụng phương pháp này cho các vật thể nằm xa so với camera nhưng tốn thời gian rendered, hoặc bị ẩn sau các vật liệu trong suốt như kính (ví dụ như một vài hàng chai thủy tinh xếp trên kệ hàng chẳng hạn).
Phương pháp này đặc biệt hiệu quả khi bạn muốn tạo ra các mảng tán cây lớn (foliage), visible trong reflections hoặc tạo bóng đổ trong khung cảnh.
Nếu các opacity maps render quá lâu, hãy tìm hiểu thêm phần 2 nói về Textures để biết cách thiết lập lại chúng sao cho render nhanh hơn.
Ví dụ 1:
So sánh về việc rendering một mô hình với môi trường được tạo ra từ các chi tiết được instanced và từ các mặt phẳng được rendered trước đi kèm với opacity map.
Ví dụ 2:
So sánh về việc render các chi tiết nằm ở xa camera bằng cách sử dụng các mô hình thật hoặc sử dụng các mặt phẳng được render trước đi kèm với opacity map.
Ví dụ 3:
So sánh về việc rendering nhiều chi tiết có độ khúc xạ cao và phản xạ mờ bằng cách sử dụng các mô hình thật hoặc sử dụng các mặt phẳng được render trước đi kèm với opacity map.
.1.8 Khi nào cần collapse mô hình.
Các phương pháp liệt kê bên dưới có thể giúp giảm độ lớn khung cảnh lưu trên ổ cứng, nhờ đó dự án sẽ được upload và mở nhanh hơn trong 3ds Max, việc này rất hữu ích trong trường hợp rendering thông qua một network hoặc một render farm.
• Các mô hình được áp dụng các bộ tối ưu (optimizing modifiers) nên được collapsed trước khi rendering. Nó sẽ giúp giảm lượng RAM sử dụng, giảm thời gian render, và giảm độ lớn của file lưu trên ổ cứng.
• Với Meshsmooth và Turbosmooth modifiers –hãy giữ mô hình tối giản nhất có thể và áp dụng các bộ modifiers lên chúng thay vì collapsing chúng thành các editable poly hoặc editable mesh. Lúc đó, bạn sẽ có thể điều chỉnh lại mật độ của mesh nếu nó quá cao và các mô hình sẽ được lưu trên ổ cứng một cách đơn giản và gọn nhẹ hơn.
Ví dụ 1:
So sánh về nguồn lực sử dụng khi rendering mô hình với bộ Meshsmooth modifier được áp dụng vs mô hình sau khi collapsing cụm chi tiết thành một Editable Poly. Các mô hình được copied theo kiểu instances.
Editable splines –Bạn có thể tạo ra các mô hình 3d dày đặc bằng cách sử dụng các bộ modifiers như Lathe, Sweep hoặc tùy chọn “rendering” trong editable spline options. Chúng sẽ được lưu với dung lượng nhỏ hơn so với việc collapsed mô hình thành editable poly.
Ví dụ 2
So sánh về nguồn lực sử dụng cho editable spline với tùy chọn 3d options/modifiers được áp dụng (Lathe và Sweep) và sau khi chuyển đổi chúng thành editable poly.
.TÓM TẮT
Tối ưu về mặt hình học, quy tắc đơn giản là càng ít càng tốt.
• Các thông tin trạng thái trong Viewport và cột “Faces” trong cửa sổ “Select by name” cho phép bạn tìm được những khối hình học nào cần được tối ưu. Thông thường, hầu hết các mô hình thường không quá nặng đáng để bỏ thời gian cho việc tối ưu chúng. Vì vậy, chỉ cần tìm mô hình nặng nhất và tối ưu lượng polycount của nó là đủ.
• Sử dụng instances là một trong những cách hiệu quả và dễ dàng nhất giúp giảm đáng kể lượng polycount trong khung cảnh. Một số trình render như Vray hoặc Mental Ray có nhúng sẵn một số công cụ (mr Proxy, VrayProxy), khi được kết hợp với tính năng “instances” sẽ cho phép bạn tối ưu khung cảnh một cách triệt để nhất có thể. Chúng tôi sẽ nói về vấn đề này trong phần sau của chuỗi hướng dẫn này.
• Việc sử dụng các bộ optimization modifiers ban đầu có thể khá tốn thời gian, nhưng bạn sẽ tìm thấy thiết lập mình cần rất nhanh sau một vài lần thử. Và nếu đang làm việc với dự án có tính lặp lại như diễn họa kiến trúc, bạn có thể tạo riêng cho mình một bộ thư viện các mô hình đã được tối ưu sẵn và sử dụng khi cần thiết.
• Các mặt phẳng với textures được render trước là một cách khá hay giúp giảm thời gian render và giảm nguồn lực sử dụng. Chúng hoạt động hiệu quả nhất với các chi tiết nằm xa camera. Trong nhiều trường hợp thời gian cần thiết cho việc tạo và render các mặt phẳng này sẽ khá lâu, nhưng khi làm việc với animation có nhiều frame hình trong đó, phương pháp này sẽ tạo ra một sự khác biệt rất lớn đấy.
• Editable splines và một công cụ của 3ds Max có thể giúp bạn tạo ra các khối hình học lớn mà không ảnh hưởng nhiều đến độ lớn khung cảnh, đặc biệt là khi bạn làm việc trong lĩnh vực diễn họa kiến trúc. Độ chi tiết của chúng có thể được điều chỉnh theo yêu cầu định trước.
Bạn nên thực hành và thử áp dụng tất cả các thủ thuật tối ưu kể trên trong suốt quá trình làm việc và workflow của mình, thay vì chỉ tìm cách tối ưu sau khi mô hình đã hoàn thành và biết được thời gian render quá cao. Theo thời gian, workflow mới có thể giúp bạn tiết kiệm được rất nhiều thời gian và tiền bạc.
Hãy xem các phương pháp kể trên là nguồn tham khảo, kết quả có thể sẽ khác nhau tùy theo từng thiết lập khung cảnh, các plugins và trình render mà bạn sử dụng. Cách tốt nhất là chạy thử nghiệm một vài frame hình đã được tối ưu và kiểm tra, chỉnh sửa cho đúng trước khi tiến hành bản cuối.
Nguồn: Michal Mos, Render Wrangler