[Plugin] Sprout - Foliage Creation in UE4/5

Sprout - Foliage Creation Tool

Introducing the Sprout Plugin! Our goal with Sprout is to take Unreal’s many powerful systems, mash them together, and bring game-ready foliage generation into Unreal. Meshes, LODs, Leaf Cards, Wind Animation data, Collision, Destruction, all without leaving engine.

We are working to make Sprout easy for both artists and developers to dig into. The core of Sprout is procedural, but there are a bunch of hand editing tools that artists can use to customize their results, even in the levels they are working on.

All of this is based on a data driven design, similar to Niagara, to let users build complex stuff quickly and easily. Users can code their own modules to simulate forces, set mesh vertex colors, spawn leaves, kill branches, define uv densities, and more.

The results you get from the simulation can then be completely hand edited. Branches are represented by splines that can be edited in the Sprout editor or in level. They can also be freely transformed, reparented, deactivated, resimulated, etc. This is also extensible, so users are able to write additional tools to fit their needs.


If you are interested in the project, have questions, or just want to keep up with updates to Sprout we would love it if you checked out the links below.

Update 6/27/22
We are preparing to launch a Closed Beta of Sprout.

  • Beta Phase 1 will be very limited but we plan to expand this in a second closed beta phase that will begin when we have addressed feedback from Phase 1.

  • You can sign up HERE to be alerted when access to the beta is available.


Sprout - Procedurally create and hand edit foliage from start to finish without ever leaving Unreal Engine.

  • Custom Blueprint or C++ modules shape each step of foliage generation.
  • Spline Components are used to quickly and easily hand edit branches or grow new ones.
  • Sprout Mesh Builder allows users to quickly build and render leaf meshes.
  • In Engine creation of game-ready static meshes without leaving engine.

Features:

  • Sprout Graph - Foliage is organized through a graph editor. Build up your hierarchy and easily activate, deactivate, hide or lock your results.

  • Sprout Graph Editor - YouTube

  • Sprout Graph Editor - LOD's - YouTube

    • Procedurally Generate Foliage - Using a Stack System, users can take advantage of a data driven and modular approach to foliage generation, writing, replacing and combining modules to get the results they are looking for.
  • Procedurally Generate Foliage - YouTube

    • Hand Editing - Sometimes, an artist’s touch is needed. Trim branches, grow new ones, and utilizeSimple Spline Edit to step up and down “subdivision levels” to quickly and easily edit splines while preserving their detail.
  • Hand Editing - YouTube

    • Node Presets - Save presets of often used nodes to quickly block in foliage.
  • Spawn From Presets - YouTube

    • Final Assets Without Leaving Engine - Create Static Meshes with custom LODs and Pivot Painter textures without ever leaving engine. Also, Pivot Painter Generators are Blueprintable to allow users to store any data they want into a pivot painter texture.
  • Final Assets Without Leaving Engine - YouTube

    • Create Meshes and Textures - Using the Sprout Mesh Builder, users can quickly build and render branch textures, and create leaf cards all from within the engine. We also want to ensure that working with existing Atlases is simple and fast.
  • Create Meshes and Textures - YouTube

  • Create Meshes and Textures - Atlases - YouTube

    • Niagara Integration- Users can read sprout foliage data directly into Niagara’s particle systems.
  • Niagara Integration - YouTube

  • **Custom FBX Exporter **- Sprouts can be exported with their hierarchy preserved, allowing users to make additional changes in whichever tools they use in their pipeline.

  • More Than Just Foliage - A modular, spline based approach allows users to extend their creativity beyond just foliage

More Than Just Foliage - YouTube

  • Write Custom Tools - Most everything you see here is extensible! You can extend or write your own spawners, modules, mesh generators, texture capturers, branch editors, and more in Blueprint or C++. We’ve tried hard to make sure every part of Sprout can be altered.

  • @ TODO

  • Spawn From Scans - We want users to be able to use their Photoscanned trunk meshes to generate trees. We have some work to do on the UV and material side of this, but we’re happy with the results so far.

-Spawn From Scans - YouTube

  • Chaos Integration - Trees are their own beast when it comes to destruction and with the introduction of Chaos, who doesn’t want to blow up some trees? While not ready to show off yet, you can expect to be able to turn Sprout Data into Geometry Collections that use the hierarchy of your foliage for accurate fracturing of foliage.

  • Polish - We want Sprout to run smoothly, to be easy to understand and be familiar to use. This is gonna take a good bit of polishing but represents the largest part of the work we have left.

  • Learning - We will be making tutorial videos and provide documentation to get new users up to speed with Sprout.

  • Release Plans - Currently in developmment with plans to release on the Marketplace. We are hoping to enter a beta period in the next couple months.

9 Likes

Lookin forward to this!

Amazing! :eek:

Would love to apply this technology on Characters & Creatures. Will this be possible?

I’m curious what usage you have in mind! One thing I’ve realized with Sprout is that you can find a use for it just by writing a few extra modules. If you look at the ivy in the first video, that’s using a module to read directly from the trunk mesh’s triangles. This could be used to scatter hair cards, place moss on a character, etc. You could also use Sprout to generate roots wrapping around their legs and then add that to the character’s mesh.

Happy Holidays! Here’s a timelapse showing how we used Sprout to make a Christmas scene in UE4. Don’t say we never got you anything :wink:

Side Note: The walkway was also made with Sprout, complete with procedural vertex colors for the Snow/Brick blend.

1 Like

Yes. I can visualize using the tech for Veins, Roots, Deformed Appendages/Tumors, Horns, Hair, and other Organic Accents. There are plenty of environments tools for foliage, but demonstrating the use of Sprout for Characters and Creatures would definitely set it apart.

Hello, how is the progress of this plugin now?
: )

Hey! Things are chugging along very nicely! We’ve made some big big updates to the Mesh Builder to bring it up to the user friendliness we were shooting for along with a lot of other QOL stuff and MANY bug fixes.

We’re currently on an optimization pass (Mesh Generation is now 10x faster!) after which we’ll go back to bug fixing and then hopefully in the near future a beta phase.

There should be a larger comprehensive update soon where we’ll cover all the things.

2 Likes

This plugin looks loaded! I desperately need a foliage alternative at the moment and on your Twitter I saw that it’s been a while since youve posted. Any updates on release and potential price? Also, it said that you planned on making tutorials, are there any of those up that would show me how easy or difficult this might be to use? Hope to see more soon :slight_smile:

Glad to hear you’re interested! I could probably be better about tweeting but fear not, progress is still being made. I don’t want to make any promises yet about release but I’m happy with the current pace.

At the moment, I’m mostly trying to clean up the bugs I’m aware of before letting you all pile 1,000,000 more on me :yum: I’m also keeping an eye out for usability related stuff to make Sprout as easy to get started with as I can. A lot of that will come down to beta testing though.

No tutorials up yet but in December I posted a timelapse in this thread that kinda shows what working in Sprout is like which you can see above. As we move closer to a beta release I’ll start streaming some content creation so stay tuned for that! In the meantime feel free to throw any questions my way, I’m happy to answer.

1 Like

Thanks for the info I will check that video for sure! I did have a couple more questions if you don’t mind.

I saw we will be able to write our own tools, but I was wondering what kind of creation options sprout will be sold with? Will I be able to achieve similar trees in the videos without having to write my own tools?

Also, I was curious if you could tell me a little more about the instancing of the trees and the LOD set up. It was a little difficult to see in the video when and how you set them up for the tree.

No problem! Sorry for the late reply, I was enjoying a much needed vacation last week.

Everything that was used to make the beach scene and all of the modules I use will be available with the plugin. Think of them like the modules in Niagara. You get different results by combining the modules and the generated data in different ways. I’ll be including some sample assets with the plugin as well and I’m sure some of the beach scene assets will be included. I imagine people writing their own modules for edge cases or very project specific tech-art related stuff but I’m excited to see the crazy stuff people will come up with.

As for creating Static Meshes from Sprout Data, its as simple as pressing a button. From there you get options for including LODs, Pivot Painter data, Vertex Colors, etc.

LODs are added as graphs that just say “Use x% if the vertices from the base graph” or “Spawn y% of the leaves as this node on the base graph”.

I’ll try to record a new video and put it up today or tomorrow to go over how these things work.

1 Like

Here is a video with more detail about LODs:

3 Likes

Thanks for the video, that looks great! And thanks for clarifying the modules bit I think I have a better understanding of it.

I just wanted to ask one more question and then I’ll leave you alone :grin:
How is building trees from scans is coming along? That seems like a really useful feature at the moment.

Thanks for all the info, I’m excited to see the plugin when it is released!

Please keep the questions coming! It helps me a lot to know where I need to be clearer, not just for you but for anyone who might be wondering the same things.

Spawning from scans is coming along well. Its not incredibly complicated. You simply use a module that takes in a trunk mesh, and the module does the rest of the work to identify open edge rings. Branches are then generated that match up to those.

Material blending is done by default by using a vertex color gradient and two UV channels. You can then adjust the blend’s sharpness and falloff in the material. I’m looking into more elegant solutions but I’m happy with the result for now. I’ll post a video about this feature in the next update so you can see the results and how it works.

1 Like

Just checking in on the development of this plugin! A year fly’s by fast!

I know right?! Things are moving along very well! We have had a bit of reworking and redesigning to do but all of that seems to be wrapping up very nicely.

This week we will be posting a huge update here about what we’ve been up to this past year AND what our plans are going forward so stay tuned for more.

1 Like

Its way past time for an update.

Two things have been keeping us busy since the first update:

  1. Sprout was slow
  2. Sprout needed to be more usable

Performance


After the initial posts, we began working on a major upgrade to performance. Originally the goal was to cut down on the performance of regenerating Sprouts and creating Static Meshes. These weren’t terribly slow processes for simple Sprouts, but more complex assets could take a couple seconds to generate and something like a minute or more to convert to StaticMesh. There hadn’t been a real effort to optimize at that point so it was clear there was room for improvement.

We implemented multi-threading. This made everything fast. Like 10x faster. So the goal changed to “Make Sprout as interactive as possible”.

  • Changes made to Sprouts are now immediate.

Interactive Editing

We then noticed that Sprouts didn’t really have the ability to make fast queries about the data they store. So why not use an Octree?

  • Now Sprouts can quickly query their neighbors and do raycasts against generated SproutData.

Using Neighbors from Octree

Also, Sprout originally generated all meshes as individual components. Even with object pooling this was sub optimal, and in cases where generation times weren’t an issue scenes with too many Sprouts could get bogged down by insane Draw Calls.

Now all meshes are merged at generation time and stored in the Sprout. This has 3 major advantages:

  1. Draw calls are kept to a minimum
  2. Static Mesh Generation is now MUCH faster (worst case is similar to Mesh Import time)
  3. Meshes can be edited during Sprout generation

Leaf Mesh Editing

Project Vector Displacement Module

Also, this means that Sprout is useful for building complex Nanite ready assets.

Now Sprout is fast, capable of generating large amounts of dense meshes, AND we can edit them at generation time. We were already using the Modeling Tools functionality through C++ modules, why not let users edit their meshes in BP using the new Geometry Tools?

  • Sprout Modules are compatible with Geometry Scripting ( in UE 5.0)

Geometry Scripting in Modules

Sprout is now capable of making more dense and more interesting foliage quicker than ever, and we’ve still got ideas for pushing it further.


UX


Sprout needed some love in the UX department. Speeding up Sprout was a massive help, and the ability to make more complex foliage was great, but making the original promo material left us with a lot of ideas for improvements and features.

One of the original goals of Sprout was to bring the the flexibility of Niagara to foliage (and other mesh asset) generation. Working with Sprout, it was clear that we weren’t giving users enough control and visibility of parameters, inputs, and outputs.

  • We now provide users with the ability to easily log the value of any input.
  • Module Stages can be sorted.

  • Users can use the stack to create editable widgets for vector values. Custom widgets can be created for any SproutInputScript as well.
  • Output and Module parameters have been redesigned to allow users to access and reuse the results of modules.

Using Module Outputs

  • Default Scripts and Values for inputs are now supported, Copy/Paste for modules and inputs is now smoother, and Undo/Redo is supported for Stack edits.

We think these changes have made a huge improvement to workflow with the Sprout stack, but Hand Editing Sprouts needed some love too.

We spent a bunch of time working on the SproutEdit Mode, adding tools, visualizations, and buttons to make editing Sprouts easier. We integrated the new InteractiveToolsFramework which has allowed us to make some pretty awesome stuff without much hassle.

  • Splines and Parameter data can be edited using new Brush Tools

New Spline Editing Tools

As mentioned above, we also spent some time making sure Sprout was compatible with the modeling tools.

Modeling Tools

We still want to ensure that all parts of Sprout are accessible and implementable in Blueprints, and a good amount of time has been spent designing and redesigning our systems with this in mind.


Sprout Mesh Builder


The MeshBuilder has seen some pretty extensive upgrades since the first post. Besides being far more stable in general, we’ve been hard at work trying to improve the user experience.

  • Mesh building tools are now more easily accessible and more stable

Creating New Meshes

  • Mesh Management is now handled in a custom SceneOutliner. This allows users to add meshes, LODs, and even assemble groups of meshes

  • SproutMeshBuilderAssets can be used as mesh sources allowing users to quickly iterate and improve on created Leaf Cards without having to create and overwrite Static Meshes.

Using SMB Assets

  • Texture baking has been improved and a TexturePreview window was added

Texture Rendering



Of course, all of this took time and sanity. Many things were redesigned many times. Many bugs were squashed, many more were created. If Trello has a maximum number of allowed cards and checklists, I’m near it. But all in all, we’re pleased with the progress.

Currently, the plan is to support 4.26 onward. The upgrade to 5.0 is fully functional with some extra bugs since we are developing primarily in 4.26 and porting changes to 5.0. The first upgrade to 5.0 took a lot of work ( ie. don’t base your code on experimental Geometry plugins if you want to be happy) but with that out of the way, integrating changes has been pretty simple.

There is still work to be done. Polishing and bug fixing are still the main focus and new features are only being added if they extend existing behavior (new InputScripts, new spline brushes, etc.).


With all this in mind, we are preparing to launch a Closed Beta of Sprout.

  • Beta Phase 1 will be very limited but we plan to expand this in a second closed beta phase that will begin when we have addressed feedback from Phase 1.

  • You can sign up HERE to be alerted when access to the beta is available.

1 Like

Just came a across this thread, and have a great idea for it. I am currently working on a project and think they may come in handy.

Also what would be really great is using AI from a image to automatically create the tree