Giống như hầu hết mọi thứ trong phát triển trò chơi, và đặc biệt là trong đồ họa trò chơi, câu trả lời là "nó phụ thuộc"
Kích thước kết cấu
Độ phân giải của kết cấu của bạn có thể có tác động đến tốc độ kết xuất. Càng chứa nhiều pixel, dữ liệu thô càng có nhiều dữ liệu để tải lên GPU và càng ít kết cấu chúng ta có thể phù hợp với bộ đệm tại một thời điểm, do đó, trình đổ bóng có thể dừng nhiều lần hơn trong khi chờ phần bên phải của kết cấu để được kéo vào bộ nhớ cache.
Sử dụng mipmapping có thể làm giảm tác động của việc này. Với mipmaps, chúng tôi lưu trữ một chuỗi các phiên bản thu nhỏ của kết cấu, mà thoạt nghe có vẻ giống như nhiều bộ nhớ hơn để schlep xung quanh. Nhưng nó cho phép chúng ta đọc từ các phiên bản nhỏ hơn khi kết cấu được hiển thị ở kích thước nhỏ trên màn hình (giống như một vật ở xa trong phối cảnh), vì vậy các mẫu của chúng tôi sử dụng bộ đệm kết cấu tốt hơn thay vì nhảy khắp nơi. Điều này cũng làm giảm răng cưa.
Chi tiết kết cấu
Nội dung của kết cấu của bạn không có tác động đến hiệu quả hiển thị hầu hết thời gian.
Màu sắc chỉ là một loạt các con số liên quan đến GPU, vì vậy nó không quan tâm nhiều đến những con số đó là gì, nó chỉ đưa chúng qua toán học theo cùng một cách. Nó không làm bất cứ điều gì lạ mắt như ghi nhớ "Ồ, tôi đã thấy một pixel màu xanh lá cây này trước đây, tôi sẽ chỉ sử dụng lại cùng một đầu ra mà tôi đã tính lần trước khi tôi thấy đầu vào này" vì vậy liệu kết cấu của bạn có phải là một màu không hoặc lấp lánh ngẫu nhiên, GPU của bạn đang làm công việc tương tự.
Không giống như các định dạng như PNG & JPG, nén hiệu quả hơn ở các khu vực có thể dự đoán của hình ảnh và ăn nhiều bit hơn ở các vùng phức tạp, các định dạng kết cấu GPU như BTC, ETC, PVRTC hoặc thậm chí RGBA thô sử dụng số bit cố định trên mỗi khối pixel. Vì vậy, làm cho kết cấu của bạn chi tiết hơn hoặc ít chi tiết hơn trong khi vẫn giữ nguyên định dạng nén sẽ không thay đổi kích thước dữ liệu hoặc ảnh hưởng đến việc truyền dữ liệu và hiệu quả liên quan đến bộ đệm.
Nhưng, nếu bạn sử dụng một loại chi tiết cụ thể mà lần nén trước của bạn không bảo toàn tốt, bạn có thể buộc phải thay đổi toàn bộ hình ảnh của mình để sử dụng một định dạng khác, một lần nữa có thể thay đổi kích thước dữ liệu của nó.
Phân nhánh & cảm ứng Shader
Đây là dấu sao lớn nhất trong tình huống: bạn có thể đang sử dụng đầu vào màu kết cấu này để đưa ra quyết định, như một if()
nhánh. Ở đây, chi tiết quan trọng cho tốc độ.
Các đơn vị tạo bóng GPU hoạt động trên các khối pixel theo lô, chạy cùng một hướng dẫn song song trên nhiều luồng dữ liệu. Vì vậy, khi một số pixel trong khối lấy một nhánh của if
các pixel khác và các pixel khác lấy một pixel khác, toàn bộ lô phải đi qua cả hai nhánh (che giấu các kết quả không áp dụng cho một bộ pixel hoặc khác)
Nếu đầu vào của bạn thay đổi theo cách trơn tru / có thể dự đoán được, thì có thể bạn sẽ có nhiều khối chỉ cần lấy một nhánh duy nhất và các trường hợp cả hai nhánh này sẽ bị giới hạn ở các dải hẹp quanh biên giới chuyển tiếp. Nhưng nếu đầu vào của bạn là ngẫu nhiên, chúng tôi hy vọng hầu hết các khối sẽ lấy cả hai nhánh và làm chậm kết xuất.
Điều này cũng có thể xảy ra nếu bạn đang sử dụng một kết cấu để kiểm soát tra cứu thành kết cấu thứ hai, như biến dạng hoặc bản đồ chỉ mục. Nếu kết cấu đầu tiên nhảy ngẫu nhiên, thì chúng ta sẽ lấy mẫu từ các điểm ngẫu nhiên, rải rác của kết cấu thứ hai, sử dụng bộ đệm kết cấu của chúng tôi ít nhất quán và trung bình chờ đợi để có được dữ liệu chúng ta cần.
Vì vậy, về tổng thể: không, nội dung của kết cấu không ảnh hưởng nhiều đến tốc độ kết xuất, ngoại trừ các trường hợp khi thực hiện. ;)