Quick answer: Disable Self Shadows on the ShadowCaster2D, set the caster's Casts Shadows correctly, and shrink the shadow shape slightly inside the sprite so the lit pixels stay outside the shadow.

A sprite with a 2D shadow caster looks unexpectedly dark, as if it is in shadow even when a light faces it. The caster is shadowing itself in the URP 2D renderer.

How to fix it

1. Turn off Self Shadows

On the ShadowCaster2D component uncheck Self Shadows. With it on, the object's own shadow volume covers the sprite and dims it.

2. Verify the shadow caster shape

Make sure the caster outline is the intended silhouette and not the full quad. An oversized path projects shadow back across the sprite's lit face.

3. Order shadow and light passes

Confirm the sprite uses a Sprite-Lit-Default material and the light's Shadow Intensity is reasonable, so the lit pass writes after the shadow pass instead of being overwritten.

Catching the ones you can't reproduce

The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.

Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.

This is where a tool like Bugnet earns its place. Its SDK captures every Unity error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.

Ship the fix, watch the signature disappear from the next build. That's how you know it's really gone.