Enabling terrain on parts would be a really good starting point but it doesn’t offer much creative liberty. Solutions like this don’t scale well for every use and developers end up using those methods in very hacky ways in order to obtain particular patterns. For example, someone could scatter parts under the map to create the foliage they want. As much as this can sound great, this isn’t an optimal way to develop and only leads to wasted performance and a poor workflow. We need a solution to this where we have tools to control foliage exactly the way we want.
I would personally propose a few different alternatives on how to implement this.
Vertex based weight painting
We already have some form of this right now when we paint with other materials than the grass (for example the leafy grass). This is great for now, but is this really a solution or something we endure? I would consider this a hack since we’re unable to blend to standard grass without foliage. This makes it hard to respect our art direction and not having dead orange leaves in a summer environment. Even when considering MaterialService, we’d rather use the “LeafyGrass” slot for something more useful than the same exact grass material but this one is the one without decoration.
Thus, the first step would be to separate the correlation between Material and Decoration. I should be able to paint any decoration on any material. Grass, Ground, Mud, Cobblestone, Snow, Rock, name it, they should all be indifferent to Decoration. To adjust the colors, we should have a second MaterialColors property for grass to adjust its color tint depending on the material under.
Now time for the parts, they will need to implement the vertex painting on the parts just like on the terrain. For each vertice on the object, you can decide if it’s showing Decoration or not using a brush. To even push this further, material vertex based painting would be amazing. Basically, we could blend materials on the instances, but this is another topic.
As you can probably start to feel though, this is still a very… atypical workflow? We still have extremely limited freedom on what we’re actually creating. Our visual identity will still be tightly linked to Roblox. It’s basically just upgraded Decoration to the max, and it’s where this ends.
Instance painting and scattering tools
This is currently “visually possible” by simply using MeshParts and some scripting and plugins. However, this is not something we will be able to add in standard games anytime soon due to the massive performance drawbacks. This is nowhere near being optimized and doesn’t have any wind animation feature compared to the current Decoration, except with rigs/deformation but this comes at an even greater performance cost. Foliage should be a thing of its own in order to get the best possible performance.
There are multiple steps necessary to make this implementation successful. The first tool is a brush to manually paint individual instances of foliage around the environments. We also need something to manually select the instances and adjust their position/orientation/scale. After that, we need automatic surface fills with noise to determine density (a bit like the terrain generator) that way you can easily fill a terrain/part/surface of the foliage the way you want. We also need to be able to control the way the foliage is affected by wind, it usually is done through vertex painting so why not do it in this case as well.
–
That’s about all I have I think, I’ll edit this if anything else comes to mind