сабж.
Не плохо было бы по ссылке почитать про это дело...
ЗЫ [ GAPI OpenGL ]
ЗЗЫ Для тех, кто не помнит сей эффект...

делали по аналогии с туманом, только вниз и красным цветом
Diablo1909
Так вроде бы легко гуглится.
https://www.opengl.org/discussion_boards/showthread.php/146347-Ho… 1#post1049625 (и раньше: https://www.opengl.org/discussion_boards/showthread.php/146347-Ho… 1#post1049625 )
http://icculus.org/gtkradiant/documentation/Q3AShader_Manual/ch02/pg2_1.htm
Геометрия, не OpenGL fog.
В исходниках Quake III строка "GL_FOG" встречается 0 раз. glFog() объявлен, но не вызывается.
Оно, вроде?
Что-что, а вот мне реально не уперлось затуманивать объекты по вершинам. Ибо тяжко будет просчитывать попадание в объем каждую вершину каждого динамического объекта и формировать ему на этой основе дополнительный массив.
Тут есть такая идея... а что если объем тумана отрисовать в режиме трафарета, а потом на этот трафарет отрисовать 5-10 спрайтов тумана, равноудаляющихся от камеры ??? Как Вам такая фишка?
wawan
> делали по аналогии с туманом, только вниз и красным цветом
выражаю благодарность, кэп
Diablo1909
> Тут есть такая идея... а что если объем тумана отрисовать в режиме трафарета, а
> потом на этот трафарет отрисовать 5-10 спрайтов тумана, равноудаляющихся от
> камеры ??? Как Вам такая фишка?
рисовать 5-10 спрайтов тумана за один проход не эффективно с точки зрения производительности.
и без буфера глубины не обойтись.
всё это делается франментным шейдером, как уже сказали, легко гуглится, да и сорсы квейка в свободном доступе
Feo
> всё это делается франментным шейдером
На тот момент в лучшем случае были комбайнеры
HolyDel
Кстати, да, я тоже в детстве считал, что там EXT_fog_coord. :)
Потом исходники расставили все точки над ї.
innuendo
> На тот момент в лучшем случае были комбайнеры
TNT-комбайнеры. :)
Q3Test с этим туманом (в том числе) появился задолго до появления GeForce256.
Моласар
> Кстати, да, я тоже в детстве считал, что там EXT_fog_coord. :)
> Потом исходники расставили все точки над ї
Расскажите всем теперь как взрослый человек :)
>> На тот момент в лучшем случае были комбайнеры
>TNT-комбайнеры. :)
>Q3Test с этим туманом (в том числе) появился задолго до появления GeForce256.
комбайнеры - это не только GF фишки, это и https://www.opengl.org/registry/specs/ARB/texture_env_combine.txt
Diablo1909
> о если объем тумана отрисовать в режиме трафарета, а потом на этот трафарет
> отрисовать 5-10 спрайтов тумана, равноудаляющихся от камеры ??? Как Вам такая
> фишка?
Там, где можно обойтись без альфы, без неё нужно обойтись, это очень тормозная вещь, тем более 5-10 слоёв.
Я как раз только что сделал туман на шейдере: https://yadi.sk/d/n2npm16NcwmLy
Всё рисуется в 1 проход, альфы нет.
Не читал, но предложу свой вариант
После того как кадр уже полностью отрисованый, берём бэкбуфер и depth на вход, рисуем объём тумана (например, куб)
и в нём в экранном пространстве затеняем пиксель из бэкбуффера с соответствии с разницей POSITION-depth
максимально тупой не view-dependent вариант (не играл в Q3 - не знаю насколько корректный он там был):
float fogFactor = saturate((worldPos.y - fogStartHeight) / fogDistance);
color = lerp(fogColor, color, fogFactor);
В Ку3 явно видно, что это несколько полупрозрачных слоев. На некоторых границах тумана со стенами, с низкими настройками графики.
innuendo
Да что там рассказывать, всё просто. Повертексно вычисляются два фактора - затуманивание (по дистанции до наблюдателя) и фактор по тому, какая часть вектора на наблюдателя находится в тумане (это как раз то, для чего был изначально предназначен фог коорд, но его никто не юзал сначала потому, что не везде поддерживался, а потом потому, что появились вершинные программы). Оба фактора используются для сэмплирования 2д-текстуры, где по Х - табличка экспоненциального тумана, а по Y - линейная аттенуация. Этим достигается аккуратная интерполяция вдоль протяжённых граней.
Я себе в движке по этому же методу сделал, только на вершинные шейдеры перенёс расчёты.
> комбайнеры - это не только GF фишки
Да эти не программируемые, толку с них мало. Ни spare, ни mux, ни final_product. По-настоящему свободными европейцами мы стали с появлением register combiners.
d.m.k
Там отдельно накладываются слои, чтобы имитировать клубы тумана. Обычные скроллящиеся облачка с бледфунком dst_color, zero. Сам туман рисуется "по-честному".
Моласар
> По-настоящему свободными европейцами мы стали с появлением register combiners.
\Которые только на nvidia ? Всегда умиляли вендор специфик:)
Тема в архиве.
Тема закрыта.