GTA 4 v0.135

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

Re: GTA 4 v0.135

[oftop] не, Борис - не надо делать фильтрацию кириллицы!!! я не смогу нормально изъяснить суть проблемы в таком случае :lol: [/oftop]

помнишь, ты мне давал пример шейдера, отыскивающего в текстуре блума самую яркую точку? у меня к сожалению не осталось той переписки, потому начал сам выдумывать. Насколько помню - там принцип тот же, что и у поиска центра масс.
вот такой шейдер получился (если честно сам пока еще не закончил 2ою часть - которая с лучами а-ля god rays)

Code: Select all

float4 PS_LightSearch(VS_OUTPUT_POST IN, float2 vPos: VPOS) : COLOR
{
	float2 coord = IN.txcoord0.xy;
	clip (1.1 - max(vPos.x, vPos.y));  // skip anything exept (1,1)
	
	float4 bloomweight = 0;
	float4 xyweight = 0;
		
	int steps = 16;
	float4 sample = 0;
	float2 tex = 0;
	
	tex.xy += 0.5 / steps; // offset for better performance
	
	for (int i=0; i<(steps-1); i++) // -1 так как уже сдвинули на пол "ячейки"
	{
		for (int j=0; j<(steps-1); j++)
		{
			sample = tex2D(SamplerBloom1, tex.xy);
			xyweight.x += dot(sample.rgb, 0.333) * tex.x;  // со вложенным циклом проблем никаких не было
			bloomweight.x += dot(sample.rgb,0.333);
			tex.x += 1/steps;
		}
		bloomweight.y = bloomweight.x;   // а вот во внешнем я что-то не уверен...
		xyweight.x *= 1/bloomweight.x; // highest x scource coord
		xyweight.z +=xyweight.x;
		xyweight.y = bloomweight.y * tex.y;
		tex.y += 1/steps;
	}
	xyweight.y *= 1/bloomweight.y;
	xyweight.x = xyweight.z / (samples - 1);
	xyweight.zw = xyweight.xy;
	xyweight.zw *= 1/(1+xyweight.zw);
	return float4(xyweight.zw, 0, 0);
}

уверен, тебе достаточно 1 раз взглянуть на него и сразу все понятно станет
_________________
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.135

Code: Select all

clip (1.1 - max(vPos.x, vPos.y));
Кроме этого лучше (потом) в вершинном шейдере геометрию уменьшить (для надежности от суперсэмплирования больше чем 1*1 пиксел квад).
По коду, чтоб не ломать мозги, сделай в одном месте вычисление веса, зачем горизонталь и вертикаль раскладывать, если понятнее и быстрее вектор двухмерный использовать?
помнишь, ты мне давал пример шейдера, отыскивающего в текстуре блума самую яркую точку?
Если надо именно это, то проще запоминать последнюю самую яркую и ее координаты в цикле. Смотря для чего нужно.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

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

Re: GTA 4 v0.135

Нужно для того, что бы находить солнце (ну или другой самый яркий источник света) по блуму (он сильно сблюрен, можно считать, что непрерывен и покрывает весь экран у меня - поэтому то и можно по взвешиваниям найти достаточно точно самую яркую точку (или область)) что бы потом в енбэффекте от него рисовать God Rays

то есть лучше не разелять x ось и y ось?
_________________
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.135

В блуме альфа канал не используется, можно делать любые просчеты, хоть в несколько "слоев" определять яркие точки и записывать их в любом количестве. Чтоб точно определить, рисуй линию сверху (можно с любой стороны, не важно) и в нее записывай результат скана по вертикали, а второй раз из нее собирай один скан по горизонтали. Если точность не нужна или устраивает цикл с кучей сэмплов (тогда надо делать через while и читать tex2Dlod, а то шейдер будет жутко длинным), то все таки взвешенный вариант лучше поделить на две части, первый цикл это поиск максимума через примерно такое
float2 maxuv=0.0;
float maxintensity=0.0;
for ()
{
if (currectintensity>maxintensity)
{
maxuv=curruv;
maxintensity=currentintensity;
}
}
здесь можно задать две переменных максимума или больше, чтоб повысить точность, но предлагаю во втором цикле сканировать более малую область уже взвешенно, центр этой области maxuv задав, иначе слишком много влияния будет оказывать изображение в целом. Конечно если одним циклом не жалко, туда можно засунуть проверку if (curr>max) или если больше лимита, но это сработает хорошо только если солнце единственный яркий объект, а в два цикла должно быть лучше когда солнце перекрыто на несколько частей ветками к примеру.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

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

Re: GTA 4 v0.135

то есть последовательное сканирование экрана - самый лучший способ? а, если делать "аналитически" , например: начать из центра и сделать на некоторой окружности вокруг него 6-8 выборок блума, выбрать наибольшую и сделать её новым "ценром". И так повторить несколько раз (а-ля симплекс метод в линейной алгебре). Правда это сработает если в текстуре блума нет других сопоставимых по яркости с солнцем источников света или мы рискуем пойти не по тому вектору((

и вот такой вопрос по самому шейдеру "god rays" который еще почему-то называется "от blizzard"
оригинал в GLSL (но это не суть - перевести в HLSL плевое дело)

Code: Select all

              vec2 lightPos = sunPosition.xy / -sunPosition.z;
                lightPos.y *= aspectRatio;
                lightPos = (lightPos + 1.0)/2.0;
                vec2 texCoord = texcoord.st;
                vec2 delta = (texCoord - lightPos) * GR_DENSITY / float(GR_SAMPLES);
                float decay = -sunPosition.z / 100.0;
                vec3 colorGR = vec3(0.0);
                for (int i = 0; i < GR_SAMPLES; i++) {
                        texCoord -= delta;
                        if (texCoord.x < 0.0 || texCoord.x > 1.0) {
                                if (texCoord.y < 0.0 || texCoord.y > 1.0) {
                                        break;
                                }
                        }
                        vec3 sample = vec3(0.0);
                        if (getDepth(texCoord) > threshold) {
                                sample = texture2D(composite, texCoord).rgb;
                        }
                        sample *= vec3(decay);
                        if (distance(texCoord, lightPos) > 0.05) sample *= 0.2;
                        colorGR += sample;
                        decay *= GR_DECAY;
                }
                color = (color + GR_EXPOSURE * vec4(colorGR, 0.0));
так вот - я не очень понимаю зачем делается это:
vec2 lightPos = sunPosition.xy / -sunPosition.z; // подозреваю, что по z-координатой имеется ввиду глубина

но почему мы делим XY , да еще на -1 ??
_________________
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.135

Вероятность попадания солнца на экран меньше 0.1, чтоб аналитически пытаться просчитывать. Зачем вообще это? Для лучей? Они будут в новых версиях.
так вот - я не очень понимаю зачем делается это:
vec2 lightPos = sunPosition.xy / -sunPosition.z; // подозреваю, что по z-координатой имеется ввиду глубина
но почему мы делим XY , да еще на -1 ??
Меньше надо лазить по чужому коду. Это преобразование координат, а почему отрицательный z, не знаю, направление координатных осей наверно править.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

Remix

Re: GTA 4 v0.135

Betray any new information on the progress of work?

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

Re: GTA 4 v0.135

I'm developing 4 mods at same time, don't ask.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

Offline
Posts: 3
Joined: 30 Jan 2013, 09:30

Re: GTA 4 v0.135

Tested the last version of ENBSeries on EFLC & GTAIV and skylighting & ssao keep without work. Also the square where should be the moon still there, may due to the new moon since patch 1.0.6.0 with simulated lunar phases and stuff?
Patch 6 changelog (gtaforums(DOT)com/index.php?showtopic=445395)

Bug Fixes:
• The Moon has been implemented with simulated lunar phases
• Vehicle shadows re-enabled between 8pm and 6am
• Fix floating street textures
• Pedestrians in vehicles appear further out from the player to allow for long range sniping
• Fixed garbled text in Japanese Multiplayer menus
• "RESC 10" error fix for specific hardware configurations

Shadows:
• A new, less memory-intensive, and better-looking scalable shadow solution has been implemented
• Enhanced Night Shadows added with user-selectable level of detail (replaces Shadow Density)

Performance:
• Rendering optimizations have been made to improve performance, particularly when enabling shadows
• User-configurable graphics settings have been added for shadow control
• Improved memory management

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

Re: GTA 4 v0.135

Let me ask, where i put any information that this mod support any patch above 1.0.4.0 or eflc? Isn't it hard to wait?
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7
Post Reply