TextureFX 3.0 Preview


Some testing on textureFX :

Blur (not working)
Dissolve (not working)
Pixelate (not working)
BlurGlow (not doing anything, gets full black when Shape parameters is above 10.40, brightness params is kind or working)
Anaglyph (working except that MapBlur parameter isn’t doing anything)
BackgroundSubstraction (not working)
BlurPerfector (ok)
BoxBlur (ok)
BrightFilter (ok but what is its purpose ? just curious)
Metallica (ok but everytime I change a color vvvv freeze, also I guess default value aren’t correct for a direct use of it)
BubbleNoise (ok)
CrossStitch (ok)
Dither (ok)
Glow (ok)
Edge (ok but full white texture for some time before seeing result)
ScanLine (ok)
HSCB (ok)
Mosaic (ok)
Muffy (ok)
Lomograph(ok but VignetteDodge parameter is behaving strange)
Liquish (ok)
Blood (not doing anything)
Gradient (ok)
BlendMixer (ok but is it supposed to be greyish with fader reaching 0.5 ?)
SimpleBloom (ok but effect is a little strange, not blurred enough it seems, looks like boxblur)
Perlin (missing ?)
DirectionalBlur (ok but samplecenter should be of type Vector2 I guess)
Sharpen (not working)

Some other problems I noticed :

Renderer get stuck sometimes, happened with edge filter, while the output pin texture preview is showing effect correctly.

Everytime I modify a value on input pin, renderer get stuck for a moment. If I modify the same parameters I see changes smooth, if I modify a different parameter then rendering get stuck again.

Some default value are probably not appropriated in some case as the effect doesn’t show up correctly right away.

I tried those fx in between a sceneTexture and a quadRenderer.

Also I didn’t understand what the GPU vector4 input pin is suppose to be and how to use it.

@lecloneur thanks a lot for this detailed inspection!

regarding mixers (Dissolve, Pixelate, Blood) not working: did you confirm this with their helppatches? if they work in their helppatches but not in a custom patch you made, could you please share that patch?!

this is an unfortunate known issue. not related to only texturefx but many other nodes that are created similar (“fragmented”). essentially what’s happening is that every input of a texturefx node is on its own operation that is not executed unless you set a value at least once. thats why only from the second time on you change a value, it updates directly. we’re not happy with this either, let’s see…

this is what used to be the “Control” input texture in beta texturefx, ie a grascale value per pixel to control the amount of the effect per pixel. only now you not only use a texture but also values to control this input. use the ValueIn/Map, ColorIn/Map nodes to connect to that input.

i’ll get back to you regarding the other issues as we have more…

ok thanks, I will have another test session then.

moments later… we made quite some progress with textureFX, now would be a good moment to give them another spin with latest 2021.4 preview.

blur nodes have been updated. this is now fixed.

this is now fixed.

There are now dedicated Crop and Resize nodes, in two versions: absolut and relative

most of the issues you found where due to effects relying on mipmaps on their inputs, when the incoming texture didn’t have any (like the SceneTexture you tested with). we now added a WantsMips attribute to texture inputs which tells the system to create mipmaps for inputs that don’t have any.

seems to work now, see helppatch.

seems to work now, see helppatch.

seems to work now, see helppatch.

done, thanks.

seems to work now, see helppatch.

please report any such you find and suggest a better default.

1 Like


Normal is missing as NormalGlow isn’t the same.
Also Gradient doesn’t have the choice it had before :

And Echo is missing, but it is an extremely useful TFX. I know the Feedback help patch is suppose to do the same but not exactly. It would be great to have Echo back in the node browser.

Blend mode are a pain in the a… to work with, see post here :

Invert use to have more options easily accessible from enum :

Can’t find Pillow :

For some reason (as the shade code looks identical) it is not possible to have a thin and contrasted Edge effect :


Here is Echo TFX :
Echo.vl (24.0 KB)

Hi, I’m updating the SetAlpha node to work correctly.

The idea is to set the alpha of an original image using a channel from another one.

For the channel there are : Red, Green, Blue, Alpha, Hue, Saturation, Value and Luma. Also the current SetAlpha node as an Average but is it really necessary or make sense to average RGBA and use that value ?

Also the Control(GPU) input doesn’t work. See attached :
SetAlpha.zip (5.4 KB)

Here is the Invert shader which now can invert :
RGB, LinearRGB those two sit together in GIMP, maybe they should be both in vvvv as well ?

Red, Green, Blue, Value, Luma (the classics)

and Hue (which is already in the current InvertShader but without proper naming).

Invert.zip (8.2 KB)

Here is Pixelate Filter with control over X and Y axis which can create some cool banding :

Pixelate.zip (3.4 KB)

Feedback Compute ported from this contribution :

FeedbackCompute.zip (9.5 KB)


ASCII.zip (9.2 KB)
Added PointSampler by default for the ASCII texture so it is sharp.
Quantized the grayscale so there isn’t any sliding effect.

ASCII.zip (5.8 KB)

Pulse ported from InstanceNoodle (added channel for RGB, HSV and Alpha as well as Invert :

Pulse.zip (4.0 KB)

Datamosh ported from : Datamosh (DX11) | vvvv
Added Color Discard as a GPU input so the feedback effect can go through another Texture via ShaderFX.
The threshold parameter is now a GPU for the same reason.

Datamosh.zip (4.8 KB)


Different approach than ShiftRGB, each channel here has its own Transform2D. More possibilities but need a little more time to setup. What do you think ?
ShiftRGB could work this way as well.

image (1)

TransformCMYK.zip (243.7 KB)

ColorKeyOBS ported by @blacktronics

ColorKeyOBS.zip (6.7 KB)


port from mp.dx by Micro D double E aka @microdee. Original by Christian Cann Schuldt Jensen ~ CeeJay.dk
Vibrance intelligently boosts the saturation of pixels so pixels that had little color get a larger boost than pixels that had a lot. This avoids oversaturation of pixels that were already very saturated.

Vibrance.zip (3.3 KB)

Ported from mp.dx pack by @microdee

Technicolor.zip (3.8 KB)

Adaptive Sharpen

ported from bacondither

AdaptiveSharpen.zip (10.5 KB)

Lift Gamma Gain Exposure (same as LightRoom or DavinciResolve)

LiftGammaGainExposure.zip (5.0 KB)


have fun with color in 4 dimensions

ColorMatrix.zip (4.2 KB)

Shadow Midtone Highlight adjustement (basic port)

ShadowsMidtonesHighLights.zip (11.9 KB)


Hey @lecloneur, thanks for all these goodies. I’ve made an issue here to potentially include them in future releases:


Hi, glad you guys like it.

There is still something I’m wondering about the TFX so I will add those questions here.

Should every input be of type GPU < T > ? I think it would be great so any of them could be controlled by a ColorMap, ValueMap or a anything else coming from a ShaderFX.

Shouldn’t we port this using FUSE instead ?

I started to port ColorGrading shaders and I believe things could be much more flexible to use within the Gamma environment. Indeed as mention above potentially any inputs can be texture controlled which is a great improvement compare to the textureFX in Beta but also if their different passes where separated then we could do a lot of fun stuff :

GetShadows => Invert => Contrast => SetShadows
GetLuma => Contrast => Saturation = > Displace => Vibrance => Blur => SetLuma

Even with some texture feedback in the middle :)

VVVV Gamma would have something like DaVinciResolve for color grading but in realtime … and we could call it TextureFX 3.0.

Thanks for this clone!!!

In theory, this is possible but not really necessary for all of them. It is up to the developer to decide which ones make sense to get it from a texture or from another shader. this isn’t always easy to decide and we did fewer of them because we didn’t have the automatic conversion from normal value to GPU value when we created them. today, I would also create some more as a GPU value. it might also not always be performat to make it a GPU value, but again, this has to be decided on what the value actually controls in the shader. so just do it if you think a parameter would benefit from controlling it differently for each pixel.

no, the reason FUSE had their own gpu value at the moment is to be able to develop quicker and more independently, but this year, everything will be converted to the “official” shader fx types.

and also today, you can convert between the two types. have a look at the ToShaderFX node in FUSE.

be careful there with the color spaces, Stride uses the more professional linear color space by default. try to read some documentation on that and how to implement color grading in linear color space. examples on the internet often use gamma color space, which will result in “false” results when chained together.

here are some links: What every coder should know about gamma | John Novak or Programmer’s Guide to Gamma Correction | by Jacob Bell | Medium or Chapter 24. The Importance of Being Linear and many more…

the film industry also has their own ideas of color space, if you copy examples from there: Gamma, Gamut, Levels, and Best Practices for Approaching Color Management With DaVinci Resolve and DaVinci Resolve Studio | Fstoppers or The Essential Guide to Color Spaces - Frame.io Insider

the step of color correction is called tone mapping in stride, also look at these shaders, there are already quite some implemented. everyone should use these more to make their output pop on the screens.

looking forward to the new contributions. ideally as a pull request on VL.Stride, as explained in the readme: GitHub - vvvv/VL.Stride: VL library with tools and nodes to ease the patch workflow with Stride (fka Xenko).


if you aren’t on the vvvv chat then here is the current state of TextureFX 3.0 which represents 11 years of community work.

And this is some screenshot during testing :

Uploading: image (20).png…

Still work in progress…


Looks great!

This post need a donate button!
amazing work clone!


After merging the new 3d and 2d primitives pull request, this is also waiting to be included in the previews. What is the status of this @lecloneur?

On what is this pull request waiting? Until it has at least 100 new nodes? :)

1 Like


I think I ported everything I could find but before merging it would be great to have some testing to make sure I didn’t miss anything because there are many TFX and I’m not fully sure it is clean.

I think its already included with th 2022.5 previews. No problems so far.

Couldn’t find it in the 22.5 previews… but I gave it a go and wanted to share that when trying to build it from Visual Studio, a vvvv version is specified that is apparently not available as a download anymore. So before hitting CTRL+F5 (as specified in the VL.Stride readme on Github), you need to write an existing vvvv version and build number into Directory.Build.props, like this:

@lecloneur Was searching for the “Wave”-Node, but couldn’t find…

Great job by the way for this huge contribution. 👏

Hallo, wanted to test this and compiled the TextureFX-2 but most Shaders are not there, is it on another branch or just not commited yet? Looking forward for this to be merged ! Thanks @lecloneur

Hey guys,

I’m really happy that you are all still interested in this contrib. Proper VVVV legacy here and the result of not only me but also lots of other contributors. Mad respect to :

unc , microdee , AKa-visuals , everyoneishappy , vux , DigitalSlaves , catweasel, bjoern, idwyr, karistouf, gilbi , antokhio , elektromeier , Desaxismundi , woei , lasal , kalle , DiMiX , sebl, colorsound, princemio , nissidis, ggml , letoast , timpernagel , mburk , ain , circuitb , h99 , Luper , sanch , robotanton and I probably forget others.

When I started using gamma last year I noticed that many TFX didn’t work as they use to. The Blend mixer is the best example : broken BlendModes and Alpha channel problems. Many other very important ones were missing (Echo, etc.). But because VL.Stride is open source I could start fixing them as well as creating new ones.

While porting all the shader I could find from older contribution I also discovered how within the Stride shader system you can use ComputeFloat(). It basically create a GPU<Float32> input pin on the shader node, (works the same for ComputeFloat2, ComputeFloat4, etc…) and very easily bring the opportunity to connect and chain any TFX to any parameter onto the next one (see screenshots previously posted).

It is already here, sort of, take a look at the Blur TFX and its Strength input pin allowing you to connect a texture to control it via ColorMap or ValueMap node. Not even possible back in beta, it is just EXTREMELY powerful and I realized the potential for visual design that this feature can bring.

That’s why I also modified almost every existing TFX in Gamma so anything as simple as a CheckerBoard or BubbleNoise could be chained to become powerful visual generators/filters themselves.

What’s the problem then ?

Around two month later the devs told me that the contribution was now too big for being reviewed and on top of that some core were changed (still no idea why) leading to an unusable pull request. Alright then, I followed what @joreg suggested me and started a brand new pull request coming from a new branch with this time only one TFX committed for review. This only then that they realized there will be breaking changes and so they will need to discuss internally about it. It was a month ago.

Now unless the devs get interested and step in again this contrib won’t happen and sadly I cannot do anything about it. It’s a pity because thanks to Stride Engine and the vvvv contributors there is an incredible potential right in front of us that would put this community project to another level, the third :

==> TextureFX 3.0 <==