From f46f8e515d8aedf11be2d3d050fa036d7019aa37 Mon Sep 17 00:00:00 2001 From: hunterk Date: Mon, 23 Sep 2019 12:45:24 -0500 Subject: [PATCH] update crt-royale-kurozumi preset --- presets/crt-royale-kurozumi.slangp | 510 +++++++++--------- .../shaders/LUT/Kurozumi_64_D65_Rec601.png | Bin 0 -> 48462 bytes 2 files changed, 258 insertions(+), 252 deletions(-) create mode 100644 reshade/shaders/LUT/Kurozumi_64_D65_Rec601.png diff --git a/presets/crt-royale-kurozumi.slangp b/presets/crt-royale-kurozumi.slangp index 32779a7..ca9627a 100755 --- a/presets/crt-royale-kurozumi.slangp +++ b/presets/crt-royale-kurozumi.slangp @@ -1,252 +1,258 @@ -# IMPORTANT: -# Shader passes need to know details about the image in the mask_texture LUT -# files, so set the following constants in user-cgp-constants.h accordingly: -# 1.) mask_triads_per_tile = (number of horizontal triads in mask texture LUT's) -# 2.) mask_texture_small_size = (texture size of mask*texture_small LUT's) -# 3.) mask_texture_large_size = (texture size of mask*texture_large LUT's) -# 4.) mask_grille_avg_color = (avg. brightness of mask_grille_texture* LUT's, in [0, 1]) -# 5.) mask_slot_avg_color = (avg. brightness of mask_slot_texture* LUT's, in [0, 1]) -# 6.) mask_shadow_avg_color = (avg. brightness of mask_shadow_texture* LUT's, in [0, 1]) -# Shader passes also need to know certain scales set in this .slangp, but their -# compilation model doesn't currently allow the .slangp file to tell them. Make -# sure to set the following constants in user-cgp-constants.h accordingly too: -# 1.) bloom_approx_scale_x = scale_x2 -# 2.) mask_resize_viewport_scale = float2(scale_x6, scale_y5) -# Finally, shader passes need to know the value of geom_max_aspect_ratio used to -# calculate scale_y5 (among other values): -# 1.) geom_max_aspect_ratio = (geom_max_aspect_ratio used to calculate scale_y5) - -shaders = "12" - -# Set an identifier, filename, and sampling traits for the phosphor mask texture. -# Load an aperture grille, slot mask, and an EDP shadow mask, and load a small -# non-mipmapped version and a large mipmapped version. -# TODO: Test masks in other directories. -textures = "mask_grille_texture_small;mask_grille_texture_large;mask_slot_texture_small;mask_slot_texture_large;mask_shadow_texture_small;mask_shadow_texture_large" -mask_grille_texture_small = "../crt/shaders/crt-royale/TileableLinearApertureGrille15Wide8And5d5SpacingResizeTo64.png" -mask_grille_texture_large = "../crt/shaders/crt-royale/TileableLinearApertureGrille15Wide8And5d5Spacing.png" -mask_slot_texture_small = "../crt/shaders/crt-royale/TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacingResizeTo64.png" -mask_slot_texture_large = "../crt/shaders/crt-royale/TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacing.png" -mask_shadow_texture_small = "../crt/shaders/crt-royale/TileableLinearShadowMaskEDPResizeTo64.png" -mask_shadow_texture_large = "../crt/shaders/crt-royale/TileableLinearShadowMaskEDP.png" -mask_grille_texture_small_wrap_mode = "repeat" -mask_grille_texture_large_wrap_mode = "repeat" -mask_slot_texture_small_wrap_mode = "repeat" -mask_slot_texture_large_wrap_mode = "repeat" -mask_shadow_texture_small_wrap_mode = "repeat" -mask_shadow_texture_large_wrap_mode = "repeat" -mask_grille_texture_small_linear = "true" -mask_grille_texture_large_linear = "true" -mask_slot_texture_small_linear = "true" -mask_slot_texture_large_linear = "true" -mask_shadow_texture_small_linear = "true" -mask_shadow_texture_large_linear = "true" -mask_grille_texture_small_mipmap = "false" # Mipmapping causes artifacts with manually resized masks without tex2Dlod -mask_grille_texture_large_mipmap = "true" # Essential for hardware-resized masks -mask_slot_texture_small_mipmap = "false" # Mipmapping causes artifacts with manually resized masks without tex2Dlod -mask_slot_texture_large_mipmap = "true" # Essential for hardware-resized masks -mask_shadow_texture_small_mipmap = "false" # Mipmapping causes artifacts with manually resized masks without tex2Dlod -mask_shadow_texture_large_mipmap = "true" # Essential for hardware-resized masks - - -# Pass0: Linearize the input based on CRT gamma and bob interlaced fields. -# (Bobbing ensures we can immediately blur without getting artifacts.) -shader0 = "../crt/shaders/crt-royale/src/crt-royale-first-pass-linearize-crt-gamma-bob-fields.slang" -alias0 = "ORIG_LINEARIZED" -filter_linear0 = "false" -scale_type0 = "source" -scale0 = "1.0" -srgb_framebuffer0 = "true" - -# Pass1: Resample interlaced (and misconverged) scanlines vertically. -# Separating vertical/horizontal scanline sampling is faster: It lets us -# consider more scanlines while calculating weights for fewer pixels, and -# it reduces our samples from vertical*horizontal to vertical+horizontal. -# This has to come right after ORIG_LINEARIZED, because there's no -# "original_source" scale_type we can use later. -shader1 = "../crt/shaders/crt-royale/src/crt-royale-scanlines-vertical-interlacing.slang" -alias1 = "VERTICAL_SCANLINES" -filter_linear1 = "true" -scale_type_x1 = "source" -scale_x1 = "1.0" -scale_type_y1 = "viewport" -scale_y1 = "1.0" -#float_framebuffer1 = "true" -srgb_framebuffer1 = "true" - -# Pass2: Do a small resize blur of ORIG_LINEARIZED at an absolute size, and -# account for convergence offsets. We want to blur a predictable portion of the -# screen to match the phosphor bloom, and absolute scale works best for -# reliable results with a fixed-size bloom. Picking a scale is tricky: -# a.) 400x300 is a good compromise for the "fake-bloom" version: It's low enough -# to blur high-res/interlaced sources but high enough that resampling -# doesn't smear low-res sources too much. -# b.) 320x240 works well for the "real bloom" version: It's 1-1.5% faster, and -# the only noticeable visual difference is a larger halation spread (which -# may be a good thing for people who like to crank it up). -# Note the 4:3 aspect ratio assumes the input has cropped geom_overscan (so it's -# *intended* for an ~4:3 aspect ratio). -shader2 = "../crt/shaders/crt-royale/src/crt-royale-bloom-approx.slang" -alias2 = "BLOOM_APPROX" -filter_linear2 = "true" -scale_type2 = "absolute" -scale_x2 = "320" -scale_y2 = "240" -srgb_framebuffer2 = "true" - -# Pass3: Vertically blur the input for halation and refractive diffusion. -# Base this on BLOOM_APPROX: This blur should be small and fast, and blurring -# a constant portion of the screen is probably physically correct if the -# viewport resolution is proportional to the simulated CRT size. -shader3 = "../blurs/blur5fast-vertical.slang" -filter_linear3 = "true" -scale_type3 = "source" -scale3 = "1.0" -srgb_framebuffer3 = "true" - -# Pass4: Horizontally blur the input for halation and refractive diffusion. -# Note: Using a one-pass 9x9 blur is about 1% slower. -shader4 = "../blurs/blur5fast-horizontal.slang" -alias4 = "HALATION_BLUR" -filter_linear4 = "true" -scale_type4 = "source" -scale4 = "1.0" -srgb_framebuffer4 = "true" - -# Pass5: Lanczos-resize the phosphor mask vertically. Set the absolute -# scale_x5 == mask_texture_small_size.x (see IMPORTANT above). Larger scales -# will blur, and smaller scales could get nasty. The vertical size must be -# based on the viewport size and calculated carefully to avoid artifacts later. -# First calculate the minimum number of mask tiles we need to draw. -# Since curvature is computed after the scanline masking pass: -# num_resized_mask_tiles = 2.0; -# If curvature were computed in the scanline masking pass (it's not): -# max_mask_texel_border = ~3.0 * (1/3.0 + 4.0*sqrt(2.0) + 0.5 + 1.0); -# max_mask_tile_border = max_mask_texel_border/ -# (min_resized_phosphor_triad_size * mask_triads_per_tile); -# num_resized_mask_tiles = max(2.0, 1.0 + max_mask_tile_border * 2.0); -# At typical values (triad_size >= 2.0, mask_triads_per_tile == 8): -# num_resized_mask_tiles = ~3.8 -# Triad sizes are given in horizontal terms, so we need geom_max_aspect_ratio -# to relate them to vertical resolution. The widest we expect is: -# geom_max_aspect_ratio = 4.0/3.0 # Note: Shader passes need to know this! -# The fewer triads we tile across the screen, the larger each triad will be as a -# fraction of the viewport size, and the larger scale_y5 must be to draw a full -# num_resized_mask_tiles. Therefore, we must decide the smallest number of -# triads we'll guarantee can be displayed on screen. We'll set this according -# to 3-pixel triads at 768p resolution (the lowest anyone's likely to use): -# min_allowed_viewport_triads = 768.0*geom_max_aspect_ratio / 3.0 = 341.333333 -# Now calculate the viewport scale that ensures we can draw resized_mask_tiles: -# min_scale_x = resized_mask_tiles * mask_triads_per_tile / -# min_allowed_viewport_triads -# scale_y5 = geom_max_aspect_ratio * min_scale_x -# # Some code might depend on equal scales: -# scale_x6 = scale_y5 -# Given our default geom_max_aspect_ratio and min_allowed_viewport_triads: -# scale_y5 = 4.0/3.0 * 2.0/(341.33333 / 8.0) = 0.0625 -# IMPORTANT: The scales MUST be calculated in this way. If you wish to change -# geom_max_aspect_ratio, update that constant in user-cgp-constants.h! -shader5 = "../crt/shaders/crt-royale/src/crt-royale-mask-resize-vertical.slang" -filter_linear5 = "true" -scale_type_x5 = "absolute" -scale_x5 = "64" -scale_type_y5 = "viewport" -scale_y5 = "0.0625" # Safe for >= 341.333 horizontal triads at viewport size -#srgb_framebuffer5 = "false" # mask_texture is already assumed linear - -# Pass6: Lanczos-resize the phosphor mask horizontally. scale_x6 = scale_y5. -# TODO: Check again if the shaders actually require equal scales. -shader6 = "../crt/shaders/crt-royale/src/crt-royale-mask-resize-horizontal.slang" -alias6 = "MASK_RESIZE" -filter_linear6 = "false" -scale_type_x6 = "viewport" -scale_x6 = "0.0625" -scale_type_y6 = "source" -scale_y6 = "1.0" -#srgb_framebuffer6 = "false" # mask_texture is already assumed linear - -# Pass7: Resample (misconverged) scanlines horizontally, apply halation, and -# apply the phosphor mask. -shader7 = "../crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang" -alias7 = "MASKED_SCANLINES" -filter_linear7 = "true" # This could just as easily be nearest neighbor. -scale_type7 = "viewport" -scale7 = "1.0" -#float_framebuffer7 = "true" -srgb_framebuffer7 = "true" - -# Pass 8: Compute a brightpass. This will require reading the final mask. -shader8 = "../crt/shaders/crt-royale/src/crt-royale-brightpass.slang" -alias8 = "BRIGHTPASS" -filter_linear8 = "true" # This could just as easily be nearest neighbor. -scale_type8 = "viewport" -scale8 = "1.0" -srgb_framebuffer8 = "true" - -# Pass 9: Blur the brightpass vertically -shader9 = "../crt/shaders/crt-royale/src/crt-royale-bloom-vertical.slang" -filter_linear9 = "true" # This could just as easily be nearest neighbor. -scale_type9 = "source" -scale9 = "1.0" -srgb_framebuffer9 = "true" - -# Pass 10: Blur the brightpass horizontally and combine it with the dimpass: -shader10 = "../crt/shaders/crt-royale/src/crt-royale-bloom-horizontal-reconstitute.slang" -filter_linear10 = "true" -scale_type10 = "source" -scale10 = "1.0" -srgb_framebuffer10 = "true" - -# Pass 11: Compute curvature/AA: -shader11 = "../crt/shaders/crt-royale/src/crt-royale-geometry-aa-last-pass.slang" -filter_linear11 = "true" -scale_type11 = "viewport" -mipmap_input11 = "true" -texture_wrap_mode11 = "clamp_to_edge" - -parameters = "crt_gamma;lcd_gamma;levels_contrast;halation_weight;diffusion_weight;bloom_underestimate_levels;bloom_excess;beam_min_sigma;beam_max_sigma;beam_spot_power;beam_min_shape;beam_max_shape;beam_shape_power;beam_horiz_filter;beam_horiz_sigma;beam_horiz_linear_rgb_weight;convergence_offset_x_r;convergence_offset_x_g;convergence_offset_x_b;convergence_offset_y_r;convergence_offset_y_g;convergence_offset_y_b;mask_type;mask_sample_mode_desired;mask_specify_num_triads;mask_triad_size_desired;mask_num_triads_desired;aa_subpixel_r_offset_x_runtime;aa_subpixel_r_offset_y_runtime;aa_cubic_c;aa_gauss_sigma;geom_mode_runtime;geom_radius;geom_view_dist;geom_tilt_angle_x;geom_tilt_angle_y;geom_aspect_ratio_x;geom_aspect_ratio_y;geom_overscan_x;geom_overscan_y;border_size;border_darkness;border_compress;interlace_bff;interlace_1080i" -crt_gamma = "2.400000" -lcd_gamma = "2.400000" -levels_contrast = "0.740000" -halation_weight = "0.004600" -diffusion_weight = "0.001000" -bloom_underestimate_levels = "0.800000" -bloom_excess = "0.000000" -beam_min_sigma = "0.020000" -beam_max_sigma = "0.200000" -beam_spot_power = "0.370000" -beam_min_shape = "2.000000" -beam_max_shape = "4.000000" -beam_shape_power = "0.250000" -beam_horiz_filter = "0.000000" -beam_horiz_sigma = "0.545000" -beam_horiz_linear_rgb_weight = "1.000000" -convergence_offset_x_r = "-0.050000" -convergence_offset_x_g = "0.000000" -convergence_offset_x_b = "0.000000" -convergence_offset_y_r = "0.100000" -convergence_offset_y_g = "-0.050000" -convergence_offset_y_b = "0.100000" -mask_type = "0.000000" -mask_sample_mode_desired = "0.000000" -mask_specify_num_triads = "0.000000" -mask_triad_size_desired = "1.000000" -mask_num_triads_desired = "900.000000" -aa_subpixel_r_offset_x_runtime = "-0.333333" -aa_subpixel_r_offset_y_runtime = "0.000000" -aa_cubic_c = "0.500000" -aa_gauss_sigma = "0.500000" -geom_mode_runtime = "0.000000" -geom_radius = "3.000000" -geom_view_dist = "2.000000" -geom_tilt_angle_x = "0.000000" -geom_tilt_angle_y = "0.000000" -geom_aspect_ratio_x = "432.000000" -geom_aspect_ratio_y = "329.000000" -geom_overscan_x = "1.000000" -geom_overscan_y = "1.000000" -border_size = "0.005000" -border_darkness = "0.000000" -border_compress = "2.500000" -interlace_bff = "0.000000" -interlace_1080i = "0.000000" +# IMPORTANT: +# Shader passes need to know details about the image in the mask_texture LUT +# files, so set the following constants in user-cgp-constants.h accordingly: +# 1.) mask_triads_per_tile = (number of horizontal triads in mask texture LUT's) +# 2.) mask_texture_small_size = (texture size of mask*texture_small LUT's) +# 3.) mask_texture_large_size = (texture size of mask*texture_large LUT's) +# 4.) mask_grille_avg_color = (avg. brightness of mask_grille_texture* LUT's, in [0, 1]) +# 5.) mask_slot_avg_color = (avg. brightness of mask_slot_texture* LUT's, in [0, 1]) +# 6.) mask_shadow_avg_color = (avg. brightness of mask_shadow_texture* LUT's, in [0, 1]) +# Shader passes also need to know certain scales set in this .slangp, but their +# compilation model doesn't currently allow the .slangp file to tell them. Make +# sure to set the following constants in user-cgp-constants.h accordingly too: +# 1.) bloom_approx_scale_x = scale_x2 +# 2.) mask_resize_viewport_scale = float2(scale_x6, scale_y5) +# Finally, shader passes need to know the value of geom_max_aspect_ratio used to +# calculate scale_y6 (among other values): +# 1.) geom_max_aspect_ratio = (geom_max_aspect_ratio used to calculate scale_y5) + +shaders = "13" + +# Set an identifier, filename, and sampling traits for the phosphor mask texture. +# Load an aperture grille, slot mask, and an EDP shadow mask, and load a small +# non-mipmapped version and a large mipmapped version. +# TODO: Test masks in other directories. +textures = "mask_grille_texture_small;mask_grille_texture_large;mask_slot_texture_small;mask_slot_texture_large;mask_shadow_texture_small;mask_shadow_texture_large;SamplerLUT" +mask_grille_texture_small = "../crt/shaders/crt-royale/TileableLinearApertureGrille15Wide8And5d5SpacingResizeTo64.png" +mask_grille_texture_large = "../crt/shaders/crt-royale/TileableLinearApertureGrille15Wide8And5d5Spacing.png" +mask_slot_texture_small = "../crt/shaders/crt-royale/TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacingResizeTo64.png" +mask_slot_texture_large = "../crt/shaders/crt-royale/TileableLinearSlotMaskTall15Wide9And4d5Horizontal9d14VerticalSpacing.png" +mask_shadow_texture_small = "../crt/shaders/crt-royale/TileableLinearShadowMaskEDPResizeTo64.png" +mask_shadow_texture_large = "../crt/shaders/crt-royale/TileableLinearShadowMaskEDP.png" +mask_grille_texture_small_wrap_mode = "repeat" +mask_grille_texture_large_wrap_mode = "repeat" +mask_slot_texture_small_wrap_mode = "repeat" +mask_slot_texture_large_wrap_mode = "repeat" +mask_shadow_texture_small_wrap_mode = "repeat" +mask_shadow_texture_large_wrap_mode = "repeat" +mask_grille_texture_small_linear = "true" +mask_grille_texture_large_linear = "true" +mask_slot_texture_small_linear = "true" +mask_slot_texture_large_linear = "true" +mask_shadow_texture_small_linear = "true" +mask_shadow_texture_large_linear = "true" +mask_grille_texture_small_mipmap = "false" # Mipmapping causes artifacts with manually resized masks without tex2Dlod +mask_grille_texture_large_mipmap = "true" # Essential for hardware-resized masks +mask_slot_texture_small_mipmap = "false" # Mipmapping causes artifacts with manually resized masks without tex2Dlod +mask_slot_texture_large_mipmap = "true" # Essential for hardware-resized masks +mask_shadow_texture_small_mipmap = "false" # Mipmapping causes artifacts with manually resized masks without tex2Dlod +mask_shadow_texture_large_mipmap = "true" # Essential for hardware-resized masks +SamplerLUT = "../reshade/shaders/LUT/Kurozumi_64_D65_Rec601.png" +SamplerLUT_linear = true + +# Pass0: LUT to correct screen colors. +# Digital Displays different color coordinates for primaries than CRTs (Rec709 vs Rec601). +shader0 = "../reshade/shaders/LUT/LUT.slang" + +# Pass1: Linearize the input based on CRT gamma and bob interlaced fields. +# (Bobbing ensures we can immediately blur without getting artifacts.) +shader1 = "../crt/shaders/crt-royale/src/crt-royale-first-pass-linearize-crt-gamma-bob-fields.slang" +alias1 = "ORIG_LINEARIZED" +filter_linear1 = "false" +scale_type1 = "source" +scale1 = "1.0" +srgb_framebuffer1 = "true" + +# Pass2: Resample interlaced (and misconverged) scanlines vertically. +# Separating vertical/horizontal scanline sampling is faster: It lets us +# consider more scanlines while calculating weights for fewer pixels, and +# it reduces our samples from vertical*horizontal to vertical+horizontal. +# This has to come right after ORIG_LINEARIZED, because there's no +# "original_source" scale_type we can use later. +shader2 = "../crt/shaders/crt-royale/src/crt-royale-scanlines-vertical-interlacing.slang" +alias2 = "VERTICAL_SCANLINES" +filter_linear2 = "true" +scale_type_x2 = "source" +scale_x2 = "1.0" +scale_type_y2 = "viewport" +scale_y2 = "1.0" +#float_framebuffer2 = "true" +srgb_framebuffer2 = "true" + +# Pass3: Do a small resize blur of ORIG_LINEARIZED at an absolute size, and +# account for convergence offsets. We want to blur a predictable portion of the +# screen to match the phosphor bloom, and absolute scale works best for +# reliable results with a fixed-size bloom. Picking a scale is tricky: +# a.) 400x300 is a good compromise for the "fake-bloom" version: It's low enough +# to blur high-res/interlaced sources but high enough that resampling +# doesn't smear low-res sources too much. +# b.) 320x240 works well for the "real bloom" version: It's 1-1.5% faster, and +# the only noticeable visual difference is a larger halation spread (which +# may be a good thing for people who like to crank it up). +# Note the 4:4 aspect ratio assumes the input has cropped geom_overscan (so it's +# *intended* for an ~4:4 aspect ratio). +shader3 = "../crt/shaders/crt-royale/src/crt-royale-bloom-approx.slang" +alias3 = "BLOOM_APPROX" +filter_linear3 = "true" +scale_type3 = "absolute" +scale_x3 = "320" +scale_y3 = "240" +srgb_framebuffer3 = "true" + +# Pass4: Vertically blur the input for halation and refractive diffusion. +# Base this on BLOOM_APPROX: This blur should be small and fast, and blurring +# a constant portion of the screen is probably physically correct if the +# viewport resolution is proportional to the simulated CRT size. +shader4 = "../blurs/blur5fast-vertical.slang" +filter_linear4 = "true" +scale_type4 = "source" +scale4 = "1.0" +srgb_framebuffer4 = "true" + +# Pass5: Horizontally blur the input for halation and refractive diffusion. +# Note: Using a one-pass 9x10 blur is about 1% slower. +shader5 = "../blurs/blur5fast-horizontal.slang" +alias5 = "HALATION_BLUR" +filter_linear5 = "true" +scale_type5 = "source" +scale5 = "1.0" +srgb_framebuffer5 = "true" + +# Pass6: Lanczos-resize the phosphor mask vertically. Set the absolute +# scale_x5 == mask_texture_small_size.x (see IMPORTANT above). Larger scales +# will blur, and smaller scales could get nasty. The vertical size must be +# based on the viewport size and calculated carefully to avoid artifacts later. +# First calculate the minimum number of mask tiles we need to draw. +# Since curvature is computed after the scanline masking pass: +# num_resized_mask_tiles = 2.0; +# If curvature were computed in the scanline masking pass (it's not): +# max_mask_texel_border = ~3.0 * (1/3.0 + 4.0*sqrt(2.0) + 0.6 + 1.0); +# max_mask_tile_border = max_mask_texel_border/ +# (min_resized_phosphor_triad_size * mask_triads_per_tile); +# num_resized_mask_tiles = max(2.0, 1.0 + max_mask_tile_border * 2.0); +# At typical values (triad_size >= 2.0, mask_triads_per_tile == 8): +# num_resized_mask_tiles = ~3.8 +# Triad sizes are given in horizontal terms, so we need geom_max_aspect_ratio +# to relate them to vertical resolution. The widest we expect is: +# geom_max_aspect_ratio = 4.0/3.0 # Note: Shader passes need to know this! +# The fewer triads we tile across the screen, the larger each triad will be as a +# fraction of the viewport size, and the larger scale_y6 must be to draw a full +# num_resized_mask_tiles. Therefore, we must decide the smallest number of +# triads we'll guarantee can be displayed on screen. We'll set this according +# to 3-pixel triads at 768p resolution (the lowest anyone's likely to use): +# min_allowed_viewport_triads = 768.0*geom_max_aspect_ratio / 3.0 = 341.333333 +# Now calculate the viewport scale that ensures we can draw resized_mask_tiles: +# min_scale_x = resized_mask_tiles * mask_triads_per_tile / +# min_allowed_viewport_triads +# scale_y6 = geom_max_aspect_ratio * min_scale_x +# # Some code might depend on equal scales: +# scale_x7 = scale_y5 +# Given our default geom_max_aspect_ratio and min_allowed_viewport_triads: +# scale_y6 = 4.0/3.0 * 2.0/(341.33334 / 8.0) = 0.0625 +# IMPORTANT: The scales MUST be calculated in this way. If you wish to change +# geom_max_aspect_ratio, update that constant in user-cgp-constants.h! +shader6 = "../crt/shaders/crt-royale/src/crt-royale-mask-resize-vertical.slang" +filter_linear6 = "true" +scale_type_x6 = "absolute" +scale_x6 = "64" +scale_type_y6 = "viewport" +scale_y6 = "0.0625" # Safe for >= 341.334 horizontal triads at viewport size +#srgb_framebuffer6 = "false" # mask_texture is already assumed linear + +# Pass7: Lanczos-resize the phosphor mask horizontally. scale_x7 = scale_y5. +# TODO: Check again if the shaders actually require equal scales. +shader7 = "../crt/shaders/crt-royale/src/crt-royale-mask-resize-horizontal.slang" +alias7 = "MASK_RESIZE" +filter_linear7 = "false" +scale_type_x7 = "viewport" +scale_x7 = "0.0625" +scale_type_y7 = "source" +scale_y7 = "1.0" +#srgb_framebuffer7 = "false" # mask_texture is already assumed linear + +# Pass8: Resample (misconverged) scanlines horizontally, apply halation, and +# apply the phosphor mask. +shader8 = "../crt/shaders/crt-royale/src/crt-royale-scanlines-horizontal-apply-mask.slang" +alias8 = "MASKED_SCANLINES" +filter_linear8 = "true" # This could just as easily be nearest neighbor. +scale_type8 = "viewport" +scale8 = "1.0" +#float_framebuffer8 = "true" +srgb_framebuffer8 = "true" + +# Pass 9: Compute a brightpass. This will require reading the final mask. +shader9 = "../crt/shaders/crt-royale/src/crt-royale-brightpass.slang" +alias9 = "BRIGHTPASS" +filter_linear9 = "true" # This could just as easily be nearest neighbor. +scale_type9 = "viewport" +scale9 = "1.0" +srgb_framebuffer9 = "true" + +# Pass 10: Blur the brightpass vertically +shader10 = "../crt/shaders/crt-royale/src/crt-royale-bloom-vertical.slang" +filter_linear10 = "true" # This could just as easily be nearest neighbor. +scale_type10 = "source" +scale10 = "1.0" +srgb_framebuffer10 = "true" + +# Pass 11: Blur the brightpass horizontally and combine it with the dimpass: +shader11 = "../crt/shaders/crt-royale/src/crt-royale-bloom-horizontal-reconstitute.slang" +filter_linear11 = "true" +scale_type11 = "source" +scale11 = "1.0" +srgb_framebuffer11 = "true" + +# Pass 12: Compute curvature/AA: +shader12 = "../crt/shaders/crt-royale/src/crt-royale-last-pass-no-geom.slang" +filter_linear12 = "true" +scale_type12 = "viewport" +mipmap_input12 = "true" +texture_wrap_mode12 = "clamp_to_edge" + +parameters = "crt_gamma;lcd_gamma;levels_contrast;halation_weight;diffusion_weight;bloom_underestimate_levels;bloom_excess;beam_min_sigma;beam_max_sigma;beam_spot_power;beam_min_shape;beam_max_shape;beam_shape_power;beam_horiz_filter;beam_horiz_sigma;beam_horiz_linear_rgb_weight;convergence_offset_x_r;convergence_offset_x_g;convergence_offset_x_b;convergence_offset_y_r;convergence_offset_y_g;convergence_offset_y_b;mask_type;mask_sample_mode_desired;mask_specify_num_triads;mask_triad_size_desired;mask_num_triads_desired;aa_subpixel_r_offset_x_runtime;aa_subpixel_r_offset_y_runtime;aa_cubic_c;aa_gauss_sigma;geom_mode_runtime;geom_radius;geom_view_dist;geom_tilt_angle_x;geom_tilt_angle_y;geom_aspect_ratio_x;geom_aspect_ratio_y;geom_overscan_x;geom_overscan_y;border_size;border_darkness;border_compress;interlace_bff;interlace_1080i;LUT_Size" +crt_gamma = "2.400000" +lcd_gamma = "2.400000" +levels_contrast = "0.740000" +halation_weight = "0.004400" +diffusion_weight = "0.001200" +bloom_underestimate_levels = "0.800000" +bloom_excess = "0.010000" +beam_min_sigma = "0.020000" +beam_max_sigma = "0.160000" +beam_spot_power = "0.380000" +beam_min_shape = "2.000000" +beam_max_shape = "4.000000" +beam_shape_power = "0.250000" +beam_horiz_filter = "1.000000" +beam_horiz_sigma = "0.320000" +beam_horiz_linear_rgb_weight = "1.000000" +convergence_offset_x_r = "-0.050000" +convergence_offset_x_g = "0.000000" +convergence_offset_x_b = "0.000000" +convergence_offset_y_r = "0.050000" +convergence_offset_y_g = "-0.050000" +convergence_offset_y_b = "0.050000" +mask_type = "0.000000" +mask_sample_mode_desired = "0.000000" +mask_specify_num_triads = "0.000000" +mask_triad_size_desired = "1.000000" +mask_num_triads_desired = "900.000000" +aa_subpixel_r_offset_x_runtime = "-0.333333" +aa_subpixel_r_offset_y_runtime = "0.000000" +aa_cubic_c = "0.500000" +aa_gauss_sigma = "0.500000" +geom_mode_runtime = "0.000000" +geom_radius = "3.000000" +geom_view_dist = "2.000000" +geom_tilt_angle_x = "0.000000" +geom_tilt_angle_y = "0.000000" +geom_aspect_ratio_x = "432.000000" +geom_aspect_ratio_y = "329.000000" +geom_overscan_x = "1.000000" +geom_overscan_y = "1.000000" +border_size = "0.005000" +border_darkness = "0.000000" +border_compress = "2.500000" +interlace_bff = "0.000000" +interlace_1080i = "0.000000" +LUT_Size = "64.0" diff --git a/reshade/shaders/LUT/Kurozumi_64_D65_Rec601.png b/reshade/shaders/LUT/Kurozumi_64_D65_Rec601.png new file mode 100644 index 0000000000000000000000000000000000000000..acd68b06c3700ad23a7569085877b120c266d961 GIT binary patch literal 48462 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 UJ3hF#pzG(6wxQPdhqh7w1N9nb_5c6? literal 0 HcmV?d00001