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
Line 21: Line 21:
== Marker functions ==
== Marker functions ==
=== {{cd|cache_2d}} ===
=== {{cd|cache_2d}} ===
{{until|JE 26.3}}
Only computes the input density once per horizontal position.
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>cache_2d</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_2d</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}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input to be cached.
</div>
</div>


=== {{cd|cache_all_in_cell}} ===
=== {{cd|cache_all_in_cell}} ===
{{until|JE 26.3}}
Used by the game onto <code>final_density</code> and should not be referenced in data packs.
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>cache_all_in_cell</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_all_in_cell</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}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input to be cached.
</div>
</div>


=== {{cd|cache_once}} ===
=== {{cd|cache_once}} ===
If this density function is referenced twice, it is only computed once per block position.
Renamed to {{cd|cache}}.{{upcoming|JE 26.3}} 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_once</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>cache_once</code>{{until|JE 26.3}} / <code>cache</code>{{upcoming|JE 26.3}}).
** {{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}}{{Nbt|compound|argument}}{{until|JE 26.3}} / {{nbt|double|input}}{{upcoming|JE 26.3}}: {{json ref/density function}} &mdash; The input to be cached.
</div>
</div>


=== {{cd|flat_cache}} ===
=== {{cd|flat_cache}} ===
{{until|JE 26.3}}
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>.
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>flat_cache</code>).
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>flat_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}}{{Nbt|compound|argument}}: {{json ref/density function}} &mdash; The input to be cached.
</div>
</div>


Line 58: Line 61:
** {{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>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 interpolated.
** {{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|int|cell_size_xz}}{{upcoming|JE 26.3}}: 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}}{{upcoming|JE 26.3}}: Size in blocks of the interpolation grid cells on the Y axis. The number must not be negative.
</div>
</div>


Line 71: Line 76:
** {{Nbt|double|xz_scale}}: Scales the X and Z before sampling.
** {{Nbt|double|xz_scale}}: Scales the X and Z before sampling.
** {{Nbt|double|y_scale}}: Scales the Y before sampling.
** {{Nbt|double|y_scale}}: Scales the Y before sampling.
** {{nbt|double|shift_x}}{{upcoming|JE 26.3}}: Optional; A domain warp to apply on X. If not specified, no warping will be applied (equivalent to 0).
** {{nbt|double|shift_y}}{{upcoming|JE 26.3}}: Optional; A domain warp to apply on Y. If not specified, no warping will be applied (equivalent to 0).
** {{nbt|double|shift_z}}{{upcoming|JE 26.3}}: Optional; A domain warp to apply on Z. If not specified, no warping will be applied (equivalent to 0).
</div>
</div>


Line 110: Line 118:


=== {{cd|shifted_noise}} ===
=== {{cd|shifted_noise}} ===
{{until|JE 26.3}}
Similar to <code>noise</code>, but first shifts the input coordinates.
Similar to <code>noise</code>, but first shifts the input coordinates.
<div class="treeview">
<div class="treeview">
Line 488: Line 497:
** {{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|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>
=== {{cd|ore_vein}} ===
{{upcoming|JE 26.3}}
<div class="treeview">
* {{nbt|compound}}: Root object.
** {{Nbt|string|type}}: The ID of the density function type (in this case, <code>ore_vein</code>).
** {{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.


=== {{cd|slice}} ===
=== {{cd|slice}} ===
Line 607: Line 629:
}}
}}
|{{HistoryLine|||dev=snap7|Density functions are no longer evaluated with double-precision floating point values, but instead with single-precision.}}
|{{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}}
}}
}}
}}



Revision as of 11:10, 26 August 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

Template:Until Only computes the input density once per horizontal position.

Template:Cd

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

Template:Cd

Renamed to Template:Cd.Template:Upcoming If this density function is referenced twice, it is only computed once per block position.

Template:Cd

Template:Until 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

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. Used often in combination with flat_cache.

Noise sampling functions

These density functions are used to sample noises.

Template:Cd

Samples a noise.

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.

Template:Cd

Template:Until Similar to noise, but first shifts the input coordinates.

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:Upcoming

Template:Cd

Clamps the input between two values.

Template:Cd

A constant value.

Template:Cd

Cubes the input (x^3).

Template:Cd

Performs division between two arguments.Template:Upcoming

Template:Cd

Rounds the input value to negative infinity.Template:Upcoming

Template:Cd

Renamed to Template:Cd.Template:Upcoming Inverts the input (1/x).

Template:Cd

Computes the natural logarithm of the given input.Template:Upcoming

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:Upcoming

Template:Cd

Raises the given base value to an exponent.Template:Upcoming

Template:Cd

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

Template:Cd

Performs subtraction between two arguments.Template:Upcoming

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:Upcoming

Template:Cd

Computes the square root of the given input.Template:Upcoming

Template:Cd

Squares the input. (x^2)

Template:Cd

Rounds the input value to 0.Template:Upcoming

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 functionTemplate:Upcoming, 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:Upcoming

  • 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:NbtTemplate:Upcoming: 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.Template:Upcoming 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.

Template:Cd

Replaced with Template:Cd.Template:Upcoming

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

  • 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).

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 functionTemplate:Upcoming, using the distance from the point (0, 0).

Computes the distance to a fixed point using the specified distance function.Template:Upcoming

Template:Cd

Renamed to Template:Cd.Template:Upcoming 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:Upcoming

  • 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).Template:Upcoming

Removed density functions

Template:Outdated

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.

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:密度函数