VJ Master 1.0
Real-time audio analysis and visualisation.
Loading...
Searching...
No Matches
ST_AudioReactiveBoidsLib.h
1// Copyright (c) 2025 Aaron Trotter (ShaderTech). All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "RHIGPUReadback.h"
7#include "RenderGraphDefinitions.h"
8#include "Main/ST_AudioProcessingSettings.h"
9#include "ST_AudioReactiveBoidsLib.generated.h"
10
14USTRUCT(BlueprintType)
15struct ST_AUDIOVISUALISATION_API FST_VJ_BoundsConstantParameters
16{
17 GENERATED_BODY()
18
19public:
21 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "ShaderTech|Bounds|Constants")
22 bool bSphere = true;
23
25 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Bounds|Constants", meta = (EditCondition = "bSphere"))
26 float Radius = 100;
27
29 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Bounds|Constants", meta = (EditCondition = "!bSphere"))
30 FVector BoundsExtent = FVector(100, 100, 100);
31};
32
39USTRUCT(BlueprintType)
40struct ST_AUDIOVISUALISATION_API FST_VJ_BoidItem
41{
42 GENERATED_BODY()
43
44public:
46 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "ShaderTech|Boids")
47 FVector3f pos = FVector3f(0.0f, 0.0f, 0.0f);
48
50 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "ShaderTech|Boids")
51 FVector3f vel = FVector3f(0.0f, 0.0f, 0.0f);
52
54 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "ShaderTech|Boids")
55 float reactiveNoise0 = 0.0f;
56
58 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "ShaderTech|Boids")
59 float reactiveNoise1 = 0.0f;
60
62 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "ShaderTech|Boids")
63 FVector4f col = FVector4f(0.0f, 0.0f, 0.0f, 0.0f);
64};
65
70{
72 TArray<FRDGPassRef> InitPass;
73
75 TArray<FRDGPassRef> ExecutePass;
76
78 FGPUFenceRHIRef InitFence;
79
82 {
83 InitPass.SetNum(0);
84 ExecutePass.SetNum(0);
85 InitFence = nullptr;
86 }
87
89 FST_VJ_BoidsRDGStateData(int32 InitPassSize, int32 ExecutePassSize)
90 {
91 InitPass.SetNum(InitPassSize);
92 ExecutePass.SetNum(ExecutePassSize);
93 InitFence = nullptr;
94 };
95
98 {
99 for (int32 Index = 0; Index < InitPass.Num(); ++Index)
100 {
101 InitPass[Index] = nullptr;
102 }
103 for (int32 Index = 0; Index < ExecutePass.Num(); ++Index)
104 {
105 ExecutePass[Index] = nullptr;
106 }
107 }
108
110 void Dispose()
111 {
112 if (InitFence->IsValid())
113 {
114 InitFence->Clear();
115 InitFence = nullptr;
116 }
117 }
118
121 {
122 return (!InitFence.IsValid() || !InitFence->Poll());
123 }
124};
125
129USTRUCT(BlueprintType)
130struct ST_AUDIOVISUALISATION_API FST_VJ_BoidConstantParameters
131{
132 GENERATED_BODY()
133
134public:
136 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Constants")
137 int32 numBoids = 32;
138};
139
143USTRUCT(BlueprintType)
144struct ST_AUDIOVISUALISATION_API FST_VJ_BoidDynamicParameters
145{
146 GENERATED_BODY()
147
148public:
150 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boid|Variables")
151 float simulationSpeed = 1.0f;
152
154 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
155 float maxSpeed = 2.0f;
156
158 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
159 float minDistance = 0.15f;
160
162 float minDistanceSq() const { return minDistance * minDistance; }
163
165 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
166 FVector2f cohesionFactor = FVector2f::One();
167
169 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
170 FVector2f separationFactor = FVector2f::One();
171
173 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
174 FVector2f alignmentFactor = FVector2f::One();
175
177 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
178 FVector2f perlinNoiseForce = FVector2f::One();
179
181 float turnSpeed() const { return maxSpeed * 3.0f; }
182
184 float minSpeed() const { return maxSpeed * 0.75f; }
185
187 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
188 float meshScale = 0.02f;
189};
190
194USTRUCT(BlueprintType)
195struct ST_AUDIOVISUALISATION_API FST_VJ_ReactiveBoidDynamicParameters
196{
197 GENERATED_BODY()
198
199public:
201 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
203
205 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
207
209 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
210 EAudioIOType audio_ReactiveNoise0_IO = EAudioIOType::None;
211
213 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
215
217 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables", meta = (EditCondition = "!baudio_ReactiveNoise0_Mono"))
219
221 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
223
225 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
227
229 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
230 EAudioIOType audio_ReactiveNoise1_IO = EAudioIOType::None;
231
233 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
235
237 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables", meta = (EditCondition = "!baudio_ReactiveNoise1_Mono"))
239
241 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
243
245 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "ShaderTech|Boids|Variables")
247};
248
252USTRUCT(BlueprintType)
253struct ST_AUDIOVISUALISATION_API FST_VJ_BoidCurrentParameters
254{
255 GENERATED_BODY()
256
257public:
260
263
265 float worldScale = 1.0f;
266
269
271 FMatrix44f transformMatrix;
272
275};
Struct to hold constant parameters for VJ boids, such as the number of boids.
Definition ST_AudioReactiveBoidsLib.h:131
int32 numBoids
Definition ST_AudioReactiveBoidsLib.h:137
Struct to hold current parameters for VJ boids, combining constant and dynamic parameters along with ...
Definition ST_AudioReactiveBoidsLib.h:254
FMatrix44f inverseTransformMatrix
Definition ST_AudioReactiveBoidsLib.h:274
FST_VJ_BoidDynamicParameters DynamicParameters
Definition ST_AudioReactiveBoidsLib.h:262
float worldScale
Definition ST_AudioReactiveBoidsLib.h:265
FMatrix44f transformMatrix
Definition ST_AudioReactiveBoidsLib.h:271
float boundsRadius
Definition ST_AudioReactiveBoidsLib.h:268
FST_VJ_BoidConstantParameters ConstantParameters
Definition ST_AudioReactiveBoidsLib.h:259
Struct to hold dynamic parameters for VJ boids, such as simulation speed, max speed,...
Definition ST_AudioReactiveBoidsLib.h:145
float turnSpeed() const
Definition ST_AudioReactiveBoidsLib.h:181
FVector2f separationFactor
Definition ST_AudioReactiveBoidsLib.h:170
FVector2f perlinNoiseForce
Definition ST_AudioReactiveBoidsLib.h:178
float minSpeed() const
Definition ST_AudioReactiveBoidsLib.h:184
float maxSpeed
Definition ST_AudioReactiveBoidsLib.h:155
FVector2f cohesionFactor
Definition ST_AudioReactiveBoidsLib.h:166
float meshScale
Definition ST_AudioReactiveBoidsLib.h:188
float minDistance
Definition ST_AudioReactiveBoidsLib.h:159
float minDistanceSq() const
Definition ST_AudioReactiveBoidsLib.h:162
float simulationSpeed
Definition ST_AudioReactiveBoidsLib.h:151
FVector2f alignmentFactor
Definition ST_AudioReactiveBoidsLib.h:174
Struct representing a single boid item in the VJ system, including its position, velocity,...
Definition ST_AudioReactiveBoidsLib.h:41
FVector3f vel
Definition ST_AudioReactiveBoidsLib.h:51
float reactiveNoise0
Definition ST_AudioReactiveBoidsLib.h:55
float reactiveNoise1
Definition ST_AudioReactiveBoidsLib.h:59
FVector3f pos
Definition ST_AudioReactiveBoidsLib.h:47
FVector4f col
Definition ST_AudioReactiveBoidsLib.h:63
FST_VJ_BoidsRDGStateData(int32 InitPassSize, int32 ExecutePassSize)
Definition ST_AudioReactiveBoidsLib.h:89
bool WaitingOnInitFence()
Definition ST_AudioReactiveBoidsLib.h:120
TArray< FRDGPassRef > InitPass
Definition ST_AudioReactiveBoidsLib.h:72
void Dispose()
Definition ST_AudioReactiveBoidsLib.h:110
FGPUFenceRHIRef InitFence
Definition ST_AudioReactiveBoidsLib.h:78
TArray< FRDGPassRef > ExecutePass
Definition ST_AudioReactiveBoidsLib.h:75
FST_VJ_BoidsRDGStateData()
Definition ST_AudioReactiveBoidsLib.h:81
void ClearPasses()
Definition ST_AudioReactiveBoidsLib.h:97
Struct to hold constant parameters for VJ bounds, such as sphere radius or extent of the bounding box...
Definition ST_AudioReactiveBoidsLib.h:16
bool bSphere
Definition ST_AudioReactiveBoidsLib.h:22
float Radius
Definition ST_AudioReactiveBoidsLib.h:26
FVector BoundsExtent
Definition ST_AudioReactiveBoidsLib.h:30
Struct to hold reactive dynamic parameters for boids, such as audio-reactive noise multipliers and fr...
Definition ST_AudioReactiveBoidsLib.h:196
int32 audio_ReactiveNoise1_ChannelIndex
Definition ST_AudioReactiveBoidsLib.h:238
bool baudio_ReactiveNoise0_Mono
Definition ST_AudioReactiveBoidsLib.h:214
EAudioIOType audio_ReactiveNoise0_IO
Definition ST_AudioReactiveBoidsLib.h:210
int32 audio_ReactiveMaterial1_ChannelIndex
Definition ST_AudioReactiveBoidsLib.h:246
float audio_ReactiveNoise1_Multiplier
Definition ST_AudioReactiveBoidsLib.h:222
bool baudio_ReactiveNoise1_Mono
Definition ST_AudioReactiveBoidsLib.h:234
int32 audio_ReactiveNoise0_ChannelIndex
Definition ST_AudioReactiveBoidsLib.h:218
EAudioIOType audio_ReactiveNoise1_IO
Definition ST_AudioReactiveBoidsLib.h:230
float audio_ReactiveNoise0_Multiplier
Definition ST_AudioReactiveBoidsLib.h:202
int32 audio_ReactiveNoise0_FrequencyIndex
Definition ST_AudioReactiveBoidsLib.h:206
int32 audio_ReactiveNoise1_FrequencyIndex
Definition ST_AudioReactiveBoidsLib.h:226
int32 audio_ReactiveMaterial0_ChannelIndex
Definition ST_AudioReactiveBoidsLib.h:242