1#include "Generators/CPUNodeEditor/Nodes/NoiseCellularNode.h"
2#include "FastNoiseLite.h"
3#include "Generators/CPUNodeEditor/CPUNodeEditor.h"
5static const char *fractalTypes[] = {
"None",
"FBm",
"Ridged",
"PingPong" };
6static const char *distFuncs[] = {
"EuclideanSq",
"Euclidean",
"Manhattan",
"Euclidean Manhattan Hybrid" };
10 if(!inputPins[0]->IsLinked())
12 noiseGen->SetSeed(seed);
17 noiseGen->SetSeed((
int)inputPins[0]->other->Evaluate(input).value);
20 if (!inputPins[2]->IsLinked())
22 noiseGen->SetFrequency(frequency);
27 noiseGen->SetFrequency(inputPins[2]->other->Evaluate(input).value);
32 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_None);
35 else if (fractalType == 1)
37 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_FBm);
40 else if (fractalType == 2)
42 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_Ridged);
45 else if (fractalType == 3)
47 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_PingPong);
52 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_None);
55 if (!inputPins[1]->IsLinked())
57 noiseGen->SetFractalOctaves(octaves);
62 noiseGen->SetFrequency(inputPins[1]->other->Evaluate(input).value);
65 if (!inputPins[3]->IsLinked())
67 noiseGen->SetFractalLacunarity(lacunarity);
72 noiseGen->SetFractalLacunarity(inputPins[3]->other->Evaluate(input).value);
75 if (!inputPins[4]->IsLinked())
77 noiseGen->SetFractalGain(gain);
82 noiseGen->SetFractalGain(inputPins[4]->other->Evaluate(input).value);
85 if (!inputPins[5]->IsLinked())
87 noiseGen->SetFractalWeightedStrength(weightedStrength);
92 noiseGen->SetFractalWeightedStrength(inputPins[5]->other->Evaluate(input).value);
95 if (!inputPins[6]->IsLinked())
97 noiseGen->SetFractalPingPongStrength(pingPongStrength);
102 noiseGen->SetFractalPingPongStrength(inputPins[6]->other->Evaluate(input).value);
105 if (!inputPins[8]->IsLinked())
107 noiseGen->SetCellularJitter(cellularJitter);
112 noiseGen->SetCellularJitter(inputPins[8]->other->Evaluate(input).value);
117 if (inputPins[7]->IsLinked())
119 st = inputPins[7]->other->Evaluate(input).value;
122 return NodeOutput({ noiseGen->GetNoise(input.x, input.y, input.z) * st });
127 frequency = data[
"frequency"];
129 lacunarity = data[
"lacunarity"];
130 weightedStrength = data[
"weightedStrength"];
131 octaves = data[
"octaves"];
132 pingPongStrength = data[
"pingPongStrength"];
134 strength = data[
"strength"];
135 fractalType = data[
"fractalType"];
136 distanceFunc = data[
"distanceFunc"];
137 cellularJitter = data[
"cellularJitter"];
143 data[
"type"] = MeshNodeEditor::MeshNodeType::NoiseCellular;
144 data[
"frequency"] = frequency;
146 data[
"lacunarity"] = lacunarity;
147 data[
"weightedStrength"] = weightedStrength;
148 data[
"octaves"] = octaves;
149 data[
"pingPongStrength"] = pingPongStrength;
151 data[
"strength"] = strength;
152 data[
"fractalType"] = fractalType;
153 data[
"distanceFunc"] = distanceFunc;
154 data[
"cellularJitter"] = cellularJitter;
158void NoiseCellularNode::OnRender()
160 DrawHeader(
"Cellular Noise");
161 ImGui::Dummy(ImVec2(150, 10));
164 outputPins[0]->Render();
165 inputPins[0]->Render();
168 if (!inputPins[0]->IsLinked())
170 ImGui::Dummy(ImVec2(30, 10));
172 ImGui::PushItemWidth(100);
173 ImGui::DragInt(MAKE_IMGUI_ID(inputPins[0]->
id), &seed, 1);
174 ImGui::PopItemWidth();
182 inputPins[1]->Render();
183 ImGui::Text(
"Octaves");
185 if (!inputPins[1]->IsLinked())
187 ImGui::Dummy(ImVec2(30, 10));
189 ImGui::PushItemWidth(100);
190 ImGui::DragInt(MAKE_IMGUI_ID(inputPins[1]->
id), &octaves, 1);
191 ImGui::PopItemWidth();
199 inputPins[2]->Render();
200 ImGui::Text(
"Frequency");
202 if (!inputPins[2]->IsLinked())
204 ImGui::Dummy(ImVec2(30, 10));
206 ImGui::PushItemWidth(100);
207 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[2]->
id), &frequency, 0.001f);
208 ImGui::PopItemWidth();
216 inputPins[3]->Render();
217 ImGui::Text(
"Lacunarity");
219 if (!inputPins[3]->IsLinked())
221 ImGui::Dummy(ImVec2(30, 10));
223 ImGui::PushItemWidth(100);
224 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[3]->
id), &lacunarity, 0.01f);
225 ImGui::PopItemWidth();
233 inputPins[4]->Render();
236 if (!inputPins[4]->IsLinked())
238 ImGui::Dummy(ImVec2(30, 10));
240 ImGui::PushItemWidth(100);
241 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[4]->
id), &gain, 0.01f);
242 ImGui::PopItemWidth();
250 inputPins[5]->Render();
251 ImGui::Text(
"Weighted Strength");
253 if (!inputPins[5]->IsLinked())
255 ImGui::Dummy(ImVec2(30, 10));
257 ImGui::PushItemWidth(100);
258 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[5]->
id), &weightedStrength, 0.01f, 0, 1);
259 ImGui::PopItemWidth();
267 inputPins[6]->Render();
268 ImGui::Text(
"Ping Pong Strength");
270 if (!inputPins[6]->IsLinked())
272 ImGui::Dummy(ImVec2(30, 10));
274 ImGui::PushItemWidth(100);
275 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[6]->
id), &pingPongStrength, 0.01f);
276 ImGui::PopItemWidth();
284 inputPins[8]->Render();
285 ImGui::Text(
"Cellular Jitter");
287 if (!inputPins[8]->IsLinked())
289 ImGui::Dummy(ImVec2(30, 10));
291 ImGui::PushItemWidth(100);
292 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[8]->
id), &cellularJitter, 0.01f);
293 ImGui::PopItemWidth();
301 inputPins[7]->Render();
302 ImGui::Text(
"Strength");
304 if (!inputPins[7]->IsLinked())
306 ImGui::Dummy(ImVec2(30, 10));
308 ImGui::PushItemWidth(100);
309 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[7]->
id), &strength, 0.01f);
310 ImGui::PopItemWidth();
319 ImGui::Text(
"Current Fractal Type : ");
321 ImGui::Text(fractalTypes[fractalType]);
323 if (ImGui::Button(MAKE_IMGUI_LABEL(
id,
"Change Fractal Type")))
327 if (fractalType == 4)
334 ImGui::Text(
"Current Distance Function : ");
336 ImGui::Text(distFuncs[distanceFunc]);
338 if (ImGui::Button(MAKE_IMGUI_LABEL(
id,
"Change Distance Function")))
342 if (distanceFunc == 4)
349NoiseCellularNode::NoiseCellularNode()
351 headerColor = ImColor(NOISE_NODE_COLOR);
362 outputPins.push_back(
new NodeEditorPin(NodeEditorPinType::Output));
370 weightedStrength = 0.0f;
371 pingPongStrength = 2.0f;
373 cellularJitter = 1.0f;
374 noiseGen =
new FastNoiseLite();
375 noiseGen->SetNoiseType(FastNoiseLite::NoiseType::NoiseType_Cellular);
378NoiseCellularNode::~NoiseCellularNode()
a class to store JSON values