TextureFX 3.0 Preview

One of the big updates for vvvv gamma 2021.4 will be a solid collection of TextureFX as you were used to in vvvv beta. That is:

  • Sources (noise generators, …)
  • Filters (blur, edge, …)
  • Mixers (blend, …)
  • Utilities (convert colors, …)

Latest 2021.4 previews now have those ready for testing. Status:

  • We still have a few open issues, but the main things are done
  • Currently all nodes are still marked with the “Experimental” aspect. For the final release, many of them should have this aspect removed and be stable
  • All help docs still need a review
  • Documentation: Writing your own TextureFX

And this is where we’re hereby asking for your help: Please give the latest preview a spin, go through the texturefx nodes, which you’ll find in Stride -> Textures -> Source/Filter/Mixer and Utils. Then please post here if you have thoughts on the following:


  • naming
  • help text
  • functionality
  • any missing?


  • naming
  • help text
  • functionality
  • order
  • type/defaults
  • any missing? too much?

Massive thanks to @bj-rn for porting many of the vvvv beta textureFX over!


“input 2” is imo a bit misleading for a control texture on the blur nodes. ​And a toggle for overriding them would be convenient. Since there is no dynamic texture available it’s cumbersome to load a white texture just to make the blur effects work.

When creating a node its parameters just seem to take effect after the second time you manipulate them.

In HowTo convert sRGB to linear space and vice versa the texture path is wrong. But I think it might be better to use Palette as input here anyway. It also shows that LinearTosRGB is still not exactly inverse to sRGBToLinear.
HowTo Convert sRGB color to linear space and vice versa.vl (13.1 KB)

i think this doesn’t work yet, see the linked issue, there are two open points for sRGB, the main thing here is that the format must reflect whether the data is sRGB or not. because the format of the texture influences how the sampler works, since sRGB conversion is built into the hardware nowadays.

checked the help patch again, and as the help text of the node states, there is no need to convert to Linear in that case because the loaded data is sRGB and the format already reflects that.

Hi guys, I found a problem with TextureFX in exported project. I’ve described it here.
It is easy to reproduce, but for some reason you need a second pc to run the compiled project.
It will throw an exception like this one:

System.InvalidCastException: Unable to cast object of type 'System.Single' to type 'Stride.Graphics.Texture'.
   at VL.Core.NodeBuilding.PinInstance`1.VL.Core.IVLPin.set_Value(Object value)
   at _BasicComponents_.Mixer.BasicComponents.InvertComponent_C.Update_()
   at _Core_.Mixer.Core.TwoDScene_C.Update_()
   at _Core_.Mixer.Core.RenderSlot_HjibzFwtiGPPSR7O9tIS7Y.Update(CompositionSlot_C Input_In, Texture& Texture_Out)
   at _Core_.Mixer.Core.Composition_C.Render(Texture& Texture_Out)
   at __MIXER_tester_.Main._MIXER_testerApplication_Ba6sY4xaoelOwKB6LBWbFe.Update()
   at VL.App.AppHost.<RunCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at VL.App.WindowsForms.WindowsFormsAppHost.<Application_Idle>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

As far I could find it appears when you use FilterBase Seem to me it is something with pin creation order.

For Scaler - i think it would be easier to just enter the desired resolution instead of a multiplier “Rescale” here.

yes, good point, both should be there…


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.