Anonim 680 Опубликовано 9 Января 2015 (изменено) Спасибо, разобрался. Зашью в свой пак. r2_parallax_h 0.02 и #define POM_PARALLAX_OFFSET float(0.02) как-то связаны? UPD: Оказывается что в Рентгене нет, копался в АСМ, регистрацию этого дефайна не нашёл. Пожалуй добавлю сам. Рентген расширения последней ревизии. Изменено 9 Января 2015 пользователем Anonim Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 9 Января 2015 (изменено) @User_X.A.R26, Да, так как используются Рентген расширения. Не советую использовать свои ДЛЛ'ки. Я немного менял код, для своих целей. А именно перевёл лучи на чекбокс и добавил новый семплер для Lens Dirt. Изменено 9 Января 2015 пользователем Anonim 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 9 Января 2015 (изменено) Этот дефайн вполне можно оставить и в шейдерном конфиге, это сила сдвига неровностей. Ну это то понятно. Комментарий есть. - Добавлен Моушен Блюр "камблю Фантомная Зона" - Некоторые настройки Ссылка\Link: https://yadi.sk/d/RCgWrBimdsTE4 Если это кому-то интересно... Изменено 9 Января 2015 пользователем Anonim 1 4 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 9 Января 2015 (изменено) @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 Изменено 9 Января 2015 пользователем Anonim 1 2 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 9 Января 2015 "Если это кому-то интересно..." будет гораздо интересней увидеть это в ЗП Можете не расчитовать... В ЗП есть больше чем нужно. 2 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 9 Января 2015 (изменено) @KD87, OGSM скрипты? Увольте. И скрипт главного меню для ускорения времени. Для использования в своих модах нужна только папка с шейдерами и две текстуры. Изменено 9 Января 2015 пользователем Anonim Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 10 Января 2015 (изменено) А чьи? А ты как думаешь? #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 Твой вариант был отстой как бы их не настраивай. Так они и в оригинале качаются. Только очень слабо, я зделал как в ЛА. Увеличив некоторые циферки. Изменено 10 Января 2015 пользователем Anonim 3 2 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 15 Января 2015 Вот отличный мануал: http://msdn.microsof...6(v=vs.85).aspx 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 10 Февраля 2015 (изменено) @DDamian724, You need: xrRender_R2, combine_2naa, texture. Enjoy! Изменено 10 Февраля 2015 пользователем Anonim 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 10 Февраля 2015 @DDamian724, Yes. 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 10 Февраля 2015 Как это сделать? Ну нарисуй на месте лампы квадрат с лампой в центре, спроецируй на экран и получишь как раз те пиксели, что надо проявить. Как нарисовать квадрат на месте лампы? Очевидно, так же, как рисуются солнечные флары, еще точнее, как само солнце рисуется - там тоже простой квад. Код готовый есть, выкидывай шелуху, правь под параметры лампы (направление там, позиция и т.д.) и рисуй. Где рисовать? Ну тоже очевидно - в месте, где есть позиция лампы, т.е., где рендерятся лампы, а это CRenderTarget::accum_spot/accum_point. В сумме с тебя требуется суметь разобраться в векторной арифметике при рисовке квадов, повернутых к камере, и написать шейдер, который считает координаты для семплирования экранной текстуры. Алгоритм я уже в деталях расписал. Ах, да, деталь - лично я флары и дерт рисую в отдельный рендертаргет, а потом смешиваю его с картинкой уже в самом конце, в combine_2. Очевидно, можно рендерить и в общий аккумулятор освещения, но переделывать уже неохота. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 , http://www.amk-team.ru/forum/index.php?showtopic=12673&p=758589 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 (изменено) "мягкой" воды А я тебе какую показал? Твёрдую чтоли? Написано мягкая вода, значит мягкая... OGSE эффект "мягкой" воды Что-то не так? Вроде всё подходит. Мягкая, да. ОГСЕ эффект, да. Что ещё нужно? Выдрал КД из ОГСЕ. Изменено 16 Февраля 2015 пользователем Anonim Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 (изменено) Нужно всё, где в названии есть "water" и файл ogse_config.h Инфа 100% UPD: Не, ну если так трудно, то могу залить. Изменено 16 Февраля 2015 пользователем Anonim Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 (изменено) , Не нужно ля-ля... Щас выдеру и залью. https://yadi.sk/d/VAfRsKNxeiKr6 Опциональный файл подключил через common.h Текстуру тоже приложил. Изменено 16 Февраля 2015 пользователем Anonim Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 , Что тебе нужно адаптировать? К каким шейдерам? Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 , Там есть мягкая вода..... Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Февраля 2015 , Просто кусок кода из шейдерпака #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 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 20 Февраля 2015 (изменено) @Elz, Так вам и скажут "Со сливом исходников всё станет яснее." Изменено 20 Февраля 2015 пользователем Anonim 1 Поделиться этим сообщением Ссылка на сообщение