Skip to content

User Guide

Acerola edited this page Sep 12, 2023 · 24 revisions

Welcome to the AcerolaFX user guide! Here you will find a detailed description of each effect and what each setting does.

If you are unfamiliar with ReShade, you can customize shader effect options by bringing up the overlay and messing with the numbers in the bottom left.

GShade

Many of the AcerolaFX options are boxes that can be clicked and dragged to smoothly change values. You can double click these boxes to input a specific number if you want, and you can right click the box to reset the value back to its default which is very useful for quickly comparing different values. Additionally, you can click and drag the shader effects themselves around to change the order in which they execute (order matters) or enable/disable effects to your liking.

AcerolaFX Basics

The AcerolaFX shaders operate on an injected HDR buffer which lies inbetween the ReShade buffer and the AcerolaFX shaders, this is why the shaders are incompatible with ReShade effects written by other authors because they write to different output textures. This limitation means that all AcerolaFX shaders must go inbetween the AcerolaFXStart effect and the AcerolaFXEnd effect, as these shaders are responsible for inputting and outputting the proper buffers. The tradeoff is a completely legitimate HDR pipeline in which high dynamic range pixel values are genuinely preserved between shader passes and not faked like with other ReShade effects.

With AcerolaFX, every single effect is completely modular and can be combined in different ways to create different render pipelines. Many effects can be optionally cloned and reused to further stylize or make advanced combinations.

An example AcerolaFX pipeline looks like so:
pipeline1

This pipeline will apply fog, then color correct, and then gamma correct. This pipeline is optionally LDR, if you disable HDR for the color corrector. You can see the result of this pipeline here.

A more advanced pipeline looks like so:
pipeline2

This pipeline applies ambient occlusion, fog, bloom, a blend factor, color correction in HDR, auto exposure and tone mapping to bring the colors back to LDR, color correction in LDR, another blend factor, adaptive sharpness, depth of field, a dither to reduce the color palette, another color correction for the dither, then 2 sharpness passes to accentuate dithered pixel borders, then gamma correction to darken shadows. You can see the result of this pipeline here. This is over stylized for the sake of demonstration, but I hope it shows the power of AcerolaFX.

Continue reading for a description of each effect!

AcerolaFXStart

This indicates the start of AcerolaFX shaders, it transfers the contents of the image into the buffer between the game and AcerolaFX shaders so that AcerolaFX shaders can work.

Fog

This is simple depth based fog which can be used to convey distance or tint distant objects. Fog is not recommended for gameplay as the fog color will not be realistic or good looking in all cases, but can make gpose shots look much nicer.

Variables

Fog Color: This is the color of the fog

Fog Factor Mode: This is the method by which fog is calculated

  • Exp: Calculates the fog with a soft curve and never reaches full opacity.
  • Exp2: Calculates the fog with a harsh curve and reaches full opacity if dense enough.

Fog Density: The density of the fog. Lower the value to reduce the strength of the fog or increase to max to create interesting flat colors in the distance.

Fog Offset: Offsets the point at which fog becomes applied, if you want the fog to be further out then increase this.

Advanced Settings

Camera Z Projection: This value represents the maximum depth of the camera and will visibly change fog depth.

Bloom

Bloom is a cinematic effect for simulating light overwhelming the camera. Bright pixels are isolated, blurred, and then added back to the screen to accentuate lights and other highlights. Bloom is not recommended for gameplay since the game already has bloom, additionally it's very difficult to find settings that look good for general gameplay without producing tons of artifacts. Keep it for gpose!

Variables

Threshold: The luminance threshold for pixels to be considered bright enough to be bloomed. A higher value means pixels must be very bright to be bloomed.

Soft Threshold: The soft threshold for the luminance curve, a higher value softens the threshold and allows more pixels through the pre-filtering.

Intensity: The brightness of the bloomed areas.

Advanced Settings

Use Karis Average: The karis average is a luminance weighted sum, meaning that really bright pixels will be suppressed when calculating bloom. This prevents isolated, extremely bright pixels from flickering and causing ugly popping bloom artifacts.

Luminance Bias: The bias for the karis average, the higher the bias the more brighter pixels are suppressed.

Down Sample Delta: The offset for pixel coordinates when down sampling the bloom render during blurring, extreme values may result in interesting effects.

Up Sample Delta: The offset for pixel coordinates when up sampling the bloom render during blurring, extreme values may result in interesting effects.

Color Correction

A copy of the Color Correction effect allowing you to color correct and make modifications to the filtered bloom render before it is blended back into the screen. You may also change the method by which the bloom is blended similar to the Blend shader effect.

Preprocessor Directives

DEBUG_BLOOM: Set to 1 if you would like to see the bloom that is being applied to the screen.

NUM_DOWNSCALES: The amount of blurring done to the filtered bloom pixels, higher numbers will result in a blurrier bloom render up to a maximum of 8.

SAMPLE_SKY: Set to 1 to apply bloom to the skybox (sometimes looks bad because of color banding).

Blend

This shader emulates the functionality of photoshop layer blend modes such as Overlay. You can blend a flat color or the render with itself to accentuate highlights, shadows, or both to create contrast.

Variables

Blend Mode: The formula to be used when blending.

  • No Blend: Makes the effect do nothing.
  • Add: Linearly adds the color or render to itself to brighten the screen.
  • Multiply: Multiplies the color or render with itself to bring down darker colors.
  • Screen: Inversely multiplies the color or render with itself to bring up brighter colors.
  • Overlay: Applies Multiply to dark pixels and applies Screen to brighter pixels to accentuate contrast.
  • Hard Light: Like Overlay except a bit harsher.
  • Soft Light: Like Overlay except it is softer on brighter pixels so they do not get as bright.
  • Color Dodge: Very harshly brightens pixels to accentuate highlights.
  • Color Burn: Very harshly darkens pixels to accentuate shadows.
  • Vivid Light: Applies Color Dodge to dark pixels and Color Burn to light pixels to harshly accentuate contrast.
  • Acerola Light: A softer version of Vivid Light that crushes mid-tones.

Blend Strength: The strength of the blend, 0 means no blend, 1 means a full blend.

Blend Sky: Whether or not the sky should be included in the blending.

Blend Color: The color to be optionally blended with the image.

Use Color: Enable if you want to blend with the color defined above instead of the image.

Blend Texture: This is the texture that will be blended into, if enabled.

Texture Resolution: This will scale the texture up or down.

Use Texture: Enable if you want to blend on to a texture.

Preprocessor Directives

AFX_BLEND_COUNT: How many blend passes to clone. Max is 10. When increasing this value, a new Blend pass will appear at the bottom of the effects list that you will need to enable.

AFX_TEXTURE_HEIGHT: The height (in pixels) of the custom texture you are wanting to use.

AFX_TEXTURE_PATH: The filename of the texture you are wanting to use. This is relative to the search directories provided in your GShade settings. Please be aware that this macro definition must be the same across ALL instances of the Blend shader. This means that you are only allowed one custom blend texture per preset, due to this limitation.

AFX_TEXTURE_WIDTH: The width (in pixels) of the custom texture you are wanting to use.

Color Correction

This is a fully functional color corrector for correcting in HDR or LDR. Brighten, darken, saturate, filter, white balance, and accentuate colors in any way you want. Clone this effect to chain color corrections for desired results if needed.

Variables

HDR: Toggles whether pixels can exceed their traditional maximum of 1.0 allowing for a wider range of color representation and accuracy.

Exposure: Exposure is multiplied with the color to simulate the amount of light entering the camera.

Temperature: White balances the image to make colors warmer or cooler, negative values are cooler and positive values are warmer.

Tint: Tints the white balanced colors.

Contrast: Adjusts the gain (slope) of the color, each color channel can be adjusted. Set a color to 0 if you want it to be always equal to Linear Mid Point aka monochromatic.

Linear Mid Point: Adjusts the mid point of the contrast calculation, if the darkest pixel value is 0 and the brightest is 1, then the midpoint would be 0.5 or half the Exposure value.

Brightness: Adds or subtracts to the individual color channels to accentuate specific colors or brighten/darken the image.

Color Filter: This color is multiplied with every pixel to filter the image towards that color.

Color Filter Intensity: This value is multiplied with Color Filter to allow for HDR color filtering, this also doubles as a secondary Exposure in functionality.

Saturation: Adjusts the intensity of each color channel, 0 is desaturated and values that exceed 1 will result in more vibrant colors.

Preprocessor Directives

AFX_CORRECT_COUNT: How many color correct passes to clone. Max is 10. When increasing this value, a new Color Correct pass will appear at the bottom of the effects list that you will need to enable.

Gamma

The gamma effect applies gamma correction to the image. Gamma values between 0 and 1 will bring up dark colors while values greater than 1 will bring dark colors down.

Variables

Gamma: The amount of gamma correction to be applied.

Auto Exposure

Auto exposure is what makes the game playable in HDR, it prevents the screen from getting too bright or too dark and adjusts the exposure to compensate. Auto exposure works by generating a luminance histogram of the image and then calculating an average luminance from the histogram to use for exposure compensation. Low luminance averages will brighten and high luminance averages will darken.

Variables

Min Log Luminance: The minimum histogram luminance value. Lower values of this will result in darker auto exposure.

Max Log Luminance: The maximum histogram luminance value. Lower values of this will result in brighter auto exposure.

Advanced Settings

Tau: Controls how quickly the auto exposure adjusts to luminance changes.

Sensitivity Constant 1: Tthe first number in a ratio between itself and Sensitivity Constant 2. The greater the difference between these numbers, the darker the auto exposure.

Sensitivity Constant 2: Same as above

Calibration Constant: I'm not gonna lie I don't really know what this represents but higher values make the screen brighter and lower values make the screen darker.

Lens Attenuation: Represents how much the lens reduces light that enters the camera, higher values mean brighter images.

Tonemapping

Tonemapping is the conversion of HDR into LDR and is necessary in any HDR rendering pipeline. This conversion is achieved with several different tonemapping operators, all of which have different results.

Variables

Tonemapper: The tonemapping operator to use.

  • RGB Clamp: Clamps any value that exceeds 1 to 1 without any real tonemapping.
  • Hill ACES: The default filmic curve of Unreal Engine, used in many AAA games for its ease of use.
  • Narkowicz ACES: An approximation of the above curve which is much brighter and more saturated.
  • Reinhard Extended: A popular tonemapping operator that selectively color burns high value pixels based on a defined white point.
  • Hable: A completely customizable filmic tonemapping curve created by Naughty Dog for Uncharted 2.

Reinhard Extended

White Point: This represents the value of white in your HDR color space, it's okay to choose random values until you like one.

Hable

Shoulder Strength: The strength of the shoulder of the color curve, low strength will bring brighter colors down much more.

Linear Strength: The length of the linear section between the shoulder and toe. Lower values will have higher contrast.

Linear Angle: The slope of the linear section between the shoulder and toe.

Toe Strength: The strength of the toe of the color curve, low strength will be less oppressive on dark colors.

Toe Numerator: The numerator of the toe, the ratio of this with the Toe Denominator will control how the curve affects dark colors.

Toe Denominator: Same as above.

Linear White Point: The value of white in your HDR color space (e.g. if I make no corrections other than increasing exposure to 2 then white would now be 1 * 2 = 2).

Advanced Settings

Debug HDR: Enable this to view which pixels exceed 1.

XeGTAO

XeGTAO stands for Approximate Ground Truth Ambient Occlusion and is an approximation of legitimate ambient occlusion. It is currently the most modern screen space ambient occlusion approach based on Intel's open source version here. It works by comparing depths of neighboring pixels to try and guess how visible a pixel is in any given scene and assigning it an occlusion term to later darken the colors. This effect is not cheap performance wise but has been optimized as much as realistically possible so more people can use it.

Variables

SSAO Settings

Effect Radius: The radius of the hemisphere sampling, will increase the size of ambient occlusion.

Radius Multiplier: Multiplier constant for Effect Radius.

Falloff Range: The range at which ambient occlusion falls off depth wise, far away pixels are less affected by XeGTAO.

Sample Distribution Power: The power for noise values used for neighbor sampling, the higher the power the more crevices are detected by XeGTAO.

Thin Occluder Compensation: The compensation for thin objects in scenes that should be occluding pixels.

Slope Compensation: Slopes sometimes get darkened for no reason, this compensates for that.

Final Value Power: The exponent on the final occlusion term generated, a higher power results in darker ambient occlusion.

Blur Settings

SigmaD: The size of the bilateral filter kernel, also known as how many neighboring pixels are sampled for the blur. High values increase performance cost greatly.

SigmaR: How much the ambient occlusion is blurred, higher values blur more.

Preprocessor Directives

DEBUG_SSAO: Set to 1 if you want to see the ambient occlusion.

SLICE_COUNT: Number of noise slices to use during sampling. Higher values increase performance cost greatly up to a maximum of 9 which is max quality.

STEPS_PER_SLICE: The number of samples per slice of noise, Higher values increase performance cost greatly up to a maximum of 3 which is max quality.

Sharpness

Sharpness increases the contrast between pixels to give the illusion of higher detail. It's also very useful for accentuating features in general, especially when combined with Dithering and the Kuwahara Filter.

Variables

Filter Type: Which sharpness function to use.

  • Basic: The initial naive sharpness filter, causes lots of artifacts and will make things very crispy.
  • Adaptive: Contrast adaptive sharpness from AMD, sharpens the image without artifacts.

Sharpness: The amount of sharpness applied to the image, 0 is no sharpness, 1 is maximum sharpness.

Sharpness Falloff: Similar to Fog this depth filters the sharpness so that distant objects are not sharpened.

Falloff Offset: The distance at which sharpness begins to falloff.

Preprocessor Definitions

AFX_SHARPNESS_CLONE_COUNT: How many sharpness passes to clone. Max is 10. When increasing this value, a new Sharpness pass will appear at the bottom of the effects list that you will need to enable.

Bokeh Blur

Adjust the focus of the game camera to accentuate specific objects while simulating how an actual camera lens receives out of focus light. This effect does not play well with the UI, so turn it off.

Variables

Focal Plane: The distance of the focal plane from the camera, objects at this distance will be in focus.

Focus Range: The range of objects around that distance that will be in focus.

Tonemap Settings

Inverse Tonemap: Inverse tonemapping is a technique for making SDR (0-1) pixel values more like HDR values. This is which tonemapper to use for the inverse. I recommend Lottes.

Reverse Tonemap: Whether or not to reverse the inverse tonemapping at the end of the effect, don't enable if you plan to tonemap in the Tonemapping shader.

Exposure: Multiplier on the color value as well as a parameter for the inverse tonemappers.

Inverse Karis Average: An inverse of the luminance weighted Karis average to really accentuate bright pixels to get brighter highlights on out of focus shots.

Luminance Multiplier: An exponent on the weight of the inverted Karis average calculation.

Luminance Bias: The luminance bias for the Karis averaging.

Bokeh Settings

Aperture Shape: This is the shape of the camera aperture and will change the shape of the light blobs.

Rotation: Rotation of the aperture shape.

Sample Distance: This changes the distance between pixel samples while blurring as a multiplier of the kernel size. This parameter is also the only way to adjust the size of the circle aperture shape due to implementation limitations.

Near/Far Field Settings

The bokeh blur works by combining two blurred images, where one image is the pixels close to the camera and the other image is the pixels farther from the camera. These two images are referred to as the near and far field, and you can customize both of them to have different blur settings to achieve different visual effects. The settings are the same for both images.

Point Filter: Whether or not to point filter while sampling the color buffer during blurring. Enable this to get a sharper bokeh blur.

Kernel Size: Size of the blurring kernel, a larger size will result in a blurrier image.

Near Fill Size: Bokeh Blur effects suffer from undersampling, meaning there can be visible gaps in the blur kernel. To try and remedy this a max filter is applied to the output in order to fill in the gaps, this setting controls the size of the max filter.

Exposure: Simulates exposure, higher values will give a more characteristic bokeh blur while lower values will be a more traditional soft depth of field focusing.

Advanced Settings

Prevent Spillage: This is a method proposed in a paper to prevent intensity leakage or bright background pixels spilling on to foreground pixels. I don't find it to be that effective or meaningful, but the option is there to try out.

Near CoC Fill: When the near field is blended with the final output, to create a more convincing near field blur we additionally blur along the edge of the near field and then blend it with the output. This parameter controls the border size of the blur. You probably don't need to change this.

Near CoC Blur: This controls the strength of the blur described above. You probably don't need to change this.

Dither

Dithering is a form of selectively applied noise that reduces color banding and compresses the color palette of the image into a defined amount of allowed colors. Dithering is commonly used for pixel art or retro aesthetics.

Variables

Noise Mode: Which noise to dither with. Bayer noise is better for traditional color banding reduction, but does not do well with organic objects. Blue noise is better at dithering organic objects.

Bayer Level: The bayer matrix used to apply the noise.

Blue Noise Texture: Which blue noise texture to dither with.

Animate Noise: Cycle through the blue noise textures or the bayer levels to get a cool animation.

Animation Speed: Speed of the noise animation. 0 is 1 second per cycle.

Spread: The gradient spread of the color between allowed colors.

Red Color Count: The amount of allowed values in the red color channel. For example, if the amount is 2 then a color will either be 100% red or black.

Blue Color Count: The amount of allowed values in the blue color channel, see above for example.

Green Color Count: The amount of allowed values in the green color channel, see above for example.

This means that the amount of allowed colors in a dithered image is the product of the allowed values per channel. For example, if every count per channel is 2, then the number of colors is 2 * 2 * 2 = 8. Black, white, blue, red, green, yellow, purple, cyan.

Mask UI: Whether to dither the UI or not.

Preprocessor Directives

AFX_DITHER_DOWNSCALE: This controls how large the dithered pixels are by a factor of 2. A AFX_DITHER_DOWNSCALE of 0 will result in no downscaling since 2 ^ 0 = 1 while a AFX_DITHER_DOWNSCALE of 1 will double the size of the pixels.

CRT

This emulates the aesthetics of a CRT television. Inspired by Loop Hero's CRT effect.

Variables

Curvature: The amount by which the edges of the screen are curved.

Vignette Width: The width of the vignette at the edges of the screen.

Line Size: The size of the CRT lines.

Line Strength: How bright the CRT lines are, functions like exposure.

Brightness Adjust: Brightens or darkens the pixels to compensate for Line Strength.

Mask UI: Whether or not the UI is affected.

Composition

This shader effect is meant to help line up scene elements with certain fractions of the photo such as the rule of thirds.

Variables

Fraction: How many segments the render should be divided into.

Blur

This is a generic blurring effect, looks good when combined with Film Grain or applied before other stylized image effects like Dithering.

Variables

Blur Mode: What blur function to use.

  • Box: A box blur gives equal weight to every pixel in the blur radius when calculating the average.
  • Gaussian: A gaussian blur uses a gaussian function to give more weight to pixels close to the center of the blur radius when calculating the average, which preserves details more.

Blur Settings

Kernel Size: Radius of the blur.

Blur Strength: Strength of the blur when using the gaussian blur mode.

Preprocessor Definitions

AFX_BLUR_PASSES: How many times to blur the image, max of 5. If you for some reason need more just clone the effect.

Downscaler

This shader downscales the render and then upscales again, effectively lowering the resolution of the image.

Variables

Point Filter: Whether or not to point filter the render when upscaling, will make it look more pixelated.

Preprocessor Definitions

AFX_DOWNSCALE_FACTOR: Works the same as the Dither downscale preprocessor definition.

Edge Detect

Detects the edges of the image.

Variables

Edge Color: Color of the edges.

Alpha: The transparency of the edges.

Edge Mode: What to compare to decide what's an edge. Depth will only compare neighboring depth values, while Depth and Normals will also compare neighboring normal vectors.

Depth Threshold: When comparing neighboring depth values, how much of a difference is required to be considered an edge.

Normal Threshold: When comparing neighboring normals, how much of a difference is required to be considered an edge.

Depth Settings

Falloff: Works the same as Fog falloff.

Falloff Offset: Works the same as Fog falloff offset.

Film Grain

Simulates film grain to make images look like they were taken with a film camera. The process is similar to how you would do it in Photoshop, white noise is generated and blurred and then blended with the image.

Variables

Grain Intensity: Controls how intense the noise is.

Luminance Response: Real film grain is mostly applied to dark areas of an image, this setting will make the film grain less impactful on brighter areas of the image.

Animate: Whether or not to animate the noise.

Blur Settings

Gaussian Kernel Size: Radius of the gaussian blur.

Blur Strength: Strength of the blur.

Preprocessor Definitions

AFX_NOISE_DOWNSCALE_FACTOR: Works the same as the Dither downscale preprocessor definition.

Framing

A simple effect for adding a frame to the image, only rectangular frames are supported for now.

Variables

Frame Shape: What shape frame.

Frame Color: The color of the frame.

Alpha: The transparency of the frame.

Shape Dimensions: The width and height of the frame shape.

Invert: Invert the frame shape.

Position: The positional offset of the frame from the center of the screen.

Rotation: The rotation of the frame.

Depth Cutoff: Distance from the camera to apply the frame, useful for drawing your character or other objects on top of the frame.

Preprocessor Definitions

AFX_FRAME_COUNT: The number of frame shader clones. Works the same as the others.

Kuwahara Filter

The Kuwahara filter attempts to simplify the image and make it look more painterly. It's quite complicated so if you want to know how it works just watch my video on it.

Variables

Filter Type: Which version of the Kuwahara filter to use.

  • Basic: The first kuwahara filter, lots of artifacts and very blocky.
  • Generalized: Better edge preserving and less artifacts, still blocky.
  • Anisotropic: Kernel deforms to the directional information of the image, basically no artifacts. Radius: Kernel size of the Kuwahara filter. Sharpness: How defined the edge lines between color segments are.

Anisotropic Settings

Blur Radius: The anisotropic filter blurs the eigenvectors of the image to make it more cohesive, this controls the kernel size of the blur. Doesn't change much.

Alpha: Controls the eccentricity of the angle at which the kernel deforms to edge lines. A lower value means more defined edges, a higher value will make it look more like the generalized filter since the kernel can't deform as much.

Zero Crossing: Determines how much the sectors of the kuwahara filter overlap with each other when calculating standard deviation weights. Higher values will make the effect blurry.

Depth Settings

Depth Aware: Whether or not to depth filter the effect.

Sample Sky: Whether or not to Kuwahara filter the sky. Disable to preserve stars and stuff.

Min. Kernel Size: When Depth Aware is enabled, this is the effect radius that will be used for objects that are close to the camera. Useful for preserving features like character faces.

Depth Curve: Rate at which the kernel size increases as objects get farther away when Depth Aware is enabled.

Zoom

This shader effect allows you to zoom in and out from the center of the screen. It's very useful when combined with dithering.

Variables

Zoom: How much to zoom in or out. Smaller values zoom in, larger values zoom out.

Offset: The positional offset of the zoom from the center of the screen.

Point Filter: Controls if you want to point filter or not when sampling.

Sample Mode: This controls what happens to pixel coordinates that are outside the bounds of the image, only applicable when zooming out.

Difference Of Gaussians

The difference of gaussians is a very simple yet extremely powerful effect capable of stylizing high frequency details (aka edges) of an image. Depending on how you tune the parameters you can end up with visuals emulating charcoal, pencil, colored pencil, pastel, oil, cross hatching, or perhaps something I haven't even thought of yet.

Edge Tangent Flow Settings

The difference of gaussians optionally makes use of the directional information of the pixels of the image to only calculate the difference of gaussians across edge tangent lines, reducing the impact of noise on the image while accentuating "true" edge lines much better. These settings control how the edge tangent flow is created.

Use Flow: Whether or not to use the edge tangent flow.

Tangent Flow Deviation: How much the edge tangent flow map is blurred. A higher number will result in a smoother image while low values will make edge lines chunkier.

Line Integral Deviation: The flow difference of gaussians smooths edges by blurring along the edges of the image with something called line integral convolution. This controls how much blurring occurs.

Line Convolution Step Sizes: This controls how large the steps between line integral convolution samples are. Small step sizes will result in a more concise image, but larger values can result in more stylized and painterly visuals.

Calculate Difference Before Smoothing: By default, the difference of gaussians is calculated before line integral convolution smoothing, but if you'd like to smooth the individual gaussian terms themselves then disable this. It seems not to have much of an effect on ff14, but it made a huge difference on images I rendered in Unity so I might remove this.

Difference Of Gaussians Settings

These settings control the gaussian blurs that drive the main part of the effect.

Difference Of Gaussians Deviation: This controls the size of the gaussian kernel and how much blurring occurs, lower values will give higher detail pencil-like results while higher values will result in more stylized, muddy lines.

Deviation Scale: This setting controls the scale between the two gaussian blur standard deviations.

Sharpness: This setting accentuates edges.

Anti Aliasing Settings

This shader makes use of the edge tangent flow map to also smooth out edges and reduce aliasing with the same line integral convolution technique that the flow DoG utilizes.

Smooth Edges: Apply anti aliasing or not.

Edge Smooth Deviation: Controls how much the edges of the image are smoothed.

Edge Smoothing Step Sizes: Same as Line Convolution Step Sizes above.

Threshold Settings

The output of the difference of gaussians calculation itself is not stylized. The stylization happens here in the thresholding, where we decide what values will result in black, white, or somewhere inbetween.

Threshold Mode: The type of thresholding to apply.

  • No Thresholding: No thresholding will result in a visual change akin to Tone Mapping, this can be surprisingly effective.
  • Tanh: This makes use of the hyperbolic tangent function to create very high contrast visuals.
  • Quantization: This uses the same logic as the dithering shader to quantize the difference of gaussians output giving us very nice mid tones.
  • Soft Quantization: A version of Quantization that smoothsteps between the steps.

Quantizer Step: How many values are allowed when using the Quantization or Soft Quantization threshold modes.

White Point: Any value that is above the white point will be clamped to white. Has no effect on Soft Quantization.

Soft Threshold: This controls the strength of the Tanh curve, applies an exponent to the Quantization curve, and controls how smooth Soft Quantization appears.

Cross Hatch Settings

The difference of gaussians is capable of simulating cross hatching by layering several different thresholded outputs of the difference of gaussians calculation.

Use Hatching: Whether or not to use cross hatching.

Hatch Texture: Which texture to use for cross hatching, I have provided 3 for you but you can also use a custom one if you'd like.

Colored Pencil: Whether to color the hatch or not, if enabled then the crosshatch output is used as a mask for the underlying colors.

Brightness: This is a brightness offset on the colored pencil hatch, since without it the pixels are usually very dark.

Saturation: Saturation of the colored pencil lines, higher values tend to look more like real colored pencil.

First Hatch Resolution: This is the resolution of the hatch texture for the first hatching layer.

First Hatch Rotation: This is the rotation of the hatch texture for the first hatching layer.

Layer 2: Apply a second layer of hatching.

Second White Point: This is the White Point of the second layer, by increasing this then you will allow more shadowing to become visible in the cross hatching.

The rest of the variables work the way you think they do.

Blend Settings

These control how the thresholded output is visualized.

Term Strength: A multiplier on the thresholded output.

Blend Mode: How you'd like to blend the thresholded output on to the screen.

  • No Blend: No blending occurs, thresholded output appears as is.
  • Interpolate: Use the thresholded output to interpolate between the color buffer and the Min Color based on the thresholded output.
  • Two Point Interpolate: Use the thresholded output to interpolate from Min Color to the color buffer to Max Color.

Min Color: The color that the lowest thresholded value maps to.

Max Color: The color that the highest thresholded value maps to.

Blend Strength: How much to blend the output with the original color buffer.

Preprocessor Definitions

AFX_HATCH_TEXTURE_HEIGHT: The height (in pixels) of the texture you want to use.

AFX_HATCH_TEXTURE_PATH: The file name of the texture you would like to use. Make sure it's in quotes and is inside one of the folders designated in your GShade settings.

AFX_HATCH_TEXTURE_WIDTH: The width (in pixels) of the texture you want to use.

Chromatic Aberration

Simulates the chromatic aberration phenomenon present in a faulty camera lens when a lens cannot focus all color waves to a single point.

Variables

Debug Mask: Debug the focal point of the chromatic aberration. The black parts of the mask will have no chromatic aberration while the white parts will have full chromatic aberration.

Focal Point Offset: The offset of the focal point from the center of the screen.

Focus Radius: The width and height of the focal point.

Hardness: How smooth of a gradient there is between unaffected and affected regions of the image.

Intensity: How intense the chromatic aberration is.

Color Offsets: How each color channel should be offset.

Vignette

An effect that simulates a camera vignette, the dark area surrounding a photo.

Variables

Vignette Color: The color of the vignette, traditionally black.

Vignette Size: The width and height of the vignette.

Vignette Offset: The positional offset of the vignette from the center of the screen.

Intensity: The strength of the vignette.

Roundness: The roundness of the vignette, larger values will create a more square vignette.

Smoothness: The gradient of the vignette, 0 will result in no gradient.

Palette Swap

This effect can be used to swap out the color values of the image with your own desired colors. In order to use this effect to its fullest potential you will need to do some very specific steps. First, you need to desaturate the image with the Color Correct shader to make the image grayscale. Then, you need to Dither the image. The Dither settings will control how many grayscale values are present in the image, based on the Color Count settings. For example, if you set the color count settings to 4 then there will be 4 colors for you to swap out with this Palette Swap shader.

Variables

Manual Colors:

  • The only variables are the colors to be swapped. Color 1 is the color that maps to black in a grayscale image, and Color 2 will map to the next color above black, and so on.

Generate Random Palette: If you want to have the shader create colors for you.

Color Count: How many colors in the palette, generally this should be equal to your Dither color count.

Seed: The seed of the random number generator for the palette, change this to get a new palette.

Hue Mode: How much of the color pie to use for your palette.

Hue Contrast: How big of an increment across the color pie do you want to make for each color, a hue contrast of 0 would be a monochromatic palette.

Luminance: The minimum/maximum starting value for the brightness of the palette.

Luminance Contrast: The minimum/maximum step for increasing the luminance of each color in the palette. A luminance contrast of 0 means every color has the same brightness value.

Chroma: The minimum/maximum starting value for the "saturation" of the palette.

Chroma Contrast: The minimum/maximum step for increasing the chroma of each color in the palette. A chroma contrast of 0 means every color has the same saturation.

Preprocessor Definitions

AFX_PALETTE_COUNT: The number of colors to swap. This should be equal to the Color Count in the Dither shader.

Pixel Sort

This effect sorts the pixels on the screen. It is extremely expensive and it heavily taxes my 1660 so if you have a worse GPU then maybe don't use it.

Mask Settings

These settings determine what pixels on the screen are sorted, it's called a contrast mask.

Low Threshold: Pixels that are numerically darker than this value will not be sorted.

High Threshold: Pixels that are numerically brighter than this value will not be sorted.

Invert Mask: Invert the mask.

Random Offset: Randomly offsets the segments to make them less uniform.

Offset Animation Speed: Animate the random offsets to make the effect more appealing in real time.

Span Settings

A 'span' refers to a contiguous segment of the mask that will be sorted.

Length Limit: How long a span can be, smaller values will improve performance.

Random Offset: The span limit is really obvious, to fix that you can randomly offset the spans.

Sort Settings

Sort By: What value to sort the pixels by:

  • Luminance: This is the brightness of the pixel and will result in smooth gradient sorts.
  • Saturation: The saturation of the pixel, looks much chunkier than luminance.
  • Hue: The hue of the pixel, since hue is circular this will give cool outside -> in sorts.

Reverse Sorting: Reverse the order of the sorting so minimum values will be placed where maximum values are and vice versa.

Gamma: Gamma correct the sorted output to help differentiate sorted segments from the rest of the image.

Preprocessor definitions

AFX_DEBUG_MASK: Visualize the contrast mask.

AFX_DEBUG_SPANS: Visualize the spans colored by a hash of the thread that will be sorting the segment.

AFX_HORIZONTAL_SORT: Set this to 1 in order to horizontally sort the image instead of vertically.

Halftone

This is kind of like a comic book printing effect it separates cmyk and lets you offset it and optionally not print a color.

Variables

Each color has the same settings and they all work the same:

Print: Disable to not draw that color.

Dot Size: The size of the dot pattern for that color.

Bias: When we separate the cmyk from the rgb image, we compare the resulting cmyk value with the dot pattern value, and if it's greater than the threshold, we keep the color. To get more of a color on the screen you increase the bias, to reduce the strength of a color you reduce the bias.

Exponent: After the bias is applied this exponent is applied (looks like (color + bias) ^ exponent). Since the value is between 0 to 1, the exponent will bring lower values down. An exponent less than 1 will bring lower values up, enabling you to maybe get flatter areas of color with the halftone.

Offset: Positional offset of the color print. It's in terms of pixels, so an offset of 0,5 will offset 5 pixels to the right.

Color Space Adjust

This converts the current screen colors into a color space of your choosing that you can then make adjustments with before converting back to RGB. This shader should probably be clone-able, and I'll add that in a future update.

Variables

Each color has the same settings and they all work the same:

Color Space: Which color space to make adjustments with. All of these operate under the same logic: they let you hue shift, adjust saturation, and adjust brightness. Each one does it a bit differently. You probably want to use OKLCH.

H/A Add: An additive modifier to the current hue of the image, or an adjustment to the A coordinate of OKLAB.

H/A Multiply: A multiplicative modifier to the current hue of the image, or an adjustment to the A coordinate of OKLAB.

You can intuit how the rest work.

AcerolaFXEnd

This indicates the end of the AcerolaFX pipeline and is responsible for transferring the contents of the AcerolaFX buffer to the actual game's buffer.

Variables

Mask UI: Whether or not to mask the UI, disable if wanting to dither or use the CRT effect on the UI.