Tất cả bài viết
Hướng dẫn · 2 min read

Chi phí runtime bằng không: cách Numivo bake mọi thứ thành asset native của engine

Quyết định kiến trúc đằng sau Numivo, vì sao mỗi scatter, blend và grid trở thành một asset engine bình thường, và điều đó có ý nghĩa gì với các bản build, repo và đội của bạn.

Illustration of Numivo scene data being baked into engine-native asset files

Tính năng quan trọng nhất của Numivo lại vô hình: game phát hành của bạn không chứa chút nào của nó. Mỗi công cụ trong hộp (scatter, mesh blending, grid) chỉ tạo ra asset engine bình thường và không gì khác. Bài viết này giải thích điều đó có nghĩa gì về mặt kỹ thuật, và vì sao chúng tôi coi đây là điều không thể thương lượng.

"Native" nghĩa là gì một cách cụ thể

Khi bạn bake một pass scatter trong Unreal, Numivo ghi ra các component Hierarchical Instanced Static Mesh hoặc instance foliage, chính những cấu trúc bạn sẽ nhận được khi đặt bằng tay. Trong Unity, đó là các instance prefab tiêu chuẩn hoặc chi tiết terrain. Vật liệu từ mesh blending được biên dịch thành vật liệu engine thông thường với các chuyển tiếp normal chính xác đến từng pixel; không có pass shader tùy chỉnh nào, không có công việc plugin mỗi khung hình, không có module "Numivo runtime" nào trong Build.cs hay manifest gói của bạn.

Những con số suy ra từ điều này:

  • 0 dòng mã Numivo trong bản build của bạn
  • 0 ms thời gian khung hình được thêm vào: không có gì để thực thi
  • < 150 MB RAM editor trong các scene điển hình, vì bộ công cụ editor là toàn bộ dấu chân
  • 1 lõi dùng chung giữa Unreal và Unity, nên các preset đi qua lại giữa các engine

Vì sao chúng tôi từ chối một phụ thuộc runtime

Phụ thuộc runtime là một khoản nợ mà người khác phải trả:

  1. Chứng nhận (certification). Các đội chứng nhận console hỏi mỗi module bên thứ ba làm gì. "Không có module nào" là câu trả lời ngắn nhất có thể.
  2. Tuổi thọ. Game sống lâu hơn các gói đăng ký công cụ. Vì kết quả bake là asset thông thường, một scene tạo bằng Numivo vẫn mở được và phát hành được sau mười năm, có hay không có chúng tôi. Nếu bạn hủy, bạn vẫn giữ mọi thứ đã làm; đó không phải lời hứa trong điều khoản, mà là một thuộc tính của kiến trúc.
  3. Quyền làm chủ hiệu năng. Profiler của bạn hiển thị các primitive engine mà bạn vốn đã biết cách tối ưu (khoảng cách cull, LOD, thiết lập Nanite), chứ không phải một hộp đen.

Điều đó có nghĩa gì với repo của bạn

Kết quả bake được version như bất kỳ asset nào khác: chúng diff, merge, review được. Các preset về loài và grid của Numivo là những tệp nhỏ, đơn giản mà bạn có thể commit và chia sẻ với đội. Thứ duy nhất không nên đưa vào quản lý phiên bản là cache chỉ mục nội dung cục bộ (nó tự dựng lại); một quy tắc ignore là xong.

Đánh đổi, nói một cách trung thực

Chỉnh sửa thủ tục (procedural) không phá hủy cần đến plugin: một khi đã bake, một sườn đồi là dữ liệu của engine, và chỉnh sửa lại nó theo kiểu procedural nghĩa là mở lại nó bằng Numivo. Chúng tôi cho rằng đó là sự đánh đổi đúng đắn: lựa chọn còn lại (giữ scene phụ thuộc vào một lớp runtime) âm thầm bắt dự án của bạn làm con tin. Các level của bạn nên thuộc về game của bạn, chứ không phải thuộc về công cụ của bạn.

Nếu triết lý đó khớp với cách đội bạn làm việc, gói miễn phí là cách dễ nhất để thử: rải một thứ gì đó, bake nó, xóa plugin, và nhìn scene chẳng hề bận tâm.