Using GAS exclusively for damage/health in larger scale game

I’m curious if anyone is working on a larger scale (open world scale) game where they are using GAS and GameplayEffects exclusively to apply damage?

My worry long term is that requiring an AbilitySystemComponent on every single actor that can ever take damage and have “health” is a heavy handed approach. If an open world scaled game has potentially hundreds or every thousand of actors that can be damaged (characters, doors, windows, boxes, barrels, fences, etc…), GAS seems like it might be overkill and potentially a long term issue with perf/replication in these cases.

Even in the simplest case, a basic breakable box, that has a small pool of health, and when that health reaches 0 it breaks. This requires a decent amount of work in GAS, “using attribute sets, setting default values on these attributes, checking when they reach 0 in PostGameplayEffectExecute, etc…”. Where in the case of a simple breakable we could probably just use a very simple health component, and a single repnotify bool for the state of broken/not broken.

I’m also curious if anyone has taken an approach to this that has different paths for applying damage depending on the target of it? One path for applying gameplay effects like normal if the target has an ability system comp, and another for applying damage through a simpler means that doesn’t require an ability system on the target. If so was there any issues you ran into with having to manage both paths given how complex of interactions via effects GAS allows designers to do?

Somewhat related: here is a post about making the ability system component lazy: Lazy loading the Ability System Component (GAS) in Multiplayer games - Devtricks

I’m using OnRep functions and the Apply Damage functions. Anything else seems overkill/bloated.