VFX Graph Multi-Position workflows

Firstly: VFX Graph is one of my favorite things Unity has shipped since nested prefabs, and I’ve been excited to see some of the new things coming, especially from Unite. Great work!

I’ve been working on creating some artist tooling with it recently, and one of the things I’ve been trying to wrap my head around is how best to optimize some of our larger effects, while maintaining artist friendly controls. The instancing feature often works well, but sometimes it’s been best to utilize the multi-position workflow and keep to a single instance of an effect. Unfortunately, things like “SetPosition” blocks then become indeterminate, making it difficult to visualize what’s going on when further edits need to be made.

A couple of questions:

1. It seems when inheriting from VFXPropertyBinder, the VFXPropertyBinder editor “eats” anything I try to do with my own custom editors. I’m ending up needing to create secondary behaviors that reference the property binders (or just not inherit from the base class), which feels clunky just to draw some handles in the scene view. I could also put it in an editor block in the main MonoBehaviour, but that also doesn’t feel great. Any recommendations for better solutions for this?

Edit: can just comment the hide flags being set in the base class - I missed this on first perusal.

  1. The core things I’m interested in (like set position blocks and their associated shapes), are, like a lot of other newer Unity code, hidden away - getting the values and reaching back in to modify these looks like it will take a lot of ugly reflection. Seeing the changes coming up in Unity 6 around these, am I setting myself up for a lot of rework in the near future? Or are there plans for easing this kind of use case?

Thanks, and keep up the great work!

For more context, this is about how far I was able to take things thus far. Note that normally, we might debug by bumping up the instance count and disabling motion so that we can visualize the shape of the emitter (per system / effect). I’ve done that here for demonstration, but is exactly the thing I’m trying to solve for.

From here, if I can read the data from the inspected shape, I could automatically setup (and hide) the majority of what I’ve put into the overlay, so that the user just needs to punch in any additional position or rotation offsets. I’ve tried reading from the PositionBase object’s InputProperties using reflection, but it seems those just return the default values - is there a straightforward way to get at these?

On my wishlist:

  • Public interface for shape types and properties - currently, I’m mirroring the types and presenting a dropdown for shape selection to avoid a lot of messy reflection.
  • Public interface for gizmos - there’s a lot of nice internal code I’m needing to either duplicate or create from scratch. Even if it was just the drawing bits and excluded the editing handles, this would go a long way.

Thanks!

Hello!
Thanks for your nice comments and your useful feedback.
We are aware that the public API is very limited for VFX graph. We are working on greatly improving that, but it will take some time.
I will discuss with the team how feasible it would be to change some of those objects to public, but I’m afraid that it may not happen in the near future.

Hi! As Gabriel said, there’s little chance we’ll make this specific API public in the near future. But we are working on making the tool a lot more extensible with fully exposed new API in future versions.

In the meantime you can use an asmref referencing Unity.VisualEffectGraph.Editor to get access to all the package internals from your project.