Детальное текстурирование (:ymgl,uky mytvmrjnjkfguny)

Перейти к навигации Перейти к поиску
Текстура низкого разрешения, детальное текстурирование отсутствует
Текстура низкого разрешения, включено детальное текстурирование

Детальное текстурирование (англ. Detail mapping) — программная техника в трёхмерной компьютерной графике, которая позволяет улучшить детализацию текстур на близком расстоянии от камеры. Конечный результат создаёт иллюзию использования текстуры огромного разрешения.

При приближении камеры к полигональной модели текстура становится размытой. В случае достаточного объема свободной памяти размытие может быть устранено увеличением разрешения текстуры. Однако хранение каждой текстуры в огромном разрешении не является практичным решением. Детальное текстурирование решает проблему другим путём:

  • Базовая текстура оставляется в разумном среднем разрешении
  • Создаётся детальная текстура с крупномасштабным изображением мелких деталей (отдельные травинки, галька, структура древесины и т. д.)
  • Полученная текстура обесцвечивается
  • Фильтром верхних частот удаляется всё, кроме самых мелких деталей
  • Фильтром коррекции гистограммы устанавливается средняя яркость на уровне 0.5
  • Обе текстуры смешиваются в пиксельном шейдере
  • Перед смешиванием текстурные координаты детальной текстуры масштабируются, чтобы детальная текстура повторялась в несколько раз чаще базовой
  • Для снижения заметности повторений детальной текстуры масштаб выбирается нецелочисленным
  • Цвет базовой текстуры умножается на цвет детальной, умноженный на 2 (для сохранения исходной яркости)

Пример исходного кода шейдера

[править | править код]
    const float detailRepeat = 7.5;
    
    float4 color = tex2D(TextureSampler, input.uv);
    float4 detail = tex2D(DetailSampler, input.uv * detailRepeat);
    
    color.rgb *= detail * 2;