Чи багатотекстовий насправді просто "використання більше однієї текстури"?


10

Це може здатися дурним, але це клопоче мене. Як я розумію, мультитекстурація просто використовує більше 1 текстури на шейдер (зазвичай, щоб якось їх змішати). Тож замість створення 1 текстури я створюю 2 і більше, що ... досить очевидно!

Чому для цього існує спеціальний термін? Чи є в ньому більше, ніж просто "використання більше 1 текстури"? Я щось пропускаю?


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

Але для багатопотокової роботи потрібен спеціальний API, зовсім інший дизайн програми тощо. Це багато в чому відрізняється. Моє запитання випливає з того, що багатотекстурність, здається, не має нічого іншого, крім кількості текстур. І це не проблема, а лише питання.
NPS

Для цього не потрібно вимагати спеціального API. Це залежало б від реалізації. Я використовую деякі інструменти, які стосуються мультитекстури так само, як і "unitexture";)
AturSams

@concept Яка частина? Назва?
Анко

Відповіді:


16

Спеціальний термін пов'язаний з еволюцією графічних карт та графічних API в режимі реального часу, а не таким особливим. Наприклад, обробка зображень та візуалізація графіки в автономному режимі мали цю особливість задовго до того, як вона була доступна в графічних API та в режимі реального часу для споживачів.

Оскільки OpenGL 1.1 (фіксований функціонал) багатотекстурність була введена в API як новий стан. Замість того, щоб зв'язати лише одну текстуру, вона дала вам можливість пов'язувати кілька текстур; по одній для кожної одиниці текстури, а потім змішуйте їх за допомогою одного з параметрів середовища текстури, змішуйте, модулюйте тощо 1

Потім текстурні комбайнери були введені , це дало можливість поєднувати набір текстур, використовуючи більш гнучкі операції, даючи спосіб передавати параметри фіксованому набору операцій (думайте про це як шейдери, але з фіксованим набором парам). Це було більш гнучка, ніж оригінальні «комбайнери».

З впровадженням шейдерів попередні комбайнери стали надлишковими, поки офіційно не застаріли. Нарешті, стало банальним (у міру того, як апаратні засоби та відповідно API розвивалися) передавати зразок текстури в шейдер і дозволити GPU виконувати довільну роботу операції (ваш шейдер) на ваших текстурах набагато гнучкіше, ніж раніше.

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

1 Я використовую свою пам'ять, щоб згадати фіксовану функціональність OpenGL, щоб виправити мене, якщо я пропустив що-небудь.


5

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

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

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


2

На початку було світло

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

А потім був Куаке

Куайк не став використовував такого освітлення для багатьох своїх об'єктів. Натомість вона використовувала другу текстуру для відображення освітлення, яке множилось на (або «модулювало») текстуру об’єкта для отримання остаточного кольору.

Однак апаратне забезпечення того часу не підтримувало це в одній операції. Тож Quake потрібно було намалювати об’єкти сцени двічі:

  • Намалюйте все один раз, щоб скласти основні текстури.
  • Встановити режим модулювання суміші.
  • Намалюйте все вдруге, щоб застосувати освітлювальні текстури.

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

Введіть багатотекст

Рішення для цього було багатотекстовим і спочатку було викрито за допомогою розширення GL_SGIS_multitexture, яке існувало лише на деяких споживчих картках 3DFX. Спочатку він дозволяв змішувати лише дві текстури (і з обмеженим набором режимів накладання).

Процитуйте оригінал читання GLQuake :

GL_SGIS_multitexture
Підтримка мультитекстурів дозволяє певним обладнанням відображати світ за один прохід замість двох. GLQuake використовує два проходи, один для світових текстур, а другий для світлих карт, які змішуються на текстурах. Для деяких апаратних засобів, з підтримкою OpenGL, підтримуваної GL_SIGS_multitexture, це можна зробити за один прохід. На апаратному забезпеченні, яке це підтримує, ви отримаєте 60% -100% збільшення частоти кадрів. Наразі лише три подвійні картки TMFX (наприклад, Obsidian 2220) підтримують це розширення, але незабаром з’явиться інше обладнання.

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

І так до сьогодення

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

Але що важливо для цілей вашого запитання, це таке: на початку стандартна функціональність була лише в змозі використовувати її текстуру за один раз під час візуалізації. Можливість використання декількох була додатковою функціональністю, яка підтримувала лише апаратне обладнання високого класу, і тому їй потрібно було ім'я. Це ім'я могло бути "подвійним текстуруванням" (оскільки перші реалізації лише підтримували дві текстури), але одним оком на майбутнє було обрано назву "багатотекстура".

Подальше ознайомлення з історією всього цього можна знайти тут , і хороший історичний опис (ширшого контексту та ролі багатотекстурного відтворення) в цьому відповіді Programmers.SE .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.