You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -34,6 +34,8 @@ A parallel to using Graphs would be the Position Cell Noise Density (PCN), so I
34
34
35
35
This is my [BiomeSpheres Example](#biome-spheres) with a “Biome” per Node with random Edges connecting them! The density, materials, and props were all done through the graph system!
36
36
37
+
Hytale has also included a few [Examples to try out!](#hytale-examples)
38
+
37
39
</div>
38
40
</div>
39
41
@@ -233,17 +235,11 @@ While defining specific Content per Nodes is cool, we’re here to create some w
This tech is still new and creating Content for too many Edges or not using a
238
-
YOverride can create a huge performance loss, so use sparingly for now or else
239
-
your World will timeout and crash!
240
-
</Callout>
241
-
242
238
There are 2 ways to define Content along Edges:
243
239
244
240
#### **Splitter EdgeAction**
245
241
246
-
The first way is to use the **Splitter EdgeAction**. This will create Nodes along the selected Edges that you can then define Content for.
242
+
The first way is to use the **Splitter EdgeAction**. This will create Nodes along the selected Edges that you can then define Content for. In between each Node, a new Edge is also created.
@@ -261,9 +257,21 @@ The second method utilizes the new **DistanceToGraphEdge Density**. This density
261
257
262
258
What’s really cool about a lot of these Actions, is you can select which nodes or edges to perform these actions on based on a whole set of **Selector** operations.
263
259
260
+
#### **All Selector**
261
+
262
+
Selects All Nodes/Edges. Useful for the ProximityConnector if you want to connect all your nodes together!
The “SelectedNeightborsThreshold” is how many nodes/edges are needed to pass this condition. If set to “-1”, all Neighbors must satisfy their **Selector** Conditions. These Neighbor Checks are very useful for creating transitionary Nodes and Edges based on what the Content is of neighboring/connected Nodes like removing Ice Caves connected to Lava Caves or creating Lush tunnel transitions towards Lush Cave Biomes.
304
+
The “SelectedNeighborsThreshold” is how many nodes/edges are needed to pass this condition. If set to “-1”, all Neighbors must satisfy their **Selector** Conditions. These Neighbor Checks are very useful for creating transitionary Nodes and Edges based on what the Content is of neighboring/connected Nodes like removing Ice Caves connected to Lava Caves or creating Lush tunnel transitions towards Lush Cave Biomes.
305
+
306
+
#### **And / Or / Not Selectors**
307
+
308
+
Finally the logic isn't complete without these Selectors! Use them in combination to be as specific in your selections as you need!
Actions aren't limited to creating new Edges, defining Content, and Splitting Edges. Here's a list of some other useful Actions! (Not all Actions are listed like Move or Jitter as they seemed self-explanatory.)
314
+
Actions aren't limited to creating new Edges, defining Content, and Splitting Edges. Here's a list of some other useful Actions!
301
315
302
316
#### **Node: Spawner**
303
317
304
-
This Action creates Content from new Nodes within a cluster around the central Node. This can be similarly attributed to the Cluster PositionProvider. You can also select to “CreateEdges” connecting these clustered Nodes.
318
+
This Action creates new Nodes within an area around the central Node. This can be similarly attributed to the Cluster PositionProvider. You can also set the new Nodes' Content or set “CreateEdges” to connect these new Nodes to the Central Node.
This Action will select ConnectedNodes to perform their own actions. (I’m not too sure what the Ratio value does in this situation.)
324
+
This Action will select Nodes connected by an Edge or Edges connected to this Node to perform their own actions. The Ratio value determines the amount of Connected Nodes or Edges to perform the Action on. The Seed will randomize which ones are selected if the Ratio is set between 0 and 1.
Content Copy will spread the Content listed to Nodes connected by an Edge. If there's a tie of, for example, "IceCave" and "LavaCave" both connecting to the same Node, the seed will randomize which one wins.
Jitters the Position of selected Nodes same as the Jitter Position
400
+
Provider
401
+
</td>
402
+
</tr>
403
+
<tr>
404
+
<td>**Weighted NodeAction**</td>
405
+
<td>Selects a random Action to exectute per Node based on the Seed</td>
406
+
</tr>
407
+
<tr>
408
+
<td>**Empty Node/EdgeAction**</td>
409
+
<td>
410
+
A placeholder to do nothing. Most often used with a Weighted NodeAction
411
+
</td>
412
+
</tr>
413
+
<tr>
414
+
<td>**Delete Node/EdgeAction**</td>
415
+
<td>Removes the Node/Edge from the Graph</td>
416
+
</tr>
417
+
</tbody>
418
+
</table>
419
+
420
+
### New Position & Vector Providers
421
+
422
+
This section includes a look at some of the new Position and Vector Providers also included in this pre-release that may be useful in your Graph creating Journey!
423
+
424
+
The list is far too long to include here, but I've included an example of using them to set the Y-Value of Positions. This is useful for setting either the Position of Nodes on Graphs or the Positions of Props to the top of your World (without needing a Scanner Prop which is useful for optimization!)
We also have the new **OpposedToGraphEdges** VectorProvider! This Provider gives you the Vector that is furthest from all the Connected Edges' Vectors,
429
+
so for this example of a triangular pyramid, each Node will be pushed further outwards, away from the other Nodes.
However, on the edge case that the Node is connected on a straight line where the Opposed Vector could be one of many varieties, the results are inconsistent depending on orientation.
This section includes a look at some of the new Position and Vector Providers also included in this pre-release that may be useful in your Graph creating Journey!
478
+
This Graph continues off of the previous example by adding Buildings that spawn next to roads near city centers and making sure Road connections don't enter the areas indicated by Bedrock!
363
479
364
-
The list is far too long to include here, but I've included an example of using them to set the Y-Position of Positions (or Nodes for Graphs) to the top of the World without for example for Props requiring a Scanner!
480
+
You can find this Example as `HytaleGenerator/BiomeAsset/Examples/Example_Graph_Road_Layout`
We also have the new **OpposedToGraphEdges** VectorProvider which is also on my list of Nodes I have yet to test so new info will be included here soon!
This Graph utilizes the Density Gradient of the Terrain to only include certain Edges that run alongside the mountain slope and then uses Move Actions with a Simplex noise pattern to create a wavy pattern as the Edges head downwards.
487
+
488
+
You can find this Example as `HytaleGenerator/BiomeAsset/Examples/Example_Graph_Erosion`
This Graph uses a technique of starting off only creating 1 Node then creating new Nodes by iteratively using the Spawner Action from previous Nodes. It also halfway through switches the Density defined in the Content to be smaller.
371
497
372
-
## Examples
498
+
You can find this Example as `HytaleGenerator/BiomeAsset/Examples/Example_Graph_Roots`
This is a showcase example of creating a “Biome” per Node with random Edges connecting them! The density, materials, and props were all done through the graph system! [Link to GitHub Repository.](https://github.com/RedstoneEngine/Hytale-WorldGen/blob/main/Examples/Graphs/BiomeSpheres.json) (Warning for testing this example in that the Edges create a huge hit on performance and may timeout the World!)
508
+
This is a showcase example of creating a “Biome” per Node with random Edges connecting them! The density, materials, and props were all done through the graph system!
509
+
510
+
[Link to GitHub Repository](https://github.com/RedstoneEngine/Hytale-WorldGen/blob/main/Examples/Graphs/BiomeSpheres.json)`- Credit to RedEng Developer`
**This Example is brought to us by Ams of Hypixel Studios.**
517
+
This is a Graphs setup for generating a dynamic Dungeon! This Graph contains multiple techniques to get the Dungeon to generate its paths and props, too much to list here right now, but feel free to replace with your own prefabs or define your own pathing GraphPasses!
384
518
385
-
It includes an example of an iterative Selection approach to create river branches that branch out from a coast line! Feel free to download and experiment! This example will be included in a future pre-release. [Link to GitHub Repository.](https://github.com/RedstoneEngine/Hytale-WorldGen/blob/main/Examples/Graphs/Example_Graph_River.json)
519
+
[Link to GitHub Repository](https://github.com/RedstoneEngine/Hytale-WorldGen/tree/main/Examples/Graphs/DungeonGenerator)`- Credit to RedEng Developer`
0 commit comments