Đề xuất của tôi
Quá nhiều PNG nhỏ sẽ thêm rất nhiều chi phí mạng (do kích thước của các yêu cầu HTTP, nhưng cũng là tiêu đề PNG, và, thậm chí quan trọng hơn là không có khả năng nén hiệu quả). Mặt khác, một PNG rất lớn có những nhược điểm cần phải mất một thời gian để tải và cần lưu lại vĩnh viễn trong bộ nhớ (40 megabyte cho 10.000 gạch) trong một đoạn bộ nhớ liên tục.
Tôi đề xuất nền tảng ở giữa: một số PNG có kích thước hợp lý, ví dụ 1024 gạch có kích thước 32 × 32 . Có thể được nhóm theo chủ đề (ví dụ: PNG với gạch rừng, một với gạch núi, một khác với gạch thành phố - Tôi không biết chủ đề trò chơi của bạn, nhưng bạn hiểu ý tưởng).
Lưu ý về hiệu quả bộ nhớ cache
Bởi vì hiệu quả truy cập bộ nhớ, bạn không bao giờ nên làm cho spritesheets của bạn quá rộng. Làm mờ gạch từ hình ảnh 128 × 8192 sẽ luôn nhanh hơn so với xóa từ hình ảnh 8192 × 128.
Hãy tưởng tượng bạn muốn làm mờ ô đầu tiên trong ảnh 8192 × 128. Để đơn giản, giả sử 1 pixel là 1 byte. Hai dòng pixel đầu tiên được trình bày theo cách này (các ô chứa số byte của chúng trong bộ nhớ):
┌────┬────┬───┬────┬──────────┬─────┐
│ 0 │ 1 │...│ 31 │ .... │ 8191│ 1st line of pixels: bytes 0 to 8191
├────┼────┼───┼────┼──────────┼─────┤
│8192│8193│...│8223│ .... │16383│ 2nd line of pixels: bytes 8192 to 16383
├────┼────┼───┼────┼──────────┼─────┤
│ .. │ .. │...│ .. │ .... │ ... │
Vì vậy, để làm mờ dòng đầu tiên của tiêu đề đầu tiên, công cụ trình duyệt sẽ truy xuất byte 0
tới31
. Để blit các dòng thứ hai , nó sẽ lấy byte 8192
để8223
, và cứ thế cho đến dòng 32 byte nơi 253952
để253983
được lấy ra.
Tổng số byte được xử lý sẽ là 32 × 32. Tuy nhiên, tổng phạm vi bộ nhớ là hơn 253984 byte. Trên một CPU hiện đại, điều này có nghĩa là 32 hoặc 33 bộ nhớ cache . Ngược lại, nếu hình ảnh là 128 × 8192, phạm vi bộ nhớ sẽ chỉ là 4000 byte, có nghĩa là không quá hai quầy lưu trữ bộ đệm.
Bởi vì CPU ngày nay rất nhanh, bộ nhớ cache rất đắt và treo tính toán. Vì vậy, theo lý thuyết, ít nhất là sử dụng hình ảnh 128 × 8192 thay vì hình ảnh 8192 × 128 có khả năng nhanh gấp 8 lần. Trong thực tế, điều này sẽ phụ thuộc vào cách thực hiện quá trình làm mờ: có thể chính động cơ bên dưới sẽ chia hình ảnh thành các ô để giảm sự cố.
Điều này không dễ để giải thích chính xác và tôi không mong đợi sẽ giải thích nhiều. Tôi hy vọng nó có ý nghĩa!