
Tưởng tượng một tình huống như thế này: Anh em bỏ 1 đống tiền mua dàn máy tính cấu hình mạnh, đủ chơi điện tử ở độ phân giải 2K hay thậm chí 4K về. Rồi anh em mua tiếp một trò chơi trên Steam, cài xong mở lên thì phát hiện ra, đọc chỉ số tốc độ khung hình là những con số vượt quá mốc 60 hay thậm chí là 120 FPS. Nhưng cảm giác cầm chuột di qua di lại để đổi góc nhìn chẳng mượt chút nào. Đôi lúc còn cảm thấy khựng giật rất khó chịu.
Anh em bắt đầu lên mạng tìm hiểu tại sao máy thì mạnh mà chơi game không mượt, để rồi đọc được trên các diễn đàn và mạng xã hội nước ngoài một cụm từ được nhắc đi nhắc lại: Shader compilation. Vậy rốt cuộc nó là gì, và tại sao quá trình này lại khiến nhiều game bản PC có hiệu năng tệ đến thế?
Đọc thêm: https://tinhte.vn/thread/sao-gan-day-nhieu-game-co-ban-port-pc-hieu-nang-te-den-vay.3635585/
Hiểu một cách cơ bản, shader là những khối code lập trình. Trong thế giới đồ họa 3D, mỗi shader là một phần mềm nho nhỏ thiết kế phục vụ một nhiệm vụ rất cụ thể. Nó có thể dùng thay đổi hình dáng hoặc vị trí một đa giác, lên bố cục texture nền phủ lên một vật thể, hay tính toán những giá trị để phục vụ các shader khác.
Anh em bắt đầu lên mạng tìm hiểu tại sao máy thì mạnh mà chơi game không mượt, để rồi đọc được trên các diễn đàn và mạng xã hội nước ngoài một cụm từ được nhắc đi nhắc lại: Shader compilation. Vậy rốt cuộc nó là gì, và tại sao quá trình này lại khiến nhiều game bản PC có hiệu năng tệ đến thế?
Đọc thêm: https://tinhte.vn/thread/sao-gan-day-nhieu-game-co-ban-port-pc-hieu-nang-te-den-vay.3635585/
Sao gần đây nhiều game có bản port PC hiệu năng tệ đến vậy?
Gần đây nhất, bài review nhiều phản hồi nhất của 1 người chơi trên Steam dành cho tác phẩm Wild Hearts đang rất hot, là một đánh giá tiêu cực. Đó chỉ là một trong số khoảng 1700 đánh giá tiêu cực dành cho phiên bản PC của trò chơi săn quái vật này:…
tinhte.vn
Shader là gì?
Hiểu một cách cơ bản, shader là những khối code lập trình. Trong thế giới đồ họa 3D, mỗi shader là một phần mềm nho nhỏ thiết kế phục vụ một nhiệm vụ rất cụ thể. Nó có thể dùng thay đổi hình dáng hoặc vị trí một đa giác, lên bố cục texture nền phủ lên một vật thể, hay tính toán những giá trị để phục vụ các shader khác.
Quảng cáo
Khi những API đồ họa như Direct3D hay OpenGL bắt đầu hỗ trợ shader, thời điểm game đồ họa 3D bắt đầu phổ biến, những shader này rất thô sơ và đơn giản. Lấy ví dụ những pixel shader ra mắt trên PC hơn 20 năm về trước, chỉ có đủ không gian viết 4 lệnh phủ texture lên vật thể, và 8 lệnh tính toán. Còn bây giờ, với những phiên bản API mới, shader không hề có giới hạn trong tổng số lệnh được viết trong những dòng code lập trình.
Mỗi API lại dùng một khái niệm riêng khi mô tả các shader, nhưng có thể quy chúng vào 7 dạng chính. Bốn dạng đầu, vertex, geometry, hull và domain đảm nhiệm việc xử lý đa giác, tạo ra những bộ khung sườn thế giới ảo, trước khi áp texture hay màu sắc lên. Kế đến, phủ màu cho thế giới ảo 3D là pixel shader, và gần đây là ray shader. Chúng làm những phép tính phức tạp để xác định cách ánh sáng được mô phỏng trong game, hay texture vật thể và ánh sáng khi kết hợp với nhau sẽ tạo hiệu ứng ra sao. Cuối cùng là compute shader, một dạng code tính toán logic đa dụng, không phụ thuộc cố định vào nhu cầu xử lý đồ họa.
Game đồ họa 3D hiện đại dùng hàng nghìn shader như vậy để tính toán từng khung hình hiển thị trên màn hình của anh em. Có những shader vừa ngắn vừa đơn giản, nhưng cũng có shader cực kỳ dài và phức tạp, nuốt hết tài nguyên GPU trong quá trình chơi.
Khi nào cần thực hiện shader compilation?
Anh em lập trình viên viết code xong, dù là ngôn ngữ nào đi chăng nữa, cũng phải ấn nút compile để biến những dòng code trở thành lệnh nhị phân mà phần cứng máy tính có thể hiểu và xử lý. Shader cũng vậy, chúng được viết dựa trên những ngôn ngữ lập trình cụ thể, cơ bản để dễ thực hiện và để con người dễ hiểu shader nào làm công việc gì. ShaderToy là một ví dụ. Công cụ trực tuyến này cho phép người dùng viết code bằng ngôn ngữ OpenGL Shading Language, rồi render đồ họa bằng WebGL API.
Một ví dụ khác, những dòng code trong tấm hình dưới đây là một phần của quá trình tái tạo bề mặt môi trường trong tấm hình render. Anh em chơi điện tử cơ bản chẳng cần hiểu những dòng code đó có ý nghĩa gì. Điều hài hước là GPU và CPU của anh em cũng không hiểu mấy dòng này. Những dòng chữ con người viết ra phải được compile lại từ WebGL thành lệnh nhị phân để GPU hiểu và thực hiện các lệnh. Trong trường hợp này, driver GPU sẽ thực hiện quá trình compile code, sử dụng sức mạnh của CPU:
Quảng cáo
ShaderToy là một giải pháp rất sơ sài vì chỉ có vài shader. Chỉ một trong số đó là shader phức tạp về độ dài và lệnh xử lý. Nhờ đó CPU chỉ mất một phần nhỏ của một giây để xử lý hết quá trình shader compilation.
Nhưng với một trò chơi đồ họa 3D hiện đại, mọi thứ khác hoàn toàn. Di chuyển trong thế giới mở rộng lớn và đầy chi tiết, hay chuyển sang một màn chơi khác, hay chiến đấu với một đối thủ mới toanh đều bắt trò chơi tải những shader mới từ ổ cứng, rồi compile chúng để CPU và GPU biết phải làm gì tiếp theo. Không như ShaderToy với vài chục shader, một trò chơi hiện đại cần tới hàng nghìn shader khác nhau.
Game trên máy console như PS5 và Xbox Series X thông thường đều diễn ra quá trình shader compilation trước cả khi anh em bắt đầu chơi. Console làm được điều này vì cả chục triệu máy bán ra thị trường đều giống nhau chằn chặn, không có một chút sai khác gì về cấu hình phần cứng bên trong cả. Các hãng làm game cho console chỉ việc tối ưu trò chơi cho một dạng CPU và GPU duy nhất, driver vận hành chúng cũng không thay đổi và nâng cấp quá thường xuyên.
Điều này trên PC là bất khả thi. Không một dàn PC nào có linh kiện giống nhau 100%, từ CPU, chipset, GPU cho đến cả RAM và ổ cứng. Đấy còn chưa kể tới khác biệt về hệ điều hành nữa. Hoàn toàn không thể compile sẵn shader cho một game PC, vì chạy ổn trên cấu hình này sẽ gặp lỗi trên cấu hình khác.
Vì thế các nhà phát triển game luôn chọn những giải pháp đa dạng hơn để tối ưu game PC.
Quảng cáo
Vừa chơi vừa compile shader, hay compile từ đầu?
Một giải pháp thường được áp dụng là chuyển đổi hết những shader sẽ được game ứng dụng khi trò chơi được khởi động. Quá trình này sẽ được diễn ra ở menu chính, có lúc lại được đưa luôn vào quá trình tải một màn chơi.
Nếu một game có hàng chục nghìn shader, vừa vào đã compile hết chúng cùng lúc sẽ khiến thời gian chờ đợi trở nên rất dài. Những vấn đề trong việc quản lý thư viện shader, thứ rất dễ xảy ra trong quá trình làm game, sẽ chỉ khiến tình trạng này trở nên tồi tệ hơn trong mắt người chơi. Quản lý kém thì vừa tốn thời gian lẫn dung lượng bộ nhớ để lưu trữ và compile những dòng code mà game chưa chắc đã dùng tới.
Nhưng chí ít, quá trình gọi là pre-compilation mà anh em chơi game PC thường thấy gần đây luôn có một lợi thế. Shader code luôn luôn ở trong trạng thái sẵn sàng được driver GPU lấy để ra lệnh cho GPU làm việc.
Ở khía cạnh ngược lại là vừa chơi vừa compile shader, chỉ lôi shader ra chuyển đổi thành lệnh nhị phân khi cần thiết, khi có mô hình vật thể mới xuất hiện. Cách làm này sẽ giảm tối đa thời gian tải màn chơi. Nhưng ngược lại, khi cần tải những shader phức tạp phục vụ khắc họa vật thể 3D trong thế giới ảo, quy trình này có thể khiến dây chuyền xử lý đồ họa bị đình trệ, nhất là lúc CPU bị lấy hết hiệu năng để chuyển đổi những dòng code trong shader thành lệnh cho GPU làm việc.
Hệ quả trực tiếp của việc giãn đoạn chuỗi vận hành của GPU chính là thứ anh em phải chịu khi chơi game: Những đoạn khựng giật, sụt khung hình rất khó chịu khi chơi game, thứ còn được gọi bằng khái niệm stuttering. Với những game cần điều chỉnh góc nhìn nhiều, như Elden Ring, Wo Long hay Wild Hearts ra mắt gần đây, tình trạng PC vừa xử lý game cho anh em chơi, vừa xử lý shader compilation tạo ra trải nghiệm hoàn toàn không ổn chút nào.
Đương nhiên game PC khựng giật không chỉ có nguyên nhân duy nhất từ quá trình vừa chơi vừa compile shader. Nhưng nguyên nhân này đang càng lúc càng phổ biến. Nguyên nhân là xu hướng game bom tấn bây giờ càng lúc càng muốn chạm tới ngưỡng khắc họa thế giới ảo đẹp và chân thực như ngoài đời, hay chí ít là nhiều hiệu ứng bắt mắt, nhất là đối với những game thế giới mở. Vì thế, shader trong game càng lúc càng dài và phức tạp, số lượng cũng tăng theo cấp số nhân.
Lẽ thường, càng nhiều shader thì phần cứng PC càng mất nhiều thời gian xử lý. Vậy là tình trạng khựng giật cũng xảy ra thường xuyên hơn.
Có những trò chơi ứng dụng giải pháp đề phòng trong quá trình compile shader. Ở menu chính, những shader chủ yếu và phức tạp được tải trước, rồi tới lúc nào cần những shader khác thì mới tải lúc game yêu cầu. Bản thân giải pháp đó cũng là một thử thách không nhỏ trong quá trình tối ưu game trên PC.
Từng có thời điểm, anh em đã quá quen với tình trạng game phát triển bằng Unreal Engine 4 gặp tình trạng khựng giật. Nhưng cũng có những game dùng engine khác gặp tình trạng tương tự, ví dụ Horizon Zero Dawn và Death Stranding, ứng dụng bộ engine Decima chẳng hạn. Phải nhờ tới những bản cập nhật sau này, tình trạng ấy mới được giải quyết.
Các hãng game có thể làm gì để giảm tình trạng khựng giật?
Nói vậy là vì, đối với chúng ta, ngoài việc chơi và chờ bản cập nhật sửa lỗi khựng giật, thì anh chị em gamer chẳng làm được gì nhiều để cải thiện tình trạng này cả. Vì CPU đảm nhiệm hết quá trình dịch code shader thành lệnh nhị phân, giảm thiểu tối đa số tác vụ chạy nền có thể phần nào giúp game bớt khựng. Một giải pháp khác là hạ chất lượng đồ họa của game xuống. Hết rồi, không còn gì anh em có thể làm được nữa, vì CPU cùng lúc còn phải vẽ khung hình đa giác và xử lý những thuật toán logic để game hoạt động nữa.
Vài trò chơi bây giờ có lựa chọn compile hết shader ngay khi game khởi động. Horizon Zero Dawn với bản patch mới là một ví dụ. Trên những cấu hình máy tính thấp, nếu thấy quá trình này diễn ra quá lâu, người dùng hoàn toàn có quyền bỏ qua để vào chơi luôn, đổi lại là vài lúc khựng giật khi chơi.
Hogwarts Legacy thì chắc cú hơn. Game không có lựa chọn bỏ qua shader compilation ở đầu game, vào một cái là phải đợi chạy cho xong mới được chơi, trước cả khi vào đến menu chính. Vấn đề nằm ở chỗ, cả hai giải pháp nói trên đều không hoàn hảo, vì vào chơi game vẫn cần tải những shader khác.
Một giải pháp khác đến từ chính các hãng sản xuất card đồ họa, AMD và Nvidia, cụ thể hơn là cách họ viết driver GPU phục vụ việc compile shader. Driver đồ họa mà AMD và Nvidia viết luôn có lựa chọn lưu những shader đã được compile sẵn từ những game phổ biến trong một thư mục, nhưng một khi game hoặc driver cập nhật, quá trình này phải thực hiện lại từ đầu. Đấy là lý do anh em chơi Call of Duty mấy bản mới gần đây, cập nhật game hay cập nhật driver đồ họa, quá trình Shader Optimization ở đầu game luôn được thực hiện lại.
Sẽ như thế nào nếu chúng ta có một dịch vụ trực tuyến cho phép tải nhanh mọi shader của các game phổ biến, đã được phần cứng máy tính thực hiện quá trình compile và lưu trữ trực tuyến, phục vụ cho mọi cấu hình máy và driver đồ họa? Valve đã có dịch vụ như thế rồi, nhưng chỉ phục vụ những game chạy trên API OpenGL và Vulkan, chứ chưa có cho DirectX. Và bản thân tính năng này cũng chỉ là lý thuyết, hiếm khi được ứng dụng tốt.
Suy cho cùng, gần như mọi nhiệm vụ đều phải đổ vào bàn tay của các lập trình viên ở các hãng game. Chỉ có họ mới đủ khả năng tối ưu trò chơi trên PC, để giảm thiểu tác động của quá trình shader compiling. Có những hãng game làm rất tốt nhiệm vụ này, cố hết sức để giảm tối đa tình trạng khựng giật. Infinity Ward là một ví dụ. Những cái tên lớn khác, FromSoftware chẳng hạn, thì không làm được như thế.
Nói riêng ví dụ Infinity Ward với hai bản Modern Warfare ra mắt gần đây. Họ giấu rất thông minh quá trình compile shader, từ menu đến cắt cảnh hay những đoạn phim giữa màn chơi, để bất kỳ lúc nào anh em cầm chuột phím điều khiển nhân vật bắn nhau, game luôn luôn mượt.
Đấy chính là kinh nghiệm.
Một ví dụ khác là lúc làm game bằng Unreal Engine 4, bề mặt mọi vật thể trong game và những khu vực môi trường đều được tạo ra bởi những thứ gọi là "materials". Mặc định, tạo ra những "material" này sẽ tạo ra rất nhiều shader, nhiều cái trong số chúng không hề cần dùng tới trong quá trình xử lý game. Nếu không quản lý tốt quá trình này, thì tới khi thử nghiệm trò chơi trước khi phát hành, vấn đề sẽ hiện ra rất rõ ràng.
Khi ấy, quản lý dự án phát triển game sẽ phải đổ cả sức người sức của để giải quyết vấn đề. Nhưng với áp lực ra mắt game đúng hẹn, đôi khi một trò chơi sẽ được phát hành trong tình trạng không hề hoàn hảo. Wild Hearts gần đây chính là một ví dụ.
Đấy chính là lúc những bản cập nhật ra mắt sau này của một trò chơi sẽ giải quyết được vấn đề. Nhưng cập nhật bản vá cũng đồng nghĩa với việc các nhà phát triển không đổ nguồn lực đúng mức vào phiên bản PC, cả trong quy trình phát triển lẫn quản lý chất lượng.
Một thói quen khá xấu đang hình thành. Nếu game đủ hay, anh em vẫn sẽ sẵn sàng mua chúng về bất chấp những vấn đề trong hiệu năng trên bản PC, vì đảm bảo sau đó kiểu gì cũng sẽ có bản cập nhật giải quyết tình trạng stuttering. Chính điều đó khiến nhiều dự án game, hay đúng hơn là quản lý dự án cảm thấy ỷ lại, không sắp xếp sức người sức của hợp lý trong lúc game phát triển và tối ưu bản PC, với tâm lý "để game ra tính sau."
Có khi nào, chính chúng ta cũng có quyền lực và khả năng giải quyết tận gốc tình trạng game PC vừa ra mắt vận hành không ưng ý, bằng chính túi tiền của bản thân?
Theo Techspot
==***==
==***==
Nơi hội tụ Tinh Hoa Tri Thức - Khơi nguồn Sáng tạo
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com
---
Khóa học Hacker và Marketing từ A-Z trên ZALO!
Khóa học Hacker và Marketing từ A-Z trên Facebook!
Bảo mật và tấn công Website - Hacker mũ trắng
KHÓA HỌC LẬP TRÌNH PYTHON TỪ CƠ BẢN ĐẾN CHUYÊN NGHIỆP
Khóa học Lập trình Visual Foxpro 9 - Dành cho nhà quản lý và kế toán
Khóa học hướng dẫn về Moodle chuyên nghiệp và hay Xây dựng hệ thống đào tạo trực tuyến chuyên nghiệp tốt nhất hiện nay.
Khóa học AutoIt dành cho dân IT và Marketing chuyên nghiệp
Khoá học Word từ cơ bản tới nâng cao, học nhanh, hiểu sâu
Khóa học hướng dẫn sử dụng Powerpoint từ đơn giản đến phức tạp HIỆU QUẢ Khóa học Thiết kế, quản lý dữ liệu dự án chuyên nghiệp cho doanh nghiệp bằng Bizagi Khóa học Phân tích dữ liệu sử dụng Power Query trong Excel
Khóa học Lập trình WEB bằng PHP từ cơ bản đến nâng cao
Khóa học "Thiết kế bài giảng điện tử", Video, hoạt hình kiếm tiền Youtube bằng phần mềm Camtasia Studio Khóa học HƯỚNG DẪN THIẾT KẾ VIDEO CLIP CHO DÂN MARKETING CHUYÊN NGHIỆP HƯỚNG DẪN THIẾT KẾ QUẢNG CÁO VÀ ĐỒ HỌA CHUYÊN NGHIỆP VỚI CANVA Hãy tham gia khóa học để trở thành người chuyên nghiệp. Tuyệt HAY!😲👍
GOOGLE SPREADSHEETS phê không tưởng Hãy tham gia khóa học để biết mọi thứ
Khóa học sử dụng Adobe Presenter-Tạo bài giảng điện tử
Để thành thạo Wordpress bạn hãy tham gia khóa học Khóa học sử dụng Edmodo để dạy và học hiện đại để thành công ==***== Bảo hiểm nhân thọ - Bảo vệ người trụ cột Cập nhật công nghệ từ Youtube tại link: congnghe.hocviendaotao.com
Tham gia nhóm Facebook
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com
Bảo mật và tấn công Website - Hacker mũ trắng
KHÓA HỌC LẬP TRÌNH PYTHON TỪ CƠ BẢN ĐẾN CHUYÊN NGHIỆP

Khóa học AutoIt dành cho dân IT và Marketing chuyên nghiệp
Khoá học Word từ cơ bản tới nâng cao, học nhanh, hiểu sâu
Khóa học hướng dẫn sử dụng Powerpoint từ đơn giản đến phức tạp HIỆU QUẢ
Khóa học Thiết kế, quản lý dữ liệu dự án chuyên nghiệp cho doanh nghiệp bằng Bizagi
Khóa học Phân tích dữ liệu sử dụng Power Query trong Excel
Khóa học Lập trình WEB bằng PHP từ cơ bản đến nâng cao
kiếm tiền Youtube bằng phần mềm Camtasia Studio
Khóa học HƯỚNG DẪN THIẾT KẾ VIDEO CLIP CHO DÂN MARKETING CHUYÊN NGHIỆP
HƯỚNG DẪN THIẾT KẾ QUẢNG CÁO VÀ ĐỒ HỌA CHUYÊN NGHIỆP VỚI CANVA
Hãy tham gia khóa học để trở thành người chuyên nghiệp. Tuyệt HAY!😲👍
GOOGLE SPREADSHEETS phê không tưởng
Hãy tham gia khóa học để biết mọi thứ
Khóa học sử dụng Adobe Presenter-Tạo bài giảng điện tử
Để thành thạo Wordpress bạn hãy tham gia khóa học
Khóa học sử dụng Edmodo để dạy và học hiện đại để thành công
==***==
Bảo hiểm nhân thọ - Bảo vệ người trụ cột
Tham gia nhóm Facebook
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com
Nguồn: Tinh Tế
Topics: Công nghệ mới



































