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

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

 

Ещё кое-что о ребристости.

 Добавляем блюр в лучи

#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.3, 0.3, 0.3);

#endif

 

 

 Anonim

подскажи в какой шейдер добавлять этот блюр? В ogse_sunshafts.h ? И после каких строк?

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

@KD87, не сочти за наглость)) Я только начинаю разбираться в игровой графике и в шейдерах, потому, если тебе не составит труда, может подтолкнешь хотя бы примерно где копать(за сан флары знаю, уже даже обдумывал этот вариант), а то не пойму я, как рендерить квады эти(рисовать дерт для каждой лампы???), и мб есть где за это почитать? Мб есть вариант попроще и более правильный? Или твой вариант и является правильным и рациональным? Где-то видел, что можно привязать к блюму от лампочек, эффект будет похуже чем из расчета позиций источников освещения(наверное и имелось ввиду то, что ты сказал), но, тоже более-менее нормальный.

 

ЗЫ прошу сильно не бить, мб и бредятину понаписывал)))

  • Нравится 1
Ссылка на комментарий
out_color += float3(0.3, 0.3, 0.3);

Эту строку, замени на

#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.3, 0.3, 0.3);

#endif

 
И добавь соответствующие дефайны, можешь в начало фала, а можешь в конфиг файл
 
#define  SS_BLUR
#define  SS_BLEND_FACTOR 0.9
Изменено пользователем Anonim
  • Спасибо 1
Ссылка на комментарий

Anonim

С этим есть проблема - у меня ogse_sunshafts.h выглядит немного по другому, вот содержимое 

/* 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(1)

#else

#if SS_QUALITY==1

#define SS_MAX_SAMPLES int(30)

#else

#if SS_QUALITY==2

#define SS_MAX_SAMPLES int(70)

#else

#if SS_QUALITY==3

#define SS_MAX_SAMPLES int(250)

#endif

#endif

#endif

#endif

// #define SS_FARPLANE 180 // менять не стоит

#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 B)

{

float3 c = 2 * a * b + a * a * (1 - 2 * B);

float3 d = sqrt(a) * (2 * b - 1) + 2 * a * (1 - B);

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.1 + 0.6) - 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

 

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

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Блюр не для этих саншафтов, а для этих:

 

http://www.amk-team.ru/forum/index.php?showtopic=12673&p=902084

 

 

Адаптация шейдеров RMA+Shadows Addon к шейдерам KD87 (вода,частицы,лучи,волны). Камблю Фантомная зона :P

 

https://yadi.sk/d/QziIA9LZdh3yj

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

 

 

Because R2 doesn't support glow for lights.

@DDamian724, this not true. It`s possible. I'll write to PersonalMessage how to make it work. 

И тут мелькал вопрос о сквозных прицелах. Думаю вам стоит посмотреть тут

  • Нравится 1
Ссылка на комментарий

 

 

this not true

Каким образом на Р2 заставить заработать глоу так же, как на Р1? Человек, очевидно, спрашивает, о назначении глоу в спавне/сдк.


 

 

R1 have lens flare for lamp, R2 don't have.
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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