@jawatr - Just in case you’re still stuck on this, I’m pretty sure your issue is with local bounds calculation.
In your viewport everything works because the material has access to your character’s local bounds (via the ObjectLocalBounds node). But when you’re drawing this material to a render target the node will return nothing because it’s really just an additive brush material.
One way to solve this is to add two vector parameters - min bounds / max bounds and feed these values in from your blueprint for each mesh. You can go one step further by using the same parameter setup while generating your positions texture too, thus ensuring consistency across the board.
**A Plug for my plug-in:**
If you're looking for a single-node painting solution that works on any number of characters/landscapes/props, is network-ready and supports collisions, then do check out my mesh painting plugin :)