ПрограммированиеФорумГрафика

Как реализован объемный туман в Quake 3 Arena ?

Страницы: 1 2 Следующая »
#0
22:06, 27 ноя 2014

сабж.

Не плохо было бы по ссылке почитать про это дело...

ЗЫ  [ GAPI OpenGL ]

ЗЗЫ Для тех, кто не помнит сей эффект...

Изображение
#1
22:32, 27 ноя 2014

делали по аналогии с туманом, только вниз и красным цветом

#2
22:47, 27 ноя 2014

https://www.opengl.org/registry/specs/EXT/fog_coord.txt

#3
3:57, 28 ноя 2014

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() объявлен, но не вызывается.

Оно, вроде?

#4
5:21, 28 ноя 2014

Что-что, а вот мне реально не уперлось затуманивать объекты по вершинам. Ибо тяжко будет просчитывать попадание в объем каждую вершину каждого динамического объекта и формировать ему на этой основе дополнительный массив.

Тут есть такая идея... а что если объем тумана отрисовать в режиме трафарета, а потом на этот трафарет отрисовать 5-10 спрайтов тумана, равноудаляющихся от камеры ??? Как Вам такая фишка?

#5
7:56, 28 ноя 2014

wawan
> делали по аналогии с туманом, только вниз и красным цветом
выражаю благодарность, кэп

Diablo1909
> Тут есть такая идея... а что если объем тумана отрисовать в режиме трафарета, а
> потом на этот трафарет отрисовать 5-10 спрайтов тумана, равноудаляющихся от
> камеры ??? Как Вам такая фишка?
рисовать 5-10 спрайтов тумана за один проход не эффективно с точки зрения производительности.
и без буфера глубины не обойтись.

всё это делается франментным шейдером, как уже сказали, легко гуглится, да и сорсы квейка в свободном доступе

#6
8:37, 28 ноя 2014

Feo
> всё это делается франментным шейдером

На тот момент в лучшем случае были комбайнеры

#7
9:13, 28 ноя 2014

HolyDel
Кстати, да, я тоже в детстве считал, что там EXT_fog_coord. :)
Потом исходники расставили все точки над ї.
innuendo
> На тот момент в лучшем случае были комбайнеры
TNT-комбайнеры. :)
Q3Test с этим туманом (в том числе) появился задолго до появления GeForce256.

#8
9:37, 28 ноя 2014

Моласар
> Кстати, да, я тоже в детстве считал, что там EXT_fog_coord. :)
> Потом исходники расставили все точки над ї

Расскажите всем теперь как взрослый человек :)


>> На тот момент в лучшем случае были комбайнеры
>TNT-комбайнеры. :)
>Q3Test с этим туманом (в том числе) появился задолго до появления GeForce256.

комбайнеры - это не только GF фишки, это и https://www.opengl.org/registry/specs/ARB/texture_env_combine.txt

#9
10:34, 28 ноя 2014

Diablo1909
> о если объем тумана отрисовать в режиме трафарета, а потом на этот трафарет
> отрисовать 5-10 спрайтов тумана, равноудаляющихся от камеры ??? Как Вам такая
> фишка?
Там, где можно обойтись без альфы, без неё нужно обойтись, это очень тормозная вещь, тем более 5-10 слоёв.
Я как раз только что сделал туман на шейдере: https://yadi.sk/d/n2npm16NcwmLy
Всё рисуется в 1 проход, альфы нет.

#10
11:44, 28 ноя 2014

Не читал, но предложу свой вариант

После того как кадр уже полностью отрисованый, берём бэкбуфер и depth на вход, рисуем объём тумана (например, куб)
и в нём в экранном пространстве затеняем пиксель из бэкбуффера с соответствии с разницей POSITION-depth

#11
12:47, 28 ноя 2014

максимально тупой не view-dependent вариант (не играл в Q3 - не знаю насколько корректный он там был):
float fogFactor = saturate((worldPos.y - fogStartHeight) / fogDistance);
color = lerp(fogColor, color, fogFactor);

#12
13:01, 28 ноя 2014

В Ку3 явно видно, что это несколько полупрозрачных слоев. На некоторых границах тумана со стенами, с низкими настройками графики.

#13
16:39, 28 ноя 2014

innuendo
Да что там рассказывать, всё просто. Повертексно вычисляются два фактора - затуманивание (по дистанции до наблюдателя) и фактор по тому, какая часть вектора на наблюдателя находится в тумане (это как раз то, для чего был изначально предназначен фог коорд, но его никто не юзал сначала потому, что не везде поддерживался, а потом потому, что появились вершинные программы). Оба фактора используются для сэмплирования 2д-текстуры, где по Х - табличка экспоненциального тумана, а по Y - линейная аттенуация. Этим достигается аккуратная интерполяция вдоль протяжённых граней.
Я себе в движке по этому же методу сделал, только на вершинные шейдеры перенёс расчёты.
> комбайнеры - это не только GF фишки
Да эти не программируемые, толку с них мало. Ни spare, ни mux, ни final_product. По-настоящему свободными европейцами мы стали с появлением register combiners.
d.m.k
Там отдельно накладываются слои, чтобы имитировать клубы тумана. Обычные скроллящиеся облачка с бледфунком dst_color, zero. Сам туман рисуется "по-честному".

#14
19:50, 28 ноя 2014

Моласар
> По-настоящему свободными европейцами мы стали с появлением register combiners.

\Которые только на nvidia ? Всегда умиляли вендор специфик:)

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.