Simple Scatter Plugin

Hello,

this is the thread dedicated to reporting issues and suggestion about Simple Scatter Plugin: https://www.unrealengine.com/marketp…simple-scatter

This post and thread will be updated with the relevant information as the time goes on.

2 Likes

Hey. I really like the look of this product. The closest thing to ForestPack I’ve seen in Unreal. Awesome work!

I will probably be purchasing it soon but I did wonder if it was currently possible to scatter certain meshes in the falloff areas of a defined scatter area? (either from a texture mask or spline falloff).

For instance, in the support videos you show that you are able to affect the scale of the scatter meshes in the falloff areas of a soft image mask. That’s great. What you’re basically suggesting there is the plants/trees are younger/smaller the further into the falloff they get. This is perfect for grass and bushes where younger plants are just smaller versions of the adult plants. In trees however, a younger tree would be a totally different mesh to an adult tree.

So in this instance, could you specify that adult trees grow in the white areas of the image mask and then a different mesh (the younger trees) grow in the grey falloff areas of the mask?

If you can’t currently do that, might I add it as a suggestion as I think then you’ve got pretty much everything covered!

The problem with these task specific features is that there are hundreds if not thousands of them. That would defeat the purpose of the scatter being simple and would turn it into something as ugly as the ForestPack UI, in terms of usability. It would start with “spawn different meshes on the edges” and would continue with “spawn different meshes based on attitude”, then “spawn different meshes based on slope, because different bushes will grow on cliffs” and so on.

I like to trade efficiency in very specific scenario for more simplicity and ease of use in majority of basic scenarios. Otherwise, the scatter would end up having 100’s of “make this very specific scenario” buttons, knobs and multipliers.

That being said :mad:

What you want is quite doable:


Dark green cubes are stand ins for mature trees and bright green cubes are supposed to be young trees.
I’ve created first scatter, where I’ve just used distribution map to drive only distribution, not scale of the mature trees:

I have then made another scatter for young trees. Here I’ve color corrected the same distribution map to erode it a bit outwards, and then subtracted the distribution map of the mature tree scatter from it (R channel drives density, G drives scale):

So now you have young trees not growing where the mature ones do, and young tree scale fading away from the edges of the forest. If you take the mature tree distribution texture and the adjustments made to it and wrap it in a material function which you reference in the distribution material of the young tree scatter, then distributions of both these scatter objects become linked and you don’t need to manually keep them in sync.

Also, the young trees are smaller so they required more density. Imagine having to do all of that in single scatter. Now people would not only require button to have different meshes on the edges, but also different instance density on the edges, and then different transform randomization on the edges, and then they would want same for the slopes, etc… It would get ugly really fast and could turn into another space shuttle cockpit dashboard thing that the ForestPack is. This approach, while a bit more laborious, does not compromise usability for less complex use cases, but does not stop you from flexible solutions like this one :wink:

Here, I’ve even made you a video showing how easy it is to swap and adjust the distribution if you link it via material function: You just swap the texture and it automagically grows a new forest with young trees on the edges with scale falling off outwards :slight_smile:

2 Likes

Thanks for this! I take your point about keeping your feature as simple as possible. But I do maintain that it is quite a common scenario. That said, the interface would have to become more complicated then it needed to be.

Your solution using materials seems to work perfectly using your current feature set.

Thanks for taking the time to go through this!

We bought your plugin and love it.
As i´, right now on it, just a quick question.

How would you animate (if´s possible at all?!) the count of the instances using sequencer, i have to “delete” a forest in an animation and wonder how i do it cool =)

Cheers, Andy

Well, the plugin is originally made just to scatter the instances, in a static manner, not really modify them after the fact, at runtime. That doesn’t mean it’s not possible, it just means that there’s no option for that right in the UI. The scattering of large amounts of instances takes a while, so it would definitely be way too expensive to recalculate the distribution during the game or sequencer playback. So in order to do this, you will have to get more technical.

It uses HISM component under the hood. So once you get a reference to the HISM component, the HISM component has functions which allow you to get the instance index of any instance you have overlapped with an object, or have hit with line trace, etc… So once you have the index, you can either use it to move the instance, or remove it. If you want to delete the entire forest at once, you can just delete/destroy the entire component, which would be as simple as getting the given component in blueprint and destroying it.

Someone already asked a similar question a while ago, and I’ve made this simple example:
[Imgur: The magic of the Internet

https://youtube.com/watch?v=8CFT8n3DJ_E](Imgur: The magic of the Internet)
Here, I am using a raycast to get the HISM component, then get get the specific instance index using sphere overlap, and then I am able to either move or remove the instances.

I could propose more specific solution if you are more specific about how exactly do you want to delete the entire forest. If you want entire forest to disappear from frame to frame, then why not just add the scatter object into sequncer and disable the “Visible” flag? :slight_smile:

I like the example above, what i need to do is following.

I do an animation for a 360 Video production, in the anim you see two virtual hands (like you see in VR productions) these hands delete the whole world around us, one by one. I also like to delete the forest in a cool way =)

Can you give me a hint how you did it in the video ?

Andy

The hint is above, in the imgur screenshot link :slight_smile: Basically, if you have a vector of the area your hand is pointing at, all you need to do is to create sphere overlap from that location vector and remove those instances, as shown here: https://i.imgur.com/Ktt22f8.jpg
What you are really interested in is the topmost part of the graph, branching from InputAction LMB. The two on the bottom are for moving the trees. You are mostly concerned about the Get Instances Overlapping Sphere function. Center input is location where you are deleting the instances at, and Radius is how far from that point will distances be deleted. So if you call that every frame and have the vector location input for the center moving, you basically have a scatter eraser tool.

But if you are doing it every frame, I’d suggest doing the cast only only for the first time, and then caching reference to the HISM into some variable, as doing cast every tick can be expensive, especially for VR.

Thanxx alot, will try it out =)

I will not do an active VR-App, i have to animate it by hand to look like it would be in VR (dont ask why …:-))
The final thing will be a 360 degree video.

I’m a super noob at everything so sorry if this question is completely basic but I get an invalid setup error when I try to drop Simple Scatter into my level. It says, “make sure there are no empty instanced meshes or scatter surfaces and at least one of each.” I don’t really know what that means. I’m trying to add the SS to a landscape. I assume that counts as a scatter surface. Do I need to add some non-empty meshes to the level first before adding the SS? I’m at a bit of a loss. Thanks in advance for any help!

It just means you need to have at least one mesh to scatter and at least one surface to scatter on :slight_smile: If you have a surface to scatter on but no mesh to scatter onto the surface, then it won’t work. Conversely if you also have a mesh to scatter but no surface to scatter the mesh on, again, no scattering can happen.


So just like on the picture, make sure you have at least one surface and one mesh to scatter added (as the underscores show), and that both mesh to scatter as well as the surface to scatter on are selected (not empty) as the arrows show :slight_smile:

Hi, I noticed the apple symbol next to supported platforms on the Marketplace listing. Can you confirm this will work and compile on a Mac ? Thanks

Hi, sorry, that must have been a mistake. I can not confirm it, since I have no device to try it on. I generally can not think of a reason it should not, since I haven’t used any features outside of the engine, but on the other hand C++ build systems are so crazy and fragile I would not be surprised if something went wrong :expressionless:

So if you want certainty, then I’d have to say no. Other than that, if you buy it, and it doesn’t work, then I’d refund you without any hesitation :slight_smile:

I just looked at the plugin in the form I’ve submitted it to UE Marketplace and indeed it seems to have Mac in the uplugin descriptor file defined. I’ve submitted it the way so that Epic actually builds the binaries, so I think they were successful building them for Mac, otherwise they’d probably let me know the build has failed. But again, built binaries usually work fine in Editor, but when packaging the actual standalone game, it’s usually rebuild from the source code, and that can fail.

So yeah, unfortunately I can’t say for certainty it works on Mac. I wish I had a way to contact all the people who bought it and ask someone if they’ve tried it on a Mac :slight_smile:

Hi there,

is there any way to exclude Landscape splines (roads) from the scattering? The “Exclude meshes” seems to only accept meshes from the World Outline.

Unfortunately no. I have no clue how to go about picking them, since they are not presented in the Level editor as a separate object you could select, unless you are in that special landscape editing mode. There may probably be some way to do that, but I honestly have no clue how at the moment. So as a temporary workaround, I’d suggest creating open exclude splines and tracing them along the roads. I know it’s not the best workaround, but I unfortunately can’t think of any better at this moment. I haven’t really considered landscape splines when I was creating the plugin.

Hi,

Simple Scatter is a huge time saver, especially offering placement control not only by mesh but textures and splines is a great idea!

Quick question, is there a way to make it work with tiled landscapes?

I tried picking a LandscapeStreamingProxy actor in Scatter Surfaces Surface dropdown but it won’t let me select it.

0c5340a8eba0e41c0bfd52d0921f92a34890f4fe.jpeg
https://forums.unrealengine.com/core/image/gif;base64

Thanks in advance.

Michal

Hi,

I have to admit I’ve never tested it with Tiled Landscapes. I had one user saying it works well with tiled landscapes, but when I try it myself, I run into the same problem. The Scatter Surface picker is of the Actor type, so it is able to pick anything inheriting from the Actor class, which means literally anything, which can be placed into a level. However it seems that when referencing actors this way, only actors in the same level can be picked.

It kinda makes sense, because otherwise you can’t really guarantee the landscape you want to scatter on will be loaded at the same time Simple Scatter actor exists. For example, if you had one Simple Scatter for entire world, made of many landscapes, if you wanted to scatter on all of them using one Simple Scatter actor, you’d have to load them all at once just to perform the scattering, which would kind of defeat the purpose of level streaming. And I don’t know how I would go about that otherwise, as everything in the Simple Scatter happens on construction, meaning it has to be done before level is loaded and ready to start.

So the only way I can think of to make it work is to have one Simple Scatter actor in each of the Landscape Tile levels. That way the Simple Scatter Actor gets loaded at the same time as the tile, and also, of course, you can then pick the landscape surface in the surface picker as it’s now part of the same level. But I am still a bit worried about performance, as Simple Scatter is by no means realtime, or asynchronous, so I’d be worried about a significant hitch each time Simple Scatter actor is created during streaming level load.

Another painful thing is that using this workflow, you can no longer control the scattering behavior globally. This could be partially remedied by inheriting a blueprint class from the Simple Scatter class, and then setting the Simple Scatter parameters via it’s construction script. That should assure they are updated on all instances of this class, so you don’t have to manually go through the Simple Scatter actor in each of your Landscape Tile level when you want to make a global change.

Anyway, if you can, please try it and let me know how it goes. If it doesn’t work right, then I will have to try to figure out some other way.

EDIT: I actually realized UE is smart enough to allow you to edit multiple Actors of same type at once. So I’d suggest to put all your Simple Scatter actor in one Outliner folder, and then every time you need to change scattering globally, just select all of them and and edit all the parameters at once. However this wil still require all the streaming levels to be loaded at the same time in editor.

Rawalanche

Thanks so much for compiling this plugin!

We are trying to utilize a black and white map to control the distribution. When doing this it seems the scatter objects don’t cover all of the white area, even with the density turned up. We can see on one of your videos that you were able to control the density pretty accurately along with the scale. Could you walk us through the material set up process?