#include "common.hlsli" struct v2p { float2 tc0: TEXCOORD0; // base float3 tc1: TEXCOORD1; // environment float4 c0: COLOR0; // sun.(fog*fog) }; ////////////////////////////////////////////////////////////////////////////////////////// float resize(float input, float factor, float offset) { return (input-0.5f+offset) / factor+0.5f-offset; } // Pixel uniform float4 screen_res; uniform float4 m_hud_params; uniform float4 m_zoom_deviation; uniform sampler2D s_vp2; //uniform sampler2D 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 ) : COLOR { float4 t_base = tex2D (s_base, I.tc0); // Текстура сетки // float4 t_skymap = tex2D (s_skymap, 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 = tex2D (s_vp2, I.tc0); // Изображение со второго вьюпорта float2 offset = distance(I.tc0, float2( .5f, .5f ))*float2(m_hud_params.z, m_hud_params.z); t_vp2.r = tex2D ( s_vp2, I.tc0+offset).r; t_vp2.b = tex2D ( s_vp2, I.tc0-offset).b; float3 final = float3(0, 0, 0); { //Стандартный режим // Текущая и следующая текстура неба //float3 env0 = texCUBE (s_env0, I.tc1); //float3 env1 = texCUBE (s_env1, I.tc1); //float3 env = lerp (env0, env1, L_ambient.w); // Их миксовка // Миксуем всё и собираем финальную картинку float3 base = lerp (t_vp2, t_base, t_base.a); // Сетку с вьюпортом final = base; // final = lerp (base, env, t_skymap.a); // base c небом } // out return float4 (final.r, final.g, final.b, min(m_hud_params.y, m_hud_params.a)); }