Моє запитання стосується саме металу, оскільки я не знаю, чи зміниться відповідь для іншого API.
Я вважаю, що зараз я розумію, це:
Структурована текстура заздалегідь розраховувала "рівні деталізації", де нижчий рівень деталізації створюється шляхом деформації оригінальної текстури деяким змістовним чином.
Рівні Mipmap посилаються на низхідний рівень деталізації, де рівень
0
є початковою текстурою, а вищі рівні - це зменшення потужності двох.Більшість графічних процесорів реалізують трилінеарну фільтрацію, яка вибирає два сусідніх рівня міпмапи для кожного зразка, вибірки з кожного рівня за допомогою білінеарної фільтрації, а потім лінійно змішує ці зразки.
Те, що я не зовсім розумію, - це те, як обираються ці рівні mipmap. У документації до стандартної бібліотеки Metal я бачу, що можна взяти зразки, із зазначенням примірника lod_options
типу або без нього . Я б припустив, що цей аргумент змінює спосіб вибору рівнів mipmap і, мабуть, існує три види lod_options
для двовимірних текстур:
bias(float value)
level(float lod)
gradient2d(float2 dPdx, float2 dPdy)
На жаль, документація не заважає пояснювати, що робить будь-який із цих варіантів. Я можу здогадатися, що bias()
змінює деякий автоматично обраний рівень деталізації, але що тоді означає зміщення value
? Який масштаб працює? Точно так же, як це lod
в level()
перекладі на дискретні рівні MIPMAP? І, працюючи в припущенні, що gradient2d()
використовує градієнт координати текстури, як він використовує цей градієнт для вибору рівня mipmap?
Що ще важливіше, якщо я lod_options
пропущу, як вибираються рівні mipmap? Чи відрізняється це залежно від типу функції, яка виконується?
І якщо sample()
функція, визначена за замовчуванням, яка не задається параметрами функції, полягає в тому, щоб зробити щось на кшталт gradient2D()
(принаймні, в шейдері фрагмента), чи використовує він прості похідні екранного простору чи це працює безпосередньо з растризатором і інтерпольованими координатами текстури. обчислити точний градієнт?
І нарешті, наскільки послідовною є така поведінка від пристрою до пристрою? Стара стаття (стара, як у DirectX 9), яку я читав, згадується про складний вибір пристрою mipmap, специфічний для пристрою, але не знаю, чи краще вибір mipmap визначається в нових архітектурах.