I have used the projection approach for this. You can create a new target by raycasting each point of the target (in the positive and negative direction of its point normal) onto the source mesh. Then the data can be sampled at the new mesh points using vtkResampleWithDatset.
For large target meshes, VTK raycasting may be slow. Intel’s Embree library can be used to accelerate that step. As it appears you are using Python, I suggest using PyVista which already has support for Embree ready casting.