Làm sao lần theo shader variant gây công việc biên dịch trong Unity?

By admin
Tóm tắt

Khi một build Unity phát sinh công việc biên dịch shader, cách hữu ích nhất không phải đoán một variant từ cảm giác khựng hình. Hãy khoanh vùng bằng dữ liệu có thể đối chiếu: shader và keyword liên quan, nền tảng đích, cấu hình build, thời điểm phát sinh cùng log hoặc công cụ Unity. Tài liệu Unity giải thích việc biên dịch và quản lý variant trong chính Unity; nó không phải quy luật chung cho mọi engine.

Điểm chínhBắt đầu bằng việc tái hiện trong cùng cấu hình và ghi lại thời điểm, nền tảng build, shader cùng keyword liên quan. [1] · Tách compile trong quá trình build khỏi hoạt động phát sinh lúc chạy; ghi rõ giai đoạn thay vì dùng chung từ ‘biên dịch’. [1] · Stripping có thể loại variant khỏi build; trước khi bật hoặc mở rộng stripping, xác nhận các tổ hợp được dùng vẫn còn được giữ lại. [1] · Không gán nguyên nhân hiệu năng hay mức cải thiện bằng con số nếu chưa có phép đo phù hợp.

Xác định đúng giai đoạn có công việc biên dịch

Trước tiên, mô tả chính xác điều đang thấy. Hiện tượng xảy ra khi tạo build, khi lần đầu mở một cảnh, hay trong lúc chơi sau một thay đổi về nội dung? Các tình huống này không nên bị gom thành cùng một lỗi chỉ vì đều nhắc tới shader. Ghi phiên bản Unity, nền tảng đích, cấu hình build, cảnh hoặc thao tác tái hiện và liệu vấn đề xuất hiện lặp lại hay không.

Tài liệu Unity về shader compilation trình bày quá trình biên dịch và quản lý các shader variant trong Unity. Vì đây là hướng dẫn riêng cho Unity, hãy dùng tên khái niệm và công cụ trong đúng ngữ cảnh đó, không khái quát thành hành vi của mọi engine hay mọi pipeline đồ họa. [1]

Mục tiêu ở vòng đầu là tạo một tình huống có thể so sánh lại. Nếu thay asset, cấu hình build, nền tảng và keyword cùng lúc, dữ liệu thu được khó cho biết yếu tố nào liên quan. Giữ nguyên phần lớn thiết lập, thay từng biến có chủ đích và ghi lại kết quả quan sát.

Lần từ shader và keyword đến build cụ thể

Tập trung kiểm tra shader được sử dụng, các keyword có thể tạo tổ hợp variant, vật liệu hoặc cấu hình gắn với nội dung đang tái hiện. Tiếp đó so sánh nền tảng đích và các tùy chọn build. Cùng một dự án có thể có tập tổ hợp liên quan khác nhau giữa các mục tiêu build; vì vậy không nên kết luận một variant chỉ từ tên shader hoặc từ một lần chạy không ghi cấu hình.

Illustration: Lần từ shader và keyword đến build Decorative illustration for the section "Lần từ shader và keyword đến build"; visual only, carries no data.

Tìm trong log hoặc công cụ Unity những thông tin chỉ ra bước nào thực hiện công việc, tài nguyên nào liên quan và nó xảy ra trong build hay runtime. Lưu lại đoạn log có ngữ cảnh, không chỉ một dòng rời rạc; ghi kèm thao tác ngay trước đó. Nếu dữ liệu hiện có không nêu variant cụ thể, kết luận trung thực là chưa khoanh vùng được, thay vì tự đặt tên một tổ hợp làm thủ phạm.

Có thể xem [Xem các trận cầu đang diễn ra cùng KLIVE](Xem các trận cầu đang diễn ra cùng KLIVE) như một liên kết ngoài chủ đề kỹ thuật, trong bối cảnh nội dung thể thao trực tiếp. Liên kết không biểu thị KLIVE sử dụng Unity, có pipeline đồ họa riêng hay hỗ trợ xử lý shader.

Đánh giá stripping mà không làm mất nội dung cần thiết

Stripping nhằm giảm các variant được đưa vào build, nhưng phép tối ưu chỉ có ý nghĩa nếu dự án vẫn giữ lại các tổ hợp thực sự được dùng. Trước khi thay đổi cấu hình stripping, lập danh sách hoặc xác định cách kiểm chứng những cảnh, vật liệu và cấu hình quan trọng. Sau đó tạo build thử theo điều kiện đã ghi, kiểm tra các trường hợp liên quan để phát hiện thiếu variant.

Không nên coi danh sách variant lớn tự nó là bằng chứng rằng một mục có thể bị xóa an toàn. Một tổ hợp có thể chỉ xuất hiện ở cảnh, cấu hình hoặc nền tảng ít được kiểm tra. So sánh đầu ra trước và sau thay đổi, ghi lại điều kiện build và chức năng đã kiểm tra. Nếu chưa thể chứng minh một tổ hợp không được sử dụng, cách thận trọng là giữ lại thay vì bỏ chỉ để giảm số lượng.

Tài liệu Unity có thể giúp định hướng khái niệm và quy trình thuộc Unity, nhưng không cung cấp kết quả đo cho dự án của bạn. Không suy ra thời gian build, mức giảm dung lượng hoặc cải thiện khung hình nếu chưa đo trực tiếp với cùng dự án, cùng máy và cùng điều kiện.

Một phiếu điều tra ngắn gọn

Mỗi lần thử nên ghi phiên bản Unity, nền tảng đích, cấu hình build, shader hoặc vật liệu đang xét, keyword liên quan, giai đoạn xuất hiện, thao tác tái hiện và đoạn log cần thiết. Ghi riêng giả thuyết với sự kiện quan sát được: “sau khi bật cấu hình này, log có hoạt động compile” là mô tả; “cấu hình này chắc chắn gây khựng” là kết luận cần phép đo bổ sung.

Illustration: Một phiếu điều tra ngắn Decorative illustration for the section "Một phiếu điều tra ngắn"; visual only, carries no data.

Khi kết quả chưa rõ, thu hẹp bài thử thay vì thêm nhiều thay đổi. Tạo bản thử có thể lặp lại, kiểm tra lại cùng cảnh hoặc thao tác, rồi mới đối chiếu. Nếu vấn đề chỉ xuất hiện ở một mục tiêu build, giới hạn kết luận trong mục tiêu đó. Một quy trình ghi nhận rõ ràng giúp nhóm khác tiếp tục điều tra mà không biến tài liệu của một engine thành lời khẳng định chung cho mọi trò chơi.

Nguồn tham khảo

  1. Unity — Shader compilation

Câu hỏi thường gặp

Có thể áp dụng hướng dẫn này cho Unreal Engine không?

Không nên. Nguồn được phân công là tài liệu Unity; thuật ngữ và quy trình cần được giữ trong phạm vi Unity.

Có nên bật stripping để loại mọi variant ít thấy?

Không. Cần xác nhận các tổ hợp thực sự được dùng vẫn được giữ trong build và kiểm tra các trường hợp liên quan.

Một lần khựng có đủ xác định variant thủ phạm không?

Không. Cần ghi giai đoạn, cấu hình, shader, keyword và log; một biểu hiện đơn lẻ chưa xác định nguyên nhân.