Creating a forest then wrapping it into a Blueprint

Hey everybody,

I am in need to design a couple of Jungle/Rocky/Forest looks, similar to this one:

Which normally are the best by using the viewport editor / foliage tool.

However, each design will function more like a block, which I will spawn as a Blueprint so I can create an endless camera ride of sorts. (and in general I can’t have it being a level, rather an object that needs to be spawned/destroyed/)

So all the design has to be collected into a single blueprint.
Until now I doing each block already as a Blueprint actor to begin with, but that takes longer and is less intuitive (also I can’t use the foliage tool)

Is there a better way?
Meaning to somehow design everything in the main editor, then convert it properly to a blueprint, maintaining foliage as instances etc?

Thanks in advance

Absolutely no chance of making that a blueprint :slight_smile:

What you can do, is just use the provided world partition system, which will automatically load and unload things as the camera flys over.

Or you could use level streaming with similar effect. You can load instances of streaming levels, at any transform. So you could piece together a random type of world.

If by blueprint, you mean you want to automatically create varying terrain, you’ve really got your work cut out.

Oh I see.

By blueprint, I just mean to design a “piece of jungle”,
so mixing a floor mesh/various trees/rock meshes etc

I currently do that manually with
1- manually places instances in a blueprint
2- automatically creating instances in the construction script
3- adding instances along a spline

But the foliage tool is way quicker with these types of things,
also the whole placement is via Blueprints so I can’t see the final result until I am in play mode.

My whole approach here is not very game-like, that’s why I have to find workarounds.

The user is switching between various designs, so I do that with Spawn/Destroy.
Therefore it has to sit in a blueprint, also since each jungle-block (or each design in general) is normally spawned along the horizon to create an endless drive.

You can make a level like this, right?

Then later, in another level, you can stream in a copy of that previous one, at any position you like.

image

Ok cool that can work nicely, will give it a try,
Will it load as quickly as a blueprint? I need to have the fastest loading speeds.

also, can I also Call/Bind Events to that streamed level, similar to a blueprint? and everything that a regular blueprint can do ?

The speed a blueprint loads, depends on the complexity of the blueprint.

A streamed level will load more slowly, the more items it contains. It can take anything from .1 sec to 30 secs or more to stream a level. It really depends what you’ve put in it. Smaller levels will generally stream faster.

You have to control it yourself. You can’t communicate with anything in the level until you’ve streamed it. It’s not a blueprint, it’s a level.

Then I might not be able to use it.
For example a Blueprint with about 100 instanced trees loads in a split second, I can’t notice a loading time.

Will an exact level load in the same time?

Of course I can try and find out, but anything longer than a second is an issue in case of the plugin I’m building.

Trying it is the best way, I think.

At least it’s another method to check out :wink:

1 Like

Just pre-load your instances and you are done.

The problem with loading levels is the inital time.

You are recoding or even making a game, just load all the levels, then change their position around at no loading cost.

There will be some rendering cost, so you may want to create 2 copies of some levels to createvely stream in/out at the forefront and back.

Still, back to the concept at hand. Level streaming is more powerful than spawning a blueprint, which actually tends to hang the game thread…

Check out rdBPtools - it’s designed for things like this:

Ok so I tried the Level Stream idea, the loading time is great!

However, I struggle to reach variables and/or actors.
Is there a node I’m missing in between?

I first stream the levels and added them to an array, similar to how I’d act with a Blueprint:
image

Within the sub-level Main Blueprint, I created an array:

Then I try to get that array but I can’t :

Is there an in-between node? or it’s just not possible

Thanks a lot

It’s a streamed level reference, so what you can do with it is limited.

Only stuff like ‘should be visible’, ‘should be loaded’ etc…

You can’t access the individual assets within the level :slight_smile:

■■■■, so that cancels this approach.
Too bad because it’s so much easier to design within the level, but I have to access parameters/arrays/etc in order to control things in realtime.

Thanks anyways as always

You can access that stuff, just not through the level reference.

What do you want to get?

If you have a blueprint in the level, once you’ve streamed it, you can do a ‘get actor of class’ and boom - you have the reference.

And before anyone says anything, yes, you could write that blueprint so it registers it’s own reference with the game instance, and then just pick it up from there. Blahblahblah…

I thought that ‘get actor of class’ isn’t super cost-effective.
That’s why I used “make array” to gather the actors (for example in this case they are LED screens) into an array (in the correct order that I want)

Then, from the main level, I want to call the screens and run events within them, like control the emission intensity.

Some actions I do with Event Binding, but some with Arrays + for each loop

You can start with ‘get actor’ just to make things work.

Later, like I say, you can get blueprints to register with the game instance, and pick up their references from there :slight_smile:

Can you explain something you might want to do with the level actors, once it’s loaded? Maybe I can give a better example.

I see.

Each design is different, but for example one scene “block” looks like this:

Some of the things I need to control within the sub-level’s elements
1- Those rock-screens are Blueprints and they open/close
2- Each screen has intensity/material parameters
3- triggering Niagra’s systems within the level on/off
4- turning lights on/off

Ok.

How do you know when to open the rock screens? ( for example )

via OSC.
Unreal is running while Resolume (VJ Software) is sending OSC signals (live by the user).
Then UE is calling the relevant function.

So it’s all in realtime, the user controls the visuals.

So do they need to bind to the actor that knows how to manage OSC?