Атлас текстури та текстури масиву: наскільки по-різному вони обробляються процесором та графічним процесором і як це впливає на продуктивність?


10

Unity 5.4 (на даний момент у бета-версії) принесе багатоочікувану функцію (починаючи з 2013 року) - це текстури масиву - так само, як і ArrayTexture OpenGL . Однак, ознайомившись з масивами-текстурами та текстурними атласами, я все ще не можу повністю зрозуміти технічні відмінності щодо їх використання процесорами та графічними процесорами.

Отже, щоб бути більш конкретним, я хотів би попросити пояснення щодо основних відмінностей між тим, як атлас текстури та масиви текстур обробляються процесором та графічним процесором, і, що найголовніше, як такі відмінності можуть впливати на продуктивність та обробку пам'яті (наприклад, наскільки масиви текстур можуть бути більш ефективними, ніж текстурні атласи тощо).

Якщо технічних подробиць щодо впровадження Unity бракує через його нещасну закритість, я був би досить задоволений відповіддю щодо OpenGL.s ArrayTexture.


Я не здивований, що ви не знайшли технічного порівняння, оскільки обидва залежать від реалізації (більше для масивів).
wondra

Вам буде важко отримати інформацію про те, як працює внутрішній механізм двигуна Unity, оскільки це закрите джерело, чорний ящик. Єдине, що ви можете зробити - це проаналізувати кожен випадок і скласти собі порівняння використання процесора та gpu. Щоб зрозуміти, як це працює, потрібно буде вступити інженеру Unity або відкрити або просочити їх вихідний код.
веселощі

@Jon Fair досить, але насправді мене більше зацікавила моторно-агностична відповідь. Якщо він дуже різниться, я можу оновити питання, щоб поговорити, наприклад, про ArrayTexture OpenGL: opengl.org/wiki/Array_Texture
ASteer

Відповіді:


12

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

Існує кілька відмінностей у тому, як ви використовуєте кожен варіант, але який застосовуватиметься послідовно:

Одна велика відмінність полягає в тому, що для текстур масиву кожна текстура обробляється окремо для таких цілей, як обгортання координат текстури або зіставлення.

Це дозволяє уникнути поширених проблем з атласами текстур, де нам потрібно додати прокладки між суміжними зразками текстури, щоб уберегти зразки на їхніх краях від кровоточивості разом, особливо на більш глибоких рівнях мипу.

Це також означає, що якщо ви хочете, щоб ваші текстури були плитковими, ви можете використовувати обладнання для відбору текстур, щоб зробити це так само, як і з ванільною текстурою. За допомогою атласів нам зазвичай доводиться займатися математикою плитки в нашому шейдері для фрагментів, оскільки пробовідбір лише обертає / дзеркала / затискачі / рамки текстурних координат по всьому атласу, а не окремі плитки всередині нього.

Основне обмеження для текстур масиву полягає в тому, що вони вимагають, щоб усі їх складові текстури мали однакову роздільну здатність і кількість рівнів мип. Якщо ви намагаєтеся згрупувати текстури з дуже різними потребами роздільної здатності (скажімо, зберігати плитку місцевості, LoD відвалюється у відстані у віртуальній текстурі ), тоді вам може знадобитися гнучкість атласу.


Дякую, саме так я і пішов. Я маю на увазі, не відповідь про те, що саме швидше менш інтенсивно пам'ять - оскільки, звичайно, це залежить від реалізації. І все-таки я був впевнений, що деякі вказівки щодо функціонування кожного конкретного випадку можуть бути корисними для розуміння їх звичайних найкращих та найгірших сценаріїв. Ваша відповідь справді допомогла мені в цьому.
ASteer

Ще один недолік текстур масиву: вони обмежені GL_MAX_ARRAY_TEXTURE_LAYERS. У моєму напівсучасному графічному процесорі це 2048 рік, тому якщо ви хочете безліч дрібних текстур, ця межа може бути занадто низькою.
jwd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.