между тем - я все мучаюсь со своим криво-блумом, пытаясь в одну половину текстуры писать сам блум, а в другую блики линз (чтоб потом в enbeffect.fx их модулировать с помощью текстуры палитры)
в общем должно быть 2 части - левая, к которую "зжат" сам-по себе блум и правая, для которой сделано 4 отдельных пасса и другой вершинный шейдер в которую, в свою очередь, рисуются блики.
но на самом деле экран делится на 4 четверти:
я долго пытался сам найти косяк в координатах.. но походу только ты сможешь помочь мне это разгрести...
также почему-то теряется цвет бликов... хотя там даже дисперсия прописана - даже якрий белый должен разделяться на составляющие.
сам файл прилагаю (enb 0.163 GTAIV)
суть метода:
в блуме всего 4 пасса и 5 текстур, по какой-то причине 1,2 и 3,4 - результаты bloomtexture1 и bloomtexture2 соответственно с разным уровнем блюра
для каждого пасса я переписал вершину (а вернее сделал её половиной от оригинальной) и в самом пассе изменил выбираемые координаты семплов (тоже на половину)
для каждого пасса я сделал клон, аналогичный оригиналам, но использующим другую половину вершины и другую половину семплов
по моему замыслу в каждый пасс выполняется по 2 разных шейдера для разных половинок экрана.
но на практике "активная" зона смещается...
EDIT: file deleted
GTA 4 v0.163
Forum rules
new topics are not allowed in this subsection, only replies.
new topics are not allowed in this subsection, only replies.
- Author
- Message
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: GTA 4 v0.163
Отсутствует цвет, потому что в textureDistorted функции переменная не вектор, то бишь
заменить на:
Насчет 4 вместо двух, то наверно из-за того что в самых первых шейдерах проблемы. В PS_LensTexture похоже внутри цикла float2 offset надо смещать и шкалировать как везде (но перед textureDistorted). Я только не понял, что там за дискотека получается, наверно что так и задумано, либо проблема не там. В PS_BloomPrePass координаты смещать типа bloomuv.x=bloomuv.x*0.5; опять же. И надо юзать TempParameters.w для определения пасса, ибо PS_BloomPrePass дважды рисуется и только на первом пассе текстура полноразмерная с целыми координатами, а не ополовинеными. 1 это первый пасс, 2 это второй пасс. Т.е. по сути можно bloomuv.x=bloomuv.x/TempParameters.w; сделать, только вынести деление снаружи цикла ради производительности.
Code: Select all
float c = float4
Code: Select all
float4 c = float4
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- *sensei*
- Posts: 267
- Joined: 12 Oct 2012, 19:14
Re: GTA 4 v0.163
Спасибо!!
tempparameters.w почти спас меня))) последний мозговой штурм.
tempparameters.w почти спас меня))) последний мозговой штурм.
-
Offline
- *master*
- Posts: 113
- Joined: 13 Dec 2012, 11:18
Re: GTA 4 v0.163
Hey Boris, any news about the SSAO flickering and performance drop with 0.163? (0.082 worked fine)
-
Offline
- *sensei*
- Posts: 267
- Joined: 12 Oct 2012, 19:14
Re: GTA 4 v0.163
спасибо за помощь, однако - проблемы все равно остались. С делением экрана все окей, а вот с переводом системы координат для расчета линз косяки
я сделал так:
сначала считаю вектора как для полного экрана, а уже перед отгрузкой в цикл, перевожу в "половину" текстуры координату X.
однако, как быть с тем, что в цикле - я просто даже не могу сообразить. вот пример шейдера:
помоги плз преобразовать эти формулы для моего случая "правой половины" текстуры.
я сделал так:
сначала считаю вектора как для полного экрана, а уже перед отгрузкой в цикл, перевожу в "половину" текстуры координату X.
однако, как быть с тем, что в цикле - я просто даже не могу сообразить. вот пример шейдера:
Code: Select all
float2 texcoord = In.txcoord0.xy ;
texcoord = 1 - texcoord; // flip texcoordoords
float2 ghostVec = (float2(0.5,0.5) - texcoord) * uDispersal;
float2 haloVec = normalize(ghostVec) * uHaloWidth;
float3 distortion = float3(-texelSize.x * uDistortion, 0.0, texelSize.x * uDistortion);
texcoord.x = (0.5 * texcoord.x) + 0.5; // coord transition
ghostVec.x = (0.5 * ghostVec.x) + 0.5;
haloVec.x = (0.5 * haloVec.x) + 0.5;
float4 result = 0;
// sample ghosts:
for (int i = 0; i < uSamples; ++i) {
float2 offset = frac(texcoord + ghostVec * float(i));
float weight = length(0.5 - offset) / length(0.5); // (1) I assume this line should be modified to new coords
weight = pow(1.0 - weight, 5.0);
result += textureDistorted(
SamplerBloom1,
offset,
normalize(ghostVec),
distortion
) * weight;
}
// sample halo:
float weight = length(0.5 - frac(texcoord + haloVec)) / length(0.5); // same as (1)
weight = pow(1.0 - weight, 10.0);
result += textureDistorted(
SamplerBloom1,
frac(texcoord + haloVec),
normalize(ghostVec),
distortion
) * weight;
bloom = + result;
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: GTA 4 v0.163
buzz
I don't have flickering, if remember. And don't care about gta4, attempts to adopt to patch 7 ended by nothing, presets are broken, because much things simplified and not exist any more, mod must be recreated from scratch and i'm not crazy to do this for old game which nobody play and only few use for screen archering.
AgainstAllAutority
Уже писал про offset внутри цикла.
I don't have flickering, if remember. And don't care about gta4, attempts to adopt to patch 7 ended by nothing, presets are broken, because much things simplified and not exist any more, mod must be recreated from scratch and i'm not crazy to do this for old game which nobody play and only few use for screen archering.
AgainstAllAutority
Уже писал про offset внутри цикла.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- *sensei*
- Posts: 267
- Joined: 12 Oct 2012, 19:14
Re: GTA 4 v0.163
Спасибо за помощь, Борис!
я сделал самый "топорный" вариант - а именно просто перевел оффсет и ветора прям в самом цикле
и вот собственно - ради чего старался и тебя мучал:
осталось донастроить и убрать "смешивание" на границе блума и линз - оно приводит порой к яркой полосе в по правому краю зоны блума (ну или прямо по линии раздела, если смотреть на блум полноэкранно, как на 1ом скрине)
я сделал самый "топорный" вариант - а именно просто перевел оффсет и ветора прям в самом цикле
и вот собственно - ради чего старался и тебя мучал:
осталось донастроить и убрать "смешивание" на границе блума и линз - оно приводит порой к яркой полосе в по правому краю зоны блума (ну или прямо по линии раздела, если смотреть на блум полноэкранно, как на 1ом скрине)
-
Offline
- Posts: 17
- Joined: 22 Mar 2013, 16:48
Re: GTA 4 v0.163
Нет, почему ? Новые модификации выходят регулярно. На gtamania, допустим, файловые архивы пополняются чуть ли не каждый день.
Собственно вот причина по которой я раньше тебя просил перенести мод на новую версию патча - http://rutracker.org/forum/viewtopic.php?t=4405093
По сути это конечно обычный карпак, но не совсем.
Управление у всех машин переделано и отбалансировано.
Есть возможность снова пройти весь сюжет полностью, причем в роликах машины не проваливаются в текстуры(есть такая особенность у некоторых конвертов)
Ну и всякие экстра плюшки вроде HD дорог, саундпака и ENB.
На старом патче 1.0.4.0 можно добавить 24 машины в дополнение к оригинальным(как раз так я и сделал)
А на новом почти в три раза больше, около 78-ми, если я правильно помню.
PS. А нет возможности сделать хотя бы что нибудь вроде enboost для GTA ?
Просто многие сталкиваются с проблемой исчезания текстур...
PPS. For english-speaking users. There is an english readme, if you are interested.
Собственно вот причина по которой я раньше тебя просил перенести мод на новую версию патча - http://rutracker.org/forum/viewtopic.php?t=4405093
По сути это конечно обычный карпак, но не совсем.
Управление у всех машин переделано и отбалансировано.
Есть возможность снова пройти весь сюжет полностью, причем в роликах машины не проваливаются в текстуры(есть такая особенность у некоторых конвертов)
Ну и всякие экстра плюшки вроде HD дорог, саундпака и ENB.
На старом патче 1.0.4.0 можно добавить 24 машины в дополнение к оригинальным(как раз так я и сделал)
А на новом почти в три раза больше, около 78-ми, если я правильно помню.
PS. А нет возможности сделать хотя бы что нибудь вроде enboost для GTA ?
Просто многие сталкиваются с проблемой исчезания текстур...
PPS. For english-speaking users. There is an english readme, if you are interested.
-
Offline
- *blah-blah-blah maniac*
- Posts: 17559
- Joined: 27 Dec 2011, 08:53
- Location: Rather not to say
Re: GTA 4 v0.163
AgainstAllAutority
Чтоб границу убрать, можно не делать лишний код для фильтрации текстур, а линию посередине рисовать отдельным шейдером.
coffecup
В игре и так используется стриминг, вряд ли что-то исправит замена на другой (если бы не было, другое дело), такие баги не обойдешь.
Чтоб границу убрать, можно не делать лишний код для фильтрации текстур, а линию посередине рисовать отдельным шейдером.
coffecup
В игре и так используется стриминг, вряд ли что-то исправит замена на другой (если бы не было, другое дело), такие баги не обойдешь.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
-
Offline
- *master*
- Posts: 113
- Joined: 13 Dec 2012, 11:18
Re: GTA 4 v0.163
Ok Boris, I'll keep using 0.082 then.
I have another question; do you know if there is any way to calculate sun position properly? (and if possible without much performance consumption?)
I'm using Dax1 code for godrays:
I used other codes too but none of them calculate properly the sun position just the bright pixels, so it is even possible?
I have another question; do you know if there is any way to calculate sun position properly? (and if possible without much performance consumption?)
I'm using Dax1 code for godrays:
Code: Select all
float2 sunpos = 0.5;
float2 _v1 = 0;
float maxi = 0;
int count = 0;
float4 ratio = 0.1;
float deltax = 0.04 / ratio;
int samplex = 25 * ratio;
for(int i = 1; i <= 25; i++)
{
for(int j = 1; j <= samplex; j++)
{
r2 = tex2D(s2, _v1.xy);
r2.x = saturate(cross(r5.xyz, 0.003) - 10.0);
if((r5.x >= maxi) && r5.x)
{
maxi = r5.x;
sunpos.xy += _v1.xy;
count ++;
}
_v1.x += deltax ;
}
_v1.x = 0.32;
_v1.y += 0.015;
}
if(maxi) sunpos.xy /= count--;
float4 color;
//r0=tex2D(s2, _v0.xy);//hdr color
r11=r0 + r11;
//color.xyz=0.0;
int NUM_SAMPLES = 64;
float Decay = 0.96;
float Exposure = 1.0;
float Weight = 0.20;
float Density = 1.2;
float2 ScreenLightPos;
ScreenLightPos.xy = sunpos.xy;
float2 texCoord = _v0;
float2 deltaTexCoord = (texCoord.xy - ScreenLightPos.xy);
deltaTexCoord *= 1.0 / NUM_SAMPLES * Density;
float illuminationDecay = 1.0;
if(maxi)
{
for(int x = 0; x < NUM_SAMPLES; x++)
{
texCoord -= deltaTexCoord;
float4 sample = tex2D(s0, texCoord.xy);
if(sample.w) sample.xyz = 0.0;
else
{
sample = tex2D(s2, texCoord.xy);
sample.w = saturate(dot(sample.xyz, 0.333) - 9);
if(sample.w == 0) sample.xyz = 0.0;
sample.r *= 0.1;
sample.g *= 0.095;
sample.b *= 0.085;
}
sample *= illuminationDecay * Weight;
r11 += sample;
illuminationDecay *= Decay;
}
}
r11 *= Exposure;