Перейти к контенту

KD87

Рекомендуемые сообщения

 Спасибо, разобрался. Зашью в свой пак.

 

r2_parallax_h 0.02 и #define POM_PARALLAX_OFFSET float(0.02) как-то связаны?

 

UPD: Оказывается что в Рентгене нет, копался в АСМ, регистрацию этого дефайна не нашёл. Пожалуй добавлю сам.

 

Рентген расширения последней ревизии.

Изменено пользователем Anonim

Поделиться этим сообщением


Ссылка на сообщение

@User_X.A.R26, Да, так как используются Рентген расширения. Не советую использовать свои ДЛЛ'ки. Я немного менял код, для своих целей. А именно перевёл лучи на чекбокс и добавил новый семплер для Lens Dirt.

Изменено пользователем Anonim
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

@Romann, Восстановление солнца и погода.

 

В чём суть эффекта?

Несовсем понятен этот вопрос.

 

Сформулирую так:

 

- Солнечные лучи (Crysis Style) не KD87

- Глубина резкости

- Мягкая вода

- Мягкие частицы

- Lens Dirt

- Волны по траве

- Качающиеся деревья

- Motion Blur

- Снопы света от ламп

- Билдовский блум

 

gamedata\shaders\r2\_shaders_config.h

 

r2_sun_shafts on\off

r2_soft_particles on\off

r2_soft_water on\off

Изменено пользователем Anonim
  • Спасибо 1
  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

 

 

"Если это кому-то интересно..." будет гораздо интересней увидеть это в ЗП

Можете не расчитовать... В ЗП есть больше чем нужно.

  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение

@KD87, OGSM скрипты?  :) Увольте. И скрипт главного меню для ускорения времени.

 

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

Изменено пользователем Anonim

Поделиться этим сообщением


Ссылка на сообщение
А чьи?

А ты как думаешь?

 

 

#ifndef	_SUN_SHAFTS
	#define _SUN_SHAFTS
	#include "common.h"

	#define SS_FARPLANE 180

uniform float4 common_params2;
uniform sampler2D s_jitter_0;	// стандартный шум, 64x64
uniform sampler2D s_jitter_1;	// стандартный шум, 64x64
uniform sampler2D s_jitter_5;	// шум высокого разрешения, 1024x1024

	float normalize_depth(float depth) {
		return (saturate(depth/SS_FARPLANE));
	}

	float3 blend_soft_light(float3 a, float3  {
		float3 c = 2 * a * b + a * a * (1 - 2 * ;
		float3 d = sqrt(a) * (2 * b - 1) + 2 * a * (1 - ;
		return ( b < 0.5 )? c : d;
	}

	float3 calc_sunshafts(float2 tc, float3 init_color) {
		#ifdef USE_SUN_SHAFTS
			float3 out_color = float3(0,0,0);
			float sun_dist = SS_FARPLANE / (sqrt(1 - L_sun_dir_w.y * L_sun_dir_w.y));
			float4 sun_pos_projected = mul( m_VP, float4( sun_dist * L_sun_dir_w + eye_position, 1 ) );
			float4 sun_pos_screen = convert_to_screen_space(sun_pos_projected)/sun_pos_projected.w;
			float2 sun_vec_screen = sun_pos_screen.xy - tc;

			float angle_cos = dot(-eye_direction, normalize(L_sun_dir_w));
			float ray_fade = saturate(saturate(angle_cos)*(1 - saturate(sun_vec_screen))*saturate(length(sun_vec_screen)*1000));
			float2 init_tc = tc;

			float3 pos = tex2D(s_position, tc);
			float dep = pos.z;
			float mask = (saturate(angle_cos*0.1 + 0.9) + normalize_depth(pos.z) - 0.99999) * SS_DENSITY;
			sun_vec_screen *= angle_cos * SS_DENSITY / SS_SAMPLES;
			float depth_accum = 0;

			for (float i = 0; i < SS_SAMPLES; i++) {
				tc += sun_vec_screen;
				#ifdef SS_BLUR
					float blur_delta = 2 * (.5f/1024.f);
					out_color += (tex2Dlod(s_image, float4(tc + blur_delta,0,0)) + tex2Dlod(s_image, float4(tc - blur_delta,0,0))) * (1.f/2.f) * SS_BLEND_FACTOR;
				#else
					out_color += float3(0.2, 0.2, 0.2);
				#endif
				depth_accum += saturate(1 - tex2D(s_position, tc).z*1000);
			}
			out_color *= saturate(depth_accum/SS_SAMPLES);

		#ifdef SS_DUST
			float dust_size = 8/SS_DUST_SIZE;
			float3 jit;
			float2 jtc = init_tc;
			float2 sun_dir_e = L_sun_dir_e.xy;
			sun_dir_e /= sin(common_params2.x);
			sun_dir_e *= common_params2.y;
			jtc.x += sun_dir_e.x;
			jtc.y -= sun_dir_e.y;
			jtc.x = (jtc.x > 1.0)?(jtc.x-1.0):jtc.x;
			jtc.y = (jtc.y < 0.0)?(1.0-jtc.y):jtc.y;
			jit.x = tex2D(s_jitter_0, float2(jtc.x, jtc.y + timers.x*0.01*SS_DUST_SPEED)*dust_size).x;
			jit.y = tex2D(s_jitter_1, float2(jtc.x + timers.x*0.01*SS_DUST_SPEED, jtc.y)*dust_size).y;
			jit.z = tex2D(s_jitter_5, jtc).x;
			jit.z = saturate(jit.z + SS_DUST_DENSITY - 1);
			float3 dust = saturate(float3(jit.x, jit.x, jit.x)*float3(jit.y, jit.y, jit.y)*float3(jit.z, jit.z, jit.z));
			float len = length(dust);
			dust *= SS_DUST_INTENSITY;
			dust = lerp(0, dust, (1 - saturate(dep * 0.2)) * (1 - saturate((0.001 - dep)*10000.0)));
			dust += float3(1,1,1);
		#else
			float3 dust = float3(1,1,1);
		#endif

			out_color *= 2.0 * ray_fade / SS_SAMPLES * dust;
		#ifdef USE_MBLUR
			out_color = init_color + out_color * L_sun_color * (7.0 - init_color); // MBLUR 7.0
		#else
			out_color = init_color + out_color * L_sun_color * (0.7 - init_color); // NOT MBLUR 0.7
		#endif
		#ifdef USE_MBLUR
			out_color = blend_soft_light(out_color, L_sun_color * mask * -0.1 + 0.7) - init_color; // MBLUR 0.7
		#else
			out_color = blend_soft_light(out_color, L_sun_color * mask * -0.1 + 0.6) - init_color; // NOT MBLUR 0.6
		#endif
			return out_color;
		#else
			return 0;
		#endif
	}
#endif 

 

 

 

 

 

/*  Volumetric Sunlights aka GodRays aka Sunshafts
	made by K.D. (OGSE team)
	used papers:
	1) GPU Gems 3. Volumetric Light Scattering as a Post-Process (Kenny Mitchell)
	2) Реализация процессора эффектов постобработки. Часть 2 - Создание пост-эффектов. (Владимир Дьячков «Nikola Tesla»)
	3) Crysis shaders */

#ifndef	OGSE_SUNSHAFTS_H
	#define OGSE_SUNSHAFTS_H
	#include "common.h"
	#ifndef SS_QUALITY
		#define	SS_MAX_SAMPLES int(3)
	#else
		#if SS_QUALITY==1
			#define	SS_MAX_SAMPLES int(20)
		#else
			#if SS_QUALITY==2
				#define	SS_MAX_SAMPLES int(50)
			#else
				#if SS_QUALITY==3
					#define	SS_MAX_SAMPLES int(100)
				#endif
			#endif
		#endif
	#endif
	#define SS_FARPLANE float(180.0)
uniform float4 common_params2;
uniform sampler2D s_jitter_0;	// стандартный шум, 64x64
uniform sampler2D s_jitter_1;	// стандартный шум, 64x64
uniform sampler2D s_jitter_5;	// шум высокого разрешения, 1024x1024
	float normalize_depth(float depth)
	{
		return (saturate(depth/SS_FARPLANE));
	}
	 float3 blend_soft_light(float3 a, float3 
	{
		float3 c = 2 * a * b + a * a * (1 - 2 * ;
		float3 d = sqrt(a) * (2 * b - 1) + 2 * a * (1 - ;
		return ( b < 0.5 )? c : d;
	}
	float3 sunshafts(float2 tc, float3 init_color)
	{  
		// dist to the sun
		float sun_dist = SS_FARPLANE / (sqrt(1 - L_sun_dir_w.y * L_sun_dir_w.y));
		// sun pos
		float3 sun_pos_world = sun_dist*L_sun_dir_w + eye_position;
		float4 sun_pos_projected = mul(m_VP, float4(sun_pos_world, 1));
		float4 sun_pos_screen = convert_to_screen_space(sun_pos_projected)/sun_pos_projected.w;
		// sun-pixel vector
		float2 sun_vec_screen = sun_pos_screen.xy - tc;
		// calculate filtering effect. sunshafts must appear only when looking in the sun dir
		float angle_cos = dot(-eye_direction, normalize(L_sun_dir_w));
		float ray_fade = saturate(saturate(angle_cos)*(1 - saturate(dot(sun_vec_screen, sun_vec_screen)))*saturate(length(sun_vec_screen)));
		float2 init_tc = tc;
		
		float3 pos = tex2D(s_position, tc);
		float dep = pos.z;
		float depth = normalize_depth(dep);
		float mask = (saturate(angle_cos*0.1 + 0.9) + depth - 0.99999) * SS_BLEND_FACTOR;
		// adjust sampling
		sun_vec_screen *= angle_cos * SS_DENSITY / SS_MAX_SAMPLES;

		// sampling image along ray
		float3 accum = 0;
		float depth_accum = 0;
		for (int i = 0; i < SS_MAX_SAMPLES; i++)
		{ 
			tc += sun_vec_screen;
			depth = normalize_depth(tex2D(s_position, tc).z);
			accum += depth * (1 - i / SS_MAX_SAMPLES);
			depth_accum += saturate(1 - depth*1000);
		}
		accum *= saturate(depth_accum/SS_MAX_SAMPLES*5);
	#ifdef SS_DUST
		float dust_size = 8/SS_DUST_SIZE;
		float3 jit;
		float2 jtc = init_tc;
		float2 sun_dir_e = L_sun_dir_e.xy;
		sun_dir_e /= sin(common_params2.x);
		sun_dir_e *= common_params2.y;
		jtc.x += sun_dir_e.x;
		jtc.y -= sun_dir_e.y;
		jtc.x = (jtc.x > 1.0)?(jtc.x-1.0):jtc.x;
		jtc.y = (jtc.y < 0.0)?(1.0-jtc.y):jtc.y;
		jit.x = tex2D(s_jitter_0, float2(jtc.x, jtc.y + timers.x*0.01*SS_DUST_SPEED)*dust_size).x;
		jit.y = tex2D(s_jitter_1, float2(jtc.x + timers.x*0.01*SS_DUST_SPEED, jtc.y)*dust_size).y;
		jit.z = tex2D(s_jitter_5, jtc).x;
		jit.z = saturate(jit.z + SS_DUST_DENSITY - 1);
		float3 dust = saturate(float3(jit.x, jit.x, jit.x)*float3(jit.y, jit.y, jit.y)*float3(jit.z, jit.z, jit.z));
		float len = length(dust);
		dust *= SS_DUST_INTENSITY;
		dust = lerp(0, dust, (1 - saturate(dep * 0.2)) * (1 - saturate((0.001 - dep)*10000.0)));
		dust += float3(1,1,1);
	#else
		float3 dust = float3(1,1,1);
	#endif
		
		// watch some magic: if sun is occluded by terrain or some buildings, sunshafts must be eliminated. Otherwise image is terrible.
		accum *= 2 * ray_fade / SS_MAX_SAMPLES * dust;// * (1 - mat);
		// blending
		float3 out_color = init_color + accum * L_sun_color * (1.0 - init_color);
		out_color = blend_soft_light(out_color, L_sun_color * mask * 0.5 + 0.5) - init_color;
		return out_color;
	}  
	float3 calc_sunshafts(float2 tc, float3 init_color) {
		#ifndef	SS_QUALITY
			return 0;
		#else
			return sunshafts(tc, init_color);
		#endif	
	}
#endif 

 

 

 

Твой вариант был отстой как бы их не настраивай.

 

Так они и в оригинале качаются.

Только очень слабо, я зделал как в ЛА. Увеличив некоторые циферки.

Изменено пользователем Anonim
  • Нравится 3
  • Не нравится 2

Поделиться этим сообщением


Ссылка на сообщение

@DDamian724, You need: xrRender_R2, combine_2naa, texture. Enjoy!

Изменено пользователем Anonim
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

Как это сделать? Ну нарисуй на месте лампы квадрат с лампой в центре, спроецируй на экран и получишь как раз те пиксели, что надо проявить. Как нарисовать квадрат на месте лампы? Очевидно, так же, как рисуются солнечные флары, еще точнее, как само солнце рисуется - там тоже простой квад. Код готовый есть, выкидывай шелуху, правь под параметры лампы (направление там, позиция и т.д.) и рисуй. Где рисовать? Ну тоже очевидно - в месте, где есть позиция лампы, т.е., где рендерятся лампы, а это CRenderTarget::accum_spot/accum_point. В сумме с тебя требуется суметь разобраться в векторной арифметике при рисовке квадов, повернутых к камере, и написать шейдер, который считает координаты для семплирования экранной текстуры. Алгоритм я уже в деталях расписал. Ах, да, деталь - лично я флары и дерт рисую в отдельный рендертаргет, а потом смешиваю его с картинкой уже в самом конце, в combine_2. Очевидно, можно рендерить и в общий аккумулятор освещения, но переделывать уже неохота.

Поделиться этим сообщением


Ссылка на сообщение
"мягкой" воды

А я тебе какую показал? Твёрдую чтоли? Написано мягкая вода, значит мягкая...

 

 

OGSE эффект "мягкой" воды

Что-то не так? Вроде всё подходит. Мягкая, да. ОГСЕ эффект, да. Что ещё нужно? Выдрал КД из ОГСЕ.

Изменено пользователем Anonim

Поделиться этим сообщением


Ссылка на сообщение

Нужно всё, где в названии есть "water" и файл ogse_config.h Инфа 100%

 

UPD: Не, ну если так трудно, то могу залить.

Изменено пользователем Anonim

Поделиться этим сообщением


Ссылка на сообщение

, Не нужно ля-ля... Щас выдеру и залью.

 

https://yadi.sk/d/VAfRsKNxeiKr6 Опциональный файл подключил через common.h Текстуру тоже приложил.

Изменено пользователем Anonim

Поделиться этим сообщением


Ссылка на сообщение

, Что тебе нужно адаптировать? К каким шейдерам?

Поделиться этим сообщением


Ссылка на сообщение

, Просто кусок кода из шейдерпака

#ifdef	USE_SOFT_WATER
float4 _P=tex2Dproj(s_position, I.tctexgen);
float waterDepth=_P.z-I.tctexgen.z;
float fog_exp_intens=-4.0h;
float fog	=1-exp(fog_exp_intens*waterDepth);
float3 Fc=float3(0.1h, 0.1h, 0.1h)*water_intensity.r;
final=lerp (Fc, final, alpha);
alpha=min(alpha, saturate(waterDepth));
alpha=max (fog, alpha);
float4	leaves	=tex2D(s_leaves, I.tbase);
float	calc_cos=dot (I.M3, v2point);
float	calc_depth=saturate(waterDepth*calc_cos);
float	fLeavesFactor=smoothstep(0.025, 0.05, calc_depth);
fLeavesFactor*=smoothstep(0.1, 0.075, calc_depth);
final	=lerp(final, leaves, leaves.a*fLeavesFactor);
alpha	=lerp(alpha, leaves.a, leaves.a*fLeavesFactor);
#endif

Поделиться этим сообщением


Ссылка на сообщение

@Elz, Так вам и скажут  :D "Со сливом исходников всё станет яснее."

Изменено пользователем Anonim
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...