Just loosely thinking here but if you run a line/sphere/whatever trace on/around your character, can you get the things found and update values in their respective material-instances?
Maybe update an MPC that materials can centrally-reference?
Writing your own shader might be a possibility. It seems that, mechanically, you’d want to use a bitmask AND depth and I don’t know how to get both of those via a material/shader.
The trace might help you sort depth, but no idea how performant it might be on top of everything else. If you are already doing some kind of trace (like for lockons) maybe piggy-back?