// #include "common.hlsli" // uniform float4 m_hud_params; // uniform float4 m_zoom_deviation; // uniform float4 m_affects; // struct v2p // { // float2 tc0: TEXCOORD0; // base // float3 tc1: TEXCOORD1; // environment // float4 c0: COLOR0; // sun.(fog*fog) // }; // float get_noise(float2 co) // { // return (frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453))*0.5; // }; // ////////////////////////////////////////////////////////////////////////////////////////// // float resize(float input, float factor, float offset) // { // return (input-0.5f+offset) / factor+0.5f-offset; // } // // Pixel // uniform float4 screen_res; // Texture2D s_vp2; // //Texture2D s_skymap; // //uniform samplerCUBE s_env0; // //uniform samplerCUBE s_env1; // float random(float2 co) // { // return 0.5+(frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453))*0.5; // }; // float4 main( v2p I ) : SV_Target // { // if (m_hud_params.y < 0.0001) return float4 (0,0,0,0); // // float2 distort = s_distort.Sample( smp_rtlinear, I.tc); // // float3 image = s_base.Sample( smp_rtlinear, I.tc + offset); // float4 t_base = s_base.Sample ( smp_base, I.tc0); // Текстура сетки // // float4 t_skymap = s_skymap.Sample ( smp_base, I.tc0); // Карта отражения неба // //сдвиг от состояния оружия // I.tc0.x = I.tc0.x+m_zoom_deviation.x; // I.tc0.y = I.tc0.y+m_zoom_deviation.y; // // Растягиваем картинку в линзе так, чтобы на любом разрешении экрана были правильные пропорции // I.tc0.x = resize(I.tc0.x, screen_res.x/screen_res.y, 0); // float4 t_vp2 = s_vp2.Sample ( smp_base, I.tc0); // Изображение со второго вьюпорта // //абберация // float2 offset = distance(I.tc0, float2( .5f, .5f ))*float2(m_hud_params.z, m_hud_params.z); // t_vp2.r = s_vp2.Sample ( smp_base, I.tc0+offset).r; // t_vp2.b = s_vp2.Sample ( smp_base, I.tc0-offset).b; // float3 final = float3(0, 0, 0); // // Рассчитываем случайный шум пикселя // float noise = random(I.tc0*timers.z) * m_zoom_deviation.w; // float gray = ((t_vp2.r + t_vp2.g + t_vp2.b))*m_zoom_deviation.z*7; // t_vp2.r = t_vp2.r*(1-m_zoom_deviation.z) + gray; // t_vp2.g = t_vp2.g*(1-m_zoom_deviation.z) + gray; // t_vp2.b = t_vp2.b*(1-m_zoom_deviation.z) + gray; // t_vp2.b+= (0.4 + noise)*m_zoom_deviation.z; // // Шум при выбросе // float blow_noise = get_noise(I.tc0*timers.z) * m_affects.x * m_affects.x * 30; // t_vp2.r += blow_noise; // t_vp2.g += blow_noise; // t_vp2.b += blow_noise; // t_base.xyz = detonemap(t_base.xyz); // // Миксуем с сеткой // final = lerp (t_vp2, t_base, t_base.a); // // out // return float4 (final.r, final.g, final.b, min(m_hud_params.y, m_hud_params.a)); // } #include "common.hlsli" uniform float4 m_hud_params; struct v2p { float2 tc0: TEXCOORD0; float3 tc1: TEXCOORD1; float4 c0: COLOR0; }; float4 main(v2p I, float4 pos2d : SV_POSITION) : SV_Target { if (m_hud_params.y * m_hud_params.a < 0.0001f) { return 0.0f; } float4 t_base = s_base.Sample(smp_base, I.tc0); t_base.xyz = detonemap(t_base.xyz); float4 t_vp2 = s_image[pos2d.xy]; float alpha = m_hud_params.y * m_hud_params.a; t_vp2 *= saturate(alpha * 2.0f - 1.0f); float3 final = lerp(t_vp2.xyz, t_base.xyz, t_base.a); return float4(final.xyz, saturate(alpha * 2.0f)); }