На уровне модели это вылечить можно запретив нормалям вершин на углах клеток одновременно наклоняться к диагонали. Но это сортировать и сравнивать надо командой наподобие dot
lit = saturate(dot(normal,lightDir);
|
На мой взгляд тут saturate как козе баян, косинус не будет больше 1, а эта команда если я не ошибаюсь возвращает косинус угла между векторами, но может я и гоню. Наврал. Там еще на длины векторов умножается.