Дуже повільна вибірка текстури direct3D


9

Тому я пишу невеличку гру, використовуючи Direct3D 9, і я використовую мультитекстур для місцевості. Все, що я роблю, - це відбір 3 текстур і карта суміші та отримання загального кольору з трьох текстур на основі кольорових каналів із карти суміші. У будь-якому випадку, я отримую значне зниження частоти кадрів, коли я вибираю більше 1 текстури, я переходжу від 120+ кадрів в секунду до трохи менше 50 років.

Це HLSL-код, який відповідає за уповільнення:

float3 ground = tex2D(GroundTex, multiTex).rgb;
float3 stone  = tex2D(StoneTex, multiTex).rgb;
float3 grass  = tex2D(GrassTex, multiTex).rgb;
float3 blend  = tex2D(BlendMapTex, blendMap).rgb;

Чи я це роблю неправильно? Якщо хтось має будь-яку інформацію чи поради щодо відбору текстур чи чогось іншого, це було б добре.

Дякую.


Яке обладнання ви маєте? Чотири текстурні зразки не повинні бути проблемою для будь-якого нового обладнання.
Аксель Гнейтінг

У мене є Radeon X1950, так, це пару років, якщо не більше. Я здогадуюсь, це, можливо, не найкраще обладнання. Як ти гадаєш ?
dotminic

Відповіді:


9

Якщо ви хочете прискорити речі, ви можете використовувати щось, що називається текстурним атласом.

Вікіпедія - Атлас текстури - це велике зображення, або "атлас", який містить безліч менших піддіаджерів, кожне з яких є текстурою для деякої частини 3D-об'єкта. Підтексти можна рендерувати, змінивши координати текстури увмапи об’єкта в атласі, по суті кажучи йому, в якій частині зображення знаходиться його текстура. У додатку, де часто використовується невелика кількість текстур, часто ефективніше зберігайте текстури в текстурному атласі, який розглядається як одиниця за допомогою графічного обладнання.

Для графічного процесора ефективніше вибирати одну велику текстуру в 4 рази проти 4 зображень, відібраних один раз на кожну. Ось приклад атласу текстури рельєфу.

alt текст


1
Дякую за пораду, я реалізував свій шейдер, використовуючи текстурний атлас, я зараз "лише" отримую 109 кадрів в секунду, але це акуратне поліпшення від 55 кадрів в секунду, які я отримував. Дякую!
dotminic

1
+1 за гарну відповідь. Чи можу я запитати, звідки у вас зображення атласу текстури? Це патентова або безкоштовна для будь-якого використання?
Камерон

4

Інша річ, яку слід врахувати - це текстурний формат. Це сира 32bpp текстура? Якщо так, подумайте про використання стисненої текстури DXT1, що становить 4 біти / пікселі (займаючи 1/8 місця), або DXT5, якщо вам потрібен альфа-канал, з 8 біт / піксель.

Зменшення розміру текстурних даних повинно призвести до зменшення вимог пропускної здатності пам'яті текстури та покращення продуктивності кеш текстури.

Крім того, переконайтеся, що ви не встановили анізотропну фільтрацію максимальної якості - це може призвести до великих витрат.


THX за порадою, я спробую наступного разу.
дотмінік

3

Чи мають ваші текстури міп-карти?

Без міпографічного відбору вибірки текстур можуть бути особливо дорогими (завантаження помилок кешу)


Так, текстури мають mipmaps, я експортував їх як * .dds з інструмента текстури DirectX. Але як вони використовують текстури в комерційних іграх, де всюди є багато текстур з високою відбиттям? Я просто вибираю 1 атлас текстури і отримую частоту кадрів у 109 кадрів в секунду під час візуалізації місцевості, і все це на gpu.
dotminic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.