GTA 4 v0.163

Forum rules
new topics are not allowed in this subsection, only replies.
  • Author
  • Message
Offline
User avatar
*sensei*
Posts: 267
Joined: 12 Oct 2012, 19:14

Re: GTA 4 v0.163

между тем - я все мучаюсь со своим криво-блумом, пытаясь в одну половину текстуры писать сам блум, а в другую блики линз (чтоб потом в enbeffect.fx их модулировать с помощью текстуры палитры)


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

но на самом деле экран делится на 4 четверти:
Image

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

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

сам файл прилагаю (enb 0.163 GTAIV)

суть метода:

в блуме всего 4 пасса и 5 текстур, по какой-то причине 1,2 и 3,4 - результаты bloomtexture1 и bloomtexture2 соответственно с разным уровнем блюра

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

для каждого пасса я сделал клон, аналогичный оригиналам, но использующим другую половину вершины и другую половину семплов

по моему замыслу в каждый пасс выполняется по 2 разных шейдера для разных половинок экрана.

но на практике "активная" зона смещается...

EDIT: file deleted
_________________
Image

Offline
User avatar
*blah-blah-blah maniac*
Posts: 17552
Joined: 27 Dec 2011, 08:53
Location: Rather not to say

Re: GTA 4 v0.163

Отсутствует цвет, потому что в textureDistorted функции переменная не вектор, то бишь

Code: Select all

float c = float4
заменить на:

Code: Select all

float4 c = float4
Насчет 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; сделать, только вынести деление снаружи цикла ради производительности.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

Offline
User avatar
*sensei*
Posts: 267
Joined: 12 Oct 2012, 19:14

Re: GTA 4 v0.163

Спасибо!!

tempparameters.w почти спас меня))) последний мозговой штурм.
_________________
Image

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
User avatar
*sensei*
Posts: 267
Joined: 12 Oct 2012, 19:14

Re: GTA 4 v0.163

спасибо за помощь, однако - проблемы все равно остались. С делением экрана все окей, а вот с переводом системы координат для расчета линз косяки :P

я сделал так:
сначала считаю вектора как для полного экрана, а уже перед отгрузкой в цикл, перевожу в "половину" текстуры координату 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;

помоги плз преобразовать эти формулы для моего случая "правой половины" текстуры.
_________________
Image

Offline
User avatar
*blah-blah-blah maniac*
Posts: 17552
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 внутри цикла.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

Offline
User avatar
*sensei*
Posts: 267
Joined: 12 Oct 2012, 19:14

Re: GTA 4 v0.163

Спасибо за помощь, Борис!
я сделал самый "топорный" вариант - а именно просто перевел оффсет и ветора прям в самом цикле

Image


и вот собственно - ради чего старался и тебя мучал:

Image

осталось донастроить и убрать "смешивание" на границе блума и линз - оно приводит порой к яркой полосе в по правому краю зоны блума (ну или прямо по линии раздела, если смотреть на блум полноэкранно, как на 1ом скрине)
_________________
Image

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.

Offline
User avatar
*blah-blah-blah maniac*
Posts: 17552
Joined: 27 Dec 2011, 08:53
Location: Rather not to say

Re: GTA 4 v0.163

AgainstAllAutority
Чтоб границу убрать, можно не делать лишний код для фильтрации текстур, а линию посередине рисовать отдельным шейдером.

coffecup
В игре и так используется стриминг, вряд ли что-то исправит замена на другой (если бы не было, другое дело), такие баги не обойдешь.
_________________
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:

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;

I used other codes too but none of them calculate properly the sun position just the bright pixels, so it is even possible?
Post Reply