Hướng dẫn xoá đồ hoạ game giảm CPU hiệu quả NRO

Hướng dẫn xoá đồ hoạ game giảm CPU hiệu quả NRO

Hướng dẫn xoá đồ hoạ game giảm CPU hiệu quả NRO

Để làm phiên bản mod NRO có thể treo được nhiều acc mà ít tốn tài nguyên máy người ta sẽ thường chỉnh sửa lại mã nguồn của game sao cho tối ưu hơn, cách phổ biến thường được sử dụng sẽ là xoá bớt các đồ hoạ thừa, không cần thiết vì đồ hoạ là phần chính của game, game đồ hoạ càng khủng tài nguyên sử dụng càng nhiều mà trong việc treo up thì ta thường không cần chiêm ngưỡng vẻ đẹp của game.

Vì lý do trên nên việc xoá đồ hoạ là một cách rất tốt để tối ưu tài nguyên sử dụng của game, bài viết này sẽ hướng dẫn xoá các đồ hoạ thừa chuẩn và giảm được nhiều tài nguyên máy tính.

Hoạt động của game NRO

gantt title Hoạt động của game NRO bình thường axisFormat %Mms section 0+ Vẽ đồ hoạ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m section 30+ Vẽ đồ hoạ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m section 60+ Vẽ đồ hoạ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m

Ở trên là hình ảnh mô phỏng lại hoạt động của game. Lưu ý đây chỉ là mô hình giả sử, thực tế game hoạt động phức tạp hơn rất nhiều.

Các câu lệnh trong game được diễn ra liên tục và lặp đi lặp lại, để tránh chiếm dụng quá nhiều tài nguyên thì game sẽ có một khoảng thời gian nghỉ ngơi giúp giảm thiểu số lượng câu lệnh trên một đơn vị thời gian từ đó việc sử dụng tài nguyên sẽ ít hơn.

Tim hoạt động suốt đời mà không mệt mỏi do thời gian làm việc và nghỉ ngơi hợp lý!

Nếu hiểu được hoạt động trên thì khi muốn giảm tài nguyên của máy ta sẽ phải làm cho thời gian nghỉ của game nhiều hơn.

Phương pháp xoá đồ hoạ

Ta thử xem phương pháp xoá đồ hoạ game (giả sử ta sẽ xoá toàn bộ đồ hoạ).

gantt title Hoạt động của game NRO khi xoá vẽ đồ hoạ axisFormat %Mms section 0+ Các hoạt động khác :0, 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 2ms section 30+ Các hoạt động khác :0, 4ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 4ms section 60+ Các hoạt động khác :0, 2ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms Nghỉ : 1ms Các hoạt động khác : 6ms

Như đã thấy nếu so sánh với biểu đồ trên thì cùng một khoảng thời gian, thời gian nghỉ từ 9ms tăng lên được 12ms, cần lưu ý đây chỉ là mô hình giả sử nên kết quả trên có thể không chính xác nhưng thời gian nghỉ tăng lên giúp giảm tài nguyên máy tính thì thực sự có. Tuy nhiên cùng với đó thời gian làm những việc khác cũng tăng theo

Giả sử bạn được giao 2 nhiệm vụ và một chút thời gian nghỉ như trên và ngay sau khi thực hiện xong bạn tiếp tục được giao nhiệm vụ mới. Nếu vì một lí do nào đó mà có một công việc bạn không cần làm nữa thì bạn sẽ nhanh chóng thực hiện công việc còn lại để nhận nhiệm vụ mới? Chăm chỉ quá dành thời để nghỉ ngơi sẽ khoẻ hơn.

Vì lẽ trên thay vì xoá bỏ hoàn toàn việc vẽ đồ hoạ ta sẽ thay thời gian vẽ đó bằng thời gian nghỉ như vậy sẽ tốt hơn. Trước khi ta chưa xoá vẽ đồ hoạ thì số lần thực hiện hoạt động khác đã cố định vậy tại sao sau khi bỏ việc ta phải thực hiện nó nhiều hơn? Như vậy ta sẽ tổng kết lại với biểu đồ sau.

gantt title Hoạt động của game NRO khi thay thế thời gian vẽ bằng thời gian nghỉ axisFormat %Mms section 0+ Nghỉ vẽ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ vẽ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ vẽ : 3m Các hoạt động khác : 6m Nghỉ : 1m section 30+ Nghỉ vẽ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ vẽ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ vẽ : 3m Các hoạt động khác : 6m Nghỉ : 1m section 60+ Nghỉ vẽ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ vẽ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ vẽ : 3m Các hoạt động khác : 6m Nghỉ : 1m

Ta có thể thấy rõ theo mô hình trên thời gian nghỉ tăng rõ rệt, tổng thời gian nghỉ là 36ms như vậy cách làm này thực sự tốt hơn so với chỉ xoá đồ hoạ thông thường.

Phương pháp tăng thời gian nghỉ thêm cho một chu kì

Cốt lõi vẫn là làm cho thời gian nghỉ của game nhiều hơn. Sẽ tăng thời gian chu kỳ lên và dùng thời gian thêm vào đó làm thời gian nghỉ như vậy ta cũng có thể làm thời gian nghỉ của game tăng lên giống như biểu đồ sau.

gantt title Hoạt động của game NRO khi thêm thời gian nghỉ axisFormat %Mms section 0+ Vẽ đồ hoạ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ thêm: 5m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ thêm: 5m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ thêm: 5m section 45+ Vẽ đồ hoạ : 0, 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ thêm: 5m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ thêm: 5m Vẽ đồ hoạ : 3m Các hoạt động khác : 6m Nghỉ : 1m Nghỉ thêm: 5m

Theo biểu đồ trên tổng thời gian nghỉ sẽ là 36ms tuy nhiên nếu chu kì hoạt động của game tăng lên quá nhiều thì game sẽ trở nên chậm hơn và ảnh hưởng tới trải nghiệm chơi. Vì vậy khi đánh đổi với tài nguyên máy cần cân nhắc và thời gian thêm vào cũng tuỳ với nhu cầu sử dụng.

Sửa mã nguồn của game để giảm tài nguyên

Ta sẽ tìm tới những hàm vẽ đồ hoạ của game (các hàm này trong tên thường chứa từ paint) ở đây mình sẽ chọn 2 hàm SmallImage.drawSmallImage(mGraphics, int, int, int, int, int)TileMap.paintTilemap(mGraphics) để làm ví dụ, nếu muốn giảm được nhiều hơn các bạn có thể tìm thêm. Mình sẽ thêm phím tắt có thể Bật/Tắt chức năng này để tiện sử dụng nhé.

// GameScr ... // Tạo thêm biến lưu trạng thái Bật/Tắt public static bool isXoaDoHoa; public override void updateKey() { ... // Phím tắt nút chat else if (GameCanvas.keyAsciiPress == 114) { ChatTextField.gI().startChat(this, string.Empty); } // Thêm phím tắt Bật/Tắt đồ hoạ else if (GameCanvas.keyAsciiPress == 'z') { isXoaDoHoa = !isXoaDoHoa; info1.addInfo("Xoá đồ hoạ game: " + (isXoaDoHoa ? "Bật" : "Tắt"), 0); } } ...

Save code trước khi chỉnh sửa tiếp

// SmallImage ... // Lưu ý ở đây có 2 hàm tên giống nhau nên cần chú ý các biến truyền vào hàm public static void drawSmallImage(mGraphics g, int id, int x, int y, int transform, int anchor) { // Code chèn đầu hàm if (GameScr.isXoaDoHoa) { System.Threading.Thread.Sleep(2); return; } ... }
// TileMap ... public static void paintTilemap(mGraphics g) { // Code chèn đầu hàm if (GameScr.isXoaDoHoa) { System.Threading.Thread.Sleep(15); return; } ... }

Khi vào game sử dụng tính năng bạn có thể cảm nhận được game sẽ giật giật fps giảm đi chút. Vì mình để thời gian nghỉ lơn hơn thời gian game thực hiện 2 hàm này nên phần thời gian kia dư ra làm tăng chu khì hoạt động và giảm tài nguyên máy theo phương pháp 2.

Test trên VPS 1-1

Trước khi giảm

Tra tấn máy thế này vps chắc nó sập mất.

Sau khi giảm

Vẫn cao so với VPS 1-1 nhưng nó vẫn thở được.

Nhận xét

Đăng nhận xét

Bài đăng phổ biến từ blog này

Tổng hợp các chức năng mod đơn giản trong NRO

Kĩ thuật xử lý lệnh chat mod NRO