» Image Adjustment Pack
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Image Adjustment Pack

effect color pixelshader contrast image adjustment saturation keying image correction


pixelshader functions resource

v1 includes:

  • Invert
  • Contrast
  • Saturation: Greyscale & Saturation
  • Levels
  • Tonecurves
  • LumaMatte: Luma & Inverse Luma
  • ColorMatte

maybe a bunch of single effects, which are combining differnt functions can be avoided this way...

feedback and tell me whats missing, plz


28.01.11 [16:17 UTC] by woei | 1956 downloads

West 28/01/2011 - 19:22

Nice collection to "chrush some blacks" :)

And big thumbs up for the Mattes!!

lasal 29/01/2011 - 20:23

very usefull ;)

woei 31/01/2011 - 19:54

thx for the flowers, guys!

any suggestions, what's missing for the basics? or other feedback?

West 01/02/2011 - 23:49

Spreadable key-colors would be funny. what is a .FXH vs a .FX ??

And the Hue/Saturation filter, with colorize function, like in Photoshop is something I could use.

woei 02/02/2011 - 00:36

actually you can do the spreading of keycolors yourself. thats why its a FXH.

there simple functions wrapped in these fxh files. so if you for example need a shader to control saturation, contrast and then keying out the green, you don't need to copy paste everything together but just include the .fxh and call the functions like:

#include "path/Saturation.fxh"
#include "path/Contrast.fxh"
#include "path/ColorMatte.fxh"

and in the pixelshader

float4 col=tex2d(Samp,In.TexCd)
col = Saturation(col); 
col = Contrast(col);
return col;

hope is, that this could prevent a lot of similar shaders (f)lying around

phlegma 18/04/2011 - 12:06

Create Work, Create Help, Thanx

deby 07/06/2011 - 17:53

Create contibution. Thanks!
I try to create an allinOne FX but with no result...

An idea?
Thanks a lot

//@author: woei
//@help: greyscale conversion function and saturation adjustment per channel
//@tags: greyscale, saturation, color correction, image adjustment, pixelshader
// --------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------
float4x4 tW: WORLD;        //the models world matrix
float4x4 tV: VIEW;         //view matrix as set via Renderer (EX9)
float4x4 tP: PROJECTION;
texture Tex <string uiname="Texture";>;
sampler Samp = sampler_state    //sampler for doing the texture-lookup
    Texture   = (Tex);          //apply a texture to the sampler
    MipFilter = Linear;         //sampler states
    MinFilter = Linear;
    MagFilter = Linear;
//texture transformation marked with semantic TEXTUREMATRIX to achieve symmetric transformations
float4x4 tTex: TEXTUREMATRIX <string uiname="Texture Transform";>;
#include "Contrast.fxh"
#include "Invert.fxh"
#include "Levels.fxh"
#include "Saturation.fxh"
#include "Tonecurve.fxh"
//the data structure: "vertexshader to pixelshader"
//used as output data with the VS function
//and as input data with the PS function
struct vs2ps
    float4 Pos  : POSITION;
    float2 TexCd : TEXCOORD0;
// --------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------
vs2ps VS(
    float4 PosO  : POSITION,
    float4 TexCd : TEXCOORD0)
    //declare output struct
    vs2ps Out;
    //transform position
    Out.Pos = mul(PosO, tWVP);
    //transform texturecoordinates
    Out.TexCd = mul(TexCd, tTex);
    return Out;
// --------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------
float4 PS(vs2ps In): COLOR
    float4 col = tex2d(Samp, In.TexCd);
    col = Contrast(col);
    col = Invert(col);
    col = Levels(col);
    col = Saturation(col);
    col = Tonecurve(col);
    return col;
// --------------------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------------------
technique TFX
    pass P0
        VertexShader = compile vs_1_1 VS();
        PixelShader  = compile ps_1_0 GREY();
technique TFixedFunction
    pass P0
        WorldTransform[0]   = (tW);
        ViewTransform       = (tV);
        ProjectionTransform = (tP);
        Sampler[0] = (Samp);
        TextureTransform[0] = (tTex);
        TexCoordIndex[0] = 0;
        TextureTransformFlags[0] = COUNT2;
        //Wrap0 = U;  // useful when mesh is round like a sphere
        Lighting       = FALSE;
        VertexShader = NULL;
        PixelShader  = NULL;
woei 10/06/2011 - 15:46

@deby: whats the error in the editor?
are the fxh files positioned beside the fx you are editing?
and you probably have to switch to shader model 2.0 at least. (technique -> pass p0 -> PixelShader...)

deby 10/06/2011 - 20:55

Hello woei,
the error appears here:

float4 PS(vs2ps In): COLOR

    float4 col = tex2d(Samp, In.TexCd);

col = Contrast(col);
col = Invert(col);
col = Levels(col);
col = Saturation(col);
col = Tonecurve(col);
return col;
the fxh files are in the same directory as the pixelshader.
I am totally beginner in programming pixelshader...

woei 14/06/2011 - 15:25

@deby: which line exactly does the error appear? and did you set the shader model in the technique to 2.0 or 3.0?

krementsov 29/05/2015 - 19:44

Hello woei,
Can you help me?
All nodes in this pack don't work with DX11, but work with DX9. What could be the problem?

Pin "Technique" is red

I can give you additional if you need.

Or may be you know another good pack for working with image.

blausand 29/05/2015 - 19:57

@deby: Why is your pixelshader called PS() but your pass calls GREY()?

anonymous user login


~17h ago

joreg: also there is this nuget which sounds like an option: https://www.nuget.org/packages/TidyNetstandard/

~18h ago

joreg: if basic format tyding is enough you can use the XML ToString in VL

~20h ago

mediadog: Thanks @joreg. I really miss Tidy (XML), use it to clean up weather station data for realtime displays, any recommendations?

~20h ago

joreg: @mediadog thanks for the pointer. fixed.

~3d ago

mediadog: Clicking on "Missing in 64 bit builds" goes to page with warning no longer maintained, but betadocs link has no such info.

~7d ago

nanotekt: VL.stride yet again ...this time nonphotorealistic https://youtu.be/_aALr2wcj0Y ...wish evvvveryone to be well!

~11d ago

nanotekt: a brief VL.stride study https://youtu.be/B2Nlz5VZ9lM ...and a massive 'thank you' to the devvvvs!

~6d ago

everyoneishappy: @overtones this would require 4D noise, which is possible but not implemented in Fieldtrip

~14d ago

overtones: Hi! SF2D has Time & DomainOffset inputs, but SF3D only DomainOffset. Is there a way to use Time in SF3D or it makes no sense? Thx

~17d ago

joreg: @SabrinaVerhage this could be useful for you next "hacking sex" workshop: https://buttplug.io they have a .NET nuget for use in vvvv!