Я знаю этот эффект по моей самой первой имитации пульсации.Решение: Используйте более детальное ядро свертки.Возможно, вы также захотите добавить коэффициент демпфирования, чтобы рассеять пульсации, чтобы никакие числовые ошибки не накапливались в быстрой интеграции.Это релевантная часть одного из моих ранних игровых движков (написанного 10 лет назад):
*value_at(Next, x, y)=(
(
(*value_at(Current, x-1, y-1)+
*value_at(Current, x+1, y-1)+
*value_at(Current, x+1, y+1)+
*value_at(Current, x-1, y+1))+
(*value_at(Current, x-1, y)+
*value_at(Current, x+1, y)+
*value_at(Current, x, y-1)+
*value_at(Current, x, y+1))
)/4
-( *value_at(Previous, x, y) )
)*0.98;
Фактически это вычисление дискретной волновой функции с использованием свертки.Чем выше разрешение ядра, тем лучше качество.Использование SIMD-оптимизации действительно помогает здесь.Однако, поскольку свертка - это простое умножение в пространстве Фурье, очень хорошая идея сделать это, используя метод Фурье, если вы заинтересованы в высококачественных пульсациях и волнах.Используя некоторые настройки, можно создавать также хорошие гравитационные волны (не путать с таковыми из общей теории относительности) http://en.wikipedia.org/wiki/Gravity_wave