OpenGL/DirectX: Как Mipmapping повышает производительность?

Я понимаю, что mipmapping довольно хорошо. То, что я не понимаю (на уровне оборудования/драйвера), - это то, как mipmapping улучшает производительность приложения (по крайней мере, это часто заявляется). Драйвер не знает, до тех пор, пока не будет выполнен фрагментарный шейдер, к которому будет доступен доступ к mipmap-уровню, поэтому в любом случае все уровни mipmap должны присутствовать в VRAM или я ошибаюсь?

Что именно вызывает улучшение производительности?

Ответ 1

Вы, несомненно, знаете, что каждый тексель в нижних LOD мип-цепочки покрывает более высокий процент от общей площади текстурного изображения, верно?

Когда вы выбираете текстуру в отдаленном месте, аппаратное обеспечение будет использовать более низкий LOD. Когда это происходит, выборочная окрестность, необходимая для разрешения минимизации, становится меньше, поэтому необходимо меньшее количество (не кэшированных) выборок. Все дело в объеме памяти, который фактически должен быть извлечен во время выборки текстуры, а не в количестве занятой памяти (при условии, что вы не сталкиваетесь с перебрасыванием текстуры).

Я думаю, что это, вероятно, заслуживает визуального представления, поэтому я позаимствую следующую диаграмму из превосходной серии руководств на arcsynthesis.org.

   

Слева вы видите, что происходит, когда вы все время наивно производите выборку в одном LOD (кстати, на этой диаграмме показана линейная фильтрация минимизации), а справа вы видите, что происходит с mipmapping. Это не только улучшает качество изображения за счет более точного соответствия эффективного размера фрагмента, но и из-за того, что число текселей в нижних LOD с мип-картой меньше, поэтому его можно кэшировать гораздо эффективнее.

Ответ 2

Мипмапы полезны по крайней мере по двум причинам:

  • визуальное качество - сцены выглядят намного лучше на расстоянии, есть больше размытия (которое обычно выглядит лучше, чем мерцающие пиксели). Кроме того, можно использовать анизотропную фильтрацию, которая значительно улучшает качество изображения.
  • производительность: поскольку для удаленных объектов мы можем использовать меньшую текстуру, вся операция должна быть быстрее: иногда весь мип может быть помещен в кеш текстуры. Это называется когерентностью кэша.
  • в целом для mipmaps требуется только 33% больше памяти, поэтому для получения более высокого качества и потенциального прироста производительности достаточно низкая стоимость. Обратите внимание, что для конкретной структуры сцены необходимо измерить реальное улучшение производительности.

см. информацию здесь: http://www.tomshardware.com/reviews/ati,819-2.html