Tóm lại: "tối ưu ở cuối" là cách các dự án chết ở khâu chứng nhận. Một ngân sách hiệu năng (trần thời gian khung và bộ nhớ được nhất trí trước khi nội dung được dựng) biến tối ưu từ một khủng hoảng thành một kiểm tra thường lệ. Ngân sách mili-giây thay vì đa giác, chia khung như một cái bánh, đo tại ba camera cố định, làm cho con số hiện ra nơi công việc diễn ra, và kéo các đòn bẩy theo thứ tự hiệu quả-chi phí khi một cảnh chuyển đỏ. Bài này đưa cả hệ thống, kèm con số khởi đầu bạn có thể điều chỉnh.
Tầm nhìn luôn là hóa đơn: khoảng cách vẽ tối đa, mọi hệ thống trên màn hình cùng lúc, mọi vòng LOD hoạt động. Hãy ngân sách cho cảnh này: hành lang tự lo cho nó.
Ngân sách thời gian khung, không phải đa giác
Ngân sách đa giác là di tích: GPU hiện đại nghẹt ở draw call, overdraw, bóng đổ và băng thông bộ nhớ từ rất lâu trước tam giác thô. Hãy ngân sách cái bạn thực sự đo: mili-giây theo hệ thống, theo cảnh.
Một game 60 fps sở hữu 16,6 ms mỗi khung; ở 30 fps, 33,3 ms. Đó là toàn bộ ngân sách, chia sẻ bởi mọi thứ: lối chơi, vật lý, AI, VFX, UI và môi trường. Lát của môi trường là một cuộc thương lượng với render và lối chơi, nhưng nó phải là một con số, được nhất trí và viết ra, nếu không mọi tranh luận về việc một cảnh "quá đắt" sụp thành khẩu vị và thâm niên. Cạnh thời gian khung, hãy cho trần với những lượng ràng buộc nó:
- draw call theo cảnh (ràng CPU từ rất lâu trước khi GPU đầy),
- bộ nhớ texture và mesh theo vùng streaming (con số quyết định bạn stream hay giật),
- đèn đổ bóng trong tầm nhìn,
- điểm nóng overdraw: thảm thực vật và VFX là những nghi phạm thường lệ.
Trần chính xác phụ thuộc nền tảng và engine; kỷ luật có trần là cái chuyển sang mọi dự án bạn từng phát hành. Một con số bạn có thể sai bại một cảm giác bạn chỉ có thể cãi.
Chia khung như một cái bánh, bằng mili-giây
Cho mỗi bộ phận một lát (lối chơi, VFX, UI, môi trường) rồi chia lại lát môi trường: địa hình, thảm thực vật, prop, nước. "Khu rừng này có quá đắt không?" trở thành một câu hỏi khách quan.
Một cách chia khởi đầu khả thi cho một tựa 60 fps, thương lượng lại theo dự án: môi trường tổng 6–8 ms, trong đó địa hình ~1,5, thảm thực vật ~2–2,5, prop và kết cấu ~1,5, nước và khí quyển ~1. Điểm mấu chốt không phải những con số chính xác này; mà là khi khu rừng đo 4 ms so với lát 2,5 ms, cuộc trò chuyện trở thành "ta kéo đòn bẩy nào" thay vì "lỗi của ai".
Các lát cũng bảo vệ chống lại việc tối ưu quá mức, một thất bại thật và đắt. Một hệ thống ngồi tốt dưới lát của nó là lời mời tiêu phần dư vào chất lượng, không phải một chiếc cúp để bảo vệ. Đội không có lát có xu hướng tối ưu bất cứ cái gì kỹ sư ồn ào nhất để ý, vốn hiếm khi là nút thắt thật; biểu đồ tròn nói cho bạn mili-giây thực sự đã đi đâu.
Đo tại ba camera cố định
Ngân sách cho cảnh thực tế tệ nhất, không phải trung bình: chọn ba "camera ngân sách" cố định mỗi bản đồ (tầm nhìn tệ nhất, không gian chiến đấu dày nhất, nội thất nhộn nhịp nhất) và đo đúng ở đó, mỗi lần.
Bay dạo ngẫu nhiên tạo ra số ngẫu nhiên và các tranh luận không thể phản nghiệm. Camera cố định tạo ra đường xu hướng: cùng một cảnh, đo hằng tuần, cho thấy chính xác một sự thoái lui đáp xuống khi nào ở đâu và hỏi ai. Tầm nhìn tệ nhất xứng vai chính vì nó chồng mọi thứ cùng lúc: khoảng cách vẽ tối đa, mọi vòng LOD, địa hình, nước và trời đồng thời. Một bản đồ giữ ngân sách ở tầm nhìn của nó giữ được gần như khắp nơi; hành lang nịnh bạn, còn tầm nhìn nói sự thật.
Lưu các vị trí camera trong bản đồ để ai cũng có thể tái hiện đúng khung hình. "Chạy ổn trên máy tôi ở một góc nào đó" không phải dữ liệu; "camera ngân sách 2 đo 9,2 ms trên cấu hình tối thiểu, tăng từ 7,8 tuần trước" là một báo cáo lỗi có nghi phạm.
Làm cho ngân sách hiện ra nơi công việc diễn ra
Một ngân sách trong wiki thì chết; nó sống như lớp phủ thống kê trong lúc bài trí, một kiểm tra so với trần trước khi merge nội dung, và các cảnh báo khi một lần nướng sẽ vượt số thực thể.
Nghệ sĩ vui vẻ đạt ngân sách khi phản hồi là tức thì, và bực bội với chúng khi chúng đến như một phiếu lỗi ba tháng sau khi công việc đã phát hành. Phía công cụ quan trọng ở đây theo một cách lặng lẽ nhưng quyết định: khi scatter và blending nướng thành các primitive gốc của engine (mesh được instance và foliage thường, như Numivo làm), profiler hiện có của bạn nói sự thật không tô vẽ về chúng, không có runtime plugin làm đục con số, và mọi đòn bẩy tiêu chuẩn (khoảng cách cull, LOD, số thực thể) áp dụng không đổi. Một ngân sách bạn chỉ có thể đo qua một hộp đen là một ngân sách bạn sẽ lặng lẽ thôi tin.
Nhịp rà soát bám trụ
Chụp hằng tuần ba camera ngân sách (năm phút), một kiểm tra trần tự động khi merge nội dung, và một rà soát hằng tháng chính các trần; ngân sách là ước lượng, và sửa đổi trung thực bại vi phạm lặng lẽ.
- Hằng tuần: chụp màn hình ba camera với thống kê bật; ghi thời gian khung và bộ nhớ vào một bảng chung. Xu hướng xuất hiện trong một tháng, và một đỉnh chỉ về công việc của một tuần cụ thể.
- Khi merge: một kiểm tra tự động so cảnh với các trần. Con số đỏ mở một cuộc trò chuyện, không phải một build gãy; mục tiêu là nhận thức, không phải quan liêu, và một chặn cứng dạy người ta lách kiểm tra.
- Hằng tháng: xem lại chính các lát. Thực tế giữa dự án luôn khác các phỏng đoán tiền sản xuất; điều chỉnh ngân sách công khai giữ nó đáng tin. Một ngân sách ai cũng lặng lẽ phớt lờ còn tệ hơn không có, vì nó dạy đội rằng các trần là kịch.
Khi con số chuyển đỏ
Kéo đòn bẩy theo thứ tự hiệu quả-chi phí: khoảng cách cull và thiết lập bóng đổ trước (vài phút, thắng lớn), rồi LOD và impostor, rồi số thực thể, và chỉ cuối cùng mới đến chính nghệ thuật.
Tối ưu là phân loại, không phải phá dỡ. Phá nghệ thuật cuối cùng: phần lớn tầm nhìn vượt ngân sách trở lại xanh từ những thay đổi thiết lập vô hình từ rất lâu trước khi bạn phải xóa bất cứ thứ gì người chơi có thể thấy.
Sai lầm đắt là nhảy thẳng đến "xóa nửa số cây". Mật độ là đòn bẩy dễ thấy nhất và thường không rẻ nhất; một tầm nhìn vượt 2 ms thường trở lại xanh chỉ từ tinh chỉnh khoảng cách bóng và khoảng cách cull, cả hai đều vô hình với người chơi. Xóa nội dung là biện pháp cuối chính vì nó là đòn bẩy duy nhất người chơi có thể thấy; mọi bậc trên nó trên chiếc thang đều miễn phí từ góc nghệ thuật. Đi xuống thang và bạn giữ cái nhìn trong khi thu hồi mili-giây; đi lên từ đáy và bạn làm game xấu hơn trước khi thử các thắng lợi miễn phí.
Con số thực địa đáng ăn cắp
- Khung ở 60 fps: 16,6 ms, môi trường thường thương lượng 6–8 ms
- Một cách chia nhỏ môi trường khả thi: địa hình 1,5 / thảm thực vật 2–2,5 / prop 1,5 / nước & khí quyển 1 (ms)
- Camera ngân sách mỗi bản đồ: 3 (tầm nhìn, chiến đấu, nội thất), lưu trong bản đồ
- Chi phí đo hằng tuần: ~5 phút; giá trị: đường xu hướng thay vì cãi vã
- Thứ tự đòn bẩy khi đỏ: culling → bóng đổ → LOD → thực thể → nghệ thuật
Mini-FAQ
Ai sở hữu ngân sách môi trường? Một người có tên (thường là một tech artist) sở hữu việc đo; các trần được sở hữu chung với render. Ngân sách không có chủ mục ruỗng thành truyền thuyết trong một tháng, vì "mọi người chịu trách nhiệm" nghĩa là không ai đo.
Ngân sách hoạt động thế nào với thời điểm-trong-ngày động? Đo điều kiện ánh sáng tệ nhất ở mỗi camera, không phải đẹp nhất. Bình minh với bóng quét dài thường tốn gấp đôi buổi trưa; một ngân sách chỉ giữ ở buổi trưa là nửa ngân sách, và người chơi sẽ tìm ra giờ đắt.
Tôi có cần tất cả những cái này cho một dự án indie nhỏ không? Thu nhỏ, đừng bỏ. Một camera ngân sách, một trần (thời gian khung trên máy cấu hình tối thiểu), kiểm tra hằng tuần. Thói quen năm phút là cái cứu tháng cuối; bất kể quy mô đội, chế độ hỏng giống hệt: phát hiện chi phí khi nó đắt để sửa.
Còn bộ nhớ so với thời gian khung? Chúng là các ngân sách khác nhau với các chế độ hỏng khác nhau: thời gian khung làm rớt FPS, bộ nhớ làm rớt streaming thành giật hoặc sập. Ngân sách cả hai; trên console, bộ nhớ thường là trần cứng hơn, và đó là cái làm trượt chứng nhận thay vì chỉ cảm thấy tệ.
Ngân sách không phải giới hạn lên tài nghệ: nó là lý do cảnh đẹp vẫn trông đẹp ở 60 fps trên phần cứng người chơi thực sự có. Các đội xem hiệu năng như một ràng buộc thiết kế chung phát hành game đẹp hơn các đội xem nó như một trùm cuối.