Туман используется для создания атмосферных эффектов. Туман используется для создания дымки и скрытия удаленных объектов. В первом случае повышается реалистичность сцены, во втором – понижается ее сложность. С туманом объекты могут рендериться с разной степенью детализации в зависимости от расстояния до наблюдателя. Туман работает по принципу: чем дальше объект, тем больше туман его поглощает. Поэтому для удаленных объектов разумно использовать меньше полигонов, чем для близких.
Туман можно разделить на полигонный и пиксельный. Полигонный метод линейно интерполирует уровень тумана по значениям в вершинах для получения уровня тумана в каждой точке полигона. Этот метод хорош только для маленьких полигонов. Пиксельный метод рассчитывает уровень тумана для каждого пиксела, и для больших полигонов дает более реалистичное изображение.
Мы рассмотрим пиксельный туман.
Туман также можно разделить и по
другому признаку – на линейный и экспоненциальный (или табличный). При
линейном тумане степень поглощения объекта туманом линейно зависит от
расстояния до наблюдателя, а при экспоненциальном тумане – рассчитывается на
основании таблицы.
Расстояние до
точки.
D – расстояние от наблюдателя (Р) до точки (или
дистанция).
отсюда
получаем
где
Подставляя в формулу получаем уравнение расстояния
до точки:
, где
V(D) – яркость в данной точке
dD – расстояние, на которое добавляем туман
V(D+dD) – яркость в точке с учетом добавленного
тумана
Формула яркости в точке с учетом добавленного
тумана.
,
где Vт –
яркость тумана
s - плотность тумана
решим дифференциальное уравнение
отсюда
получим
В нулевой точке, то есть в точке, где находится
наблюдатель тумана нет, поэтому получаем:
, тогда получим:
, где Dт –
дистанция тумана
Получаем уравнение вычисления тумана:
. На дистанции Dт
туман увеличивается в раз.
Примем соглашение, что , так как отображать объекты, находящиеся на расстоянии
больше, чем 3Dт, нет смысла (из-за тумана не будет видно).
Экспоненциальный
туман.
Значение функции можно вычислять
таблично:
h – по старшим разрядам,
например, 6 разрядов
r – делим на зоны, r = r0…rmax ,
например, на 16 зон (4 разряда)
Итого, например, получаем 10-ти разрядную таблицу.