Some objects in my world get these horrible looking artifacts all over them from SkyLight shadowing as you approach them. If I switch off “Cast Shadows” in the SkyLight they disappear.
These are large game world objects, and the effect is more pronounced the larger the size. The meshes are low poly and the materials are very simple, as you can see.
Those particular objects, being made of odd angles, are a much worse than the more “square” ones in the world for some reason. But you can see some artifacts with the more square objects if you get close enough as well.
I have the lights set to mobile and I’m not using Lumen or any raytracing.
I could live with the artifacts shown in the last one but the objects in the first images look horrible. Can anyone help me to understand this thing and tell me if there’s anything I can do about it?
So I’ve been learning about distance fields. The shadowing artifacts are from distance field ambient occlusion. Why, exactly, they are so jacked up like that I don’t know, but it seems that DFAO just craps out with very large objects. Changing the distance field resolution, the UV scale, or subdividing the mesh geometry makes no difference. Scaling down the size of the mesh seems to be the only thing that fixes those very dark, ugly AO artifacts.
The objects shown at the beginning of my previous post were well over a kilometer long. It sounds a little silly on paper but it’s not that crazy compared to something like, say, the scale of the structures in the Halo games. And that’s a first-person game, where mine has you flying an airplane at close to the speed of sound. In order to get the DFAO looking reasonably not awful I found I had to scale this object down by a factor of 20 or more. The shadowing looks a lot better on even smaller objects. But even if I scaled everything in the game down 20-100x so the largest objects look ok then the smallest objects are going to be too small.
The only true solution I have is a hypothetical where you chop large objects up into many smaller meshes, which does work in theory but seems pretty impractical. Bummer!