NOTE: I’ll be using this thread to post progress updates, new features, performance changes, roadmap notes, and major development updates going forward. Stay Tuned!
This started as a small experiment. I was messing around with skinned meshes and wanted to see how far I could push bone driven tree animations on Roblox. After watching a lot of foliage showcases, especially UE5 examples and a few Roblox ones like Fluorlite’s work, I wanted to see if I could get that same feeling of physical branches bending, leaves reacting, and wind movement flowing through the whole tree.
I posted a small showcase on Twitter, and the responses made me realize this could become something bigger than a cool little test. So I started turning it into a real tool, something that could be used in production of realistic projects.
Here is the link if you want to check it out: Elite on X: "Roblox Skinned Tree Wind Test #RobloxDev #ROBLOX" / X

Canopy Flow is a plugin and runtime wind system in development for skinned trees and foliage in Roblox. It animates the mesh’s bones, allowing the trunk, branches, and leaves to sway together.
Current Features
As of 10/9/2026, The runtime currently supports:
- Bone driven trunk, branch, and leaf sway for skinned foliage
- Client side visual wind animation
- Adjustable wind strength, speed, gust motion, and bend limits
- Wind direction controlled through plugin controls
- Tree registration through CollectionService
- Distance based animation culling and fading
- Adjustable batching with a suggested starting batch size
- Rig validation and support for fixed and custom bone layouts
- Wind profiles for grouping trees with different settings
- Calm, Breezy, and Storm presets
- Viewport preview of supported trees
- Metrics for wind-loop timing, batch activity, and bone updates
The goal is to make natural looking foliage movement easy to set up and tune while keeping the runtime lightweight.
Planned Features Currently
As of 10/9/2026, the main focus is on expanding wind control, improving large-scene handling, and making the system easier to integrate into different environments.
Planned work includes:
-
Adaptive batching
TBD: adjusting the update workload based on measured runtime cost. -
Frustum culling
TBD: reducing animation updates for trees outside the camera view, with testing for visible shadows and transitions when trees return to view.
Frustum Streaming: Stream What Your Players See (Testing Needed with the recent update) -
Bone detail LOD
TBD: reducing branch and leaf animation detail at greater distances while retaining simpler trunk motion. (Could potentially allow more trees to animate across a wider range within the same performance budget.) -
Spatial partitioning
TBD: grouping trees into regions to prioritize nearby checks. (If larger-scene testing shows a worthwhile performance benefit.) -
Additional foliage support: extendingsetup guidance and testing to plants and ground foliage.
-
Custom wind presets: create, name, and save your own wind settings to reuse across trees and profiles.
-
Built-in foliage library: ready-to-use skinned trees, with included assets and redistribution permissions finalized before release.
-
Streaming improvements: further testing of partial rigs, trees loading and unloading, and registration recovery.
-
Regional wind zones
Low Priority: different wind behavior for separate areas or biomes. -
Expanded gust behavior
Low Priority: more variation and control beyond the current repeating gust motion.
The planned foliage library is intended to provide ready skinned trees, helping developers get started without rigging every asset themselves.
I’ll post dated updates as features move through development, testing, and completion.
Performance
Keeping runtime work manageable has been a main development goal, since foliage animation and rendering can become expensive as scenes grow.
These are previously reported results from an earlier development test. They should not be treated as benchmarks for the current version.
Test Conditions
- Approximately 225 tagged trees
- Roblox client with graphics quality set to 10
Test System
- NVIDIA RTX 4060
- AMD Ryzen 5 5500
- 32 GB DDR4 RAM
| Metric | Reported value |
|---|---|
| Total tagged trees | Approximately 225 |
| Bone transforms updated per frame under the test settings | Approximately 144 |
| Average exclusive time for the measured wind scope | 0.43 ms |
| Peak exclusive time in the capture | 0.56 ms |
| Exclusive scope time relative to a 60 FPS frame budget | Approximately 2.6–3.4% |
| Reported wind-script memory / LuaHeap contribution | Approximately 0.56 MB |
The tagged tree count describes the scene population. Because updates are batched and distance based it should not be read as 225 trees receiving bone updates every frame.
Exclusive time excludes nested profiling scopes. These figures do not establish the complete cost of animated foliage, including downstream engine, rendering, and shadow work.
At 60 FPS, a frame lasts approximately 16.67 ms. The percentage above compares the reported exclusive scope timings with that duration; it is not the percentage used by the entire system.
The memory figure describes the reported script/LuaHeap contribution. It does not include all meshes, textures, engine allocations, or GPU resources.
Roadmap
Canopy Flow is still in development, so my focus is refining the runtime and plugin workflow while testing the remaining features.
Summary
- Refine the current runtime wind system
Continue improving trunk, branch, and leaf motion while keeping the setup manageable. - Improve existing features and fix edge cases
Address bugs, unusual rigs, and anything that behaves inconsistently during testing. - Continue testing streaming support
Improve tree registration, loading, unloading, and recovery. Test compatibility with Roblox’s recently released Frustum Streaming. - Update benchmarks and evaluate runtime optimizations
Profile the current build in larger scenes and on different devices. Test adaptive batching, bone detail LOD, and animation frustum culling. Spatial partitioning remains under consideration pending further testing. - Add more variation to the wind motion
Expand gust and foliage movement controls while keeping rigging and tuning straightforward. - Improve the overall plugin workflow
Refine the existing installer, rig validation, wind controls, profiles, presets, and preview tools based on testing and feedback. - Prepare the foliage library and setup guide
Finalize ready-to-use skinned foliage, verify redistribution permissions, and document supported rigs and setup practices. - Test with more developers and larger scenes before release
Gather feedback across different environments and devices to identify performance, reliability, and usability issues. - Release once the runtime and workflow are ready (NO RELEASE DATE YET)
Release after testing shows that the core runtime and plugin tools are reliable enough for other developers to use.
The main goal is to make Canopy Flow useful for developers building larger outdoor environments with skinned foliage, while keeping setup and tuning straightforward.
Feedback Wanted
I’d love feedback from developers working with skinned foliage or outdoor environments. Let me know what you think of the movement, what would make setup easier, and what you’d like to see as development continues.



