Post Processing
Errant Biomes allows you to run your Blueprint or C++ code on offline spawned instances.
It allows you to define additional logic to change where to spawn instances and what assets to use.
Species Setup
Post processes are added in the Post Processes
list property in the species.
There you select the class of the post process to be used. You'll be able to set properties of that class object. You can have multiple post processes in the same species.
Blueprint Setup
So use it with that in mind.
It can be a good place to experiment and then rewrite as C++ post-process.
If possible it's best to use functionality that comes in species itself.
When the post process is used Errant Biomes will output its duration to the Output Log with messages like:
LogBiomes: Post-processing for species ES_PP took 0.000546 seconds
Check that to know if the solution is performant enough for your needs.
You can create your blueprint post process by creating a class based on BiomesInstancesPostProcessBlueprintSimple
There you need to override the Process Instance
function.
Here's an example of a simple blueprint graph that would add an offset to each instance. While not useful on its own as it's better to use offset property in the species it shows how to access the transforms.
Asset
input is by ref
input.So it's an input and output at the same time. Allowing you to change what asset is being spawned.
Like this:
Here's the setup from the line-traced water lilies example:
C++ setup
To create a C++ class that works on Errant Biomes instances you need to inherit the BiomesInstancesPostProcess
class and override the Process Instances
method.
There you are given a map of FSoftObjectPath
that contains an asset that will be spawned to TArray<FTransform>
which contains all the transforms generated for that asset.
You can change, remove or add assets and/or transforms for each of those assets.
ErrantBiomesEditor
module, which is editor-onlyHere's a simple example that just adds an offset to each instance
#pragma once
#include "BiomesInstancesPostProcess.h"
#include "MyBiomesPostProcess.generated.h"
UCLASS()
class UMyBiomesPostProcess : public UBiomesInstancesPostProcess
{
GENERATED_BODY()
public:
virtual void ProcessInstances(
UWorld& World,
const TSoftObjectPtr<UBiomesSpecies>& Species,
const FTransform& InstanceToWorld,
TMap<FSoftObjectPath, TArray<FTransform>>& AssetToInstances) override
{
for (auto& [AssetPath, Transforms] : AssetToInstances)
{
for (FTransform& Transform : Transforms)
{
Transform.AddToTranslation(FVector(0, 0, 200));
}
}
}
};