Realtime Shadows Slicing Mesh on Android

I have a golf ball in my game for Android, which is an icosphere (imported from blender) with a baked normal map. There are 18 tracks located in one level around the (0, 0) coordinate, rotated in different directions.

The game uses Distance Shadowmask to create realtime shadows for near objects. In the editor and Windows builds, this works perfectly.
3180051--242474--ball_ingame_pc.png

On Android, the shadow has a lower resolution, which is fine, but it seems to slice through the ball. Is is visible in the following screenshot. If the ball moves, it looks like it passes through several planes casting a shadow.
3180051--242473--ball_ingame_android.png

This is heavily depending on the current track the ball is on. In 3 of the 18 tracks, there are very noticable errors. Some other locations show very small errors.
However, those tracks are on seemingly random position. While the heavy errors appear on tracks located mainly in this (-x, -z) area, the small errors appear on arbitrary other positions.


I already tried:

  • changing shadowmap resolution
  • changing the directional light’s near plane
  • changing the directional light’s bias and normal bias
  • changing the directional light’s position and rotation
  • rebaking the ball’s normal map
  • using another ball mesh
  • removing the normal map from the material
  • using a different device

Do you know how to fix this problem?

I’m not an expert but I had issues with shadows. I fixed them on android with the method : I disabled shadows and used fake shadow with a projector. There is un example in standard asset : blob shadow.

Our problem with this solution is that there are trees around the tracks, which cast a shadow on the tracks and the ball. With a blob shadow the ball would still be bright in shadow areas.

I understand… Is the problem still occur if you set receive shadow ON and cast shadow OFF for the ball?

Alternate approach - if the trees are not animated/moving, the tree shadows could be projected by a cleverly placed projector map which would cast across anything it hits.
I don’t know how optimal this is compared to your current set up - but it is a solution that could be tested on one course to see how it handles.