О статье
Мини статья о тумане на местности (а не туман войны или погодный эффект). Т.е. тот что используется для эффекта уменьшения видимости объектов с увеличением расстояния.
Описание
В редакторе настройки тумана можно найти в Сценарий - Параметры карты:
А так же есть следующие нативки:
native ResetTerrainFog takes nothing returns nothing
native SetTerrainFogEx takes integer style, real zstart, real zend, real density, real red, real green, real blue returns nothing
ResetTerrainFog ну тут понятно что просто убирает туман вовсе.
SetTerrainFogEx по аргументам соответствует настройкам на скриншоте выше, только значения red green blue нужно указывать в диапазоне от 0 до 1.
SetTerrainFogEx по аргументам соответствует настройкам на скриншоте выше, только значения red green blue нужно указывать в диапазоне от 0 до 1.
Теперь по порядку:
- Стиль (style) - идентификатор стиля тумана (0 - Линейный, 1 - Экспонентный1; 2 - Экспонентный2);
- Нач. Z (zstart) - начало линейного тумана по глубине z-буфера;
- Кон. Z (zend) - конец линейного тумана по глубине z-буфера;
- Плотн. (density) - плотность туманов экспонентный1/экспонентный2;
- Цвет (red/green/blue) - цвет тумана.
Параметры zstart и zend относятся не к высоте ландшафта (как некоторые могли бы подумать) а к буферу глубины (z-буферу), то есть то насколько объект удален от камеры:
Передняя отсекающая плоскость и есть наш экран, вот от него и идет отсчет вглубь.
Линейный
Как понятно из названия, интенсивность такого тумана изменяется линейно от 0 до 1 на промежутке от zstart до zend.
Формула:
Формула:
f = (zend-z)/(zend-zstart)
Итоговый f может быть меньше 0 или больше 1, в таком случае он просто обрезается до этих значений.
То есть:
То есть:
- от 0 до zstart тумана нет вовсе, пиксели имеют свои цвета;
- от zstart до zend пиксели переходят от своего цвета в цвет тумана;
- от zend и далее пиксели имеют цвет тумана.
График и демонстрация:
ЭЭЭЭЭЭксперементы
zstart можно делать и отрицательным, т.е. начало тумана будет за отсекающей плоскостью.
Ради теста ставил zstart = -1000000000 и zend = 1000000000, тогда исходя из формулы получим что все видимые камере пиксели будут иметь ~0.5 интенсивности тумана. Таким образом можно имитировать константный туман, но это почти то же самое что и наложение фильтр-маски.
Ради теста ставил zstart = -1000000000 и zend = 1000000000, тогда исходя из формулы получим что все видимые камере пиксели будут иметь ~0.5 интенсивности тумана. Таким образом можно имитировать константный туман, но это почти то же самое что и наложение фильтр-маски.
Экспонентный1
Экспонентный1 - он же экспоненциальный туман, его интенсивность увеличивается экспоненциально с расстоянием и зависит от плотности density. Сам по себе более реалистичный чем линейный, однако его невозможно применить через Параметры карты, т.к. они не позволяют указывать больше 2-ух цифр после запятой (короче плотность 0,01 это слишком много, там нужно указывать около 0,001 чтоб понять что оно работает).
Формула (e ≈ 2,72):
Формула (e ≈ 2,72):
f = e^-(density*z)
Итоговый f всегда будет в диапазоне от 0 до 1.
График и демонстрация:
Экспонентный2
Экспонентный2 - он же экспоненциальный квадратичный туман, разновидность экспоненциального тумана с более быстрым ростом интенсивности.
Формула (e ≈ 2,72):
Формула (e ≈ 2,72):
f = e^-((density*z)^2)
Итоговый f всегда будет в диапазоне от 0 до 1.
График и демонстрация:
Вот например zend = 5000
Edited by Ghoul_Dark