Моє запитання стосується саме металу, оскільки я не знаю, чи зміниться відповідь для іншого 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 визначається в нових архітектурах.