как насчет
rnd[position.GetHashCode() % rnd.Length];
для этого потребуется любой вектор, используйте GetHashCode, чтобы преобразовать вектор в целое число, и используйте оператор модуля, чтобы ограничить результат длиной массива. Это предполагает, что GetHashCode хорошо определен.
Если вы хотите, чтобы векторы, близкие друг к другу, отображались на одно и то же число, вы можете использовать что-то вроде:
var hashCode = (long)position.X;
hashCode = (hashCode * 397) ^ (long)position.Y;
hashCode = (hashCode * 397) ^ (long)position.Z;
вместо GetHashCode.
Другой альтернативой было бы вместо этого поместить случайные числа в трехмерный массив и использовать вектор для индексации в нем вместо этого, используя оператор модуля, чтобы убедиться, что каждая координата отображается в допустимый диапазон.