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

Вопросы по атмосферному скатерингу

#0
20:41, 6 мар. 2013

holla

Есть 2 реализации у меня

1) Oneil
http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.html

2) Не знаю чья - просто формулы с ати - подозреваю Нишитовская
http://www.ati.com/developer/dx9/ATI-LightScattering.pdf

Есть террайн - сферичекский в виде планеты, есть плоскостной

ТАк вот...

- Oneil не будет работать с плоскостью и рассчитан на сферическую поверхность - райт?
то есть для плоскостного террайна придется юзать метод 2 и наоборот...

- в первом есть inner outer Radius которые никому не дают покоя и мне тоже..
outer это радиус атмосферной сферы - ок
inner - радиус земли - ок
все ок когда вместо земли сфера плоская
а у меня рельеф.. нифига ничего не плоское.. Какой брать innerRadius ? он же дожен быть константен.. то есть я беру его таким:

Изображение

я беру этот самый innerRadius равный тому как я подписал.. то есть радиус как если бы не было террайна.. террайн же это spherepos+dir*Scale
так вот при scale=0 - просто имеем плоскую поверхность... и вот несмотря на этот террайн я учитываю именно радиус плоской поверхности.. ну
я нарисовал.. - inner shit

райт?

- я уже смекнул, что там строка в шадере

// Get the ray from the camera to the vertex and its length (which is the far point of the ray passing through the atmosphere)
vec3 v3Pos = gl_Vertex.xyz*fInnerRadius;         // identity sphere scaling - center in 0
vec3 v3Ray = v3Pos - v3CameraPos;
float fFar = length(v3Ray);
v3Ray /= fFar;

// Calculate the closest intersection of the ray with the outer atmosphere (which is the near point of the ray passing through the atmosphere)
float B = 2.0 * dot(v3CameraPos, v3Ray);
float fDet = max(0.0, B*B - 4.0 * C_fDepth.x);
float fNear = 0.5 * (-B - sqrt(fDet));

float v3pl=length(v3Pos);

то есть все вычисления идут вокруг центра земли в нуле  - райт? хотя рендерится планета не в нуле а со своим трансформом
то есть я делаю радиусы земли и атмосферы хоть миллиард и могу поместить в любую точку мира, но потом перед подачей в щадер:
перевожу камеру v3CameraPos в earthMeshInverse после чего камера в earthSpace и счтиаю - райт?


- там считается свое освещение n.l
в Oneil замес есть с лайтингом якобы от солнца, но мне оно не нужно - у меня свой normalmapped lighting - что изменить? ведь там повертексно а у меня шадеры
не переносить же весь интегратор в PS ... либо я счтиаю с тем лайтингом что замешан в формуле а потом множу на свой, что подозреваю даст хрень

ps - а еще не нравится что 4 шадера для неба и 4 для земли для разных видов - из космоса и из атмо


#1
0:18, 7 мар. 2013

Даже незнаю с чего начать. Oneil вполне применим и к плоскому терейну. Ты для себя сразу определись, тебе корректное нужно или фейк, т.к. пути там разные. Кроме того насколько критичен предрассверный час. Потому что если это надо, это тот еще геморой. Потом физичеки корректное небо просто даёт информацию о освещении со всех сторон и никак не связанно с "normalmapped lighting".

#2
0:42, 7 мар. 2013

привет

нужно корректное
придется рисовать тогда плоский и окружать полусферой снаружи, потому что на скайбоксе как это будет хз  ... и тогда еще хз = какие тогда радиусы ставить
все же от них зависит

оно не связано - но освещенность dir light вычисляет как я понял.. и как мне это замешивать со своим...

предрассвет это когда желтое все узкой полосой вдоль горизонта? это важно - но в Онейле это есть. и террайн в тумане вдали важен - но и это вроде метод дает

нормуль фроде

Изображение
Изображение

ну а это из реала

Изображение
#3
17:38, 9 мар. 2013

прошу проверить на адыкватность затенение....
меня парит, что когда совсем на земле - то скатеринга нет... тупо чернота (рисую только scatter term) HDR нет пока
я хз - может так и надо - и тогда просто рисуется только dirLight от солнца.....

а так красиво -

Изображение
Изображение
Изображение

1

Изображение
Изображение
Изображение
Изображение


2

Изображение
Изображение
Изображение
#4
12:53, 10 мар. 2013

Я Онейловскую атмосферу тоже делал, но не поборол некоторые глюки (не видно скаттеринга на ландшафте, всё считается в вершинном шейдере = из космоса видны треугольники, и особенно сильно видно переключение лодов).
http://www.gamedev.ru/code/forum/?id=119369&page=2#m22

Потом перешел на Брунетоновскую - она куда красивее и реалистичнее, к тому же попиксельная и даёт два освещения рельефа - прямыми солнечными лучами с учётом поглощения (так что на закате они становятся красными), и рассеяное голубоватое освещение небом.
\http://www.gamedev.ru/code/forum/?id=119369&page=7#m92

#5
13:06, 10 мар. 2013

конечно разница есть.....
мне показалось в спасеенжине который у тебя выложен там - онейл

а если солнце двигается - то надо долго пересчитывать будет? а от геометрии зависит переcсчет?

исходник брунетона качал..... испугался - шаейдеры просто пздц.. вкуривать думаю даже смысла не имеет. тупо копипаст и всё...

если в рамках онейла то у меня похоже?

#6
20:54, 10 мар. 2013

Ничего пересчитывать там не надо. Модель правильно обрабатывает рельеф и положение солнца. Онейл какой-тоглючный у меня был, наверное я не до конца разобрался. В атмосфре Брунетона разобраться тоже можно при желании. Вот моя версия:
http://www.gamedev.ru/code/forum/?id=119369&page=9#m124

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

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