-
Notifications
You must be signed in to change notification settings - Fork 9
Multi layered Noise Equations
As we have demonstrated in Noise Equations, you can determine how your biome looks like with a function. There is however also the possibility to define multiple functions that are used when certain conditions are met, such as for certain heights.
There is a simple example in the nether delta biome config:
noise-equation: "if(y, abs(y-64)/128 + noise3(x*1.5, y*2, z*1.5)*3, 1)"
This example has a so-called "ternary if". It follow the principle if A is not 0 then do B, otherwise do C
. It's written in the biome config as if(A, B, C)
. If we translate the noise equation accordingly, we get this here:
if y is not 0
then use the function abs(y-64)/128 + noise3(x*1.5, y*2, z*1.5)*3
, otherwise just output 1
or reversed:
if y = 0
output 1
, otherwise abs(y-64)/128 + noise3(x*1.5, y*2, z*1.5)*3
As we read before, the only question that this function tries to answer is if we have solid blocks or air. Positive outputs return blocks, (e.g. a 1), negative outputs return air.
So in this case we will have a solid layer of blocks at height zero and something else everywhere above that, depending on that function given. This is a relatively simple example since it includes only a fixed solid layer (good for bedrock for example) and another function.
We can get much more complex however by providing multiple functions per height. This is demonstrated in the plains-sky biome:
noise-equation: "if(max(y-96, 0), -(if(max(y-150, 0), |y-150|, |y-150|/16)) - 0.25 + (noise2(x*3, z*3)*3), ((-((y / 63)^2)) + 1) + |(noise2(x, z) / 3) + 0.1|)"
which returns this nice landscape with floating islands above:
This one does not only add 2 functions as output but also a function to check which one of the two to pick. Let's take this one apart:
if
max(y-96, 0) is not 0
then do
-(if(max(y-150, 0), |y-150|, |y-150|/16)) - 0.25 + (noise2(x*3, z*3)*3)
else do
((-((y / 63)^2)) + 1) + |(noise2(x, z) / 3) + 0.1|)
That looks complicated. Let's go step by step:
The condition is max(y-96, 0)
. Let's put that into a graphing calculator and see what it gives us back:
As we can see, every value is zero at and below 96 and positive above it (97 and more). So the condition will do the second function below 97 height and the first at 97 and above.
The second function is a function that just makes the land below the islands. Let's focus on the first one since it does not only define a surface at a certain height, but on top of it how the underside of the islands looks like.
This is achieved by even another, nested conditional function inside the second argument: -(if(max(y-150, 0), |y-150|, |y-150|/16)) - 0.25 + (noise2(x*3, z*3)*3)
. So what this does is:
-(condition) - 0.25 + (noise2(x*3, z*3)*3)
and that condition is:
if
max(y-150, 0) is not 0
then do
|y-150|
else do
|y-150|/16
once we include that output in the function above, we get the following:
if
max(y-150, 0) is not 0
then do
-(|y-150|) - 0.25 + (noise2(x*3, z*3)*3)
else do
-(|y-150|/16) - 0.25 + (noise2(x*3, z*3)*3)
What this essentially does is giving the floating islands will have a steep bottom (below 150) and a flat top (at and above 151).
It's only up to you how complex you get in defining layers in your world.
Can't find what you're looking for? Join our Discord server and we'll be happy to help you!
Need to report a bug? Create an issue on the repository!
Want to contribute to the wiki? Submit a PR to the Wiki Repository!
Home
Community Packs
Community Addons
Commands
Quick Start Guide
Creating a Terra World
Config Packs
Config Development Introduction
Config System
Creating a Pack
Modifying an Existing Pack
Configuring Your Pack
Weighted Pools
Block Palettes
Using Custom Blocks on Bukkit
TerraScript
Working with Structures
Noise
Noise Equation
Advanced Noise Equations
List o' Noise Equations
Pack Configuration
Biome Configuration
Palette Configuration
Ore Configuration
Flora Configuration