Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Minecraft:Density function: Difference between revisions

From SAS Gaming Wiki
SyncBot (talk | contribs)
Sync: updated from Minecraft
SyncBot (talk | contribs)
Sync: updated from Minecraft
 
(6 intermediate revisions by the same user not shown)
Line 20: Line 20:


== Marker functions ==
== Marker functions ==
=== cache_2d ===
=== {{cd|cache}} ===
Only computes the input density once per horizontal position.
If this density function is referenced twice, it is only computed once per block position.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_2d</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input to be cached.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input to be cached.
</div>
</div>


=== cache_all_in_cell ===
=== {{cd|interpolated}} ===
Used by the game onto <code>final_density</code> and should not be referenced in data packs.
Interpolates at each block in one cell based on the input density function value of some cells around. The size of each cell is <code>size_horizontal * 4</code> and <code>size_vertical * 4</code>.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_all_in_cell</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>interpolated</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input to be cached.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input to be interpolated.
** {{nbt|int|cell_size_xz}}: Size in blocks of the interpolation grid cells on the X and Z axes. The number must not be negative.
** {{nbt|int|cell_size_y}}: Size in blocks of the interpolation grid cells on the Y axis. The number must not be negative.
</div>
</div>


=== cache_once ===
== Noise sampling functions ==
If this density function is referenced twice, it is only computed once per block position.
These density functions are used to sample [[Minecraft:Custom noise|noises]].
 
=== {{cd|noise}} ===
Samples a noise.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_once</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>noise</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input to be cached.
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{Nbt|double|xz_scale}}: Scales the X and Z before sampling.
** {{Nbt|double|y_scale}}: Scales the Y before sampling.
** {{nbt|double|shift_x}}: Optional; A domain warp to apply on X. If not specified, no warping will be applied (equivalent to 0).
** {{nbt|double|shift_y}}: Optional; A domain warp to apply on Y. If not specified, no warping will be applied (equivalent to 0).
** {{nbt|double|shift_z}}: Optional; A domain warp to apply on Z. If not specified, no warping will be applied (equivalent to 0).
</div>
</div>


=== flat_cache ===
=== {{cd|old_blended_noise}} ===
Calculate the value per 4×4 column (Value at each block in one column is the same). And it is calculated only once per column, at Y=0. Used often in combination with <code>interpolated</code>.
Samples a legacy noise. {{Info needed}}
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>flat_cache</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>old_blended_noise</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input to be cached.
** {{Nbt|double|xz_scale}}: Value between 0.001 and 1000.0 (both inclusive).
** {{Nbt|double|y_scale}}: Value between 0.001 and 1000.0 (both inclusive).
** {{Nbt|double|xz_factor}}: Value between 0.001 and 1000.0 (both inclusive).
** {{Nbt|double|y_factor}}: Value between 0.001 and 1000.0 (both inclusive).
** {{Nbt|double|smear_scale_multiplier}}: Value between 1.0 and 8.0 (both inclusive).
</div>
</div>


=== interpolated ===
=== {{cd|shift}} ===
Interpolates at each block in one cell based on the input density function value of some cells around. The size of each cell is <code>size_horizontal * 4</code> and <code>size_vertical * 4</code>. Used often in combination with <code>flat_cache</code>.
Samples a noise at <code>(x/4, y/4, z/4)</code>, then multiplies it by 4.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>interpolated</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shift</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input to be interpolated.
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
</div>
</div>


== Mapped density functions ==
=== {{cd|shift_a}} ===
=== abs ===
Samples a noise at <code>(x/4, 0, z/4)</code>, then multiplies it by 4.
Calculates the absolute value of the input density function.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>abs</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shift_a</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
</div>
</div>


=== cube ===
=== {{cd|shift_b}} ===
Cubes the input (<code>x^3</code>).
Samples a noise at <code>(z/4, x/4, 0)</code>, then multiplies it by 4.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cube</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shift_b</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
</div>
</div>


=== half_negative ===
== Mathematical density functions ==
If the input is negative, returns half of the input. Otherwise returns the input. (<code>x < 0 ? x/2 : x</code>)
These density functions are used to perform mathematical operations.
 
=== {{cd|abs}} ===
Calculates the absolute value of the input density function.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>half_negative</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>abs</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input of the calculation.
</div>
</div>


=== interval_select ===
=== {{cd|add}} ===
Selects between a number of density functions based on an input density function and a set of threshold values.
Adds two density functions together.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>interval_select</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>add</code>).
** {{nbt|int|input}}: The value to be compared with any given {{cd|thresholds}}.
** {{Nbt|string}}{{Nbt|double|left}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{nbt|float|thresholds}}: The threshold values to compare {{cd|input}} with.
** {{Nbt|string}}{{Nbt|double|right}}: {{json ref/density function}} &mdash; The second input of the calculation.
*** If the input value is less than the threshold values, the result of {{cd|functions[i]}} will be selected.
*** If the input value is greater than the last threshold value, the last function will be selected.
*** There must be one fewer {{cd|thresholds}} than {{cd|functions}}.
** {{nbt|list|functions}}: The resulting functions (at least two) to be selected from.
*** There must be one more element in {{cd|functions}} than {{cd|thresholds}}.
</div>
</div>


=== invert ===
=== {{cd|ceil}} ===
Renamed to {{cd|reciprocal}}.{{upcoming|JE 26.3}}
Rounds the input value to positive infinity.
Inverts the input (<code>1/x</code>).
<div class="treeview">
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>invert</code>{{until|JE 26.3}} / <code>reciprocal</code>{{upcoming|JE 26.3}}).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input of the calculation.
</div>


=== quarter_negative ===
If the input is negative, returns a quarter of the input. Otherwise returns the input. (<code>x < 0 ? x/4 : x</code>)
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>quarter_negative</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>ceil</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function to round.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|multiple}}: The output will be rounded to an integer multiple of the value returned by this Density Function. If not specified, defaults to a constant 1.
</div>
</div>


=== square ===
=== {{cd|clamp}} ===
Squares the input. (<code>x^2</code>)
Clamps the input between two values.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>square</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>clamp</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: One density function &mdash; The input to clamp.
** {{Nbt|double|min}}: The lower bound. Value between −1000000.0 and 1000000.0 (both inclusive).
** {{Nbt|double|max}}: The upper bound. Value between −1000000.0 and 1000000.0 (both inclusive).
</div>
</div>


=== squeeze ===
=== {{cd|constant}} ===
First clamps the input between −1 and 1, then transforms it using x/2 - x*x*x/24.
A constant value.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>squeeze</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>constant</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{Nbt|double|argument|value}}: A constant value. Value between −1000000.0 and 1000000.0 (both inclusive).
</div>
</div>


== Functions with two arguments ==
=== {{cd|cube}} ===
=== add ===
Cubes the input (<code>x^3</code>).
Adds two density functions together.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>add</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cube</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument1}}{{until|JE 26.3}} / {{nbt|double|left}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument2}}{{until|JE 26.3}} / {{nbt|double|right}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The second input of the calculation.
</div>
</div>


=== div ===
=== {{cd|div}} ===
Performs division between two arguments.{{upcoming|JE 26.3}}
Performs division between two arguments.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
Line 151: Line 155:
</div>
</div>


=== mul ===
=== {{cd|floor}} ===
Multiplies two inputs.
Rounds the input value to negative infinity.
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>mul</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>floor</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument1}}{{until|JE 26.3}} / {{nbt|double|left}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function to round.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument2}}{{until|JE 26.3}} / {{nbt|double|right}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The second input of the calculation.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|multiple}}: The output will be rounded to an integer multiple of the value returned by this Density Function. If not specified, defaults to a constant 1.
</div>
</div>


=== min ===
=== {{cd|log}} ===
Returns the minimum of two inputs.
Computes the natural logarithm of the given input.
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>min</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>log</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument1}}{{until|JE 26.3}} / {{nbt|double|left}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function for which to compute the natural logarithm.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument2}}{{until|JE 26.3}} / {{nbt|double|right}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The second input of the calculation.
</div>
</div>


=== max ===
=== {{cd|mul}} ===
Returns the maximum of two inputs.
Multiplies two inputs.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>max</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>mul</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument1}}{{until|JE 26.3}} / {{nbt|double|left}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{Nbt|string}}{{Nbt|double|left}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument2}}{{until|JE 26.3}} / {{nbt|double|right}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The second input of the calculation.
** {{Nbt|string}}{{Nbt|double|right}}: {{json ref/density function}} &mdash; The second input of the calculation.
</div>
</div>


=== sub ===
=== {{cd|min}} ===
Performs subtraction between two arguments.{{upcoming|JE 26.3}}
Returns the minimum of two inputs.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>sub</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>min</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|left}} &mdash; The left-hand side of the operation.
** {{Nbt|string}}{{Nbt|double|left}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|right}} &mdash; The right-hand side of the operation.
** {{Nbt|string}}{{Nbt|double|right}}: {{json ref/density function}} &mdash; The second input of the calculation.
</div>
</div>


== Other density functions ==
=== {{cd|max}} ===
=== beardifier ===
Returns the maximum of two inputs.
Adds beards for structures (see the <code>terrain_adaptation</code> field in [[Minecraft:Structure/JSON format|structures]]). Its value is added to the <code>final_density</code> in noise setting by the game. Should not be referenced in data packs.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>beardifier</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>max</code>).
** {{Nbt|string}}{{Nbt|double|left}}: {{json ref/density function}} &mdash; The first input of the calculation.
** {{Nbt|string}}{{Nbt|double|right}}: {{json ref/density function}} &mdash; The second input of the calculation.
</div>
</div>


=== blend_alpha ===
=== {{cd|negate}} ===
Used in vanilla for smooth transition to chunks generated in old versions.{{Info needed}}
Negates the input.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>blend_alpha</code>).
** {{nbt|string|type}}: The ID of the density function type (in this case, <code>negate</code>).
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function to negate.
</div>
</div>


=== blend_density ===
=== {{cd|pow}} ===
Used in vanilla for smooth transition to chunks generated in old versions.{{Info needed}}
Raises the given base value to an exponent.
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>blend_density</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>pow</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The desired density of new chunks.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|base}}: the base value (Density Function).
** {{nbt|string}}{{nbt|double}}{{nbt|compound|exponent}}: the exponent (Density Function).
</div>
</div>


=== blend_offset ===
=== {{cd|reciprocal}} ===
Used in vanilla for smooth transition to chunks generated in old versions.{{Info needed}}
Inverts the input (<code>1/x</code>).
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>blend_offset</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>reciprocal</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input of the calculation.
</div>
</div>


=== ceil ===
=== {{cd|round}} ===
Rounds the input value to positive infinity.{{upcoming|JE 26.3}}
Rounds the input value to to the nearest integer (ties round up).


<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>ceil</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>round</code>).
** {{nbt|int|input}}: The input to round.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function to round.
** {{nbt|int|multiple}}: The output will be rounded to an integer multiple of this value. If not specified, it defaults to a constant 1.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|multiple}}: The output will be rounded to an integer multiple of the value returned by this Density Function. If not specified, defaults to a constant 1.
</div>
</div>


=== clamp ===
=== {{cd|sub}} ===
Clamps the input between two values.
Performs subtraction between two arguments.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>clamp</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>sub</code>).
** {{Nbt|double}}{{Nbt|compound|input}}: One '''density function''' (a new {{Nbt|double}}{{Nbt|compound}} density function definition, an {{Nbt|string|}}[[Minecraft:resource location|ID]] is not allowed here<ref>{{cite bug|MC|252814|Clamp density function takes a direct input and doesn't allow a reference|date=June 11, 2022}}</ref>) &mdash; The input to clamp.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|left}} &mdash; The left-hand side of the operation.
** {{Nbt|double|min}}: The lower bound. Value between −1000000.0 and 1000000.0 (both inclusive).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|right}} &mdash; The right-hand side of the operation.
** {{Nbt|double|max}}: The upper bound. Value between −1000000.0 and 1000000.0 (both inclusive).
</div>
</div>


=== constant ===
=== {{cd|sign}} ===
A constant value.
Computes the sign of the given input. If positive, it returns as 1. If the input is 0, it returns 0. If negative, it returns as -1.
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>constant</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>sign</code>).
** {{Nbt|double|argument}}{{until|JE 26.3}} / {{nbt|double|value}}{{upcoming|JE 26.3}}: A constant value. Value between −1000000.0 and 1000000.0 (both inclusive).
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function for which to compute the sign.
</div>
</div>


=== distance_to_point ===
=== {{cd|sqrt}} ===
Computes the distance to a fixed point using the specified distance function.{{upcoming|JE 26.3}}
Computes the square root of the given input.


<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>distance_to_point</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>sqrt</code>).
** {{nbt|int-array|point}}: {{cd|[x, y, z]}}; the point to compute distance to
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function for which to compute the square root.
** {{nbt|string|metric}}:
*** {{nbt|string|euclidean}}: (i.e. {{cd|sqrt(dx^2 + dy^2 + dz^2)}})
*** {{nbt|string|euclidean_squared}}: (i.e. {{cd|dx^2 + dy^2 + dz^2}})
*** {{nbt|string|manhattan}}: (i.e. {{cd|abs(dx) + abs(dy) + abs(dz)}})
*** {{nbt|string|chebyshev}}: (i.e. {{cd|max(abs(dx), abs(dy), abs(dz))}})
</div>
</div>


=== end_islands ===
=== {{cd|square}} ===
Renamed to {{cd|end_outer_islands}}.{{upcoming|JE 26.3}}
Squares the input. (<code>x^2</code>)
Samples at current position using a noise algorithm used for end islands. Its minimum value is −0.84375 and its maximum value is 0.5625.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>end_islands</code>{{until|JE 26.3}} / <code>end_outer_islands</code>{{upcoming|JE 26.3}}).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>square</code>).
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input of the calculation.
</div>
</div>


=== find_top_surface ===
=== {{cd|truncate}} ===
Scans through a column of an input density and returns the topmost y-level that is above 0. If no such position exists within the bounds, the {{Nbt|int|lower_bound}} is returned.
Rounds the input value to 0.
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>find_top_surface</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>truncate</code>).
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|density}}: {{json ref/density function}} &mdash; The density function to scan.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function to round.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|upper_bound}}: {{json ref/density function}} &mdash; The y-level to start the scan at. Usually a 2D density function.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|multiple}}: The output will be rounded to an integer multiple of the value returned by this Density Function. If not specified, defaults to a constant 1.
** {{Nbt|int|lower_bound}}: The y-level to stop the scan.
** {{Nbt|int|cell_height}}: The resolution of the scan. E.g. if set to <code>4</code>, then only every 4th block is checked.
</div>
</div>


=== floor ===
== Mapped density functions ==
Rounds the input value to negative infinity.{{upcoming|JE 26.3}}
These density functions map a set of values onto another set of values.


=== {{cd|gradient}} ===
[[File:Gradient tiling.png|thumb|Demonstration of the different tiling options for the {{cd|gradient}} density function, using both an input range of -100 to 100 and an output range of -1 to 1.]]
Clamps the given coordinate and maps the gradient to a range.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>floor</code>).
** {{nbt|string|type}}: The ID of the density function type (in this case, <code>gradient</code>).
** {{nbt|int|input}}: The input to round.
** {{nbt|string|axis}}: {{cd|x}}, {{cd|y}}. or {{cd|z}}: The axis over which to define the gradient .
** {{nbt|int|multiple}}: The output will be rounded to an integer multiple of this value. If not specified, it defaults to a constant 1.
** {{nbt|string|tiling}}: How the density function handles values outside the specified coordinate range. 3 options:
*** <code>clamp_to_edge</code>: outside the gradient boundaries, the value at the nearest boundary will be used.
*** <code>repeat</code>: The gradient will be repeated outside its boundaries.
*** <code>mirrored_repeat</code>: The gradient will be repeated as such that odd repetitions are mirrored, ensuring continuity between repetitions.
** {{nbt|int|from_coordinate}}: The coordinate at which the gradient starts.
** {{nbt|int|to_coordinate}}: The coordinate at which the gradient ends. It must not equal {{cd|from_coordinate}}.
** {{nbt|float|from_value}}: The value at which the gradient starts.
** {{nbt|float|to_value}}: The value at which the gradient ends.
</div>
</div>


=== log ===
=== {{cd|lerp}} ===
Computes the natural logarithm of the given input.{{upcoming|JE 26.3}}
Performs (unclamped) linear interpolation between two arguments based on an alpha. The returned value is: <code>first*(1-alpha) + second*alpha</code>
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>log</code>).
** {{nbt|string|type}}: The ID of the density function type (in this case, <code>lerp</code>).
** {{nbt|int|input}}: the value for which to compute the natural logarithm.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|alpha}}: Density function representing the interpolation factor (e.g. 0 = first, 1 = second). Any value outside of {{cd|[0; 1]}} will extrapolate.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|first}}: Density Function to use at {{cd|<nowiki>alpha=0</nowiki>}}.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|second}}: Density Function to use at {{cd|<nowiki>alpha=1</nowiki>}}.
</div>
</div>


=== lerp ===
=== {{cd|squeeze}} ===
Performs (unclamped) linear interpolation between two arguments based on an alpha.{{upcoming|JE 26.3}}
First clamps the input between −1 and 1, then transforms it using x/2 - x*x*x/24.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>lerp</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>squeeze</code>).
** {{nbt|integer|alpha}}: The interpolation factor (e.g. 0 = first, 1 = second). Any value outside of {{cd|[0; 1]}} will extrapolate.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{nbt|integer|first}}: the value at {{cd|<nowiki>alpha=0</nowiki>}}.
** {{nbt|integer|second}}: the value at {{cd|<nowiki>alpha=1</nowiki>}}.
</div>
</div>


=== negate ===
=== {{cd|spline}} ===
Negates the input.{{upcoming|JE 26.3}}
Computes a cubic spline.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>negate</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>spline</code>).
** {{nbt|string|input}}: The function to negate.
** {{Nbt|float}}{{Nbt|compound|spline}}: The spline. Can be either a number or an object.
*** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|coordinate}}: {{json ref/density function}} &mdash; Input determining the location on the spline.
*** {{Nbt|list|points}}: (Cannot be empty) List of points of the cubic spline.
**** {{Nbt|compound}}: A point of the cubic spline.
***** {{Nbt|float|location}}: The location of this point.
***** {{Nbt|float}}{{Nbt|compound|value}}: The value of this point. Can be either a number or a spline object.
***** {{Nbt|float|derivative}}: The slope at this point.
</div>
</div>


=== noise ===
== Conditional density functions ==
Samples a [[Minecraft:Custom_noise|noise]].
These density functions are used to apply "if-then" logic.
 
=== {{cd|half_negative}} ===
If the input is negative, returns half of the input. Otherwise returns the input. (<code>x < 0 ? x/2 : x</code>)
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>noise</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>half_negative</code>).
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{Nbt|double|xz_scale}}: Scales the X and Z before sampling.
** {{Nbt|double|y_scale}}: Scales the Y before sampling.
</div>
</div>


=== old_blended_noise ===
=== {{cd|interval_select}} ===
Samples a legacy noise. {{Info needed}}
Selects between a number of density functions based on an input density function and a set of threshold values.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>old_blended_noise</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>interval_select</code>).
** {{Nbt|double|xz_scale}}: Value between 0.001 and 1000.0 (both inclusive).
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: Density Function to be compared with any given {{cd|thresholds}}.
** {{Nbt|double|y_scale}}: Value between 0.001 and 1000.0 (both inclusive).
** {{nbt|list|thresholds}}: (List of Floats) The threshold values to compare {{cd|input}} with.
** {{Nbt|double|xz_factor}}: Value between 0.001 and 1000.0 (both inclusive).
*** If the input value is less than the threshold values, the result of {{cd|functions[i]}} will be selected.
** {{Nbt|double|y_factor}}: Value between 0.001 and 1000.0 (both inclusive).
*** If the input value is greater than the last threshold value, the last function will be selected.
** {{Nbt|double|smear_scale_multiplier}}: Value between 1.0 and 8.0 (both inclusive).
*** There must be one fewer {{cd|thresholds}} than {{cd|functions}}.
** {{nbt|list|functions}}: The resulting functions (at least two) to be selected from.
*** There must be one more element in {{cd|functions}} than {{cd|thresholds}}.
</div>
</div>


=== pow ===
=== {{cd|quarter_negative}} ===
Raises the given base value to an exponent.{{upcoming|JE 26.3}}
If the input is negative, returns a quarter of the input. Otherwise returns the input. (<code>x < 0 ? x/4 : x</code>)
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>pow</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>quarter_negative</code>).
** {{nbt|int|base}}: the base value.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The input of the calculation.
** {{nbt|int|exponent}}: the exponent.
</div>
</div>


=== range_choice ===
=== {{cd|range_choice}} ===
Computes the input value, and depending on that result returns one of two other density functions. Basically an if-then-else statement.
Computes the input value, and depending on that result returns one of two other density functions. Basically an if-then-else statement.
<div class="treeview">
<div class="treeview">
Line 359: Line 379:
</div>
</div>


=== round ===
== Other density functions ==
Rounds the input value to to the nearest integer (ties round up).{{upcoming|JE 26.3}}
=== {{cd|beardifier}} ===
Adds beards for structures (see the <code>terrain_adaptation</code> field in [[Minecraft:Structure/JSON format|structures]]). Its value is added to the <code>final_density</code> in noise setting by the game. Should not be referenced in data packs.
<div class="treeview">
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>beardifier</code>).
</div>
 
=== {{cd|blend_alpha}} ===
Used in vanilla for smooth transition to chunks generated in old versions.{{Info needed}}
<div class="treeview">
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>blend_alpha</code>).
</div>


=== {{cd|blend_density}} ===
Used in vanilla for smooth transition to chunks generated in old versions.{{Info needed}}
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>round</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>blend_density</code>).
** {{nbt|int|input}}: The input to round.
** {{Nbt|string}}{{Nbt|double|input}}: {{json ref/density function}} &mdash; The desired density of new chunks.
** {{nbt|int|multiple}}: The output will be rounded to an integer multiple of this value. If not specified, it defaults to a constant 1.
</div>
</div>


=== shift ===
=== {{cd|blend_offset}} ===
Samples a noise at <code>(x/4, y/4, z/4)</code>, then multiplies it by 4.
Used in vanilla for smooth transition to chunks generated in old versions.{{Info needed}}
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shift</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>blend_offset</code>).
** {{Nbt|string|argument}}{{until|JE 26.3}} / {{nbt|string|noise}}{{upcoming|JE 26.3}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
</div>
</div>


=== shift_a ===
=== {{cd|distance_to_point}} ===
Samples a noise at <code>(x/4, 0, z/4)</code>, then multiplies it by 4.
[[File:Distance to point options.png|thumb|Demonstration of the different metric options for the {{cd|distance_to_point}} density function, using the distance from the point (0, 0).]]
Computes the distance to a fixed point using the specified distance function.
 
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shift_a</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>distance_to_point</code>).
** {{Nbt|string|argument}}{{until|JE 26.3}} / {{nbt|string|noise}}{{upcoming|JE 26.3}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{nbt|int-array|point}}: {{cd|[x, y, z]}}; the point to compute distance to
** {{nbt|string|metric}}:
*** {{nbt|string|euclidean}}: (i.e. {{cd|sqrt(dx^2 + dy^2 + dz^2)}})
*** {{nbt|string|euclidean_squared}}: (i.e. {{cd|dx^2 + dy^2 + dz^2}})
*** {{nbt|string|manhattan}}: (i.e. {{cd|abs(dx) + abs(dy) + abs(dz)}})
*** {{nbt|string|chebyshev}}: (i.e. {{cd|max(abs(dx), abs(dy), abs(dz))}})
</div>
</div>


=== shift_b ===
=== {{cd|end_outer_islands}} ===
Samples a noise at <code>(z/4, x/4, 0)</code>, then multiplies it by 4.
Samples at current position using a noise algorithm used for end islands. Its minimum value is −0.84375 and its maximum value is 0.5625.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shift_b</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>end_outer_islands</code>).
** {{Nbt|string|argument}}{{until|JE 26.3}} / {{nbt|string|noise}}{{upcoming|JE 26.3}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
</div>
</div>


=== shifted_noise ===
=== {{cd|find_top_surface}} ===
Similar to <code>noise</code>, but first shifts the input coordinates.
Scans through a column of an input density and returns the topmost y-level that is above 0. If no such position exists within the bounds, the {{Nbt|int|lower_bound}} is returned.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shifted_noise</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>find_top_surface</code>).
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|density}}: {{json ref/density function}} &mdash; The density function to scan.
** {{Nbt|double|xz_scale}}: Scales the X and Z before sampling.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|upper_bound}}: {{json ref/density function}} &mdash; The y-level to start the scan at. Usually a 2D density function.
** {{Nbt|double|y_scale}}: Scales the Y before sampling.
** {{Nbt|int|lower_bound}}: The y-level to stop the scan.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|shift_x}}: {{json ref/density function}} &mdash; offset of the position in the X direction.
** {{Nbt|int|cell_height}}: The resolution of the scan. E.g. if set to <code>4</code>, then only every 4th block is checked.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|shift_y}}: {{json ref/density function}} &mdash; offset of the position in the Y direction.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|shift_z}}: {{json ref/density function}} &mdash; offset of the position in the Z direction.
</div>
</div>


=== sign ===
=== {{cd|ore_vein}} ===
Computes the sign of the given input.  If positive, it returns as 1. If the input is 0, it returns 0. If negative, it returns as -1.{{upcoming|JE 26.3}}


<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>sign</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>ore_vein</code>).
** {{nbt|int|input}}: the value for which to compute the sign.
** {{nbt|string|ore_block}}: The ore block to place.
** {{nbt|string|raw_ore_block}}: The raw ore block to place.
** {{nbt|string|filler_block}}: The filler block to place.
** {{nbt|float|raw_ore_chance}}: The probability for a raw ore block to be placed instead of an ore block. Value between 0 and 1 (inclusive).
** {{nbt|int|density}}: The probability for the ore vein to replace a block. If the value is 0 or lower, no block will be replaced.
** {{nbt|int|richness}}: The probability for an ore block or a raw ore block to be placed, as opposed to {{cd|filler_block}}. If the value is 0 or lower, all blocks will be the filler block. If the value is 1 or greater, no blocks will be the filler block.
** {{nbt|int|filler_gap}}: Overrides {{cd|richness}}; if the value is positive, {{cd|filler_block}} will always be placed.
</div>
</div>


=== slice ===
=== {{cd|slice}} ===
Removes a dimension from the input domain by taking a "slice" along an axis with a specific coordinate (e.g. with the axis equaling y and the coordinate of 0, a slice will be taken along the XZ plane, with all values sampled at y=0).{{upcoming|JE 26.3}}
Removes a dimension from the input domain by taking a "slice" along an axis with a specific coordinate (e.g. with the axis equaling y and the coordinate of 0, a slice will be taken along the XZ plane, with all values sampled at y=0).


<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>slice</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>slice</code>).
** {{nbt|int|axis}}: {{cd|x}}, {{cd|y}}, or {{cd|z}}; the axis to remove.
** {{nbt|string|axis}}: {{cd|x}}, {{cd|y}}, or {{cd|z}}; the axis to remove.
** {{nbt|int|coordinate}}: The fixed coordinate to be passed to the input function.
** {{nbt|int|coordinate}}: The fixed coordinate to be passed to the input function.
** {{nbt|int|input}}: The input function.
** {{nbt|string}}{{nbt|double}}{{nbt|compound|input}}: The input function.
</div>
</div>


=== spline ===
== Removed density functions ==
Computes a cubic spline.
{{outdated|section=1}}
 
=== {{cd|cache_2d}} ===
Removed in [[Minecraft:26.3-snap10]]
 
Only computes the input density once per horizontal position.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>spline</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_2d</code>).
** {{Nbt|float}}{{Nbt|compound|spline}}: The spline. Can be either a number or an object.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input to be cached.
*** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|coordinate}}: {{json ref/density function}} &mdash; Input determining the location on the spline.
*** {{Nbt|list|points}}: (Cannot be empty) List of points of the cubic spline.
**** {{Nbt|compound}}: A point of the cubic spline.
***** {{Nbt|float|location}}: The location of this point.
***** {{Nbt|float}}{{Nbt|compound|value}}: The value of this point. Can be either a number or a spline object.
***** {{Nbt|float|derivative}}: The slope at this point.
</div>
</div>


=== sqrt ===
=== {{cd|cache_all_in_cell}} ===
Computes the square root of the given input.{{upcoming|JE 26.3}}
Removed in [[Minecraft:26.3-snap10]]


Used by the game onto <code>final_density</code> and should not be referenced in data packs.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>sqrt</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_all_in_cell</code>).
** {{nbt|int|input}}: the value for which to compute the square root.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input to be cached.
</div>
</div>


=== truncate ===
=== {{cd|flat_cache}} ===
Rounds the input value to 0.{{upcoming|JE 26.3}}
Removed in [[Minecraft:26.3-snap10]]


Calculate the value per 4×4 column (Value at each block in one column is the same). And it is calculated only once per column, at Y=0. Used often in combination with <code>interpolated</code>.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>truncate</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>flat_cache</code>).
** {{nbt|int|input}}: The input to round.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input to be cached.
** {{nbt|int|multiple}}: The output will be rounded to an integer multiple of this value. If not specified, it defaults to a constant 1.
</div>
</div>


=== y_clamped_gradient ===
=== {{cd|shifted_noise}} ===
Renamed to {{cd|gradient}}.{{upcoming|JE 26.3}}
Removed in [[Minecraft:26.3-snap10]]
Clamps the Y coordinate between <code>from_y</code> and <code>to_y</code> and then linearly maps it to a range.{{until|JE 26.3}} / Clamps the given coordinate and maps the gradient to a range.{{upcoming|JE 26.3}}
 
Similar to <code>noise</code>, but first shifts the input coordinates.
<div class="treeview">
<div class="treeview">
* {{nbt|compound}}: Root object.
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>y_clamped_gradient</code>{{until|JE 26.3}} / <code>gradient</code>{{upcoming|JE 26.3}}).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>shifted_noise</code>).
** {{nbt|short|axis}}{{upcoming|JE 26.3}}: {{cd|x}}, {{cd|y}}. or {{cd|z}}: The axis over which to define the gradient .
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{nbt|string|tilling}}{{upcoming|JE 26.3}}:
** {{Nbt|double|xz_scale}}: Scales the X and Z before sampling.
*** {{nbt|int|clamp_to_edge}}: outside the gradient boundaries, the value at the nearest boundary will be used.
** {{Nbt|double|y_scale}}: Scales the Y before sampling.
*** {{nbt|string|repeat}}: The gradient will be repeated outside its boundaries.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|shift_x}}: {{json ref/density function}} &mdash; offset of the position in the X direction.
*** {{nbt|string|mirrored_repeat}}: The gradient will be repeated as such that odd repetitions are mirrored, ensuring continuity between repetitions.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|shift_y}}: {{json ref/density function}} &mdash; offset of the position in the Y direction.
** {{Nbt|int|from_y}}{{until|JE 26.3}} / {{nbt|int|from_coordinate}}{{upcoming|JE 26.3}}: The value to be mapped to <code>from_value</code>. Value between −4064 and 4062 (both inclusive).{{until|JE 26.3}} The coordinate at which the gradient starts.{{upcoming|JE 26.3}}
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|shift_z}}: {{json ref/density function}} &mdash; offset of the position in the Z direction.
** {{Nbt|int|to_y}}{{until|JE 26.3}} / {{nbt|int|to_coordinate}}{{upcoming|JE 26.3}}: The value to be mapped to <code>to_value</code>. Value between −4064 and 4062 (both inclusive).{{until|JE 26.3}} The coordinate at which the gradient ends. It must not equal {{cd|from_coordinate}}.{{upcoming|JE 26.3}}
** {{Nbt|double|from_value}}{{until|JE 26.3}} / {{nbt|float|from_value}}{{upcoming|JE 26.3}}: The value to map <code>from_y</code> to. Value between −1000000.0 and 1000000.0 (both inclusive).{{until|JE 26.3}} / The value at which the gradient starts.{{upcoming|JE 26.3}}
** {{Nbt|double|to_value}}{{until|JE 26.3}} / {{nbt|float|to_value}}{{upcoming|JE 26.3}}: The value to map <code>to_y</code> to. Value between −1000000.0 and 1000000.0 (both inclusive).{{until|JE 26.3}} / The value at which the gradient ends.{{upcoming|JE 26.3}}
</div>
</div>


== Removed density functions ==
=== {{cd|slide}} ===
{{outdated|section=1}}
 
=== slide ===
Removed in [[Minecraft:22w12a]]
Removed in [[Minecraft:22w12a]]
<div class="treeview">
<div class="treeview">
Line 502: Line 538:
</div>
</div>


=== terrain_shaper_spline ===
=== {{cd|terrain_shaper_spline}} ===
Removed in [[Minecraft:22w11a]]
Removed in [[Minecraft:22w11a]]


Line 517: Line 553:
</div>
</div>


=== weird_scaled_sampler ===
=== {{cd|weird_scaled_sampler}} ===
Removed in [[Minecraft:26.2-snap5]]
Removed in [[Minecraft:26.2-snap5]]


Line 527: Line 563:
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{Nbt|string|noise}}: {{json ref|noise|Custom noise}} &mdash; The noise to sample.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|input}}: The input density function. Can be an ID of a density function, or a density function in the form of a JSON object or a constant number.
** {{Nbt|string}}{{Nbt|double}}{{Nbt|compound|input}}: The input density function. Can be an ID of a density function, or a density function in the form of a JSON object or a constant number.
</div><!--
</div>
 
=== {{cd|y_clamped_gradient}} ===
Removed in [[Minecraft:26.3-snap6]]
 
Clamps the Y coordinate between <code>from_y</code> and <code>to_y</code> and then linearly maps it to a range.
<div class="treeview">
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>y_clamped_gradient</code>).
** {{Nbt|int|from_y}}: The value to be mapped to <code>from_value</code>. Value between −4064 and 4062 (both inclusive).
** {{Nbt|int|to_y}}: The value to be mapped to <code>to_value</code>. Value between −4064 and 4062 (both inclusive).
** {{Nbt|double|from_value}}: The value to map <code>from_y</code> to. Value between −1000000.0 and 1000000.0 (both inclusive).
** {{Nbt|double|to_value}}: The value to map <code>to_y</code> to. Value between −1000000.0 and 1000000.0 (both inclusive).
</div>
<!--
TYPE2
TYPE2
if (d < −0.75) {
if (d < −0.75) {
Line 558: Line 608:
Added fields to {{cd|old_blended_noise}} density function: xz_scale, y_scale, xz_factor, y_factor, and smear_scale_multiplier.}}
Added fields to {{cd|old_blended_noise}} density function: xz_scale, y_scale, xz_factor, y_factor, and smear_scale_multiplier.}}
|{{HistoryLine||1.21.9|dev=25w31a|Added density functions {{cd|minecraft:find_top_surface}} and {{cd|minecraft:invert}}.}}
|{{HistoryLine||1.21.9|dev=25w31a|Added density functions {{cd|minecraft:find_top_surface}} and {{cd|minecraft:invert}}.}}
|{{HistoryLine||26.2|dev=snap5|Added density function {{cd|minecraft:interval_select}}.|Removed density function {{cd|minecraft:weird_scale_sampler}}. Its functionality has been replaced with {{cd|interval_select}}.}}
|{{HistoryLine||26.2|dev=snap1|Density function {{cd|minecraft:clamp}} can now take a density function ID as an input.}}
|{{HistoryLine|java upcoming}}
|{{HistoryLine|||dev=snap5|Added density function {{cd|minecraft:interval_select}}.|Removed density function {{cd|minecraft:weird_scale_sampler}}. Its functionality has been replaced with {{cd|interval_select}}.}}
|{{HistoryLine||26.3|dev=snap4|Added the following density functions:
|{{HistoryLine||26.3|dev=snap4|Added the following density functions:
* {{cd|ceil}}
* {{cd|ceil}}
Line 578: Line 628:
* {{cd|slice}}
* {{cd|slice}}
* {{cd|sqrt}}
* {{cd|sqrt}}
|Renamed the following density functions:
|{{cd|end_islands}} has been renamed to {{cd|end_outer_islands}}.
* {{cd|end_islands}} to {{cd|end_outer_islands}}
|{{cd|y_clamped_gradient}} has been replaced with {{cd|gradient}}.
* {{cd|y_clamped_gradient}} to {{cd|gradient}}
}}
|{{HistoryLine|||dev=snap7|Density functions are no longer evaluated with double-precision floating point values, but instead with single-precision.}}
|{{HistoryLine|||dev=snap10|Added the {{cd|ore_vein}} density function.
|{{cd|cache_once}} has been renamed to {{cd|cache}}.
|Added the {{cd|shift_x}}, {{cd|shift_y}}, and {{cd|shift_z}} fields to the {{cd|noise}} density function.
|Added the {{cd|cell_size_xz}} and {{cd|cell_size_y}} fields to the {{cd|interpolated}} density function.
|Removed the following density functions:
* {{cd|cache_2d}}
* {{cd|cache_all_in_cell}}
* {{cd|flat_cache}}
* {{cd|shifted_noise}}
}}
}}
}}
}}

Latest revision as of 11:12, 17 September 2026

Template:Exclusive Density functions make up mathematical expressions to obtain a number from a position, stored as Minecraft:JSON files within a Minecraft:data pack in the path data/<namespace>/worldgen/density_function. They are referenced from the Minecraft:noise router in Minecraft:noise settings.

Template:TOC

JSON format

A density function can be a constant number or an object.

If the Template:Nbt is constant, a shorthand format is:

  • Template:Nbt: A constant number. Value between −1000000.0 and 1000000.0 (both inclusive).

Marker functions

Template:Cd

If this density function is referenced twice, it is only computed once per block position.

Template:Cd

Interpolates at each block in one cell based on the input density function value of some cells around. The size of each cell is size_horizontal * 4 and size_vertical * 4.

Noise sampling functions

These density functions are used to sample noises.

Template:Cd

Samples a noise.

  • Template:Nbt: Root object.
    • Template:Nbt: The ID of the density function type (in this case, noise).
    • Template:Nbt: Template:Json ref — The noise to sample.
    • Template:Nbt: Scales the X and Z before sampling.
    • Template:Nbt: Scales the Y before sampling.
    • Template:Nbt: Optional; A domain warp to apply on X. If not specified, no warping will be applied (equivalent to 0).
    • Template:Nbt: Optional; A domain warp to apply on Y. If not specified, no warping will be applied (equivalent to 0).
    • Template:Nbt: Optional; A domain warp to apply on Z. If not specified, no warping will be applied (equivalent to 0).

Template:Cd

Samples a legacy noise. Template:Info needed

  • Template:Nbt: Root object.
    • Template:Nbt: The ID of the density function type (in this case, old_blended_noise).
    • Template:Nbt: Value between 0.001 and 1000.0 (both inclusive).
    • Template:Nbt: Value between 0.001 and 1000.0 (both inclusive).
    • Template:Nbt: Value between 0.001 and 1000.0 (both inclusive).
    • Template:Nbt: Value between 0.001 and 1000.0 (both inclusive).
    • Template:Nbt: Value between 1.0 and 8.0 (both inclusive).

Template:Cd

Samples a noise at (x/4, y/4, z/4), then multiplies it by 4.

Template:Cd

Samples a noise at (x/4, 0, z/4), then multiplies it by 4.

Template:Cd

Samples a noise at (z/4, x/4, 0), then multiplies it by 4.

Mathematical density functions

These density functions are used to perform mathematical operations.

Template:Cd

Calculates the absolute value of the input density function.

Template:Cd

Adds two density functions together.

Template:Cd

Rounds the input value to positive infinity.

Template:Cd

Clamps the input between two values.

Template:Cd

A constant value.

  • Template:Nbt: Root object.
    • Template:Nbt: The ID of the density function type (in this case, constant).
    • Template:Nbt: A constant value. Value between −1000000.0 and 1000000.0 (both inclusive).

Template:Cd

Cubes the input (x^3).

Template:Cd

Performs division between two arguments.

Template:Cd

Rounds the input value to negative infinity.

Template:Cd

Computes the natural logarithm of the given input.

Template:Cd

Multiplies two inputs.

Template:Cd

Returns the minimum of two inputs.

Template:Cd

Returns the maximum of two inputs.

Template:Cd

Negates the input.

Template:Cd

Raises the given base value to an exponent.

Template:Cd

Inverts the input (1/x).

Template:Cd

Rounds the input value to to the nearest integer (ties round up).

Template:Cd

Performs subtraction between two arguments.

Template:Cd

Computes the sign of the given input. If positive, it returns as 1. If the input is 0, it returns 0. If negative, it returns as -1.

Template:Cd

Computes the square root of the given input.

Template:Cd

Squares the input. (x^2)

Template:Cd

Rounds the input value to 0.

Mapped density functions

These density functions map a set of values onto another set of values.

Template:Cd

File:Gradient tiling.png
Demonstration of the different tiling options for the Template:Cd density function, using both an input range of -100 to 100 and an output range of -1 to 1.

Clamps the given coordinate and maps the gradient to a range.

  • Template:Nbt: Root object.
    • Template:Nbt: The ID of the density function type (in this case, gradient).
    • Template:Nbt: Template:Cd, Template:Cd. or Template:Cd: The axis over which to define the gradient .
    • Template:Nbt: How the density function handles values outside the specified coordinate range. 3 options:
      • clamp_to_edge: outside the gradient boundaries, the value at the nearest boundary will be used.
      • repeat: The gradient will be repeated outside its boundaries.
      • mirrored_repeat: The gradient will be repeated as such that odd repetitions are mirrored, ensuring continuity between repetitions.
    • Template:Nbt: The coordinate at which the gradient starts.
    • Template:Nbt: The coordinate at which the gradient ends. It must not equal Template:Cd.
    • Template:Nbt: The value at which the gradient starts.
    • Template:Nbt: The value at which the gradient ends.

Template:Cd

Performs (unclamped) linear interpolation between two arguments based on an alpha. The returned value is: first*(1-alpha) + second*alpha

Template:Cd

First clamps the input between −1 and 1, then transforms it using x/2 - x*x*x/24.

Template:Cd

Computes a cubic spline.

Conditional density functions

These density functions are used to apply "if-then" logic.

Template:Cd

If the input is negative, returns half of the input. Otherwise returns the input. (x < 0 ? x/2 : x)

Template:Cd

Selects between a number of density functions based on an input density function and a set of threshold values.

Template:Cd

If the input is negative, returns a quarter of the input. Otherwise returns the input. (x < 0 ? x/4 : x)

Template:Cd

Computes the input value, and depending on that result returns one of two other density functions. Basically an if-then-else statement.

Other density functions

Template:Cd

Adds beards for structures (see the terrain_adaptation field in structures). Its value is added to the final_density in noise setting by the game. Should not be referenced in data packs.

Template:Cd

Used in vanilla for smooth transition to chunks generated in old versions.Template:Info needed

Template:Cd

Used in vanilla for smooth transition to chunks generated in old versions.Template:Info needed

Template:Cd

Used in vanilla for smooth transition to chunks generated in old versions.Template:Info needed

Template:Cd

File:Distance to point options.png
Demonstration of the different metric options for the Template:Cd density function, using the distance from the point (0, 0).

Computes the distance to a fixed point using the specified distance function.

Template:Cd

Samples at current position using a noise algorithm used for end islands. Its minimum value is −0.84375 and its maximum value is 0.5625.

Template:Cd

Scans through a column of an input density and returns the topmost y-level that is above 0. If no such position exists within the bounds, the Template:Nbt is returned.

Template:Cd

  • Template:Nbt: Root object.
    • Template:Nbt: The ID of the density function type (in this case, ore_vein).
    • Template:Nbt: The ore block to place.
    • Template:Nbt: The raw ore block to place.
    • Template:Nbt: The filler block to place.
    • Template:Nbt: The probability for a raw ore block to be placed instead of an ore block. Value between 0 and 1 (inclusive).
    • Template:Nbt: The probability for the ore vein to replace a block. If the value is 0 or lower, no block will be replaced.
    • Template:Nbt: The probability for an ore block or a raw ore block to be placed, as opposed to Template:Cd. If the value is 0 or lower, all blocks will be the filler block. If the value is 1 or greater, no blocks will be the filler block.
    • Template:Nbt: Overrides Template:Cd; if the value is positive, Template:Cd will always be placed.

Template:Cd

Removes a dimension from the input domain by taking a "slice" along an axis with a specific coordinate (e.g. with the axis equaling y and the coordinate of 0, a slice will be taken along the XZ plane, with all values sampled at y=0).

Removed density functions

Template:Outdated

Template:Cd

Removed in Minecraft:26.3-snap10

Only computes the input density once per horizontal position.

Template:Cd

Removed in Minecraft:26.3-snap10

Used by the game onto final_density and should not be referenced in data packs.

Template:Cd

Removed in Minecraft:26.3-snap10

Calculate the value per 4×4 column (Value at each block in one column is the same). And it is calculated only once per column, at Y=0. Used often in combination with interpolated.

Template:Cd

Removed in Minecraft:26.3-snap10

Similar to noise, but first shifts the input coordinates.

Template:Cd

Removed in Minecraft:22w12a

The legacy "spline"

Removed in Minecraft:22w11a

Template:Cd

Removed in Minecraft:22w11a

Calculate the spline from the noise settings.

Template:Cd

Removed in Minecraft:26.2-snap5

According to the input value, scales and enhances (or weakens) some regions of the specified noise, and then returns the absolute value.

Template:Cd

Removed in Minecraft:26.3-snap6

Clamps the Y coordinate between from_y and to_y and then linearly maps it to a range.

  • Template:Nbt: Root object.
    • Template:Nbt: The ID of the density function type (in this case, y_clamped_gradient).
    • Template:Nbt: The value to be mapped to from_value. Value between −4064 and 4062 (both inclusive).
    • Template:Nbt: The value to be mapped to to_value. Value between −4064 and 4062 (both inclusive).
    • Template:Nbt: The value to map from_y to. Value between −1000000.0 and 1000000.0 (both inclusive).
    • Template:Nbt: The value to map to_y to. Value between −1000000.0 and 1000000.0 (both inclusive).

History

Template:HistoryTable

Issues

Template:Issue list

References

Template:Reflist

External links

Navigation

Template:Navbox Java Edition technical

Minecraft:de:Dichtefunktion Minecraft:fr:Fonction de densité Minecraft:ko:밀도 함수 Minecraft:pt:Função de densidade Minecraft:zh:密度函数