I’m working on one of those 3D environment 2D sprite projects, and I’ve been able to get the sprites to cast and receive shadows without any real issue. Since I’m using 2D sprites, and I want the camera to be angled to make the ground more visible, I’m “billboarding” the sprites, so that they’re always directly facing the camera. This is where the issue comes in. Rotating the sprites on the X axis changes the angle of the shadow. This really shows when a 2D object that has been billboarded is near a 3D object, since the 3D object does not have this shadow angle issue.
Here’s an example of Octopath having no issue with this:
And here’s an example of the issue in my test environment:
It’s already damaging enough to the illusion that the sprite is at a different angle than the 3D objects, but I’ve found that perspective in the spritework can help with that. But the shadow issue absolutely kills it, in my opinion. So, does anyone know of some sort of way around this? I’ve already explored having a second, not billboarded sprite that is only rendering shadows, which works pretty well, except for the fact that the invisible shadow sprite will cast it’s shadow on the main sprite. The only way around this is to use an unlit shader for the sprite, which is largely against the point of what I’m trying to do here. The most ideal solution I could think of is to have the lighting and shadows calculated on the sprites, and then billboard them. I’m currently researching the URP API to look into this, but I don’t know if it’s even possible. Any ideas would be greatly appreciated.


