How do I map 3D animations when projecting onto a 3D surface?

I've embedded an example of what I'm talking about, below:

I'm curious about:

the specific software used

tips and tricks

how to do projection of a pre-rendered animation (this seems straightforward: model the surface virtually, then map the animation to the surface. then, record the mapped animation from the same vantage point as where the projector will be in real life; they projection should them map exactly.)

how to do interactive projections, where some sort of input might affect real-time rendering of the mapped animation