public protocol CoherentNoise { associatedtype Scalar: FloatingPoint & SIMDScalar init() } public protocol CoherentNoiseRandomInit: CoherentNoise { init(random: inout Random) } public protocol CoherentNoise2D: CoherentNoise { func get(_ point: SIMD2) -> Scalar } public protocol CoherentNoise3D: CoherentNoise { func get(_ point: SIMD3) -> Scalar } public protocol CoherentNoise4D: CoherentNoise { func get(_ point: SIMD4) -> Scalar }