Anonim 680 Опубликовано 10 Января 2015 Поделиться Опубликовано 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 Ссылка на комментарий
Это популярное сообщение. KD87 718 Опубликовано 10 Января 2015 Автор Это популярное сообщение. Поделиться Опубликовано 10 Января 2015 А ты как думаешь? Я понятия не имею, в моде ридми нет, копирайты ничьи не указаны. Если делаешь солянку - хороший тон указать в ридми, что использовал. Из ранее указанного списка никто саншафты не делал, только у cjahyo какие-то эксперименты были. Ну а что касается пыли - внезапно, взято у меня, что показывает даже твое сравнение. Только очень слабо, я зделал как в ЛА. Увеличив некоторые циферки. Не надо писать "зделал Качающиеся деревья", а надо "правка качания деревьев". Иначе вводит в заблуждение. Как и Motion Blur, кстати. Там-то ты что сделал? Ведь эффект есть в оригинальной игре и заметен прилично. 7 Ссылка на комментарий
Struck 61 Опубликовано 11 Января 2015 Поделиться Опубликовано 11 Января 2015 Перенесусь сюда, в общем какой шейдер нужно выставить для модели что-бы подобного небыло? Ссылка на комментарий
KD87 718 Опубликовано 12 Января 2015 Автор Поделиться Опубликовано 12 Января 2015 в общем какой шейдер нужно выставить для модели что-бы подобного небыло? Да как обычно. Для динамических моделей это models\model. 1 1 Ссылка на комментарий
nikita_nz1986 130 Опубликовано 12 Января 2015 Поделиться Опубликовано 12 Января 2015 Кто знает как это устранить? Платформа:Чистое Небо. 1 Ссылка на комментарий
hehe 0 Опубликовано 14 Января 2015 Поделиться Опубликовано 14 Января 2015 Добрый вечер, ребята! перезалейте пожалуйста ссылку с шапки темы (правленные шейдеры), уж очень охота посмотреть на новую картинку, уже лет 5 не играл, да и то всё минималки да минималки, а в живую вот что наблюдаю в пеших прогулках по известному всеми месту почти каждый год жаль правда трубу уже попилили на металолом, уже не то Ссылка на комментарий
Карлан 1 049 Опубликовано 15 Января 2015 Поделиться Опубликовано 15 Января 2015 (изменено) Подскажите какую-нибудь понятную литературу по игровой графике, или если есть то конкретно что-то похожее по графике сталкера. А то методом тыка оно конечно занимательно, но медленно и неправильно я считаю. Наверное вопрос больше адресован к @KD87. @Anonim, нажимаю на ссылку вылетает эта же страница в новой вкладке. Скопируй еще раз пожалуйста. Изменено 15 Января 2015 пользователем Карлан Ссылка на комментарий
Anonim 680 Опубликовано 15 Января 2015 Поделиться Опубликовано 15 Января 2015 Вот отличный мануал: http://msdn.microsof...6(v=vs.85).aspx 1 Ссылка на комментарий
Earth2Space 305 Опубликовано 15 Января 2015 Поделиться Опубликовано 15 Января 2015 @Карлан, http://msdn.microsoft.com/en-us/library/windows/desktop/ff471376(v=vs.85).aspx 1 Ссылка на комментарий
Scarabay 98 Опубликовано 15 Января 2015 Поделиться Опубликовано 15 Января 2015 Интересует такой момент - как привязать новый скриптовый шейдер к модели? И, может подскажете еще, как сделать шейдер с двигающейся текстурой? И есть ли какой-нибудь способ управлять шейдерами через скрипты, например менять один на другой в процессе игры? Мой YouTube-канал Ссылка на комментарий
KD87 718 Опубликовано 15 Января 2015 Автор Поделиться Опубликовано 15 Января 2015 Вот такое есть по сталкиру:http://www.gamedev.ru/community/gamedev_lecture/articles/r_e_n_de_r Мегаполезная вещь, но надо немного понимать, о чем человек говорит. В целом почитайте статьи и глоссарий на gamedev.ru. Тоже помогает. Там про шейдеры отличная статья есть, с примерами. Правда, по первости даже так непонятно. Но тут уж деваться некуда. Интересует такой момент - как привязать новый скриптовый шейдер к модели? Задублируй любой имеющийся в сдк, там же переназначь, потом напиши его и закинь в папку шейдеров. И, может подскажете еще, как сделать шейдер с двигающейся текстурой? Это в каком плане? Скролл, что ли? В шедйеры экспортированы таймеры, юниформ timers. В x лежит линейный таймер как раз, привяжи к нему текстурные координаты. И есть ли какой-нибудь способ управлять шейдерами через скрипты, например менять один на другой в процессе игры? Да, исходники же есть. Можешь придумать что угодно. Штатно - нет. 1 Ссылка на комментарий
Scarabay 98 Опубликовано 16 Января 2015 Поделиться Опубликовано 16 Января 2015 (изменено) В x лежит линейный таймер как раз там же переназначь Можно об этом подробнее? Правильно ли я понял - для связки нужно создать скриптовый шейдер с названием папка_шейдер как у обычного? Изменено 16 Января 2015 пользователем Scarabay Мой YouTube-канал Ссылка на комментарий
macron 1 821 Опубликовано 18 Января 2015 Поделиться Опубликовано 18 Января 2015 Существуют ли/возможны ли правки движка/шейдеров для отображения на моделях (models/model) детальных текстур на r1? Ссылка на комментарий
KD87 718 Опубликовано 19 Января 2015 Автор Поделиться Опубликовано 19 Января 2015 Не существуют, но возможно. Просто по аналогии. Правильно ли я понял - для связки нужно создать скриптовый шейдер с названием папка_шейдер как у обычного? Правильно. 3 Ссылка на комментарий
*Shoker* 322 Опубликовано 24 Января 2015 Поделиться Опубликовано 24 Января 2015 (изменено) С учётом наличия исходников какими способами можно тестировать сталкерские шейдера на скорость выполнения \ оптимизацию? А точнее конкретно нужный шейдер протестировать. Изменено 24 Января 2015 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KD87 718 Опубликовано 29 Января 2015 Автор Поделиться Опубликовано 29 Января 2015 Надежно - никаким. Драйвер помещает вызовы на отрисовку в очередь команд, которая потом по заполнении загружается в видеокарту. В итоге измерение времени выполнения может тебе показать проблему совершенно не в том месте. Подробно можно почитать тут. Там же и написано, как можно улучшить ситуацию. Еще можно поглядеть в сторону плагина NSight для студии. Он умеет профилировать и вообще тулза отличная. Только надо будет ставить старую версию, 3.2, иначе не заведется под dx9. Мне плагин адекватные вещи показывал в плане производительности. Впрочем, надо помнить вышеприведенную памятку от MS. Самый косвенный способ - смотреть дизассемблированные шейдеры. Правил немного и они простые - чем меньше инструкций, тем лучше. Избегай тригонометрии и вложенных циклов. Не семплируй в цикле с помощью tex2D. Компиль шейдеры под самую высокую доступную шейдерную модель. Не компиль с флагом D3DXSHADER_USE_LEGACY_D3DX9_31_DLL. 1 Ссылка на комментарий
Азраэль 142 Опубликовано 30 Января 2015 Поделиться Опубликовано 30 Января 2015 Здаров народ. Такая заморочка, вводил ли кто то gloss в доблестный зов припяти ? Наглядный пример нужного ппш в ogse который недавно вышел. Ссылка на комментарий
lafugix 678 Опубликовано 30 Января 2015 Поделиться Опубликовано 30 Января 2015 Азраэль, он никуда и не уходил Не знаю, что там такого в том ППШ, это было из коробки в любой игре серии. 1 Убедитесь, что вы имеете право убедиться Ссылка на комментарий
qvvxvvq 111 Опубликовано 30 Января 2015 Поделиться Опубликовано 30 Января 2015 (изменено) Вот подскажите как исправить это чудо?: Изменено 30 Января 2015 пользователем PlayMod Ссылка на комментарий
dromundus 90 Опубликовано 5 Февраля 2015 Поделиться Опубликовано 5 Февраля 2015 Ребята!Посоветуйте... Есть ли программа по совмещению шейдеров из 2 shaders.xr из разных игр (например ТЧ оригинал и Лост альфа) в один файл? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти