Fog (Туман) (комментарии)
Это сообщение сгенерировано автоматически.
Ты пишешь формулу:
f = (Zfogend – d)/(Zfogend – Zfogstart)
В шейдере:
float f = (mFog.x - d.z)/(mFog.x - mFog.y);
Если у тебя "x – начало тумана, y – конец тумана", то правильно так:
float f = (mFog.y - d.z)/(mFog.y - mFog.x);
Scripter01
> Если у тебя "x – начало тумана, y – конец тумана", то правильно так:
всё зависит от того, как потом считать во фрагментном шейдере. можно сказать, что f - это результирующая интенсивность тумана, а можно - прозрачность.
статья нормальная, только неплохо бы сделать что-то с форматированием кода и сделать хоть какие-то физические выкладки. мне почему-то не показалось очевидным, откуда в показателе экспоненты берётся квадрат.
Suslik
> откуда в показателе экспоненты берётся квадрат.
ну например так, затухание - падение плотности света 1 / x^2 , ну и поглощение в материале по exp - такой простой расклад не устроит ? :)
innuendo
> ну например так, затухание - падение плотности света 1 / x^2 , ну и поглощение
> в материале по exp - такой простой расклад не устроит ? :)
ну, вообще говоря, в трёхмерном случае плотность энергии уменьшается порядка минус третьей степени расстояния, да и не совсем тут в нём дело, ну да ладно
Suslik
> ну, вообще говоря, в трёхмерном случае плотность энергии уменьшается порядка
> минус третьей степени расстояния, да и не совсем тут в нём дело, ну да ладно
приближение в 3D графике - обратный трёхчлен
ну если, volumetric fog - там можно и как-нибудь поизворотнее
Я вот тут туманом занимался.
Искал способ, как, задавая только параметры для линейного тумана (начало и конец), получать плотность для экспоненциального, чтоб они, эти туманы, были примерно похожи.
Пришлось вспомнить, как решать всякие уравнения.
Допустим, в линейном тумане у нас есть расстояние, при котором туман будет 75%.
Расстояние это: d = start+(end-start)*0.75
Формула экспоненциального тумана: 1/pow(e, (d*g)^2)
Нужно найти g, при котором эта формула вернёт 0.25, то есть будет 75% тумана.
1/pow(e, (d*g)^2)=0.25
pow(e, (d*g)^2)=4
(d*g)^2 = ln(4)
d*g=sqrt(ln(4))
g=sqrt(ln(4))/d <- формула
При этой плотности экспоненциальный туман примерно похож на линейный.
Ну что, крутой способ? :)
JohnSmith
> чтоб они, эти туманы, были примерно похожи.
в чем смысл ?
innuendo
> в чем смысл ?
Включать линейный туман на старых картах, экспоненциальный - на новых.
JohnSmith
на старых и exp в vs считать можно :)
> В этом случае, плотность тумана более быстро и плавно уменьшается чем в случае с линейным туманом
?
Судя по уравнениям, плотность тумана g как раз таки постоянна.
JohnSmith
переходи к volumetric fog аля крайзис
innuendo
> переходи к volumetric fog аля крайзис
убить крайзис всегда успею)
JohnSmith
> скал способ, как, задавая только параметры для линейного тумана (начало и
> конец), получать плотность для экспоненциального, чтоб они, эти туманы, были
> примерно похожи.
madskills :D
Suslik
> в трёхмерном случае плотность энергии уменьшается порядка минус третьей степени
> расстояния
Orly?
Тема в архиве.