Câu trả lời:
Các tệp JPG và PNG hầu như sẽ luôn nhỏ hơn trên đĩa so với trong bộ nhớ; chúng cần được giải nén nhanh chóng để có được dữ liệu RGB thô, do đó đòi hỏi nhiều sức mạnh xử lý hơn cho việc tải và nhiều RAM hơn sau đó. Vì vậy, nhiều công cụ hiện đại chọn lưu trữ cùng định dạng trên đĩa như trong bộ nhớ, dẫn đến các tệp có cùng kích thước với yêu cầu bộ nhớ của kết cấu (nhưng cũng lớn hơn PNG hoặc JPG). RGB / RGBA và S3TC / DXTn / BCn là các định dạng được sử dụng rộng rãi nhất, bởi vì chúng được đọc thẳng vào bộ nhớ mà không cần xử lý (kết cấu DXT được nén trước).
Vì vậy, đây là các kích thước cho các định dạng kết cấu phổ biến khác nhau:
Nếu bạn sử dụng một hình ảnh với mipmap , kết cấu sẽ cần 4/3 bộ nhớ. Ngoài ra, chiều rộng và chiều cao kết cấu có thể được làm tròn bên trong để trở thành sức mạnh của hai trên phần cứng cũ hoặc có khả năng kém hơn, và trên một số phần cứng rất hạn chế, cũng buộc phải là một hình vuông.
Thông tin thêm về DXT: đó là một nén mất mát; điều này có nghĩa là, một số dữ liệu màu bị mất khi nén kết cấu. Điều này có tác động tiêu cực đến kết cấu của bạn, làm biến dạng các đường viền sắc nét và tạo ra các "khối" trên độ dốc; nhưng lợi ích tốt hơn nhiều so với nhược điểm (nếu bạn có kết cấu trông tệ hại khủng khiếp trong DXT, chỉ cần giữ cho nó không bị nén; những cái khác sẽ bù cho việc giảm kích thước). Ngoài ra, do các pixel được nén bởi các khối có kích thước cố định, chiều rộng và chiều cao kết cấu phải là bội số của bốn.
Rõ ràng: Nó phụ thuộc vào định dạng.
Hãy lấy một kết cấu vuông 256 x 256 pixel. Nếu nó không nén 32 bit với kênh alpha (tính Color
bằng XNA) thì phải mất 256KB ( 256*256*4
byte).
Các định dạng 16 bit (ví dụ: Bgr565
:) rõ ràng sẽ có kích thước bằng một nửa - 128KB .
Sau đó, bạn nhận được vào các định dạng nén. Trong XNA, bạn có DXT1, DXT3 và DXT5 (còn được gọi là Nén S3 ). Đây là một định dạng nén mất mát. Nó cũng là một định dạng dựa trên khối - có nghĩa là bạn có thể lấy mẫu từ nó (bởi vì bạn biết khối pixel nào nằm trong đó). Nó cũng nhanh hơn, vì bạn sử dụng ít băng thông hơn.
Tỷ lệ nén của DXT1 là 8: 1 và đối với DXT3 và DXT5 là 4: 1.
Vì vậy, hình ảnh DXT1 của 256x256 là 32KB . Và DXT3 hoặc DXT5 là 64KB .
Và sau đó có mipmapping . Nếu điều này được bật, điều này sẽ tạo ra một loạt hình ảnh trong bộ nhớ đồ họa với kích thước bằng một nửa kích thước trước đó. Vì vậy, đối với hình ảnh 256x256 của chúng tôi: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Một kết cấu với mipmapping là khoảng 133% kích thước của bản gốc.
Hầu hết các GPU chỉ có thể đọc một định dạng nén rất cụ thể. ví dụ. BC *, DXT *, không phải định dạng như png. Vì vậy, có, đúng với hầu hết các phần .png sẽ chiếm nhiều dung lượng trong bộ nhớ video hơn trên đĩa.
Hoạ tiết có thể được lưu trữ nén hoặc không nén trong cả bộ nhớ video và bộ nhớ hệ thống.
Đối với kết cấu không nén, quy tắc chung là nó sẽ chiếm cùng một dung lượng trong bộ nhớ video giống như ở dạng không nén trong bộ nhớ hệ thống.
Đối với kết cấu nén DXT1. GPU lưu trữ 8 byte cho mỗi ô xếp 4 x 4 trong kết cấu của bạn. Dữ liệu không nén (ở mức 8 bit trên mỗi kênh RGB) thường sẽ là 4 x 4 = 48 byte, do đó, tỷ lệ nén là 6: 1. Đối với kết cấu nén DXT3 / DXT5, GPU lưu trữ 16 byte cho mỗi ô xếp hình 4 x 4 trong kết cấu của bạn. Đó là tỷ lệ nén thấp hơn 3: 1.
Có một số cảnh báo với cả kết cấu không nén và nén:
Hầu hết bộ nhớ được phân bổ trong các trang (kích thước thay đổi giữa các GPU) có kích thước cố định. ví dụ. 4KB và thường không được phân bổ phụ và chia sẻ với dữ liệu gpu khác. I E. nếu dấu chân kết cấu của bạn nhỏ hơn kích thước trang, dấu chân trong vid mem thường sẽ vẫn là kích thước trang.
Một số gpus có yêu cầu căn chỉnh rất cụ thể. Trước đây, một số GPU có yêu cầu rằng kết cấu phải có sức mạnh 2 kích thước. Điều này thường được yêu cầu để hỗ trợ một đại diện bị xáo trộn (xem Đặt hàng Morton: http://en.wikipedia.org/wiki/Z-order_(curve )) để cải thiện địa phương truy cập khi lấy mẫu từ kết cấu. Điều này có nghĩa là kết cấu có kích thước lẻ sẽ được đệm để duy trì các yêu cầu này (thông thường, phần đệm này được xử lý bởi trình điều khiển). Mặc dù thứ tự vữa không nhất thiết phải được sử dụng trong gpus hiện đại, nhưng vẫn có thể có sự phình to để hỗ trợ các yêu cầu cụ thể của gpu.
Nhiều biểu diễn kết cấu của bạn có thể tồn tại trong bộ nhớ tại bất kỳ thời điểm nào, đặc biệt nếu bạn đang sử dụng loại bỏ khóa trên chúng. Điều này có thể làm tăng mức sử dụng bộ nhớ của bạn cho đến khi các biểu diễn không còn được sử dụng bởi gpu (thường là một vài khung hình phía sau kết xuất CPU)
Nếu bạn kích hoạt mipmapping, các mip bổ sung sẽ tiêu thụ trung bình khoảng một phần ba mức mip cơ sở. YMMV dựa trên các cảnh báo trên.
AFAIK đó là chiều rộng hình ảnh * chiều cao * BPP, độc lập nếu đó là PNG, JPG hoặc BMP. Tôi không biết DDS hoặc các định dạng có thể nén khác được bố trí như thế nào.
Mip-maps sẽ tăng nhu cầu về bộ nhớ video.
Kiến thức của tôi trong chủ đề này có thể hơi lỗi thời. Tôi đã từ bỏ 3D một thời gian trước đây.