Skip to content

Latest commit

 

History

History
279 lines (198 loc) · 9.75 KB

README.md

File metadata and controls

279 lines (198 loc) · 9.75 KB

orx-fx

Ready-to-use GPU-based visual effects or filters. Most include orx-parameters annotations so they can be easily controlled via orx-gui.

The provided filters are based on OPENRNDR's Filter class

All filters provided by orx-fx assume pre-multiplied alpha inputs, which is OPENRNDR's default.

Effects index

Here's a (potentially incomplete) list of the effects provided by orx-fx. Explore the source for an up-to-date list.

Anti-alias

  • FXAA, fast approximate anti-aliasing.

Blends

Blend filters take two inputs ("source" and "destination"), they are intended to be used in orx-compositor's layer blend. All blend filters are opacity preserving.

Photoshop-style blends

  • ColorBurn
  • ColorDodge
  • Darken
  • HardLight
  • Lighten
  • Multiply
  • Normal
  • Overlay
  • Screen
  • Add, add source and destination inputs
  • Subtract, substract destination color from source color

Porter-Duff blends

  • SourceIn, Porter-Duff source-in blend, intersect source and destination opacity and keep source colors
  • SourceOut, Porter-Duff source-out blend, subtract destination from source opacity and keep source colors
  • SourceAtop, Porter-Duff source-atop blend, uses destination opacity, layers source on top and keeps both colors
  • DestinationIn, Porter-Duff destination-in blend, intersect source and destination opacity and keep source colors
  • DestinationOut, Porter-Duff destination-out blend, subtract destination from source opacity and keep destination colors
  • DestinationAtop, Porter-Duff destination-atop blend, uses source opacity, layers destination on top and keeps both colors
  • Xor, Porter-Duff xor blend, picks colors from input with highest opacity or none with opacities are equal

Various blends

  • Passthrough, pass source color and opacity.

Blurs

Most blur effects are opacity preserving

  • ApproximateGaussianBlur, a somewhat faster but less precise implementation of GaussianBlur
  • Bloom, a multi-pass bloom/glow effect
  • BoxBlur, a simple but fast box blur
  • FrameBlur
  • GaussianBlur, a slow but precise Gaussian blur
  • HashBlur, a noisy blur effect
  • LaserBlur
  • LineBlur
  • MipBloom
  • ZoomBlur, a directional blur with a zooming effect

Color

  • ChromaticAberration, a chromatic aberration effect based on RGB color separation
  • ColorCorrection, corrections for brightness, contrast, saturation and hue
  • ColorLookup, Color LUT filter
  • ColorMix, filter implementation of OPENRNDR's color matrix mixing
  • Duotone, maps luminosity to two colors, very similar to LumaMap but uses LAB color interpolation.
  • DuotoneGradient, a two-point gradient version of Duotone
  • Invert
  • LumaMap, maps luminosity to two colors
  • LumaOpacity, maps luminosity to opacity but retains source color
  • LumaThreshold, applies a treshold on the input luminosity and maps to two colors
  • Posterize, a posterize effect
  • Sepia, applies a reddish-brown monochrome tint that imitates an old photograph
  • SetBackground
  • SubtractConstant, subtract a constant color from the source color

Color conversion

  • OkLabToRgb
  • RgbToOkLab

Distortion

All distortion effects are opacity preserving

  • BlockRepeat - repeats a single configurable block of the source input
  • DisplaceBlend
  • Fisheye
  • FluidDistort
  • Lenses
  • HorizontalWave - applies a horizontal wave effect on the source input
  • VerticalWave - applies a vertical wave effect on the source input
  • PerspectivePlane - applies a planar perspective distortion on the source input
  • Perturb
  • PolarToRectangular
  • RectangularToPolar
  • StackRepeat - repeats the source input in a stack fashion
  • StretchWaves
  • TapeNoise
  • Tiles
  • VideoGlitch

Dither

  • ADither - a selection of dithering effects
  • CMYKHalftone - a configurable CMYK halftoning effect
  • Crosshatch - crosshatching effect
  • LumaHalftone - a halftoning effect based on luminosity

Edges

  • LumaSobel - A Sobel-kernel based luminosity edge detector
  • EdgesWork - An edges filter doubling as erosion
  • Contour - detects multi-level contours
  • New: CannyEdgeDetector

Grain

  • FilmGrain - adds film-like grain to the source input

Shadow

  • DropShadow - adds a drop shadow based on the opacity in the input image

Tonemap

  • Uncharted2Tonemap - implements the Uncharted2 tonemapper

Transform

  • FlipVertically - flips the source input vertically.

Post extension

The Post extension provides an easy way to apply filters to your drawings. Allocating and resizing color buffers is all taken care of by Post.

To get additional intermediate color buffers one can access intermediate[x]

fun main() = application {
    configure {
        windowResizable = true
    }
    program {
        extend(Post()) {
            val blur = ApproximateGaussianBlur()
            val add = Add()
            post { input, output ->
                blur.window = 50
                blur.sigma = 50.0
                blur.apply(input, intermediate[0])
                add.apply(arrayOf(input, intermediate[0]), output)
            }
        }
        extend {
            drawer.circle(width / 2.0, height / 2.0, 100.0)
        }
    }
}

Colormap

Colormap filters operate only on the RED color channel. For example depth maps from orx-depth-camera.

They allow selection of min / max value range and applying exponential shaping curve within this range:

Demos

DemoBlur01

source code

DemoBlur01Kt

DemoCannyEdgeDetector01

source code

DemoCannyEdgeDetector01Kt

DemoColorDuotone01

source code

DemoColorDuotone01Kt

DemoColorDuotoneGradient01

source code

DemoColorDuotoneGradient01Kt

DemoColormapGrayscale

source code

DemoColormapGrayscaleKt

DemoColormapSpectralZucconi

source code

DemoColormapSpectralZucconiKt

DemoColormapTurbo

source code

DemoColormapTurboKt

DemoColorPosterize01

source code

DemoColorPosterize01Kt

DemoCompositeFilter01

source code

DemoCompositeFilter01Kt

DemoContour01

source code

DemoContour01Kt

DemoDirectionalBlur01

source code

DemoDirectionalBlur01Kt

DemoDistortLenses01

source code

DemoDistortLenses01Kt

DemoDitherLumaHalftone01

source code

DemoDitherLumaHalftone01Kt

DemoFluidDistort01

source code

DemoFluidDistort01Kt

DemoOkLab01

source code

DemoOkLab01Kt

DemoPost01

source code

DemoPost01Kt

DemoSpectralBlend01

source code

DemoSpectralBlend01Kt