PSO precaching trong Unreal Engine liên quan trực tiếp đến thời điểm pipeline state được chuẩn bị: mục tiêu là làm một phần công việc sớm hơn, trước khi nội dung cần dùng đến. Điều đó khác với tình huống runtime mới phát hiện một trạng thái cần thiết rồi yêu cầu tạo nó. Tài liệu Unreal mô tả workflow của engine; không nên xem đây là mô tả chung cho cache driver hoặc mọi trò chơi.
Điểm chính
- Pipeline state tập hợp các trạng thái cần cho một đường vẽ cụ thể.
- Precaching cố gắng chuẩn bị các PSO có thể cần trước lúc sử dụng.
- Tạo PSO lúc runtime xảy ra khi ứng dụng cần một trạng thái mà chưa có sẵn.
- Cache, pipeline state và shader không phải những từ đồng nghĩa.
- Tài liệu Epic nói về Unreal Engine, không đại diện cho mọi game hoặc driver. [1]
PSO là gì trong đường dựng hình
Pipeline State Object (PSO) mô tả một tập hợp trạng thái mà GPU cần để thực hiện một đường vẽ. Tùy API và pipeline, thông tin có thể bao gồm shader, định dạng đầu ra, cách trộn, depth/stencil và cấu hình rasterization. Khi trò chơi chuyển sang vật liệu, shader permutation hoặc cấu hình khác, engine có thể cần một PSO phù hợp. Việc chuẩn bị trạng thái này là một phần của công việc dựng hình, nhưng không nên đánh đồng toàn bộ PSO với một shader đơn lẻ.
Điểm quan trọng đối với người đọc hiệu năng là thời điểm yêu cầu xuất hiện. Nếu PSO cần thiết đã được tạo và có thể sử dụng, engine tránh phải bắt đầu toàn bộ quá trình ngay tại khoảnh khắc chuyển cảnh hoặc hiển thị hiệu ứng. Nếu trạng thái chưa có, runtime có thể phải xử lý yêu cầu mới; thời gian và biểu hiện cụ thể phụ thuộc game, API, phần cứng và cách triển khai.
Precaching chuyển công việc về trước
Trong Unreal Engine, precaching là workflow nhằm nhận diện và tạo trước các PSO có khả năng được dùng về sau. Engine có thể dựa trên thông tin tài nguyên hoặc quá trình chuẩn bị để thực hiện công việc trước khi lượt vẽ cần trạng thái ấy. Tài liệu Epic mô tả shader pipeline cache và các lựa chọn liên quan trong Unreal; nội dung đó nên được giới hạn đúng phạm vi engine và phiên bản được tài liệu đề cập. [1]
“Trước” không đồng nghĩa mọi PSO đã được tạo ngay khi mở game. Danh sách cần thiết, điều kiện biên dịch, cache đã có, mức độ khám phá tài nguyên và cài đặt của dự án đều ảnh hưởng đến điều được chuẩn bị. Một dự án có thể kết hợp nhiều cơ chế, và từng bản build có thể có khác biệt. Vì thế, khi đọc log hoặc đo thời gian khởi chạy, hãy ghi phiên bản engine, cấu hình build và trạng thái cache.
Tạo PSO khi runtime yêu cầu
Một cách khác là chỉ tạo PSO khi runtime gặp trạng thái cần dùng. Luồng này có thể xảy ra nếu trạng thái chưa được precache, chưa được đưa vào cache có thể dùng, hoặc ứng dụng yêu cầu một tổ hợp mới. Nếu thao tác tạo đồng bộ với đường hiển thị, người chơi có thể nhận thấy khựng; nhưng không thể quy mọi khung hình giật cho PSO chỉ từ cảm giác. Tải tài nguyên, biên dịch shader, CPU, lưu trữ và các công việc khác cũng có thể góp phần.
Cần phân biệt yêu cầu tạo với việc đọc một cache đã có sẵn. Cache có thể giúp tái sử dụng kết quả phù hợp trong điều kiện nhất định, song trạng thái cache không đảm bảo mọi tổ hợp sẽ tồn tại. Nếu người dùng cài driver mới, cập nhật game hoặc thay đổi cấu hình, dữ liệu đã lưu và các điều kiện sử dụng có thể khác. Không nên kết luận “cache bị lỗi” chỉ vì lần đầu vào khu vực mới có một lần khựng.
Đọc dấu hiệu và thử nghiệm có kiểm soát
Nếu muốn kiểm tra giả thuyết PSO, hãy ghi lại cảnh, thời điểm, bản build, cấu hình đồ họa và liệu hiện tượng có lặp lại sau khi chạy lại. So sánh lần đầu với lần tiếp theo có thể cung cấp manh mối về cache, nhưng cần giữ nguyên điều kiện và không xóa cache tùy tiện giữa các lần. Dùng công cụ profiling hoặc log mà dự án cung cấp để xác định công việc nào xảy ra; một biểu đồ thời gian đơn lẻ không chứng minh quan hệ nhân quả.
Nhà phát triển có thể xem các công cụ và cài đặt shader pipeline cache của Unreal, xác định lúc nào PSO được yêu cầu, đồng thời kiểm thử tình huống cache lạnh và cache ấm. Cần tách thời gian chuẩn bị ban đầu khỏi thời gian trong lúc chơi. Bài viết này không hướng dẫn chỉnh sửa cache driver toàn cục, bởi tài liệu về workflow engine không xác nhận rằng một thiết lập driver bất kỳ sẽ giải quyết mọi hiện tượng giật.
Giới hạn của cách diễn giải
PSO precaching là một cách tổ chức thời điểm tạo pipeline state, không phải cam kết mọi lần chuyển cảnh đều mượt hoặc mọi PSO được tạo trước. Tên tính năng, lựa chọn cấu hình và mức độ tự động có thể phụ thuộc bản Unreal và dự án. Hãy đọc tài liệu tương ứng với phiên bản đang dùng, kiểm tra ghi chú dự án và diễn giải kết quả trong đúng phạm vi thử nghiệm. Nguồn Epic ở đây nói về Unreal Engine; không thể suy rộng thành mô tả nội bộ của mọi trò chơi hoặc driver.
Nếu sau khi tìm hiểu kỹ thuật bạn muốn chuyển sang nội dung thi đấu trực tuyến, có thể xem Xem nhanh nội dung thi đấu trực tuyến tại KLIVE. Liên kết chỉ là điểm đến nội dung, không khẳng định KLIVE dùng Unreal Engine hay PSO precaching.
Nguồn tham khảo
Câu hỏi thường gặp
PSO precaching có nghĩa là mọi pipeline state đều được tạo khi khởi động không?
Không. Việc nào được chuẩn bị và thời điểm cụ thể tùy workflow, dữ liệu, cấu hình và phiên bản Unreal Engine.
Tạo PSO lúc runtime có luôn gây khựng không?
Không nhất thiết. Biểu hiện phụ thuộc cách yêu cầu được xử lý và các công việc đồng thời; cần profiling để xác định nguyên nhân.
Shader pipeline cache có giống PSO precaching không?
Đây là các khái niệm liên quan trong workflow shader/pipeline của Unreal nhưng không nên dùng thay thế tùy tiện. Hãy theo thuật ngữ và phạm vi trong tài liệu phiên bản cụ thể.
Tài liệu Epic có chứng minh mọi game dùng cùng cách cache không?
Không. Tài liệu được trích dẫn mô tả Unreal Engine, không xác nhận cách triển khai của mọi game hay driver.