Як і більшість речей в розробці ігор, і особливо в ігровій графіці, відповідь "це залежить"
Розмір текстури
Роздільна здатність текстури може впливати на швидкість візуалізації. Чим більше в ньому пікселів, тим більше необроблених даних для завантаження в графічний процесор, і тим менше текстури ми можемо вмістити в кеш за один раз, тому шейдер може вражати більше пауз, поки він чекає на потрібну частину текстури потрапити в кеш.
Використання міповідтворення може зменшити вплив цього. За допомогою mipmap-файлів ми зберігаємо ланцюжок зменшених версій текстури, що спочатку звучить як ще більше пам’яті. Але це дозволяє нам читати з менших версій, коли текстура відображається на невеликому розмірі на екрані (як віддалений об’єкт в перспективі), тому наші зразки краще використовують кеш текстури, а не стрибаючи по всьому. Це також зменшує згладжування.
Деталі текстури
Вміст текстур не впливає на ефективність візуалізації більшості часу.
Колір - це лише купа чисел, що стосується графічного процесора, так що це не дуже важливо, що це за цифри, він просто перетворює їх через математику таким же чином. Це не робить нічого фантазійного, як згадати "О, я раніше бачив піксель у цьому зеленому кольорі, я просто повторно використовую той же вихід, який я підрахував минулого разу, коли я бачив цей ввід", тож чи ваша текстура є одним кольором або випадкові блискітки, ваш GPU виконує ту саму роботу.
На відміну від таких форматів, як PNG та JPG, які стискають ефективніше в передбачуваних областях зображення і з'їдають більше біт у складних регіонах, текстурні графічні формати GPU, такі як BTC, ETC, PVRTC або навіть сирі RGBA, використовують фіксовану кількість біт на блок пікселів. Таким чином, якщо ваша текстура буде більш-менш деталізованою, зберігаючи той самий формат стиснення, не змінить її розмір даних або вплине на передачу даних та ефективність кешу.
Але якщо ви використовуєте певний тип деталей, який попереднє стиснення не зберігає добре, можливо, ви будете змушені змінити все своє зображення на інший формат, який може знову змінити його розмір даних.
Шейдерне розгалуження та непрямий характер
Ось найбільша зірочка в цій ситуації: ви можете використовувати цей колір текстури для прийняття рішень, як if()
гілка. Тут детально важливі значення швидкості.
Блоки затінення GPU працюють над блоками пікселів у партіях, виконуючи ті самі інструкції паралельно на кількох потоках даних. Отже, коли деякі пікселі в блоці беруть одну гілку, if
а інші пікселі - іншу, вся партія повинна пройти через обидві гілки (маскування результатів, які не стосуються одного набору пікселів чи іншого).
Якщо ваш вклад змінюється плавним / передбачуваним способом, ви, ймовірно, матимете багато блоків, для яких потрібно взяти лише одну гілку, і ці випадки обох гілок будуть обмежені вузькими смугами навколо межі переходу. Але якщо ваш внесок є випадковим результатом, ми очікуємо, що більшість блоків займе обидві гілки та сповільнить візуалізацію.
Це також може статися, якщо ви використовуєте одну текстуру для управління пошуковими документами на другу текстуру, як спотворення або індексну карту. Якщо перша текстура скаче навмання, то ми будемо відбирати вибірку з розкиданих випадкових плям другої текстури, менш послідовно використовувати наш кеш текстури і чекати довше, щоб отримати в середньому потрібні нам дані.
Отже, загалом: ні, вміст текстури не має великого впливу на швидкість візуалізації, за винятком випадків, коли це відбувається. ;)