Hello everyone.
For versions 1.0.6.3 and 1.0.6.4, I've been working hard to expand our Filters and Effects tools, polish UI usability, and rewrite part of the internal code to ensure better overall performance.
Here is the technical breakdown of the implemented changes:
🧩 17 New Filter & Effect Nodes
The node library in this category grew significantly, reaching a total of 25 tools. I focused on covering advanced procedural texturing needs:
Environmental Effects & Wear: Dust Particles, Terrain Dirt, and Water Drops. The latter includes advanced lighting, specular highlights, caustics, and cast shadows.
Image Processing & Style: Non-Uniform Blur, Halftone, Pixelate, Glitch (with integrated chromatic aberration), Vignette, and Glow (using a three-stage pipeline with Screen Blend).
Morphological Operations & Lighting: Implemented dilation and erosion with configurable kernels, Graphic Embossing (calculates the mask gradient to create an illuminated relief), Flood Fill, Kaleidoscope, and an Adaptive Dynamic Threshold.
🖱️ UI Improvements (QoL)
Managing large texture networks was getting tedious, so I redesigned viewport interaction to make it much snappier:
Multi-Selection: Implemented drag-rectangle selection across the canvas.
Group Movement: When selecting multiple nodes, dragging one will move the entire group while maintaining their relative positions. Spline connections update seamlessly in real-time.
Visual Fixes: Fixed a bug where selected nodes wouldn't highlight. The issue was a priority conflict in the elements' direct styling; nodes will now correctly display their accent border and visual glow.
⚙️ Performance & Internal Architecture
To ensure the engine handles these complex calculations without tanking your FPS, I made several heavy under-the-hood changes:
Parallel Processing: All new nodes automatically split their workload in parallel when the texture size exceeds the configurable threshold.
Channel Packing: Nodes like Water Drops now pack data into individual channels (R and G for distortion vectors, B for lighting). This allows the generator node to produce complex data in a single pass.
Unification & Reusability: Cleaned up codebase redundancies. For example, the original Rust node was removed and absorbed into Terrain Dirt (since they shared logic and only differed in color). Additionally, functions like integral image calculation (used in Adaptive Dynamic Threshold to calculate local averages in constant time) are now reusable components for future nodes.
Thanks for your continued support of the development!
