Kích thước kết cấu tối ưu là gì?


12

Gần đây tôi đã thêm một trình đóng gói kết cấu vào dự án của mình, nó sẽ gói một số lượng kết cấu nhất định vào một cái duy nhất, như thế này:

Kết cấu đóng gói

Vì vậy, ví dụ cái này có kích thước 582x1023 pixel. Mục tiêu của việc thêm các kết cấu được đóng gói này rõ ràng là để cải thiện hiệu suất vì vậy tôi muốn tìm kiếm kích thước kết cấu tối ưu cho kết cấu OpenGL (sử dụng LWJGL). Những điều tôi tìm thấy là một kích thước kết cấu tối đa được hỗ trợ rộng rãi dường như là 1024x1024, theo điều này chẳng hạn. Điều này gây ấn tượng với tôi vì kỳ lạ bởi vì rõ ràng rất nhiều họa tiết một mình sẽ lớn hơn thế, vậy điều gì xảy ra với những thứ đó? Tôi khá chắc chắn rằng hầu hết các card đồ họa hỗ trợ kết cấu lớn hơn thế. Tôi có thể mong đợi một cách hợp lý hầu hết các card đồ họa để xử lý các kết cấu 4096x4096 (hoặc thậm chí lớn hơn thế không)?

Để đi đến điểm thứ hai của tôi (tôi hy vọng câu hỏi này vẫn được tính là một câu hỏi, nhưng về cơ bản nó sẽ giải quyết vấn đề tương tự): Kết cấu có nên có kích thước bằng 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) và nên Tôi pad kết cấu đóng gói nhỏ hơn so với sức mạnh tiếp theo của 2? Theo câu hỏi này từ năm 2011, đây không phải là một yêu cầu nhưng có thể cải thiện hiệu suất và tránh các lỗi nhỏ và câu hỏi này từ năm 2012 nói rằng bạn chắc chắn nên kết cấu. Vì vậy, tôi nhận ra rằng những câu hỏi này đã được hỏi trước đó nhưng chúng được ghi ngày một cách hợp lý để các câu trả lời đã thay đổi và hơn nữa chúng chỉ trả lời một phần câu hỏi của tôi. Làm thế nào để các dự án khác / xử lý này?

TL; DR: Tôi có thể mong đợi kích thước kết cấu nào mà hầu hết các card đồ họa xử lý? Các kích thước kết cấu tối ưu (hoặc có) là gì? Tôi có nên pad kết cấu chiều rộng cho sức mạnh tiếp theo của 2?


4
GPU chỉ giao dịch với sức mạnh là 2. Nếu bạn không tự tạo họa tiết cho mình, thì GPU (hoặc công cụ trò chơi của bạn) sẽ thực hiện điều này cho bạn, dẫn đến độ trễ nhẹ khi chạy trên mỗi kết cấu, có thể tăng thêm. Tuy nhiên, tôi không thể cung cấp bất kỳ trợ giúp nào về kích thước kết cấu tối đa / tối ưu.
ketura

@ketura À tôi hiểu rồi, cảm ơn. Vì vậy, nói rằng tôi có một hình ảnh là 513x10. Nó sẽ nhanh hơn để đệm nó lên 1024x1024 và sau đó chuyển tất cả các pixel trống này hoặc để GPU làm điều đó?
flotothemoon

4
Bạn sẽ không cần phải đi cao như vậy. 1024 x 16 sẽ hoạt động; nó không cần phải là SQUARE, chỉ cần 2 sức mạnh cho mỗi hướng. Mặc dù trong trường hợp đó, tôi sẽ cân nhắc nghiêm túc nếu tôi không thể thay thế một pixel và giảm xuống còn 512x16, lol.
ketura

Câu trả lời:


6

Tôi sẽ cố gắng trả lời câu hỏi này, mặc dù YMMV. Tôi sử dụng Khảo sát phần cứng hơi ( http://store.steampowered.com/hwsurvey?pl platform = pc ) để xác định RAM video (VRAM) có sẵn trên hầu hết các máy tính là gì. Nhìn vào kết quả vào năm 2015-10-13 (ngày nay), gần 85% người dân có 1024 MB VRAM.

Câu hỏi của bạn rất rộng, vì nó không nêu rõ phần cứng mục tiêu (bảng điều khiển, PC, thiết bị cầm tay, thiết bị di động?) Tôi sẽ nói về PC và bạn có thể ngoại suy cho các nền tảng khác dựa trên thông số kỹ thuật phần cứng.

Giả sử 32 bit màu + alpha mỗi pixel tức là 4 bypes cho mỗi pixel, VRAM 1 GB có thể giữ tối đa ~ 256 triệu pixel. Điều này tương đương với kết cấu 256 1K x 1K. Điều này giả định (không chính xác) rằng bạn chỉ muốn giữ họa tiết trong VRAM của mình, trong khi đó sẽ có một loạt các thứ khác (ví dụ: dữ liệu lưới, nếu bạn đang làm việc ở chế độ 3D) mà bạn cần để lại không gian. Bạn cũng có thể muốn cho phép thêm một số không gian để lập bản đồ kết cấu mip, thường hoạt động tốt nhất nếu kết cấu của bạn là sức mạnh của hai.

Các bảng điều khiển hiện đại (XBOX One và PS4) có 4-8 GB RAM hợp nhất, hầu hết các thiết bị cầm tay và thiết bị di động đều có 1 - 2 GB RAM hợp nhất, với các hạn chế về số lượng bạn có thể phân bổ dưới dạng VRAM.

Tôi thường sẽ tạo kết cấu 2K để nó hoạt động trên hầu hết các PC, cho phép tùy chọn thu nhỏ cho các thiết bị cấp thấp hơn. Nếu bạn đang viết một trò chơi 2D và muốn nhắm mục tiêu màn hình độ phân giải cao hơn (4K, iPad võng mạc, v.v.), bạn có thể sử dụng họa tiết 4K cho nền, nhưng đối với hầu hết các phần khác, nó có thể quá mức cần thiết.

Hy vọng điều này đã giúp và không làm vẩn đục nước.


Cảm ơn câu trả lời, chắc chắn giúp. Về độ rộng, xin lỗi về điều đó, đã quên bao gồm một số chi tiết: Tôi đang phát triển cho PC ở dạng 2D. Điều gì sẽ xảy ra nếu bạn sử dụng kết cấu lớn hơn kích thước kết cấu được hỗ trợ tối đa? Nó không hoạt động hay chỉ trở nên chậm hơn?
flotothemoon

1
Có vẻ như câu trả lời của tôi là tại chỗ. Kiểm tra các bài đăng trên diễn đàn trang web khác kết cấu 2k là những gì bạn nên hỗ trợ để trò chơi của bạn hoạt động trên hầu hết các thiết bị. Giới hạn kích thước họa tiết phụ thuộc vào phần cứng cụ thể và phiên bản OpenGL-ES cụ thể. Tôi không chắc thông báo lỗi cụ thể là gì, nhưng nó sẽ đến từ OpenGL-ES khi bạn cố tải kết cấu. Liên kết hữu ích: answers.unity3d.com/questions/563094/... , forum.unity3d.com/threads/texture-sizes-and-videocards.281422feedback.wildfiregames.com/report/opengl/feature/...
Vijay Varadan

Khi tôi cố gắng tải hoặc cố gắng để liên kết các kết cấu? Hay đó là điều tương tự ở đây?
flotothemoon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.