Сабжевое утверждение, вроде бы, conventional wisdom?
Где-то сформулировано - почему?
Порядок отрисовки? Гаммапроблемы? Диапазон?
Вон товарищи из NVIDIA делали (давно) альфа-блендингом:
http://http.developer.nvidia.com/GPUGems/gpugems_ch06.html
Вроде выглядит вполне:
Аддитивный блендинг используется тогда, когда среду можно с достаточной точностью считать прозрачной.
Для светящегося газа, т. е., собственно, пламени, а также всякой неонки, можно считать, что это условие выполняется.
Однако, при наличии дыма, т. е. взвеси частиц сажи, это уже неверно и надо использовать альфа-блендинг.
}:+()___ [Smile]
>Для светящегося газа, т. е., собственно, пламени, а также всякой неонки, можно считать, что это условие выполняется.
Мне казалось, что оптическая толщина пламени свечки порядка 1. Попытался нагуглить - не получилось.
FordPerfect
> Мне казалось, что оптическая толщина пламени свечки порядка 1. Попытался нагуглить - не получилось.
Чистый газ поглощает/рассеивает свет в узких линиях спектра, остальное проходит свободно.
Причем, именно в этих узких линиях он и излучает, поэтому эффектом поглощения можно пренебречь на фоне сильной засветки и переизлучения.
При увеличении температуры ширина линий растет, поэтому плазма, действительно, рассеивает все.
Короче, обычный фейк, как и все в реалтайм графике.
FordPerfect
> Вроде выглядит вполне:
шутка?
я не разбираюсь в графике, но на вид этот огонь не светится. Вообще.
Stranger087
Соглашусь, огонь не подарок.
На видео чуть подробнее
https://www.youtube.com/watch?v=tuj4bGc5ZTk
но примерно то же самое.
Интересно формализовать "не светится".
Т. е. сначала понять, что мы хотим получить, а уж потом - как это фейкать.
Нашёл чуть теории в "Physically Based Modeling and Animation of Fire", но там чуть о другом.
Да очень просто все. У огня чем ярче(больше температура), тем желтее, и наоборот в красноту. При сложении красного типа RGB(200,50,0) в месте скопления партиклов получается RGB(255,255,0), чего собственно и хотелось. Другими словами, аддитивный блендинг лучше моделирует поведение огня малыми усилиями.
FordPerfect
> Интересно формализовать "не светится".
ну поидее когда что-то прозрачное светится, оно именно добавляет свет. У огня всегла есть полупрозрачные моменты на краях.
Соответственно в жизни свет от объекта который за огнем, складывается со светом от огня. И получается ярче чем огонь. А при альфе на полупрозрачных участках огня получается наоборот, менее ярко чем сам огонь.
если в жизни посмотреть на огонь на фоне абсолютно белого листа бумаги, огонь будет отчётливо виден. если ту же ситуацию смоделировать, используя аддитивный блендинг и r8g8b8, то лист как был белым(255, 255, 255), так и останется, потому что цвет просто клэмпится по максимальному значению. собственно, именно из-за подобных проблем с перезасветкой аддитивный блендинг в простом случае и не является слишком физически корректным.
Suslik
От этой и кучи других проблем избавляет сам знаешь что.
Suslik
что это за листок такой 255 255 255, это прожектор какой-то, а не листок))
Stranger087
> что это за листок такой 255 255 255, это прожектор какой-то, а не листок))
это диффузный цвет. светимость обычно задаётся через luminance или подобный параметр вообще-то.
Suslik
Причем тут вообще светимость, если речь о финальном цвете изображения? Если у тебя не видно огня на фоне листка, значит у тебя листок светится ярче, чем огонь.
Идеальный вариант, это рендерить все частицы огня отдельно с аддитивным блендингом, и затем получившуюся текстуру огня отрисовывать обычным блендингом на экран. Суммирование цвета частиц придает огню правильную форму и окраску. Белый цвет в местах максимальной концентрации частиц (в центре), желтый, оранжевый, красный и т.д. по мере перехода в более разряженную область огня (к краю). При обычном блендинге, огонь будет равномерно окрашен, что и можно наблюдать здесь http://http.developer.nvidia.com/GPUGems/gpugems_ch06.html
Тема в архиве.