Skip to content
This repository was archived by the owner on Apr 2, 2021. It is now read-only.

Commit a7c4fdf

Browse files
committed
Added cellular jitter setting, removed artificial offset from cellular distance return types (output >= 0 now)
1 parent 19e070f commit a7c4fdf

File tree

3 files changed

+52
-97
lines changed

3 files changed

+52
-97
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -260,3 +260,5 @@ paket-files/
260260
/avxPerm
261261
*.filters
262262
/TEST/FastNoiseSIMD Preview
263+
/cellModel.skp
264+
/cellModel.skb

FastNoiseSIMD/FastNoiseSIMD.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,14 @@ class FastNoiseSIMD
199199
// Sets the 2 distance indicies used for distance2 return types
200200
// Default: 0, 1
201201
// Note: index0 should be lower than index1
202-
// index1 must be < 4, both indicies must be >= 0
202+
// Both indicies must be >= 0, index1 must be < 4
203203
void SetCellularDistance2Indicies(int cellularDistanceIndex0, int cellularDistanceIndex1);
204204

205+
// Sets the maximum distance a cellular point can move from it's grid position
206+
// Setting this high will make artifacts more common
207+
// Default: 0.45
208+
void SetCellularJitter(float cellularJitter) { m_cellularJitter = cellularJitter; }
209+
205210

206211
// Enables position perturbing for all noise types
207212
// Default: None
@@ -305,6 +310,7 @@ class FastNoiseSIMD
305310
float m_cellularNoiseLookupFrequency = 0.2f;
306311
int m_cellularDistanceIndex0 = 0;
307312
int m_cellularDistanceIndex1 = 1;
313+
float m_cellularJitter = 0.45f;
308314

309315
PerturbType m_perturbType = None;
310316
float m_perturbAmp = 1.0f;

FastNoiseSIMD/FastNoiseSIMD_internal.cpp

+43-96
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ static SIMDf SIMDf_NUM(0_6);
569569
static SIMDf SIMDf_NUM(15_5);
570570
static SIMDf SIMDf_NUM(511_5);
571571

572-
static SIMDf SIMDf_NUM(cellLength);
572+
//static SIMDf SIMDf_NUM(cellJitter);
573573
static SIMDf SIMDf_NUM(F3);
574574
static SIMDf SIMDf_NUM(G3);
575575
static SIMDf SIMDf_NUM(G33);
@@ -635,7 +635,7 @@ void FUNC(InitSIMDValues)()
635635
SIMDf_NUM(15_5) = SIMDf_SET(15.5f);
636636
SIMDf_NUM(511_5) = SIMDf_SET(511.5f);
637637

638-
SIMDf_NUM(cellLength) = SIMDf_SET(0.39614f);
638+
//SIMDf_NUM(cellJitter) = SIMDf_SET(0.39614f);
639639
SIMDf_NUM(F3) = SIMDf_SET(1.f / 3.f);
640640
SIMDf_NUM(G3) = SIMDf_SET(1.f / 6.f);
641641
SIMDf_NUM(G33) = SIMDf_SET((3.f / 6.f) - 1.f);
@@ -977,7 +977,7 @@ SIMDf x##_x##_y##_z = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(hash##_x##_y##_
977977
SIMDf y##_x##_y##_z = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash##_x##_y##_z, 10), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5)); \
978978
SIMDf z##_x##_y##_z = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash##_x##_y##_z, 20), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));
979979

980-
//SIMDf invMag##_x##_y##_z = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(x##_x##_y##_z, x##_x##_y##_z, SIMDf_MUL_ADD(y##_x##_y##_z, y##_x##_y##_z, SIMDf_MUL(z##_x##_y##_z, z##_x##_y##_z)))));
980+
//SIMDf invMag##_x##_y##_z = SIMDf_MUL(SIMDf_NUM(cellJitter), SIMDf_INV_SQRT(SIMDf_MUL_ADD(x##_x##_y##_z, x##_x##_y##_z, SIMDf_MUL_ADD(y##_x##_y##_z, y##_x##_y##_z, SIMDf_MUL(z##_x##_y##_z, z##_x##_y##_z)))));
981981
//x##_x##_y##_z = SIMDf_MUL(x##_x##_y##_z, invMag##_x##_y##_z);
982982
//y##_x##_y##_z = SIMDf_MUL(y##_x##_y##_z, invMag##_x##_y##_z);
983983
//z##_x##_y##_z = SIMDf_MUL(z##_x##_y##_z, invMag##_x##_y##_z);
@@ -1493,15 +1493,15 @@ void SIMD_LEVEL_CLASS::Fill##func##FractalSet(float* noiseSet, FastNoiseVectorSe
14931493
FILL_VECTOR_SET(Cubic)
14941494
FILL_FRACTAL_VECTOR_SET(Cubic)
14951495

1496-
void SIMD_LEVEL_CLASS::FillWhiteNoiseSet(float* noiseSet, int xStart, int yStart, int zStart, int xSize, int ySize, int zSize, float scaleModifier)
1496+
void SIMD_LEVEL_CLASS::FillWhiteNoiseSet(float* noiseSet, int xStart, int yStart, int zStart, int xSize, int ySize, int zSize, float scaleModifier)
14971497
{
14981498
assert(noiseSet);
14991499
SIMD_ZERO_ALL();
15001500
SIMDi seedV = SIMDi_SET(m_seed);
15011501

15021502
if ((zSize & (VECTOR_SIZE - 1)) == 0)
15031503
{
1504-
SIMDi x = SIMDi_MUL(SIMDi_SET(xStart), SIMDi_NUM(xPrime));
1504+
SIMDi x = SIMDi_MUL(SIMDi_SET(xStart), SIMDi_NUM(xPrime));
15051505
SIMDi yBase = SIMDi_MUL(SIMDi_SET(yStart), SIMDi_NUM(yPrime));
15061506
SIMDi zBase = SIMDi_MUL(SIMDi_ADD(SIMDi_NUM(incremental), SIMDi_SET(zStart)), SIMDi_NUM(zPrime));
15071507

@@ -1575,7 +1575,7 @@ void SIMD_LEVEL_CLASS::FillWhiteNoiseSet(float* noiseSet, int xStart, int yStart
15751575
#define Distance2Div_RETURN(_distance, _distance2) SIMDf_DIV(_distance, _distance2)
15761576

15771577
#define CELLULAR_VALUE_SINGLE(distanceFunc)\
1578-
static SIMDf VECTORCALL FUNC(CellularValue##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z)\
1578+
static SIMDf VECTORCALL FUNC(CellularValue##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z, SIMDf cellJitter)\
15791579
{\
15801580
SIMDf distance = SIMDf_NUM(999999);\
15811581
SIMDf cellValue = SIMDf_UNDEFINED();\
@@ -1607,7 +1607,7 @@ static SIMDf VECTORCALL FUNC(CellularValue##distanceFunc##Single)(SIMDi seed, SI
16071607
SIMDf yd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,10), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
16081608
SIMDf zd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,20), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
16091609
\
1610-
SIMDf invMag = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
1610+
SIMDf invMag = SIMDf_MUL(cellJitter, SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
16111611
\
16121612
xd = SIMDf_MUL_ADD(xd, invMag, xcf);\
16131613
yd = SIMDf_MUL_ADD(yd, invMag, ycf);\
@@ -1664,7 +1664,7 @@ switch(noiseLookupSettings.fractalType)\
16641664
}}\
16651665

16661666
#define CELLULAR_LOOKUP_SINGLE(distanceFunc)\
1667-
static SIMDf VECTORCALL FUNC(CellularLookup##distanceFunc##Single)(SIMDi seedV, SIMDf x, SIMDf y, SIMDf z, const NoiseLookupSettings& noiseLookupSettings)\
1667+
static SIMDf VECTORCALL FUNC(CellularLookup##distanceFunc##Single)(SIMDi seedV, SIMDf x, SIMDf y, SIMDf z, SIMDf cellJitter, const NoiseLookupSettings& noiseLookupSettings)\
16681668
{\
16691669
SIMDf distance = SIMDf_NUM(999999);\
16701670
SIMDf xCell = SIMDf_UNDEFINED();\
@@ -1702,7 +1702,7 @@ static SIMDf VECTORCALL FUNC(CellularLookup##distanceFunc##Single)(SIMDi seedV,
17021702
SIMDf yd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,10), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
17031703
SIMDf zd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,20), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
17041704
\
1705-
SIMDf invMag = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
1705+
SIMDf invMag = SIMDf_MUL(cellJitter, SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
17061706
\
17071707
SIMDf xCellNew = SIMDf_MUL(xd, invMag);\
17081708
SIMDf yCellNew = SIMDf_MUL(yd, invMag);\
@@ -1774,7 +1774,7 @@ static SIMDf VECTORCALL FUNC(CellularLookup##distanceFunc##Single)(SIMDi seedV,
17741774
}
17751775

17761776
#define CELLULAR_DISTANCE_SINGLE(distanceFunc)\
1777-
static SIMDf VECTORCALL FUNC(CellularDistance##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z)\
1777+
static SIMDf VECTORCALL FUNC(CellularDistance##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z, SIMDf cellJitter)\
17781778
{\
17791779
SIMDf distance = SIMDf_NUM(999999);\
17801780
\
@@ -1805,7 +1805,7 @@ static SIMDf VECTORCALL FUNC(CellularDistance##distanceFunc##Single)(SIMDi seed,
18051805
SIMDf yd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,10), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
18061806
SIMDf zd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,20), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
18071807
\
1808-
SIMDf invMag = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
1808+
SIMDf invMag = SIMDf_MUL(cellJitter, SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
18091809
\
18101810
xd = SIMDf_MUL_ADD(xd, invMag, xcf);\
18111811
yd = SIMDf_MUL_ADD(yd, invMag, ycf);\
@@ -1825,11 +1825,11 @@ static SIMDf VECTORCALL FUNC(CellularDistance##distanceFunc##Single)(SIMDi seed,
18251825
xc = SIMDi_ADD(xc, SIMDi_NUM(xPrime));\
18261826
}\
18271827
\
1828-
return SIMDf_SUB(distance, SIMDf_NUM(1));\
1828+
return distance;\
18291829
}
18301830

18311831
#define CELLULAR_DISTANCE2_SINGLE(distanceFunc, returnFunc)\
1832-
static SIMDf VECTORCALL FUNC(Cellular##returnFunc##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z, int index0, int index1)\
1832+
static SIMDf VECTORCALL FUNC(Cellular##returnFunc##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z, SIMDf cellJitter, int index0, int index1)\
18331833
{\
18341834
SIMDf distance[4] = {SIMDf_NUM(999999),SIMDf_NUM(999999),SIMDf_NUM(999999),SIMDf_NUM(999999)};\
18351835
\
@@ -1860,7 +1860,7 @@ static SIMDf VECTORCALL FUNC(Cellular##returnFunc##distanceFunc##Single)(SIMDi s
18601860
SIMDf yd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,10), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
18611861
SIMDf zd = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,20), SIMDi_NUM(bit10Mask))), SIMDf_NUM(511_5));\
18621862
\
1863-
SIMDf invMag = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
1863+
SIMDf invMag = SIMDf_MUL(cellJitter, SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd, xd, SIMDf_MUL_ADD(yd, yd, SIMDf_MUL(zd, zd)))));\
18641864
\
18651865
xd = SIMDf_MUL_ADD(xd, invMag, xcf);\
18661866
yd = SIMDf_MUL_ADD(yd, invMag, ycf);\
@@ -1882,77 +1882,22 @@ static SIMDf VECTORCALL FUNC(Cellular##returnFunc##distanceFunc##Single)(SIMDi s
18821882
xc = SIMDi_ADD(xc, SIMDi_NUM(xPrime));\
18831883
}\
18841884
\
1885-
return SIMDf_SUB(returnFunc##_RETURN(distance[index0], distance[index1]), SIMDf_NUM(1));\
1885+
return returnFunc##_RETURN(distance[index0], distance[index1]);\
18861886
}
18871887

18881888
#define CELLULAR_DISTANCE2CAVE_SINGLE(distanceFunc)\
1889-
static SIMDf VECTORCALL FUNC(CellularDistance2Cave##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z, int index0, int index1)\
1889+
static SIMDf VECTORCALL FUNC(CellularDistance2Cave##distanceFunc##Single)(SIMDi seed, SIMDf x, SIMDf y, SIMDf z, SIMDf cellJitter, int index0, int index1)\
18901890
{\
1891-
SIMDf distance0[FN_CELLULAR_INDEX_MAX+1] = {SIMDf_NUM(999999),SIMDf_NUM(999999),SIMDf_NUM(999999),SIMDf_NUM(999999)};\
1892-
SIMDf distance1[FN_CELLULAR_INDEX_MAX+1] = {SIMDf_NUM(999999),SIMDf_NUM(999999),SIMDf_NUM(999999),SIMDf_NUM(999999)};\
1891+
SIMDf c0 = FUNC(CellularDistance2Div##distanceFunc##Single)(seed, x, y, z, cellJitter, index0, index1);\
18931892
\
1894-
SIMDi xc = SIMDi_SUB(SIMDi_CONVERT_TO_INT(x), SIMDi_NUM(1));\
1895-
SIMDi ycBase = SIMDi_SUB(SIMDi_CONVERT_TO_INT(y), SIMDi_NUM(1));\
1896-
SIMDi zcBase = SIMDi_SUB(SIMDi_CONVERT_TO_INT(z), SIMDi_NUM(1));\
1897-
\
1898-
SIMDf xcf = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(xc), x);\
1899-
SIMDf ycfBase = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(ycBase), y);\
1900-
SIMDf zcfBase = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(zcBase), z);\
1893+
x = SIMDf_ADD(x, SIMDf_NUM(0_5));\
1894+
y = SIMDf_ADD(y, SIMDf_NUM(0_5));\
1895+
z = SIMDf_ADD(z, SIMDf_NUM(0_5));\
1896+
seed = SIMDi_ADD(seed, SIMDi_NUM(1));\
19011897
\
1902-
xc = SIMDi_MUL(xc, SIMDi_NUM(xPrime));\
1903-
ycBase = SIMDi_MUL(ycBase, SIMDi_NUM(yPrime));\
1904-
zcBase = SIMDi_MUL(zcBase, SIMDi_NUM(zPrime));\
1905-
\
1906-
for (int xi = 0; xi < 3; xi++)\
1907-
{\
1908-
SIMDf ycf = ycfBase;\
1909-
SIMDi yc = ycBase;\
1910-
for (int yi = 0; yi < 3; yi++)\
1911-
{\
1912-
SIMDf zcf = zcfBase;\
1913-
SIMDi zc = zcBase;\
1914-
for (int zi = 0; zi < 3; zi++)\
1915-
{\
1916-
SIMDi hash = FUNC(HashHB)(seed, xc, yc, zc);\
1917-
SIMDf xd0 = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(hash, SIMDi_NUM(bit5Mask))), SIMDf_NUM(15_5));\
1918-
SIMDf yd0 = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,5), SIMDi_NUM(bit5Mask))), SIMDf_NUM(15_5));\
1919-
SIMDf zd0 = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,10), SIMDi_NUM(bit5Mask))), SIMDf_NUM(15_5));\
1920-
SIMDf xd1 = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,15), SIMDi_NUM(bit5Mask))), SIMDf_NUM(15_5));\
1921-
SIMDf yd1 = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,20), SIMDi_NUM(bit5Mask))), SIMDf_NUM(15_5));\
1922-
SIMDf zd1 = SIMDf_SUB(SIMDf_CONVERT_TO_FLOAT(SIMDi_AND(SIMDi_SHIFT_R(hash,25), SIMDi_NUM(bit5Mask))), SIMDf_NUM(15_5));\
1923-
\
1924-
SIMDf invMag0 = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd0, xd0, SIMDf_MUL_ADD(yd0, yd0, SIMDf_MUL(zd0, zd0)))));\
1925-
SIMDf invMag1 = SIMDf_MUL(SIMDf_NUM(cellLength), SIMDf_INV_SQRT(SIMDf_MUL_ADD(xd1, xd1, SIMDf_MUL_ADD(yd1, yd1, SIMDf_MUL(zd1, zd1)))));\
1926-
\
1927-
xd0 = SIMDf_MUL_ADD(xd0, invMag0, xcf);\
1928-
yd0 = SIMDf_MUL_ADD(yd0, invMag0, ycf);\
1929-
zd0 = SIMDf_MUL_ADD(zd0, invMag0, zcf);\
1930-
xd1 = SIMDf_MUL_ADD(xd1, invMag1, xcf);\
1931-
yd1 = SIMDf_MUL_ADD(yd1, invMag1, ycf);\
1932-
zd1 = SIMDf_MUL_ADD(zd1, invMag1, zcf);\
1933-
\
1934-
SIMDf newDistance0 = distanceFunc##_DISTANCE(xd0, yd0, zd0);\
1935-
SIMDf newDistance1 = distanceFunc##_DISTANCE(xd1, yd1, zd1);\
1936-
\
1937-
for(int i = index1; i > 0; i--)\
1938-
{\
1939-
distance0[i] = SIMDf_MAX(SIMDf_MIN(distance0[i], newDistance0), distance0[i - 1]); \
1940-
distance1[i] = SIMDf_MAX(SIMDf_MIN(distance1[i], newDistance1), distance1[i - 1]); \
1941-
}\
1942-
distance0[0] = SIMDf_MIN(distance0[0], newDistance0);\
1943-
distance1[0] = SIMDf_MIN(distance1[0], newDistance1);\
1944-
\
1945-
zcf = SIMDf_ADD(zcf, SIMDf_NUM(1));\
1946-
zc = SIMDi_ADD(zc, SIMDi_NUM(zPrime));\
1947-
}\
1948-
ycf = SIMDf_ADD(ycf, SIMDf_NUM(1));\
1949-
yc = SIMDi_ADD(yc, SIMDi_NUM(yPrime));\
1950-
}\
1951-
xcf = SIMDf_ADD(xcf, SIMDf_NUM(1));\
1952-
xc = SIMDi_ADD(xc, SIMDi_NUM(xPrime));\
1953-
}\
1898+
SIMDf c1 = FUNC(CellularDistance2Div##distanceFunc##Single)(seed, x, y, z, cellJitter, index0, index1);\
19541899
\
1955-
return SIMDf_MIN(Distance2Div_RETURN(distance0[index0], distance0[index1]), Distance2Div_RETURN(distance1[index0], distance1[index1]));\
1900+
return SIMDf_MIN(c0,c1);\
19561901
}
19571902

19581903
CELLULAR_VALUE_SINGLE(Euclidean)
@@ -1989,27 +1934,27 @@ CELLULAR_DISTANCE2CAVE_SINGLE(Natural)
19891934
switch(m_cellularDistanceFunction)\
19901935
{\
19911936
case Euclidean:\
1992-
SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF))\
1937+
SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF, cellJitterV))\
19931938
break;\
19941939
case Manhattan:\
1995-
SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF))\
1940+
SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF, cellJitterV))\
19961941
break;\
19971942
case Natural:\
1998-
SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF))\
1943+
SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF, cellJitterV))\
19991944
break;\
20001945
}
20011946

20021947
#define CELLULAR_INDEX_MULTI(returnFunc)\
20031948
switch(m_cellularDistanceFunction)\
20041949
{\
20051950
case Euclidean:\
2006-
SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
1951+
SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF, cellJitterV, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
20071952
break;\
20081953
case Manhattan:\
2009-
SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
1954+
SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF, cellJitterV, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
20101955
break;\
20111956
case Natural:\
2012-
SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
1957+
SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF, cellJitterV, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
20131958
break;\
20141959
}
20151960

@@ -2025,6 +1970,7 @@ void SIMD_LEVEL_CLASS::FillCellularSet(float* noiseSet, int xStart, int yStart,
20251970
SIMDf xFreqV = SIMDf_SET(scaleModifier * m_xScale);
20261971
SIMDf yFreqV = SIMDf_SET(scaleModifier * m_yScale);
20271972
SIMDf zFreqV = SIMDf_SET(scaleModifier * m_zScale);
1973+
SIMDf cellJitterV = SIMDf_SET(m_cellularJitter);
20281974

20291975
NoiseLookupSettings nls;
20301976

@@ -2066,13 +2012,13 @@ void SIMD_LEVEL_CLASS::FillCellularSet(float* noiseSet, int xStart, int yStart,
20662012
switch (m_cellularDistanceFunction)
20672013
{
20682014
case Euclidean:
2069-
SET_BUILDER(result = FUNC(CellularLookupEuclideanSingle)(seedV, xF, yF, zF, nls))
2015+
SET_BUILDER(result = FUNC(CellularLookupEuclideanSingle)(seedV, xF, yF, zF, cellJitterV, nls))
20702016
break; \
20712017
case Manhattan:
2072-
SET_BUILDER(result = FUNC(CellularLookupManhattanSingle)(seedV, xF, yF, zF, nls))
2018+
SET_BUILDER(result = FUNC(CellularLookupManhattanSingle)(seedV, xF, yF, zF, cellJitterV, nls))
20732019
break; \
20742020
case Natural:
2075-
SET_BUILDER(result = FUNC(CellularLookupNaturalSingle)(seedV, xF, yF, zF, nls))
2021+
SET_BUILDER(result = FUNC(CellularLookupNaturalSingle)(seedV, xF, yF, zF, cellJitterV, nls))
20762022
break;
20772023
}
20782024
break;
@@ -2084,27 +2030,27 @@ void SIMD_LEVEL_CLASS::FillCellularSet(float* noiseSet, int xStart, int yStart,
20842030
switch(m_cellularDistanceFunction)\
20852031
{\
20862032
case Euclidean:\
2087-
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF))\
2033+
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF, cellJitterV))\
20882034
break;\
20892035
case Manhattan:\
2090-
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF))\
2036+
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF, cellJitterV))\
20912037
break;\
20922038
case Natural:\
2093-
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF))\
2039+
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF, cellJitterV))\
20942040
break;\
20952041
}
20962042

20972043
#define CELLULAR_INDEX_MULTI_VECTOR(returnFunc)\
20982044
switch(m_cellularDistanceFunction)\
20992045
{\
21002046
case Euclidean:\
2101-
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
2047+
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##EuclideanSingle)(seedV, xF, yF, zF, cellJitterV, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
21022048
break;\
21032049
case Manhattan:\
2104-
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
2050+
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##ManhattanSingle)(seedV, xF, yF, zF, cellJitterV, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
21052051
break;\
21062052
case Natural:\
2107-
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
2053+
VECTOR_SET_BUILDER(result = FUNC(Cellular##returnFunc##NaturalSingle)(seedV, xF, yF, zF, cellJitterV, m_cellularDistanceIndex0, m_cellularDistanceIndex1))\
21082054
break;\
21092055
}
21102056

@@ -2122,6 +2068,7 @@ void SIMD_LEVEL_CLASS::FillCellularSet(float* noiseSet, FastNoiseVectorSet* vect
21222068
SIMDf xOffsetV = SIMDf_MUL(SIMDf_SET(xOffset), xFreqV);
21232069
SIMDf yOffsetV = SIMDf_MUL(SIMDf_SET(yOffset), yFreqV);
21242070
SIMDf zOffsetV = SIMDf_MUL(SIMDf_SET(zOffset), zFreqV);
2071+
SIMDf cellJitterV = SIMDf_SET(m_cellularJitter);
21252072
INIT_PERTURB_VALUES();
21262073

21272074
int index = 0;
@@ -2166,13 +2113,13 @@ void SIMD_LEVEL_CLASS::FillCellularSet(float* noiseSet, FastNoiseVectorSet* vect
21662113
switch (m_cellularDistanceFunction)
21672114
{
21682115
case Euclidean:
2169-
VECTOR_SET_BUILDER(result = FUNC(CellularLookupEuclideanSingle)(seedV, xF, yF, zF, nls));
2116+
VECTOR_SET_BUILDER(result = FUNC(CellularLookupEuclideanSingle)(seedV, xF, yF, zF, cellJitterV, nls));
21702117
break;
21712118
case Manhattan:
2172-
VECTOR_SET_BUILDER(result = FUNC(CellularLookupManhattanSingle)(seedV, xF, yF, zF, nls));
2119+
VECTOR_SET_BUILDER(result = FUNC(CellularLookupManhattanSingle)(seedV, xF, yF, zF, cellJitterV, nls));
21732120
break;
21742121
case Natural:
2175-
VECTOR_SET_BUILDER(result = FUNC(CellularLookupNaturalSingle)(seedV, xF, yF, zF, nls));
2122+
VECTOR_SET_BUILDER(result = FUNC(CellularLookupNaturalSingle)(seedV, xF, yF, zF, cellJitterV, nls));
21762123
break;
21772124
}
21782125
break;

0 commit comments

Comments
 (0)