Даже если прошло несколько лет, этот вопрос по-прежнему остается одним из лучших результатов в Google.
В симплексном шуме x и y из прямой (ортонормированной) сетки искажаются, чтобы найти симплекс, в котором находится точка (треугольник в 2D), поэтому с обычными методами разбиения на листы (% 255 или чем-то другим), он ДЕЛАЕТ плитку, но плитки на скошенных координатах, то есть это плитки по диагонали, что совершенно бесполезно.
Простое решение, которое я нашел, состоит в том, чтобы «отменить» результат, так чтобы исходные X и Y сначала были перекошены «влево», затем алгоритм переместит их «вправо», а финальный результат будет перенастроен на не перекошенную сетку.
Если, например, ваша симплексная реализация похожа на SimplexNoise.java, которую вы можете найти везде в сети, она искажает сетку с помощью:
var F2 = 0.5*(Math.sqrt(3.0)-1.0);
var s = (xin+yin)*F2; // Hairy factor for 2D
var i = Math.floor(xin+s);
var j = Math.floor(yin+s);
Вы можете просто «предварительно наклонить» его в противоположном направлении в точке входа метода:
var G2 = (3.0-Math.sqrt(3.0))/6.0;
var t = (xin+yin)*G2;
xin-=t;
yin-=t;
К сожалению, он производит странный эффект (то есть выглядит немного искаженным: D), что обычно не проблема, но зависит от того, для чего вам нужен этот шум.
Поскольку это было проблемой для меня, я попытался применить этот «обратный перекос» только к нескольким октавам, тем, которые больше весят в конечном результате, и вместо этого использовал интерполяцию для «более легких» октав. Это решение дало мне удовлетворительную мозаику, основанную на симплексном шуме Перлина, потому что интерполяция на всех октавах привела бы к слишком большому затуханию на границах мозаики, и когда добавление большего количества октав без искусственного перекоса, эффект внешнего вида скрывается под дополнительным шумом.