Creating custom material expressions

What are the key classes/processes required for implementing a custom UMaterialExpression or altering an existing subclass?

I’d like to expose SpeedX and SpeedY from the Panner, specifically, but some more general information regarding creation of a truly custom node would be great.

For example, If I’m reading correctly, I should set my inputs as FExpressionInputs which are then compiled, but given that I just want float values I’m not sure which property of the compiled input I would be accessing. I’d have thought FMaterialInput < float > would do the job to explicitly set what type of data I’m expecting, but I’m getting the impression that those are only used for inputs the the main material node. Regardless, #including MaterialExpressionIO.h (where those are defined) gives me an unrecognised type for FMaterialInput if I try to change the speed variables from raw floats to FMaterialInput < float >.

Is there any documentation on this at the moment?