Детальное текстурирование

Детальное текстурирование (англ. 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;

См. также править

Ссылки править