Що таке фільтр у іграх. Анізотропна фільтрація

Тести продуктивності:

І ось тепер, коли ми ознайомилися з основними поняттями про фільтрацію та згладжування текстур, можна перебиратися на практику.

Конфігурація комп'ютера:
Процесор: Intel Core 2 Quad Q6600 @ 3200MHz (400x8, 1.3125V)
Відеокарта: Palit Nvidia GeForce 8800GT
Материнська плата: Asus P5Q PRO TURBO
Пам'ять: 2x2048MB DDR2 Corsair XMS2 @ 1066MHz, 5-5-5-15
Блок живлення: Corsair CMPSU-850HXEU 850W
Процесорний кулер: Zalman CNPS9700 LED
ОС: Windows 7 Ultimate x64
Версія відео драйвера: Nvidia 195.62 x64

Головним випробуваним у нашому сьогоднішньому тестуванні стала дуже стара, але не менш знаменита Counter-Strike: Source, оскільки ця одна з небагатьох по-справжньому поширених ігор, що надають величезний набір різних налаштувань згладжування та фільтрації. Незважаючи на старовину движка (2004 рік), дана гра, як і раніше, може непогано навантажити навіть найсучаснішу платформу. Ось такий багатий асортимент налаштувань представлений користувачеві:

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

І так, що ж у нас вийшло:

Результати вийшли доволі несподіваними. Технологія coveragesampling (CSAA), яка за визначенням повинна споживати менше ресурсів, ніж MSAA, тут показує зовсім зворотну картину. Причин цього явища може бути безліч. Насамперед необхідно враховувати, що продуктивність при включенні згладжування залежить від архітектури GPU. Та й оптимізація різних технологій самої гри та версія драйвера відіграють не меншу роль. Тому результати при використанні інших відеокарт, або навіть іншої версії драйвера, можуть бути зовсім іншими.

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

Крім того, проглядається явна відповідність показників ФПС, при використанні однакового методу згладжування, для AF 8x і AF 16x. При цьому різниця коливається в діапазоні від 1 до 4 фпс (за винятком MSAA 8x, де різниця становить 11 фпс). Це говорить про те, що використання фільтрації 16х може бути дуже корисним, якщо необхідно підвищити якість картинки без істотного удару по продуктивності.

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

Тести картинки:

І що ж ми маємо? Ми дізналися про прояв різних конфігурацій налаштувань на продуктивність. "Але навіщо все це потрібно?" - Запитайте ви. Для підвищення якості зображення, що відображається, відповім я. А чи є взагалі це підвищення? Для відповіді на це запитання пропоную подивитись такі скришоти:

Billinear / MSAA 2xTrillinear / MSAA 2xAF 2x / MSAA 2x
AF 2x / CSAA 8xAF 2x / MSAA 8xAF 2x / CSAA 16x
AF 2x / CSAA 16xQAF 8x/MSAA x2AF 8x / CSAA 8x
AF 8x/MSAA 8xAF 8x / CSAA 16xAF 8x/CSAA 16xQ
AF 16x / MSAA 2xAF 16x / CSAA 8xAF 16x/MSAA 8x
AF 16x / CSAA 16xAF 16x / CSAA 16xQBillinear / CSAA 16xQ

Як видно, особливої ​​різниці в комбінаціях "вище" AF 8x/MSAA 8x (CSAA 8x) просто немає. Але при цьому виходить відчутний удар по продуктивності, особливо під час використання Coverage Sampling AntiAliasing.

Висновки:

Напевно серед тих, хто читає цю статтю, знайдуться гравці Cs:s, HL2 та інших ігор на основі движка Source. Їм ця стаття виявиться більш цікавою та пізнавальною, ніж рештою. Однак метою цієї писанини було лише розповісти про сучасні технології, що допомагають покращити візуальне сприйняття ігор. А тести – як спосіб показати на практиці викладену теорію.

Зрозуміло, для достовірності показань слід проводити тести продуктивності як на інших відеочіпах, так і на додаткових іграх.

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

By Stormcss


Злісно штовхати ногами

З появою 3D-ігор стали з'являтися проблеми, яких у 2D-іграх не було: адже тепер потрібно на плоский монітор вивести тривимірну картинку. Якщо об'єкт знаходиться паралельно площині екрана поблизу нього - проблем немає: одному пікселю відповідає один тексель (тексель – це піксель двовимірного зображення, накладеного на поверхню 3D). А ось що робити, якщо об'єкт нахилений чи знаходиться вдалині? Адже тоді на один піксель припадає кілька текселів, і оскільки монітор має обмежену кількість пікселів, колір кожного доводиться розраховувати з декількох текселів шляхом певного процесу - фільтрації.


Для спрощення розуміння уявімо, що кожен піксель – це квадратна «дірочка» в моніторі, з очей ми пускаємо «промені світла», а текселі розташовані на квадратних ґратах за монітором. Якщо ми розташуємо решітку паралельно монітору відразу за ним, то світло від одного пікселя накриє лише один тексель. Тепер ми почнемо відсувати ґрати – що ми отримаємо? Те, що наша пляма світла від пікселя накриє більше, ніж один тексель. Тепер повернемо ґрати - отримаємо те саме: пляма від одного пікселя накриє безліч текселів. Але ж піксель може мати один колір, і якщо в нього потрапляє багато текселів, то потрібен алгоритм, за допомогою якого ми визначатимемо його колір - він називається фільтрацією текстур.


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


Тож не дивно, що зараз така фільтрація більше не використовується.


З розвитком відеокарт стала зростати їхня потужність, так що розробники ігор пішли далі: якщо брати за колір пікселя один тексель, то виходить погано. Окей – а давайте візьмемо середній колір від 4 текселів та назвемо це білінійною фільтрацією? З одного боку, все стане краще – блочність зникне. Зате прийде ворог номер два - розпливчастість картинки поблизу гравця: це виходить через те, що для інтерполяції потрібно більше текселів, ніж чотири.

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


Окей, сказали розробники ігор - разів 4 текселів мало, візьмемо двічі по чотири, і для більш точного влучення в колір будемо використовувати технологію MIP-текстурування. Як я вже писав вище – чим далі від гравця текстура, чим більше текселів буде в пікселі, і тим важче відеокарті обробити картинку. MIP-текстурування ж має на увазі зберігання однієї і тієї ж текстур у різних дозволах: наприклад, якщо вихідний розмір текстури 256х256, то в пам'яті зберігаються її копії в 128х128, 64х64 і так далі, аж до 1х1:


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


Як видно, трилінійна фільтрація серйозно краща за білінійну і тим паче точкову, але все ще картинка на далеких дистанціях «милиться». І нечіткою картинка виходить через те, що ми не враховуємо те, що текстура може бути нахилена щодо гравця – і саме цю проблему вирішує анізотропна фільтрація. Коротко принцип роботи анізотропної фільтрації такий: береться MIP-текстура, встановлена ​​поперек напрямку огляду, після чого відбувається усереднення значень її кольорів з кольором деякої кількості текселів уздовж напрямку огляду. Кількість текселів варіюється від 16 (для х2 фільтрації) до 128 (для х16). Говорячи простіше – замість квадратного фільтра (як у білінійній фільтрації) використовується витягнутий, що дозволяє якісніше вибрати потрібний колір для екранного пікселя. Так як пікселів на екрані може бути мільйон і навіть більше, а кожен тексель важить не менше 32 біт (32-бітний колір), анізотропна фільтрація вимагає величезної пропускної спроможності відеопам'яті – десятки гігабайт на секунду. Такі великі вимоги до пам'яті зменшують рахунок стиснення текстур і кешування, але все ще на відеокартах з DDR-пам'яттю або 64-бітною шиною різниця між трилінійною і х16 анізотропною фільтрацією може досягати 10-15% fps, але і картинка після такої фільтрації виявляється найкращою :

Фільтрування текстури.

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

Найпростіший метод накладання текстур називається крапкова вибірка(Single point-sampling). Суть його в тому, що для кожного пікселя, що складає полігон, вибирається один тексель із текстурного зображення, що найближче розташований до центру світлової плями. Виникає помилка, оскільки колір пікселя визначають кілька текселів, а обраний був лише один.

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

Другий метод - білінійна фільтрація(Bi-Linear Filtering) полягає у використанні інтерполяційної техніки. Для визначення текселів, які мають бути задіяні для інтерполяції, використовується основна форма світлової плями - коло. Фактично, коло апроксимується 4 текселями. Білінійна фільтрація - це техніка усунення спотворень зображення (фільтрація), таких, як "блочність" текстур при їх збільшенні. При повільному обертанні чи русі об'єкта (наближення/видалення) може бути помітні " перескакування " пікселів з місця на інше, тобто. утворюється блоковість. Щоб уникнути цього ефекту застосовують білінійну фільтрацію, при використанні якої для визначення кольору кожного пікселя береться виважене середнє значення кольору чотирьох суміжних текселів і в результаті визначається колір текстури, що накладається. Результуючий колір пікселя визначається після здійснення трьох операцій змішування: спочатку змішуються кольори двох пар текселів, а потім змішуються два отримані кольори.

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

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

Як ілюстрацію до описаного ефекту можуть служити такі прямокутники з білінійним текстуруванням:

Мал. 13.29. Зафарбовування об'єкта методом білінійної фільтрації.Поява артефактів "depth-aliasing", що виражаються в тому, що кілька квадратів зливаються в один.

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

Mip-текстура (mip-map) складається із набору заздалегідь відфільтрованих та масштабованих зображень. У зображенні, пов'язаному з рівнем mip-map, піксель представляється у вигляді середнього чотирьох пікселів з попереднього рівня з більшою роздільною здатністю. Звідси зображення пов'язане з кожним рівнем mip-тектури в чотири рази менше за розміром попереднього mip-map рівня.

Мал. 13.30. Зображення пов'язані з кожним mip-map рівнем хвилеподібної текстури.

Зліва направо ми маємо mip-map рівні 0, 1, 2 і т.д. Чим менше стає зображення, тим більше втрачається деталей, аж до наближення до кінця, коли не видно нічого, крім плями з сірих пікселів, що розпливається.

Ступінь або рівень деталізації - Level of Detail або просто LOD, використовуються для визначення, який рівень mip-map (або який ступінь деталізації) слід вибрати для накладання текстури на об'єкт. LOD повинен відповідати числу текселів, що накладаються на піксель. Наприклад, якщо текстурування відбувається із співвідношенням близьким до 1:1, то LOD буде 0, а значить і використовуватиметься mip-map рівень з найвищою роздільною здатністю. Якщо 4 текселі накладаються на один піксель, то LOD буде 1 і використовуватиметься наступний mip рівень з меншою роздільною здатністю. Зазвичай, при віддаленні від точки спостереження, об'єкт, що заслуговує на найбільшу увагу має більш високе значення LOD.

У той час, як mip-текстурування вирішує проблему помилок "depth-aliasing", його використання може спричинити появу інших артефактів. При видаленні об'єкта все далі від точки спостереження відбувається перехід від низького mip-map рівня до високого. У момент знаходження об'єкта в перехідному стані від одного mip-map рівня до іншого, з'являється особливий тип помилок візуалізації, відомих під назвою "mip-banding" - смугастість чи слоєність, тобто. явно помітні межі переходу від одного mip-map рівня до іншого.

Мал. 13.31. Прямокутна стрічка складається із двох трикутників, текстурованих хвилеподібним зображенням, де "mip-banding" артефакти позначені червоними стрілками.

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

Трилінійна фільтрація(Trilinear filtering) являє собою третій метод, який видаляє артефакти "mip-banding", що виникають при використанні mip-текстурування. При трилінійній фільтрації для визначення кольору пікселя береться середнє значення кольору восьми текселів, чотири з двох сусідніх текстур і в результаті семи операцій змішування визначається колір пікселя. При використанні трилінійної фільтрації можливе виведення на екран текстурованого об'єкта з плавно виконаними переходами від одного mip рівня до наступного, що досягається за рахунок визначення LOD шляхом інтерполяції двох сусідніх mip-map рівнів. Таким чином вирішуючи більшість проблем, пов'язаних із mip-текстуруванням та помилками через неправильний розрахунок глибини сцени ("depth aliasing").

Мал. 13.32. Пірамідальність MIP-map

Приклад використання трилінійної фільтрації наведено нижче. Тут знову використовується той самий прямокутник, текстурований хвилеподібним зображенням, але з плавними переходами від одного mip рівня до наступного за рахунок використання трилінійної фільтрації. Зверніть увагу на відсутність помітних помилок візуалізації.

Мал. 13.33. Прямокутник, текстурований хвилеподібним зображенням, виведений на екран з використанням mip-текстурування та трилінійної фільтрації.

Існує кілька способів створення MIP текстур. Один із них – просто підготувати їх заздалегідь, використовуючи графічні пакети типу Adobe PhotoShop. Інший спосіб - генерація MIP текстур "літу", тобто. у процесі виконання програми. Заздалегідь підготовлені MIP текстури означають додаткові 30% дискового простору для текстур у базовій поставці інсталяції гри, але дозволяють застосовувати гнучкіші методи управління їх створенням і дозволяють додавати різні ефекти та додаткові деталі різним MIP рівням.

Виходить, що трилінійний міпмепінг це найкраще, що може бути?

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

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

Опис алгоритмів текстурування: фільтрація текстур

Фільтрування текстур

Останнім часом компанії, що займаються розробкою комп'ютерної 3D графіки, постійно прагнуть збільшити детальність та якість зображення у комп'ютерному промальовуванні. Нові технології та архітектури 3D промальовування безупинно розробляються, покращуються та модернізуються алгоритми стиснення для збільшення пропускної спроможності пам'яті, зазнає змін та архітектури пам'яті. На жаль, відрив передових ідей у ​​3D графіці від звичайних ПК досить великий: реалістичність у сучасних іграх тощо. зроблена за допомогою технологій, розроблених 1-2 роки тому. Крім того, потужність звичайних ПК дуже обмежена, саме тому для ігор використовуються досить прості алгоритми, про які ми розповімо в цій статті: це текстурування, і більш докладно - фільтрація текстур.

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

Однією з технологій, що найбільш використовуються, що спрощують розрахунок зображення при досить хорошій якості, є текстурування. Текстура - це 2D зображення, що накладається на 3D об'єкт, або будь-яку поверхню. Як приклад візьмемо таку ситуацію: ви - розробник, і необхідно, щоб користувач побачив цегляну стіну. Створюється 3D каркас стіни, причому можна виділити цеглу окремо. Тепер беремо 2D картинку цегли та накладаємо її на цеглу в 3D каркасі, і так – усю стіну. В результаті вийшла нормальна 3D стіна, причому графічному чіпу немає необхідності промальовувати та прораховувати кожен піксель – він прораховує координати 3D каркасу, до яких прив'язане 2D зображення.

Є ще одне поняття у текстуруванні, про яке слід розповісти. При накладанні 2D зображення воно розбивається на безліч кольорових фрагментів. Це зроблено для масштабування об'єкта - текстура 2-мірна, а 3-мірний об'єкт при наближенні або видаленні повинен змінюватися. Текстура для збереження реалістичності та якості також має змінюватися. Отже, текстура розбивається на безліч кольорових фрагментів, які називаються текселями (texels - texture elements). Надалі, наприклад, при наближенні до об'єкта, немає потреби заново завантажувати нову текстуру: беруться текселі з оригінальної текстури та збільшуються. Звичайно ж, якість втрачається, але вона залишається на досить високому рівні, крім того, за такого підходу значно розвантажується графічний процесор і пам'ять.

Mip-Mapping (міп-мапінг)

Рух - це характеристика всіх об'єктів, що відображаються; навіть якщо сам об'єкт нерухомий, він однаково змінюється за зміни кута зору персонажа внаслідок його руху. Тому текстура, поміщена на об'єкт, також має рухатися - це спричиняє деякі ускладнення та додаткову обробку. А якщо ми дивимося на об'єкт під якимось кутом, наприклад, на підлогу? Підлога може займати більшу площу, і для збереження реалістичності, чим далі вона від нас, тим менше її складові (наприклад, плитка). Для забезпечення цього текстура повинна певним чином зменшуватися. На жаль, проста зміна роздільної здатності текстур може спричинити досить неприємний ефект, коли одна текстура візуально ніби зливається з іншою. Інший неприємний ефект може виникнути, якщо тексель більше розміром, ніж потрібна кількість пікселів. Це відбувається, коли дивишся на текстуру на дуже великій відстані. Обидві ситуації виникають при застосуванні традиційного згладжування. А ось і реальні приклади цих випадків: у цьому рефераті немає

Для пом'якшення таких ситуацій був створений mip-mapping (міп-мапінг). Ця технологія працює дуже просто: оригінальна текстура генерується в різних ситуаціях таким чином, щоб коректно відображати текстуру на різних відстанях та за різних кутів зору. При наближенні до об'єкта з'являється текстура з більшою роздільною здатністю, а при віддаленні - з низькою. Таким чином, mip-mapping покращує якість зображення та зменшує нерівності. Нижче представлені самі картинки, лише з включеним mip-mapping: у цьому рефераті картинок немає.

Помітили покращення якості? Воно особливо помітне на другому малюнку з жовто-червоним малюнком. Зверніть увагу: покращилася якість не лише далеких текстур: ближні також виглядають набагато краще. Загалом зображення з mip-mapping виглядає набагато краще, ніж без нього: відсутні численні викривлення і спотворення, помітні при звичайному відображенні.

Фільтрування

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

Білінійна фільтрація (Bilineat Filtration)

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

На цій картинці приклад промальовування зображення, використовуючи білінійну фільтрацію та mip-mapping.

Трилінійна фільтрація

Друге народження білінійна фільтрація отримала у вигляді трилінійної фільтрації, принцип дії якої такий самий, але використовується покращений алгоритм розрахунку, який збільшує точність промальовування. Трилінійна фільтрація, як і білінійна, використовує блоки з 4 текселів, так само як і в білінійній фільтрації, нормалізується зображення, потім нормалізується зображення з граничного блоку з 4 текселів. Останнім етапом проводиться аналіз кордону обох блоків, в результаті якого виправляються можливі помилки та невідповідності на межі цих 2 блоків. У білінійній фільтрації досить часто можна побачити лінії, що виникають на межах блоків, які зникають під час використання трилінійної фільтрації. Крім того, при використанні трилінійної фільтрації краще забираються спотворення та нерівності при русі та при зміні кута зору. Нижче показана схема використання трилінійної фільтрації, і вона діє.

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

Зображення виходить дуже якісно тільки при більш прямих кутах зору, при реальному промальовуванні, геометричні форми об'єкта можуть бути порушені. Подивіться на картинку від SGI:

Анізотропна фільтрація (Anisotropic filtering)

Форма текстурованих об'єктів як із білінійної, і при трилінійної фільтрації може спотворюватися, т.к. обидві ці фільтрації є ізотропними - зображення фільтрується у певній формі - у формі квадрата. Більшість формованих об'єктів не підходять під цю певну і незмінну форму: для їх якісної обробки необхідно використовувати інший тип фільтрації - анізотропний. Анізотропія складається з кількох слів латиною і означає буквально "Ані" - не, "ізо" - певна форма і "тропія" - модель - тобто. моделі невизначеної форми Назва цієї технології відбиває її технічну реалізацію. Анізотропна фільтрація зазвичай оперує щонайменше 8 текселями, на всі боки mip-map рівнів, у своїй використовується модель невизначеної заздалегідь форми. В результаті забираються шуми та спотворення об'єктів, а зображення в цілому виходить якіснішим.

Порівняйте дві картинки: на одній використовувалася анізотропна фільтрація 16-текселів, за допомогою якої зникли спотворення між mip-map рівнями та шум зображення, на другому малюнку анізотропна фільтрація була вимкнена.

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

Довгий час графічні плати споживчого рівня не показували ту якість зображення, яка можлива при використанні анізотропної фільтрації. З появою таких графічних чіпів як NVIDIA GeForce2 і ATI Radeon стало можливим використання анізотропної фільтрації, яка апаратно аналізує блоки з 16 текселів. Відеокарти GeForce3 та Radeon 8500 використовують вже 32 тексельну анізотропну фільтрацію. Картинка нижче показує зображення, наближене до того, яке буде отримано за допомогою професійної 64 тексельної анізотропної фільтрації:

Майбутнє…

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

Додатково:

Антіаліасинг та анізотропна фільтрація сьогодні: що, де і почому? Частина перша

Насправді, статтю з таким заголовком можна було б почати з будь-якої банальності, на кшталт «кожен користувач комп'ютера будь-коли міг спостерігати роботу таких технік покращення тривимірного зображення, як антиаліасинг або анізотропна фільтрація». Або такий: «поки наші кораблі борознять космічні простори, програмісти NVIDIA і ATI шукають способи покращити роботу відомих технік поліпшень зображення». Друга банальність має набагато більше шансів на життя в тому плані, що вона вже інтригує якоюсь подобою того, що ми займатимемося розслідуванням питання про те, хто і яким чином «оптимізував» у своїх драйверах.

Однак ми, мабуть, обійдемося без банальностей. Тому що куди цікавіше поміркувати на тему того, наскільки ж стали доступні зараз техніки покращення зображення для простого користувача або, правильніше сказати, для простого геймера. Саме геймери на сьогоднішній день є найактивнішими споживачами всіх нових технологій та нововведень у 3D. За великим рахунком, потужний 3D-акселератор на сьогоднішній день потрібен виключно для гри в останні комп'ютерні ігри з потужними 3D-движками, що оперують складними шейдерами різних версій. Зараз нікого вже не здивуєш грою з піксельними шейдерами версії 2.0 – в ігровому світі такі забави потихеньку стають повсякденним явищем. Більшість ігор, як і раніше, випускається на основі шейдерної моделі 1.1 через те, що для розробників ігор найбільш важливо домогтися, щоб їх гра непогано працювала на залозі, яка стоїть у переважній більшості гравців. Робити супернаворочений двигун зараз - це велике марнотратство і навіть ризик. Судіть самі: розробка движка класу «Doom 3» або «Half-Life 2» (ну і приплюсуємо сюди першопрохідника шейдерів 2.0 у всій красі, дітище Crytek – «FarCry», щоб вийшла справжня всюдисуща трійця) займає величезну кількість часу, що привносить в розробку додаткові труднощі - необхідно розробити двигун у такі терміни, щоб нововведення та оригінальні напрацювання не застаріли під час створення двигуна.

Якщо ви сумніваєтеся в тому, що таке може бути, то дарма - у випадку з «Half-Life 2» все саме так і було (та й «Doom 3» розроблявся з оглядкою на GeForce 3, а вийшов тоді, коли продавалися на повну силу GeForce FX). Також розробка двигунів подібного класу пов'язана з величезними витратами на розробку: талановиті програмісти коштують сьогодні дорого. А ще останнім часом багато уваги (навіть більше, ніж потрібно) приділяється, якщо можна так сказати, «політиці» щодо ігрових рушіїв.

Так-так, саме так, ви не дочули, у сфері 3D вже давно є своя політика, заснована, природно, на інтересах двох грандів будови графічних процесорів: ATI і NVIDIA. Сувора Канада вже давно веде боротьбу проти сонячної Каліфорнії, і поки що кінця цьому протистоянню не видно, що нам, простим споживачам, звичайно, тільки на руку. Тепер розробити класний двигун мало - щоб мати успіх, потрібно заручитися підтримкою або каліфорнійської діви NVIDIA, або канадської ATI, благо, тепер і перша, і друга є свої партнерські програми для розробників ігор. У NVIDIA така програма називається "The way it"s meant to be played", а у ATI - "Get it in the game". а ATI запевняє, що все, що ми тільки не побажаємо, ми обов'язково отримаємо в самій грі.Достатньо привабливо, чи не так? для простоти сприйняття ми називатимемо його саме «Half-Life 2», щоб зберегти правильну асоціацію) і зовсім спочатку розробляються в тісній співпраці з інженерами виробників графічних чіпів, щоб ігри краще працювали саме на GPU якогось одного виробника.

Тому, як ми можемо бачити, революції в області нових графічних 3D-движків робити дуже проблематично, і тому трапляються ці перевороти в світі ігрових движків не так і часто. Однак покращувати якість зображення якимось чином потрібно. Якщо просто збільшувати кількість полігонів у кадрі, тим самим отримуючи візуально красивішу для сприйняття картинку, то в результаті ми прийдемо до того, що акселератор не зможе обробляти сцену з прийнятним рівнем частоти кадрів, але в картинці все одно буде бракувати. Лісочки з пікселів все одно залишаться, та й якість текстур не покращиться. Залишаються менш явні способи покращення якості тривимірної картинки на моніторі – це анізотропна фільтрація та антиаліасинг. Безпосередньо до самого 3D-движка ці техніки поліпшення зображення не мають жодного відношення, і зробити сам двигун більш красивим вони, звичайно, не можуть, проте вони можуть працювати з текстурами та зображенням таким чином, що на виході, тобто на моніторі, ми можемо бачити візуально більш красиву та м'яку картинку.

Саме на терені анізотропної фільтрації та антиаліасингу проходить колосальна кількість оптимізації драйверів як з боку NVIDIA, так і з боку ATI. У компаній різні підходи та політика щодо цих самих оптимізацій, часом не зовсім справедлива по відношенню до користувачів. Однак наша стаття якраз і покликана розібратися з тим, що ж хорошого і поганого в підходах обох компаній-виробників GPU і що на сьогоднішній день може поліпшити якість зображення в 3D-іграх.

Що таке антиаліасинг та з чим його їдять?

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

Отже, антиаліасинг - що це таке і навіщо він потрібен. Насамперед, у слові «антіаліасинг» необхідно виділити частину його – «анти». Дуже ясно, що ця частина слова має на увазі те, що саме явище «антіаліасингу» спрямоване на боротьбу з чимось. Як нескладно здогадатися, у нашому випадку – з «Аліасинг». Тому для нас на даний момент важливо чітко розібратися в тому, що ж є горезвісним «аліасингом».

Спочатку потрібно чітко розуміти, що зображення, яке ми з вами можемо щодня спостерігати на екранах наших з вами моніторів, складається з так званих дрібних частинок, які прийнято називати пікселями. Хорошою аналогією в цьому сенсі може бути приклад з папером в клітину. Зображення на моніторі – це той самий папір у клітинку, тільки вони в даному випадку дуже дрібні. Якщо кажуть, що роздільна здатність екрану становить 1024х768 при 32-бітному кольорі, то це означає, що по горизонталі на моніторі вміщається 1024 пікселів, а по вертикалі – 768. При цьому кожна точка може бути зафарбована одним кольором з доступних у 32-бітній палітрі. На даний момент 32-бітовий колір – це межа того, чого ми можемо досягти на екрані комп'ютера. Кращі уми людства (та сама Кармак) вже говорять про необхідність переходу на 64-бітний колір і вказують на явні мінуси 32-бітної палітри. Свого часу при переході з 16-бітного на 32-бітовий колір дана необхідність була досить чітко обгрунтована і бачилися реальні причини, через які варто було б перейти на 32 біт. Перехід на 64-бітовий колір на сьогоднішній день - це швидше надмірність. Як і у випадку з 16 і 32 бітами, свого часу доведеться досить довго чекати, коли акселератори всіх рівнів зможуть з прийнятною швидкістю обробляти 64-бітовий колір.

Переважна більшість статей, в яких зачіпаються тим чи іншим чином принципи побудови зображень у 3D і де ведеться розмова про антиаліасингу, рясніють простим, але разом з тим найбільш дієвим прикладом, на якому можна досить добре зрозуміти, що таке антиаліасинг. Подивіться на збільшений напис «Апгрейд», зроблений у Word'e, а потім просто збільшений у фотошопі. Не дуже добре виглядає, чи не так? З боків букв видно так зване гребінка або, як її ще називають, «драбинка». По суті, ця «гребінка» або «драбинка» і є аліасинг. Можна уявити й інший приклад як геометричного об'єкта, наприклад, піраміди. По її краях також добре видно все те ж «гребінка». А тепер подивіться на інше зображення тієї ж піраміди, але зі збільшеною вдвічі роздільною здатністю. Виглядає вже значно краще, і "гребінка" практично непомітна. Як вже було сказано вище, цей ефект, що згладжує «гребінку», було досягнуто за рахунок того, що ми збільшили дозвіл у 2 рази.

Що це означає? Припустимо, у нас була відрендерована піраміда з роздільною здатністю 200х200 пікселів (вище ми вже докладно прояснили питання про те, що таке пікселі і навіщо вони потрібні). Ми збільшили кількість точок по вертикалі та по горизонталі рівно в 2 рази, тобто отримали зображення з роздільною здатністю 400 точок по вертикалі та 400 точок по горизонталі. Це також означає, що кількість точок на нашому об'єкті, що знаходився на сцені, збільшилася вдвічі. Що це дало стосовно нашого ефекту аліасингу? Очевидно, що він став мінімальним, тобто згладився - адже кількість точок по краях об'єкта також зросла вдвічі. Саме слово «згладилося» є тут ключовим. Адже антиаліасинг по-іншому називають згладжуванням, що відображає саму суть технології, яка згладжує ту саму «драбинку» по краях тривимірних об'єктів.

Насправді, після збільшення дозволу «драбинки» з краю піраміди нікуди не поділася – вона залишається там, як і раніше. Однак за рахунок того, що ми збільшили дозвіл (що означає збільшення точок, які витрачаються на відображення піраміди), ефект «драбинки» згладився завдяки особливостям людського зору, який вже менш чітко бачить пікселі на краю об'єкта. Абсолютно зрозуміло, що якщо збільшувати дозвіл ще й ще, то ефект аліасингу спостерігатиметься все меншою і меншою мірою. Точніше, людське око помітить його все меншою і меншою мірою, оскільки сам ефект аліасингу нікуди не подінеться. Але так само абсолютно зрозуміло і те, що до нескінченності збільшувати дозвіл не вийде, адже монітори, нехай навіть і найсучасніші, мають кінцеві дозволи, причому не такі вже й великі, що не дозволить нам постійно збільшувати кількість точок. Простіше кажучи, найпростішого ефекту антиаліасингу можна досягти, лише збільшивши роздільну здатність екрану, проте роздільна здатність не може зростати до нескінченності. Здавалося б, виходу нема? Однак насправді він був знайдений, і заснований він на тій же особливості зору людини.

Цього вдалося досягти завдяки плавним переходам кольорів на зображенні. Фактично візуальне покращення зображення проводиться не за рахунок фізичного збільшення роздільної здатності, а за рахунок, якщо можна так сказати, колірного збільшення роздільної здатності. У цій статті ми не описуватимемо алгоритми обчислення цих точок і не вдаватимемося в глибини математичних обчислень, а розповімо лише про принцип роботи такого антиаліасингу. Лісеня на межах об'єктів видно лише тому, що найчастіше краї тривимірних об'єктів досить сильно виділяються за кольором від решти картинки і є тонкими лініями в один піксель. Це можна компенсувати, поставивши деяку кількість крапок з квітами, що обчислюються за формулою із значень кольору самого краю та крапок поряд із цим краєм. Тобто, якщо край об'єкта чорний, а білий фон, то додаткова точка поряд з чорною лінією краю стане сірою. Чим більше цих додаткових точок біля краю будь-якого 3D-об'єкта, тим гладкіше виглядають його краї і тим менше помітна драбинка. Цей спосіб називається крайовим антиаліасингом. Якість антиаліасингу, що задається в драйвері відеокарти, як то: 2x, 4x, 6x, 8x означає кількість додаткових пікселів навколо лінії, що потребує згладжування.

Анізотропна фільтрація: міні-лікнеп для початківців

Для того щоб зрозуміти, що таке фільтрація, необхідно мати деякі основні знання. Ми вже з'ясували, що зображення на екрані складається з безлічі пікселів, кількість яких визначається роздільною здатністю. Для відображення кольорового зображення відеокарта повинна визначати колір кожного пікселя. Визначається колір за допомогою накладання текстурних зображень на полігони, які розташовані в тривимірному просторі. Текстурні зображення складаються з пікселів, точніше, текселів, тобто тексель – це піксель двовимірного зображення, накладеного на 3D поверхню. Головна дилема полягає в наступному: який тексель чи текселі визначають колір пікселя на екрані. Для представлення проблеми фільтрації давайте уявимо одну картину. Припустимо, що ваш екран - це плита з безліччю круглих отворів, кожен з яких є пікселем. Для того щоб визначити, який колір має піксель щодо тривимірної сцени, розташованої за плитою, досить просто подивитися в один з отворів.

А тепер уявимо промінь світла, який проходить через один з отворів і потрапляє на наш текстурований полігон. Якщо останній розташований паралельно щодо отвору, через який проходить світловий промінь, то світлова пляма матиме форму кола. В іншому випадку, якщо полігон розташований не паралельно до отвору, світлова пляма спотворюється і має форму еліптичну. Ми думаємо, що багато читачів у цей час задаються одним питанням: «як пов'язані всі ці плити, отвір, промінь світла з проблемою визначення кольору пікселя?» Увага! Ключова фраза: всі полігони, розташовані у світловій плямі, визначають колір пікселя. Все вищевикладене і є необхідні базові знання, які потрібні для того, щоб зрозуміти різні алгоритми фільтрації.

А тепер, щоб ви краще зрозуміли, для чого потрібна фільтрація, розглянемо процеси, що відбуваються на прикладі легендарної «Quake 3 Arena». Уявіть якийсь коридор з безліччю квадратів і різних орнаментів (благо, в «Quake 3 Arena» цього вистачає). Орнамент на початку коридору дуже деталізований, а ближче до кінця коридору (горизонту) елементи орнаменту стають дедалі менше, тобто. вони відображаються меншою кількістю пікселів. В результаті губляться деталі типу швів між елементами орнаменту, що, відповідно, призводить до погіршення якості зображення.

Проблема полягає в тому, що драйвер графічної карти не знає, які деталі у текстурі є важливими.

Point Sampling

Point Sampling (поточкова вибірка) – найпростіший спосіб визначення кольору пікселя. Цей алгоритм заснований на текстурному зображенні: вибирається всього один тексель, який найближче розташований до центру світлової плями, і по ньому відбувається визначення кольору пікселя. Неважко здогадатися, що це зовсім не так. По-перше, колір пікселя визначається декількома текселями, а ми вибрали лише один. По-друге, форма світлової плями може змінитися, а алгоритм це не бере до уваги. А даремно!

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

Point Sampling має перевагу. Через те, що визначення кольору пікселя здійснюється всього по одному текселю, цей метод не критичний до пропускної спроможності пам'яті, а це автоматично дає даному способу фільтрації колосальні діведенди в тому плані, що на фільтрацію за цією схемою витрачається дуже мало ресурсів 3D-акселератора .

Bi-Linear Filtering

Bi-Linear Filtering – білінійна фільтрація, що базується на методі використання інтерполяційної техніки. Для визначення необхідних текселів використовується основна форма світлової плями, тобто коло. У нашому прикладі з колом останній апроксимується 4 текселями. Як бачимо, тут справи трохи кращі, ніж з Point Sampling. Білінійна фільтрація використовує вже 4 текселі.

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

Розпливчастість – аж ніяк не найголовніша проблема білінійної фільтрації. Справа в тому, що апроксимація виконується коректно лише для об'єктів, розташованих паралельно екрану або точці спостереження, тоді як 99% об'єктів у будь-якій комп'ютерній грі розташовані непаралельно до точки спостереження. Звідси можна дійти невтішного висновку, що 99% об'єктів апроксимуватимуться неправильно. Візьмемо, наприклад, наше коло - полігон розташований непаралельно щодо точки спостереження ми повинні апроксимувати еліпс, а ми апроксимуємо коло, що вкрай неправильно. До того ж білінійна фільтрація значно вимогливіша до пропускної смуги даних пам'яті, що, загалом, більш ніж логічно, враховуючи те, що білінійна фільтрація використовує вже 4 текселі для визначення кольору пікселя.

Якщо судити з інформації на форумах та зі статей в Інтернеті, то ATi хитрує з трилінійною фільтрацією текстур на новому графічному процесорі X800. Втім, знаходяться і ATi, що люто захищають. Взагалі, подібні дискусії нагадують нам скандал однорічної давності, пов'язаний із nVidia.

Приводом до такого гарячого обговорення стала стаття на німецькому сайті Computerbase. У ній було показано, як ATi використовує оптимізовану трилінійну фільтрацію текстур, часто звану "брилінійною" (brilinear) через суміш білінійної та трилінійної фільтрацій, у графічних процесорах Radeon 9600 та X800. Новина справді стала приголомшуючою, адже ATi завжди твердила про використання справжньої трилінійної фільтрації.

Але як ситуація виглядає насправді? Це – оптимізація, хитрість чи просто розумне рішення? Щоб судити, нам необхідно заглибитись у технології різних способів фільтрації. І перша частина статті буде присвячена саме цьому, причому деякі технології ми викладемо дуже спрощено, щоб укластися в кілька сторінок. Отже, погляньмо на базові та важливі функції фільтрації.

Чи буде продовження? Можливо, оскільки суперечка з приводу нещодавно відкритої фільтрації діамантів на картах Radeon 9600 і X800 не вщухає. ATi слід віддати належне за те, що якість картинки карт візуально не страждає через цю фільтрацію. Принаймні, у нас немає прикладів, які говорять про інше. Поки брилінійна фільтрація поводиться при штучно створених лабораторних умовах. В той же час, ATi не дозволяє включити повну трилінійну фільтрацію для згаданих карт, чи вона адаптивна чи ні. Через нову фільтрацію значення продуктивності в тестах не демонструють всього справжнього потенціалу X800, оскільки значення FPS отримані після оптимізації, вплив якої на швидкість оцінити складно. Та й слово "адаптивна" залишає гіркий післясмак. ATi не надала нам інформацію про механізм роботи драйвера і багато разів заявляла, що картка дає повну трилінійну фільтрацію. Лише після згаданого викриття ATi визнала, що фільтрація оптимізована. Сподіватимемося, що в інших місцях драйвера подібної "адаптивності" немає.

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

Кожен виробник вирішує сам, який рівень якості зображення забезпечуватиме стандартно. Однак виробникам слід документувати оптимізації, особливо якщо вони приховані від відомих тестів, як у свіжому прикладі з ATi. Рішення очевидне: дайте можливість вимикати оптимізацію! Тоді споживач зможе сам вирішувати, що йому важливіше – більше FPS чи найкраща якість. На Microsoft, як на третейського суддю, розраховувати також не доводиться. Тести WHQL не дозволяють визначити багато речей, та й їх можна легко обійти: значення слова "адаптивна" вам знайоме?

Відомі на сьогодні оптимізації фільтрації
ATi nVidia
Трилінійна
оптимізація
R9600
X800
GF FX5xxx
(GF 6xxx)*
Кутова оптимізація
анізотропної фільтрації
R9xxx
X800
GF 6xxx
Адаптивна
анізотропна фільтрація
R9xxx
X800
GF FX5xxx
GF 6xxx
Оптимізація ступеня R9xxx
X800
GF FX5xxx
Оптимізація LOD R9xxx
X800(?)

Загалом подібні дискусії мають свої переваги: ​​покупці та, можливо, OEM-клієнти починають прислухатися до проблеми. Ми не сумніваємося, що манія неприборканих оптимізацій продовжуватиметься. Однак у темному царстві з'явився промінь світла, що наочно продемонструвала nVidia зі своєю трилінійною оптимізацією. Сподіватимемося і на такі подібні кроки!

КАТЕГОРІЇ

ПОПУЛЯРНІ СТАТТІ

2023 «kingad.ru» - УЗД дослідження органів людини