Есть 10 видов шумов (аля PerlinNoise, SimplexNoise, CubicNoise, CellularNoise, ValueNoise, WhiteNoise)
есть ещё WarpNoise
каждый из них имеет общие свойства: (частота, режим интерполяции, тип расчёта дистанции (манхетан, евклидовая, натуральная))
все виды шумов получают на вход два параметра — float x, float y и выдают значение float
WarpNoise особенный в этом плане, он получает на вход ref float x, ref float y, ничего не возвращает но меняет эти параметры по ссылке
у тебя GetValue не является общим для всех наследников, убери его из абстрактного класса, если хочешь в одном месте написать, создай отдельный уровень абстракции чисто с этим GetValue (SimpleNoise, ImmutableNoise etc), а WarpNoise отнаследуй напрямую от Noise