Feature Request
Path Scatter – Align to Surface with Custom Input
Introduce an “Align to Surface” checkbox for Path Scatter nodes, with the option to specify a custom surface input — similar to how Surface Scatter handles alignment.
When using Path Scatter on a landscape, we run into issues with displaced surfaces — meaning we can only build clean, reliable roads on mostly flat terrain unless we pivot fully into UE’s native PCG workflows.
From what I’ve found, Path Scatter can’t reference external geometry or surfaces for alignment — possibly expected behavior (unless I’ve missed something lol).
Density Scaling Caveat – Surface Scatter + Proximity Mask:
I’ve tested Surface Scatter with a proximity mask around a spline. While it works, it doesn’t give consistent scatter density where needed.
- We can boost the max scatter count, but I’m only seeing ~1–20% of it appear visually — understandable since it calculates across the whole mesh, but not ideal for localized control.
Adding an Align to Surface input to Path Scatter could help avoid that mismatch and keep density focused along the spline.
This would allow more reliable and flexible control when placing roads or paths on uneven terrain — without abandoning spline workflows or using awkward workarounds.
I’ve attached screenshots (including one labeled “Desired Interaction”) that highlight current limitations.
I also tried object masking with Surface Scatter, but it doesn’t consistently follow spline shape or offer the same precision.
This feature could even behave like a Bounds Scatter, driven by spline input with built-in proximity and alignment controls.
Summary
- Path Scatter with “Align to Surface” checkbox
- Localized density scaling via spline
- Better alignment for displaced terrain (great for roads/paths)
Glad to be corrected if there’s a better way!
Thanks for reading my word soup 🙂
Best,
Happy user – J






5 Replies
Hey hey! @James Thanks for the feedback!
1. With Path Scatter we do have a projection mask and also a toggle "align to curve". I usually find that these gets me the results I want on a curvy terrain. But maybe your usecase is slighty different than in video 1 here?
2. Density Scaling Caveat – Surface Scatter + Proximity Mask: For this, you should use Object Mask and toggle the Optimize for Curves. This makes the tool view the inside of the spline as a custom mesh, instead of the full surface, which is what leads to this bad density✅ Try it out and let me know! P.s you can combine this with a proximity mask if you don't want scattering inside a full spline. Not sure if this was what you tried already, but wanted to show it at least -- Video 2
3. When using nanite tesselation for displacement, our scatter tools generally fall short right now as we can't "see" this displacement, the tools only "see" the original surface due to our scatter logic 😦
I hope this helps! And if it doesn't happy to keep chatting!
oh wow you make this look wonderfully easy! Thank you for such a prompt response!
I had 0 clue of projection mask haha this is great!
I guess my only concern would be when using a spline that is not near to a closed loop!
My example would be large scale terrain, I could technically draw a closed loop spline around the original path however it may get messy should the original path have to change!
Very helpful nontheless!
I understand the concern for sure! But right now due to the logic our scatter uses, it's the only way😁
For sure! No problem,
I have found maybe a request that could better solve this
When using the path scatter and offsetting via Parallel width, when we use a projection mask it will reference the original Path position.
Is it possible to collect the offset positions when projecting?
Allowing for those parallel width paths to project accurately when projecting to a landscape/mesh
I understand this may be built on general offsets from the path itself and can see how tweaking this may be a pain haha
Great if possible and no stress if not
Appreciate the discussion on this nontheless! Thanks 🙂
Is this what you mean? 😄 It feels like it works like that already (99% good at least😅 )