Когерентный сферический шум?
Кто-нибудь знает, как я мог бы генерировать следующий вид шума?
- Три входа, три выхода
- Выходные данные всегда должны приводить к вектору одинаковой величины
- Если он получает тот же вход, что и в другой раз, он должен вернуть тот же вывод
- Он должен быть непрерывным (лучше всего, если он выглядит гладким, как шум Перлина)
- Это должно казаться довольно случайным
РЕДАКТИРОВАТЬ: Было бы также хорошо, если бы он был изотропным, но это не совсем необходимо.
1 ответ
Решение
Я нашел способ, и он может быть не очень быстрым, но он выполняет свою работу (это c-подобный псевдокод, разработанный для облегчения переноса на другие языки).
vec3 sphereNoise(vec3 input, float radius)
{
vec3 result;
result.x = simplex(input.x, input.y); //could use perlin instead of simplex
result.y = simplex(input.y, input.z); //but I prefer simplex for its speed
result.z = simplex(input.z, input.x); //and its lack of directional artifacts
//uncomment the following line to make it a spherical-shell noise
//result.normalize();
result *= radius;
return result;
}