Tôi có nên sử dụng kết cấu không có kích thước bằng 2?


40

Trong những ngày đầu của OpenGL và DirectX, kích thước kết cấu được yêu cầu phải là sức mạnh của hai. Điều này có nghĩa là nội suy các giá trị float có thể được thực hiện rất nhanh, sử dụng dịch chuyển và như vậy.

Vì OpenGL 2.0 (và trước đó, thông qua một phần mở rộng) kích thước kết cấu không có hai sức mạnh đã được hỗ trợ.

Các kết cấu sức mạnh của hai có lợi thế về hiệu suất trên các GPU tích hợp và rời rạc hiện đại không? Những lợi thế nào mà kết cấu không có sức mạnh của hai có?

Có một dân số máy tính để bàn đáng kể có thẻ hỗ trợ kết cấu không hai sức mạnh không?


Xem câu trả lời tuyệt vời này cho một câu hỏi tương tự: Tại sao hình ảnh cho họa tiết trên iPhone cần phải có kích thước hai chiều?
DVole

Câu trả lời:


15

Có những lợi thế về hiệu suất khi gắn bó với kết cấu mạnh mẽ trên hai GPU tích hợp và rời rạc hiện đại không?

Hầu hết các GPU hiện đại đều hỗ trợ các kết cấu không phải là hai (NPOT) và xử lý chúng tốt. Hiệu suất giảm khá ít. Nhưng có một vài vấn đề cần xem xét:

  • Khi sử dụng kết cấu NPOT, cần nhiều không gian hơn trong RAM, giống như kết cấu POT kích thước tiếp theo. Về mặt kỹ thuật, bạn chỉ lãng phí không gian có thể được sử dụng để đặt một cái gì đó vào đó;

  • Hoạ tiết NPOT có thể được xử lý chậm hơn đáng kể (trong OpenGL 2.1 tôi đã giảm hiệu suất tới 30%) so với POT ở kích thước tiếp theo;

  • GPU cũ và GPU on-board / on-chip không quá tiên tiến, chúng thường hỗ trợ kết cấu NPOT, nhưng hỗ trợ khá chậm và vụng về;

  • Ngay cả các GPU cũ hơn cũng có thể từ chối chấp nhận / hiển thị kết cấu NPOT;

  • Có thể có các tạo tác viền do nội suy mip-map gây ra, kết cấu 25x25 của bạn có thể có viền đen nơi các pixel được thêm vào để nhét nó vào kích thước 32x32.

PS Tôi không biết chắc chắn về thiết bị di động, thậm chí có thể có nhiều hạn chế hơn về kết cấu POT.

Những lợi thế nào mà kết cấu không hai sức mạnh có, nếu có?

Theo tôi biết chỉ có 2 lợi thế:

  • Chúng chiếm ít không gian trên ổ cứng nếu chúng không được đóng gói (khi các khu vực trống được đóng gói cung cấp thêm rất ít)
  • Bạn có thể tiết kiệm thời gian viết NPOT -> bộ chuyển đổi POT. Bạn sẽ cần một phiên bản phát hành, nhưng sử dụng kết cấu NPOT để thiết kế và tạo mẫu giao diện / mô hình là tốt

Có một số lượng lớn người dùng máy tính để bàn không có thẻ hỗ trợ kết cấu không có sức mạnh của hai?

Theo như tôi biết và đã thử nghiệm trên PC - Có. Điều đó bao gồm tỷ lệ phần trăm lớn của GPU giảm tốc độ / lỗi nhỏ và tỷ lệ nhỏ thẻ không xử lý NPOT.


6

Một cách sử dụng phổ biến của kết cấu không có công suất hai là dành cho 'kích thước màn hình' hoặc 'cỡ nửa màn hình' (v.v.) kết xuất đồ họa đích được sử dụng cho các hiệu ứng hậu xử lý.

Trong những trường hợp này, mipmap không cần thiết, bộ đệm luôn không bị nén, do đó kích thước kết cấu kỳ lạ gây ra ít vấn đề hơn ở đây


4

Có những hạn chế đối với kết cấu NPOT trên phần cứng cũ. Như đã đề cập trên wiki OpenGL này , một số phần cứng cũ yêu cầu NPOT không có mipmap, kết cấu nén yêu cầu căn chỉnh các pixel 4 x 4, nhưng phần cứng mới sẽ xử lý hoàn hảo.

Theo kinh nghiệm của tôi, một số phần cứng thậm chí tương đối mới trải nghiệm hiệu năng lớn nếu bạn sử dụng kết cấu NPOT thay vì POT. Tôi không biết vấn đề là gì; có thể trong một số kết hợp các trạng thái kết xuất, kết xuất thực sự được thực hiện trong phần mềm. Vì vậy, trừ khi bạn có lý do chính đáng, tôi khuyên bạn vẫn nên cố gắng sử dụng POT càng nhiều càng tốt.

Về lý do tại sao sử dụng NPOT thay vì POT - nếu bạn có hình ảnh có kích thước NPOT, ví dụ 1600x1200, sử dụng bề mặt 2048x2048 pixel sẽ lãng phí rất nhiều bộ nhớ video.


3
Nếu bạn đang sử dụng các định dạng kết cấu được nén trong bộ nhớ (chẳng hạn như PVR hoặc DXT), việc nhân rộng lên sức mạnh tiếp theo của hai sẽ sử dụng bộ nhớ kết cấu ít hơn đáng kể so với kết cấu NPOT không nén, nhưng nhỏ hơn.
Tetrad

3
Từ ngữ của bạn hơi mơ hồ, rất tiếc nếu điều này là dư thừa với những gì bạn đang cố gắng nói - kết cấu nén vẫn yêu cầu kích thước pixel trong bội số của 4, ngay cả trên phần cứng hiện đại hỗ trợ kết cấu NPOT.

1
Tôi hy vọng phần cứng hiện tại vẫn sẽ được ốp / họa tiết trong trình điều khiển khi bạn tải chúng lên. Điều này thay đổi bố cục của kết cấu để làm cho việc truy cập tối ưu hơn cho phần cứng. Các bảng điều khiển (tôi không bao gồm XNA trong đó) yêu cầu bạn thực hiện thủ công tối ưu hóa bố cục này trong chuỗi công cụ của riêng bạn, tôi khá chắc chắn những điều này chỉ hoạt động trên POW2.
Roger Perkins

-1

Sức mạnh của 2 kết cấu tăng hiệu suất khoảng 30% cho bất kỳ loại GPU nào, không chỉ GPU cũ (nhanh hơn 30% là sự khác biệt giữa GPU cao cấp và trung bình), chúng cần ram nhiều hơn 30% nhưng cần ít vram hơn, chúng tăng chất lượng cung cấp kích thước kết cấu phù hợp cho khoảng cách cụ thể, nó hoạt động như khử răng cưa cho kết cấu tạo đường kẻ tối nên được xử lý bởi các công cụ trò chơi và các công cụ aaa xử lý chúng tốt


Điều này chỉ cung cấp một (đã được quy định) Ưu điểm của điện-of-hai kết cấu, nó không không giải quyết được vấn đề riêng của mình, đó là lý do tại sao bạn sẽ sử dụng phi -power-of-hai textures cho những ưu điểm trên.
Josh

xin lỗi tôi đã hiểu nhầm câu hỏi, bởi sức mạnh của 2 bạn bị giới hạn ở 2048, 1024, 512, v.v ... có lẽ đây là lý do chính
yusef ghatavi 29/07/2015

Ngoài ra, non power of 2 rất hữu ích cho kết cấu không cần mipmap như họa tiết gui và họa tiết cho nhân vật người thứ nhất luôn ở gần máy ảnh
yusef ghatavi 29/07/2015

-3

Nghệ thuật lập trình của tôi chỉ có kích thước chính xác.

Nó chắc chắn đơn giản hóa logic hiển thị của tôi để biết rằng nếu tôi muốn đặt một kết cấu ở phía trên bên trái của màn hình, tôi chỉ có thể đặt 0,0 là trên cùng bên trái của kết cấu và xem tất cả các kết cấu ở vị trí chính xác, trong khi nếu tôi phải thêm phần đệm 0alpha, việc định vị họa tiết trên cạnh màn hình sẽ phức tạp hơn. Thêm vào đó, tất nhiên, 0alpha vẫn phải được pha trộn alpha và nếu tôi đang nhìn vào kết cấu mờ đục, tôi có thể không muốn có một kênh alpha.


6
Thông thường một vị trí đa giác, không kết cấu, trên màn hình. Đa giác có thể được cung cấp bất cứ điều gì UV cần thiết - chúng không nhất thiết phải đi từ 0 đến 1; nếu kết cấu của bạn chỉ rộng 30, thì tốt nhất là 0,9375 (đó là một lý do khác khiến kết cấu POT tốt - UV hoàn toàn có thể biểu thị được).
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.