Added New Mods

Added
- MRAA + Blindside Military Animation Pack
- Dynamic Zone Transitions
- Corpse Twitching
- Artifact Inspection
- Animated Lead Box
This commit is contained in:
2025-01-17 23:53:41 -05:00
parent 2009ca2711
commit fd1ec3a2ba
797 changed files with 20762 additions and 145 deletions
@@ -4,6 +4,7 @@
scope_red_dim = 0.4, 0.05, 0.05, 1
@[s3ds_colors]
lens_clear = 1, 1, 1
lens_old_yellow = 0.95, 0.91, 0.83
lens_russian_blue = 0.93, 0.96, 1
lens_contrast_yellow = 1, 0.95, 0.3
@@ -0,0 +1,12 @@
@[s3ds_defaults]
s3ds_reticle_size = 4
s3ds_eye_relief = 4
s3ds_exit_pupil = 0.3
s3ds_ffp = 0
s3ds_reflection_hue = 0.65
s3ds_min_zoom_1x = 0
s3ds_image_type = 0
s3ds_reticle_type = 0
s3ds_dirt_intensity = 0
s3ds_chroma_power = 0
s3ds_lens_color = lens_clear
@@ -4,6 +4,7 @@
; s3ds_exit_pupil - exit pupil diameter relative to ocular lens diameter, or parallax shadow diameter (default 0.3)
; s3ds_ffp - enable first focal plane feature, reticle sizes up while zooming. Can be 0 or 1 (default 0)
; s3ds_reflection_hue - hue parameter of lens reflections, range [0 .. 1] (default 0.65)
; s3ds_min_zoom_1x - at minimal FOV magnification, disable image scale up inside scope. Needed for 1x optic sights and 1-Nx LPVO scopes. Can be 0 or 1 (default 0)
; s3ds_image_type - background image processor (default 0)
@@ -15,6 +16,7 @@
; 1 - LED illuminated reticle
; 2 - Masked LED illuminated reticle (red channel is regular black reticle, green channel is illuminated area)
; 3 - ACOG, sun illuminated reticle (red channel is regular black reticle, green channel is illuminated area, blue channel is gray text)
; Use ms_colors parameter to set illumination color
; 4 - ELCAN Specter, LED illuminated reticle with zoom switch (red channel is regular black reticle, green channel is illuminated area 1, blue channel is illuminated area 2).
; Use with ms_count = 3 and ms_colors = scope_black, scope_red_dim, scope_red
; 5 - 1P59 Giperon scope (red channel at first focal plane, green channel at second focal plane, blue channel rotated by zoom), has LED illumination
@@ -39,18 +41,22 @@
![1p29]
s3ds_reticle_size = 4.6
s3ds_eye_relief = 2
s3ds_reflection_hue = 0.75
![acog]
s3ds_reticle_size = 3.9
s3ds_eye_relief = 1.7
s3ds_reticle_type = 3
s3ds_dirt_intensity = 0.1
s3ds_reflection_hue = 0.55
ms_colors = scope_red
![ps01]
s3ds_reticle_size = 4.7
s3ds_eye_relief = 2
s3ds_reticle_type = 1
s3ds_dirt_intensity = 0.5
s3ds_reflection_hue = 0.75
ms_count = 2
ms_colors = scope_black, scope_red
@@ -59,6 +65,7 @@
s3ds_eye_relief = 2
s3ds_reticle_type = 1
s3ds_dirt_intensity = 0.2
s3ds_reflection_hue = 0.75
ms_count = 2
ms_colors = scope_black, scope_red
@@ -68,6 +75,7 @@
s3ds_reticle_size = 2.2
s3ds_eye_relief = 4
s3ds_chroma_power = 0.04
s3ds_reflection_hue = 0.15
![wpn_fn2000]
s3ds_reticle_size = 2.5
@@ -77,10 +85,12 @@
![wpn_g36]
s3ds_reticle_size = 2.2
s3ds_eye_relief = 2.5
s3ds_reflection_hue = 0.7
![wpn_g3sg1]
s3ds_reticle_size = 4.3
s3ds_eye_relief = 2.4
s3ds_reflection_hue = 0.2
![wpn_g43]
s3ds_reticle_size = 3.3
@@ -98,22 +108,25 @@
![wpn_l85]
s3ds_reticle_size = 3
s3ds_eye_relief = 2.2
s3ds_exit_pupil = 0.6
![wpn_l96a1]
s3ds_reticle_size = 5
s3ds_eye_relief = 2.2
s3ds_chroma_power = 0.01
s3ds_reflection_hue = 0.55
![wpn_m24]
s3ds_reticle_size = 5
s3ds_eye_relief = 2.2
s3ds_ffp = 1
s3ds_chroma_power = 0.01
s3ds_reflection_hue = 0.55
![wpn_m82]
s3ds_reticle_size = 5
s3ds_eye_relief = 2.2
s3ds_ffp = 1
s3ds_reflection_hue = 0.55
![wpn_m98b]
s3ds_reticle_size = 5
@@ -140,6 +153,7 @@
s3ds_eye_relief = 0.7
s3ds_reticle_type = 2
s3ds_lens_color = lens_russian_blue
s3ds_reflection_hue = 0.75
ms_count = 2
ms_colors = scope_black, scope_red
@@ -147,6 +161,7 @@
s3ds_reticle_size = 4.1
s3ds_eye_relief = 1.7
s3ds_reticle_type = 5
s3ds_reflection_hue = 0.75
ms_count = 2
ms_colors = scope_black, scope_red
@@ -169,6 +184,7 @@
s3ds_reticle_size = 4.7
s3ds_eye_relief = 2
s3ds_reticle_type = 1
s3ds_reflection_hue = 0.75
ms_count = 2
ms_colors = scope_black, scope_red
@@ -177,10 +193,14 @@
s3ds_eye_relief = 0.7
s3ds_reticle_type = 2
s3ds_lens_color = lens_russian_blue
s3ds_reflection_hue = 0.75
ms_count = 2
ms_colors = scope_black, scope_red
![wpn_wa2000]
s3ds_reticle_size = 5
s3ds_eye_relief = 2.2
s3ds_ffp = 1
s3ds_reticle_type = 2
s3ds_chroma_power = 0.01
ms_count = 2
ms_colors = scope_black, scope_red
@@ -4,7 +4,7 @@
Link : https://www.moddb.com/mods/stalker-anomaly/addons/shader-3d-scopes
Author : party_50
Date : 01.03.2024
Last Edit : 07.10.2024
Last Edit : 07.01.2025
=====================================================================
--]]
@@ -17,6 +17,7 @@ local ALL_PARAMETERS = {
s3ds_exit_pupil = "float",
s3ds_ffp = "float",
s3ds_reflection_hue = "float",
s3ds_min_zoom_1x = "float",
s3ds_image_type = "float",
@@ -93,6 +94,9 @@ function parse_parameters(wpn)
if not values[key] then
values[key] = parse_key(sight_section, key, type)
end
if not values[key] then
values[key] = parse_key("s3ds_defaults", key, type)
end
end
return values
@@ -110,14 +114,14 @@ function update_shader(wpn)
get_console():execute(
"s3ds_param_1 " ..
get(info, "s3ds_reticle_size", "4") .. ", " ..
get(info, "s3ds_eye_relief", "4") .. ", " ..
get(info, "s3ds_exit_pupil", "0.3") .. ", " ..
get(info, "s3ds_reticle_size", "0") .. ", " ..
get(info, "s3ds_eye_relief", "0") .. ", " ..
get(info, "s3ds_exit_pupil", "0") .. ", " ..
get(info, "s3ds_ffp", "0"))
get_console():execute(
"s3ds_param_2 " ..
"0, " ..
get(info, "s3ds_reflection_hue", "0") .. ", " ..
"0, " ..
get(info, "s3ds_min_zoom_1x", "0") .. ", " ..
(ZOOM_FACTOR or 1.5))
@@ -127,11 +131,11 @@ function update_shader(wpn)
get(info, "s3ds_image_type", "0") .. ", " ..
get(info, "s3ds_reticle_type", "0") .. ", " ..
get(info, "s3ds_dirt_intensity", "0") .. ", " ..
get(info, "s3ds_chroma_power", "0.02"))
get(info, "s3ds_chroma_power", "0"))
get_console():execute(
"s3ds_param_4 " ..
get(info, "s3ds_lens_color", "1, 1, 1") .. ", " ..
get(info, "s3ds_lens_color", "0, 0, 0") .. ", " ..
(NVG_BLUR and 1 or 0))
end
@@ -4,7 +4,7 @@
Link : https://www.moddb.com/mods/stalker-anomaly/addons/shader-3d-scopes
Authors : LVutner, party_50
Date : 01.03.2024
Last Edit : 26.10.2024
Last Edit : 07.01.2025
=====================================================================
*/
@@ -30,8 +30,7 @@
Texture2D s_prev_frame;
Texture2D s_inside;
Texture2D s_dirt;
TextureCube s_env0;
TextureCube s_env1;
TextureCube s_reflection;
float4 m_hud_params;
float4 m_hud_fov_params;
@@ -48,12 +47,13 @@ struct vf
{
float4 hpos : SV_Position;
float2 tc0 : TEXCOORD0;
float3 v_pos : TEXCOORD1;
float3 v_nrm : TEXCOORD2;
float3 w_pos : TEXCOORD3;
float3 w_nrm : TEXCOORD4;
float3 v_dir : TEXCOORD5;
float3 v_sun : TEXCOORD6;
float3 w_pos : POSITION1;
float3 w_nrm : NORMAL1;
float3 v_pos : POSITION0;
float3 v_nrm : NORMAL0;
float3 T : TANGENT0;
float3 B : BINORMAL0;
float3 N : NORMAL2;
};
float3x3 cotangent_frame(float3 N, float3 P, float2 uv)
@@ -94,7 +94,7 @@ float2 project(float2 tc, float2 tangent, float distance, float size)
return parallax_tc;
}
float4 blur_sample(Texture2D tex, SamplerState samp, float2 uv)
float4 blur_sample(Texture2D tex, float2 uv)
{
float4 color = float4(0, 0, 0, 0);
float blur_amount = 0.006;
@@ -119,7 +119,7 @@ float4 blur_sample(Texture2D tex, SamplerState samp, float2 uv)
for (int i = 0; i < 9; i++)
{
color += tex.Sample(samp, uv + offsets[i] * blur_amount + dither) * weights[i];
color += tex.Sample(smp_base, uv + offsets[i] * blur_amount + dither) * weights[i];
}
return color;
@@ -135,14 +135,14 @@ float3 chroma_sample(float2 lens_tc, float2 back_tc, float current_fov, float po
float step = i / 16.0;
float2 delta = lens_tc - 0.5;
float zoom_multiplier = min(1, 0.005 * (180 / current_fov));
float zoom_multiplier = min(1, 0.004 * (180 / current_fov));
delta = sign(delta) * pow(abs(delta), 3.5) * (2 * power + zoom_multiplier);
float2 coord = back_tc + (step - 0.5) * delta;
float3 weight = float3(step, 1.0 - abs(step + step - 1.0), 1.0 - step);
weight = lerp(float3(0.5, 0.5, 0.5), weight, 2.0);
float3 color = s_prev_frame.Sample(smp_rtlinear, coord).rgb;
float3 color = s_prev_frame.Sample(smp_base, coord).rgb;
color_sum += color * color * weight;
weight_sum += weight;
@@ -155,7 +155,7 @@ float3 back_image_sample(float2 lens_tc, float2 back_tc, float current_fov, floa
{
if (nvg_blur && floor(shader_param_8.x) != 0)
{
return blur_sample(s_prev_frame, smp_rtlinear, back_tc);
return blur_sample(s_prev_frame, back_tc);
}
return chroma_sample(lens_tc, back_tc, current_fov, power);
@@ -164,11 +164,11 @@ float3 back_image_sample(float2 lens_tc, float2 back_tc, float current_fov, floa
float3 apply_nvg(float2 tc, float3 img)
{
img = BlackandWhite(img);
img = Brightness(img, 0.45, 6);
img = Brightness(img, 0.45, 7);
img = clamp(img, 0, 1);
img = LevelsPass(img);
img = Grain2(img, tc);
img = Grain1(img, tc);
img = Grain2(img, tc);
return img;
}
@@ -233,23 +233,62 @@ float4 rgba_blend(float4 b, float4 a)
return float4(nc, na);
}
float3 sample_sky(float3 dir)
{
dir.y = (dir.y - max(cos(dir.x) * 0.65, cos(dir.z) * 0.65)) * 2.1;
dir.y -= -0.35;
float3 sky0 = s_env0.SampleLevel(smp_base, dir, 0).xyz;
float3 sky1 = s_env1.SampleLevel(smp_base, dir, 0).xyz;
return lerp(sky0, sky1, L_ambient.w);
}
float4 sample_specular(float3 pnt, float3 normal, float3 light_direction)
{
float w = pow(abs(dot(normalize(pnt + light_direction), normal)), 256);
float w = pow(abs(dot(normalize(pnt + light_direction), normal)), 1024);
return float4(L_sun_color.rgb * w, w);
}
float3 sample_reflections(float2 tc, float parallax_factor, float fov_factor, float specular_factor, float dirt_factor, float3x3 TBNw_inv, float3 w_pos, float3 w_nrm, float lum)
{
float3 normalmap = float3(tc - 0.5, 1);
normalmap.xy *= fov_factor;
float3 lensnormal = normalize(float3(dot(normalmap, TBNw_inv[0]), dot(normalmap, TBNw_inv[1]), dot(normalmap, TBNw_inv[2])));
float3 reflections = s_reflection.SampleLevel(smp_base, reflect(normalize(normalize(w_pos - eye_position) - normalize(w_nrm) * parallax_factor), lensnormal), 0).xyz;
float angle_factor = (dot(normalize(w_pos - eye_position), normalize(w_nrm)) + 1) / 2;
reflections *= smoothstep(0, 0.03, angle_factor) * smoothstep(0, 1, lum) * 0.15;
reflections *= pow(1 - dirt_factor, 10);
float4 specular = sample_specular(
normalize(normalize(w_pos - eye_position) - normalize(w_nrm) * parallax_factor),
normalize(float3(dot(normalmap, TBNw_inv[0]), dot(normalmap, TBNw_inv[1]), dot(normalmap, TBNw_inv[2]))),
normalize(L_sun_dir_w)
) * 4;
specular.w *= L_material.g * smoothstep(0, 0.03, angle_factor);
specular.w = min(1, specular.w);
specular.w *= pow(1 - dirt_factor, 10);
specular.w *= specular_factor;
return reflections + specular.rgb * specular.a;
}
float3 HSVtoRGB(float3 hsv)
{
if (hsv.y == 0.0)
return hsv.z;
float i = floor(hsv.x * 6.0);
float f = hsv.x * 6.0 - i;
float p = hsv.z * (1.0 - hsv.y);
float q = hsv.z * (1.0 - f * hsv.y);
float t = hsv.z * (1.0 - (1.0 - f) * hsv.y);
i = fmod(i, 6.0);
if (i == 0.0)
return float3(hsv.z, t, p);
else if (i == 1.0)
return float3(q, hsv.z, p);
else if (i == 2.0)
return float3(p, hsv.z, t);
else if (i == 3.0)
return float3(p, q, hsv.z);
else if (i == 4.0)
return float3(t, p, hsv.z);
return float3(hsv.z, p, q);
}
float4 main(vf I) : SV_Target
{
float RETICLE_SIZE = s3ds_param_1.x;
@@ -259,6 +298,7 @@ float4 main(vf I) : SV_Target
float MIN_ZOOM_FOV = m_hud_fov_params.y * 0.75;
float MAX_ZOOM_FOV = m_hud_fov_params.x * 0.75;
float REFLECTION_HUE = s3ds_param_2.x;
int MIN_ZOOM_1X = s3ds_param_2.z;
float ZOOM_FACTOR = s3ds_param_2.w;
@@ -302,34 +342,35 @@ float4 main(vf I) : SV_Target
float4 mark_texture = float4(0, 0, 0, 0);
if (reticle_tc.x >= 0 && reticle_tc.x <= 1 && reticle_tc.y >= 0 && reticle_tc.y <= 1)
{
mark_texture = s_base.Sample(smp_rtlinear, reticle_tc);
mark_texture = s_base.Sample(smp_base, clamp(reticle_tc, 0, 1));
}
float4 giperon_sfp;
if (RETICLE_TYPE == RT_GIPERON)
{
float finder = s_base.Sample(smp_rtlinear, reticle_lens_tc).g;
float reticle = mark_texture.r;
mark_texture = mark_texture.r;
float finder = s_base.Sample(smp_base, clamp(reticle_lens_tc, 0, 1)).g;
float shift_3x = 0.053;
float angle = -PI * (zoom_part + shift_3x) / (1 + shift_3x);
float2 tc = reticle_lens_tc - 0.5;
tc = float2(tc.x * cos(angle) - tc.y * sin(angle), tc.x * sin(angle) + tc.y * cos(angle));
tc += 0.5;
float numbers = s_base.Sample(smp_rtlinear, tc + fisheye(I.tc0, V_tangent.xy)).b;
mark_texture = float4(0, 0, 0, max(numbers, max(finder, reticle)));
float numbers = s_base.Sample(smp_base, clamp(tc + fisheye(I.tc0, V_tangent.xy), 0, 1)).b;
giperon_sfp = float4(0, 0, 0, max(finder, numbers));
}
if (RETICLE_TYPE == RT_ACOG)
{
float3 black = float3(0, 0, 0);
float3 color = float3(1, 0.2, 0.2);
float3 text = float3(0.3, 0.3, 0.3);
float tritium_lum = 0.2;
mark_texture = rgba_blend(rgba_blend(float4(black, mark_texture.r), float4(color * max(tritium_lum, lum * 2), mark_texture.g)), float4(text, mark_texture.b * lum));
mark_texture = rgba_blend(rgba_blend(float4(black, mark_texture.r), float4(markswitch_color.rgb * max(tritium_lum, lum * 2), mark_texture.g)), float4(text, mark_texture.b * lum));
}
if (RETICLE_TYPE == RT_LED || RETICLE_TYPE == RT_GIPERON)
{
mark_texture = float4(markswitch_color.rgb, mark_texture.a);
giperon_sfp = float4(markswitch_color.rgb, giperon_sfp.a);
}
if (RETICLE_TYPE == RT_SPECTER)
@@ -371,19 +412,19 @@ float4 main(vf I) : SV_Target
// Parallax shadow
float2 exit_pupil_tc = project(I.tc0, V_tangent.xy, -EYE_RELIEF, EXIT_PUPIL);
float4 shadow_texture = sample_shadow(exit_pupil_tc, SHADOW_WIDTH);
float4 shadow_texture = sample_shadow(exit_pupil_tc, SHADOW_WIDTH + 0.02 * (current_zoom - 1));
// LED-illuminated inside walls
float4 inside = s_inside.Sample(smp_rtlinear, (reticle_lens_tc - 0.5) * 0.62 + 0.5);
float4 inside = s_inside.Sample(smp_base, clamp((reticle_lens_tc - 0.5) * 0.62 + 0.5, 0, 1));
inside = float4(markswitch_color.rgb * inside.r, inside.a);
if (RETICLE_TYPE == RT_SCREEN || RETICLE_TYPE == RT_SPECTER) {
if (RETICLE_TYPE == RT_SCREEN || RETICLE_TYPE == RT_SPECTER || RETICLE_TYPE == RT_ACOG || FFP) {
inside = float4(0, 0, 0, 0);
}
// Dirt texture
float4 dirt = s_dirt.Sample(smp_rtlinear, I.tc0);
float4 dirt = s_dirt.Sample(smp_base, I.tc0);
dirt.a *= DIRT_INTENSITY;
// Back image
float2 screen_tc = I.hpos.xy * screen_res.zw;
float zoom = lerp(1, IMAGE_SIZE, m_hud_params.x);
@@ -391,7 +432,7 @@ float4 main(vf I) : SV_Target
float2 scope_tc = (1.0 / zoom) * (screen_tc.xy - 0.5) + 0.5;
V_tangent.x = V_tangent.x / screen_res.x * screen_res.y;
scope_tc = scope_tc + V_tangent.xy * shift;
if (RETICLE_TYPE == RT_SPECTER) {
float smooth_zoom_part = smoothstep(0, 1, zoom_part);
if (distance(I.tc0, float2(0.5 + smooth_zoom_part * 3, 0.5)) <= 1)
@@ -399,7 +440,7 @@ float4 main(vf I) : SV_Target
if (distance(I.tc0, float2(-2.5 + smooth_zoom_part * 3, 0.5)) <= 1)
scope_tc.x += 0.2 * (1 - smooth_zoom_part);
}
float3 back;
if (IMAGE_TYPE == IT_THERMAL && markswitch_current.x < 2) {
float pixelate = int(current_zoom);
@@ -413,37 +454,21 @@ float4 main(vf I) : SV_Target
back = back_image_sample(I.tc0, scope_tc, ogse_c_screen.x, CHROMA_POWER, NVG_BLUR);
back *= LENS_COLOR;
}
if (IMAGE_TYPE == IT_THERMAL) {
back *= lcd_effect(I.hpos);
}
if (IMAGE_TYPE == IT_NV && markswitch_current.x == 0) {
back = apply_nvg(scope_tc, back);
}
// Reflections
float3 normalmap = float3(I.tc0.xy, 1) * 2 - 1;
float3x3 TBNw = cotangent_frame(I.w_nrm, I.w_pos, I.tc0.xy);
float3x3 TBNw_inv = transpose(TBNw);
float3 lensnormal = normalize(float3(dot(normalmap, TBNw_inv[0]), dot(normalmap, TBNw_inv[1]), dot(normalmap, TBNw_inv[2])));
float3x3 TBNw_inv = transpose(float3x3(I.T, I.B, I.N));
float3 reflections = sample_reflections(I.tc0.xy, 0, 1, 2, dirt.a, TBNw_inv, I.w_pos, I.w_nrm, lum) * HSVtoRGB(float3(REFLECTION_HUE, 0.2, 1));
reflections += sample_reflections(I.tc0.xy, 100, 2, 0.2, dirt.a, TBNw_inv, I.w_pos, I.w_nrm, lum) * HSVtoRGB(float3(REFLECTION_HUE - 0.1, 0.9, 1));
reflections += sample_reflections(I.tc0.xy, 40, -3, 0.2, dirt.a, TBNw_inv, I.w_pos, I.w_nrm, lum) * HSVtoRGB(float3(REFLECTION_HUE + 0.1, 0.5, 1));
float3 reflections = sample_sky(reflect(normalize(I.w_pos - eye_position), lensnormal));
float angle_factor = (dot(normalize(I.w_pos - eye_position), normalize(I.w_nrm)) + 1) / 2;
reflections *= smoothstep(0, 0.03, angle_factor) * smoothstep(0, 1, lum) * 0.15;
reflections *= pow(1 - dirt.a, 10);
// Specular light
float3x3 TBN_inv = transpose(TBN);
float4 specular = sample_specular(
normalize(I.v_dir),
normalize(float3(dot(normalmap, TBN_inv[0]), dot(normalmap, TBN_inv[1]), dot(normalmap, TBN_inv[2]))),
normalize(I.v_sun)
) * 4;
specular.w *= L_material.g * smoothstep(-0.001, 0.03, angle_factor);
specular.w = min(1, specular.w);
specular.w *= pow(1 - dirt.a, 10);
// Vignette
float4 vignette = float4(0, 0, 0, smoothstep(0.4, 2, 2 * length(I.tc0.xy - float2(0.5, 0.5))));
@@ -453,23 +478,30 @@ float4 main(vf I) : SV_Target
final_scope = lerp(final_scope, mark_shadow_blue.xyz, mark_shadow_blue.w * BlackandWhite(back));
}
final_scope = lerp(final_scope, vignette.xyz, vignette.w);
final_scope = lerp(final_scope, mark_shadow.xyz, mark_shadow.w);
final_scope = lerp(final_scope, inside.xyz, inside.w);
if (RETICLE_TYPE == RT_ADDITIVE)
{
final_scope += mark_texture.xyz * mark_texture.w;
}
else if (RETICLE_TYPE == RT_GIPERON || FFP)
{
final_scope = lerp(final_scope, mark_texture.xyz, mark_texture.w);
}
final_scope = lerp(final_scope, mark_shadow.xyz, mark_shadow.w);
final_scope = lerp(final_scope, inside.xyz, inside.w);
if (RETICLE_TYPE != RT_SCREEN)
{
final_scope = lerp(final_scope, shadow_texture.xyz, shadow_texture.w);
}
if (RETICLE_TYPE != RT_ADDITIVE)
if (!(RETICLE_TYPE == RT_ADDITIVE || RETICLE_TYPE == RT_GIPERON || FFP))
{
final_scope = lerp(final_scope, mark_texture.xyz, mark_texture.w);
}
if (RETICLE_TYPE == RT_GIPERON)
{
final_scope = lerp(final_scope, giperon_sfp.xyz, giperon_sfp.w);
}
final_scope = lerp(final_scope, zoom_switch_shadow.xyz, zoom_switch_shadow.w);
final_scope = max(final_scope, reflections);
final_scope += specular.xyz * specular.w;
final_scope += reflections;
final_scope = lerp(final_scope, dirt.xyz, dirt.w);
return float4(final_scope, 1.0);
@@ -8,13 +8,12 @@ function normal(shader, t_base, t_second, t_detail)
: distort(true)
: scopelense(3)
shader:dx10texture("s_base", t_base)
shader:dx10texture("s_env0", "$user$sky0")
shader:dx10texture("s_env1", "$user$sky1")
shader:dx10texture("s_prev_frame", "$user$generic_temp")
shader:dx10texture("s_tonemap", "$user$tonemap")
shader:dx10texture("s_heat", "$user$heat")
shader:dx10texture("s_position", "$user$generic2")
shader:dx10texture("s_inside", "wpn\\scope_utility\\inside")
shader:dx10texture("s_dirt", "wpn\\scope_utility\\dirt")
shader:dx10sampler("smp_rtlinear")
shader:dx10texture("s_reflection", "wpn\\scope_utility\\reflection")
shader:dx10sampler("smp_base")
end
@@ -5,12 +5,13 @@ struct vf
{
float4 hpos : SV_Position;
float2 tc0 : TEXCOORD0;
float3 v_pos : TEXCOORD1;
float3 v_nrm : TEXCOORD2;
float3 w_pos : TEXCOORD3;
float3 w_nrm : TEXCOORD4;
float3 v_dir : TEXCOORD5;
float3 v_sun : TEXCOORD6;
float3 w_pos : POSITION1;
float3 w_nrm : NORMAL1;
float3 v_pos : POSITION0;
float3 v_nrm : NORMAL0;
float3 T : TANGENT0;
float3 B : BINORMAL0;
float3 N : NORMAL2;
};
vf _main (v_model v)
@@ -20,15 +21,16 @@ vf _main (v_model v)
o.hpos = mul(m_WVP, v.P);
o.tc0 = v.tc.xy;
o.w_pos = mul(m_W, v.P).xyz;
o.w_nrm = mul(m_W, v.N).xyz;
o.v_pos = mul(m_WV, v.P).xyz;
o.v_nrm = mul(m_WV, v.N).xyz;
o.w_pos = mul(m_W, v.P).xyz;
o.w_nrm = mul(m_W, v.N).xyz;
o.T = mul(m_W, v.T).xyz;
o.B = mul(m_W, v.B).xyz;
o.N = mul(m_W, v.N).xyz;
o.v_dir = mul(m_V, normalize(o.w_pos - eye_position));
o.v_sun = mul(m_V, L_sun_dir_w);
return o;
}
@@ -184,18 +184,20 @@ float fade( float t )
}
float pnoise3D( float3 p, float t, float grainSize )
{
{
float3 pi = permONE * floor( p ) + permHALF;
pi.xy *= permTexSize;
pi.xy = round(( pi.xy - permHALF ) / grainSize ) * grainSize;
pi.xy /= permTexSize;
float3 pf = frac( p );
// Magic constatns
float3 pf = float3(-0.1, 0.1, 0); // = frac( p );
// Noise contributions from (x=0, y=0), z=0 and z=1
float perm00 = rnm( pi.xy, t ).x;
float3 grad000 = samplerPermTex(float2( perm00, pi.z )).xyz * 4.0 - 1.0;
float n000 = dot( grad000, pf );
float3 grad001 = samplerPermTex(float2( perm00, pi.z + permONE )).xyz * 4.0 - 1.0;
float n001 = dot( grad001, pf - float3( 0.0, 0.0, 1.0 ));
//return n001;
// Noise contributions from (x=0, y=1), z=0 and z=1
float perm01 = rnm( pi.xy + float2( 0.0, permONE ), t ).y ;
float3 grad010 = samplerPermTex(float2( perm01, pi.z )).xyz * 4.0 - 1.0;
@@ -203,13 +205,13 @@ float pnoise3D( float3 p, float t, float grainSize )
float3 grad011 = samplerPermTex(float2( perm01, pi.z + permONE )).xyz * 4.0 - 1.0;
float n011 = dot( grad011, pf - float3( 0.0, 1.0, 1.0 ));
// Noise contributions from (x=1, y=0), z=0 and z=1
float perm10 = rnm( pi.xy + float2( permONE, 0.0 ), t ).z ;
float perm10 = rnm( pi.xy + float2( permONE, 0.0 ), t ).z;
float3 grad100 = samplerPermTex(float2( perm10, pi.z )).xyz * 4.0 - 1.0;
float n100 = dot( grad100, pf - float3( 1.0, 0.0, 0.0 ));
float3 grad101 = samplerPermTex(float2( perm10, pi.z + permONE )).xyz * 4.0 - 1.0;
float n101 = dot( grad101, pf - float3( 1.0, 0.0, 1.0 ));
// Noise contributions from (x=1, y=1), z=0 and z=1
float perm11 = rnm( pi.xy + float2( permONE, permONE ), t ).w ;
float perm11 = rnm( pi.xy + float2( permONE, permONE ), t ).w;
float3 grad110 = samplerPermTex(float2( perm11, pi.z )).xyz * 4.0 - 1.0;
float n110 = dot( grad110, pf - float3( 1.0, 1.0, 0.0 ));
float3 grad111 = samplerPermTex(float2( perm11, pi.z + permONE )).xyz * 4.0 - 1.0;
@@ -233,11 +235,11 @@ float3 doGrain(float3 color, float2 texcoord,
float grainIntLow,
float grainDensity)
{
float timer = timers.x % 1000.0f;
float timer = timers.x % 1000.0f;
float2 uv = texcoord.xy * float2( screen_res.x, screen_res.y );
float3 noise = pnoise3D( float3( uv.xy, 1 ), timer, grainSize );
noise.y = pnoise3D( float3( uv.xy, 2 ), timer, grainSize );
noise.z = pnoise3D( float3( uv.xy, 3 ), timer, grainSize );
noise.z = pnoise3D( float3( uv.xy, 3 ), timer, grainSize );
// Old, practically does the same as grainAmount below
// Added back on request
@@ -255,11 +257,31 @@ float3 doGrain(float3 color, float2 texcoord,
color.xyz = lerp( color.xyz, color.xyz + ( noise.xyz ), grainAmount );
return float3( color.xyz );
}
float3 Grain1(float3 color, float2 texcoord)
{
float grainSize=3.0;
float grainAmount=0.500000;
float grainIntensity=0.300000;
float grainColor=0.000000;
float grainIntHigh=0.000000;
float grainIntLow=0.500000;
float grainDensity=10.000000;
return doGrain(color, texcoord,
grainSize,
grainAmount,
grainIntensity,
grainColor,
grainIntHigh,
grainIntLow,
grainDensity);
}
float3 Grain2(float3 color, float2 texcoord)
{
float grainSize = 2.0;
float grainAmount=0.023000 * 0.00004;
float grainSize=2.0;
float grainAmount=0.4;
float grainIntensity=1.000000;
float grainColor=0.000000;
float grainIntHigh=0.000000;
@@ -275,25 +297,3 @@ float3 Grain2(float3 color, float2 texcoord)
grainIntLow,
grainDensity);
}
//////////////////////////////////////////////////////////////////////////////////////
float3 Grain1(float3 color, float2 texcoord)
{
float grainSize=1.0;
float grainAmount=0.500000;
float grainIntensity=0.300000;
float grainColor=0.000000;
float grainIntHigh=0.000000;
float grainIntLow=0.500000;
float grainDensity=10.000000;
return doGrain(color, texcoord,
grainSize,
grainAmount,
grainIntensity,
grainColor,
grainIntHigh,
grainIntLow,
grainDensity);
}
+7 -7
View File
@@ -1,12 +1,12 @@
[General]
gameName=stalkeranomaly
modid=0
version=d2024.12.3.0
version=d2025.1.15.0
newestVersion=
category="-1,"
nexusFileStatus=1
installationFile=shader-3d-scopes.24.zip
repository=
installationFile=shader-3d-scopes.29.zip
repository=Nexus
ignoredVersion=
comments=
notes=
@@ -22,11 +22,11 @@ validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[Plugins]
BAIN%20Installer\option0=DOF effect (optional)
BAIN%20Installer\option1=Main
[installedFiles]
1\modid=0
size=1
1\fileid=0
[Plugins]
BAIN%20Installer\option0=DOF effect (optional)
BAIN%20Installer\option1=Main