I have a PCG Graph (PCG_TerrainNoise) with a Custom HLSL node that generates procedural terrain using a Seed graph parameter fed into a SeedParam pin. The goal is to change the Seed at runtime (e.g. on BeginPlay) so the terrain looks different each time I hit Play.
What I’ve tried in Blueprint:
Event BeginPlay
→ RandomIntegerInRange
→ Get Graph Instance (from PCGComponent)
→ Set Int32Parameter (Graph Interface, Name = "Seed", Value = random int)
→ Cleanup (PCGComponent)
→ Generate (PCGComponent, bForce = true)
Print Stringconfirms the new random Seed value is being set correctly.- The “Generation Trigger” on the PCG component is set to
Generate on Demand. - I’ve verified
SetandGenerate/Cleanupare targeting the same PCGComponent instance.
The problem: No matter what I do at runtime (including forcing generation), the terrain never changes. However, if I manually edit the Seed value in the PCG component’s Details panel in the editor, the terrain regenerates correctly with a different shape.
What I’m trying to understand:
- Why does editing a graph parameter override in the Details panel (editor) successfully trigger regeneration with the new value, while setting the same parameter via
Set Int32Parameteron the Graph Instance at runtime does not? - Is there a difference between how the editor’s property change (
PostEditChangeProperty) propagates the override versus howSetGraphParameter/Generatedoes it at runtime? - Is there a known issue or extra step required (e.g., regarding GPU/Compute Graph Custom HLSL nodes specifically) to make runtime parameter changes actually reach the shader/kernel, versus just updating the parameter storage?
Any insight into the internal difference between editor-time override application and runtime Generate() parameter propagation — especially for GPU Custom HLSL PCG nodes — would be appreciated.

