Попутно вопрос: почему 3x3?
В классических настройках есть два параметра - расстояние тени и радиус размытия. В соседнем форуме присоветовали посмотреть в сторону размытия по Гаусу, вот нашел
интересный линк.
Ну возьмите 4х4, чем больше матрица тем плавнее тень, но и больше время счета. Не пугайтесь, это актуально с размерами десятка и больше. Расстояние - просто смещение матрицы относительно целевой точки
Под Гауссом обычно понимаются 2 вещи
а) сложение с коэффициентами (вес ближних больше по "колокольчику" Гаусса)
b) блюр сначала по строкам, потом по столбцам, что может быть заметно быстрее при больших радиусах
В принципе никто не мешает это реализовать, просто будет "развесистей" чем цикл for. Есть еще техники быстрого сложения. Напр на фазе предрасчета для каждого пикселя запоминается сумма всех значений сверху и слева от него. Тогда интеграл по любой площади находится напрямую. Но оно Вам надо лезть во все тонкости/толстости?

Для тени что Вы показали достаточен простейший код