395 lines
15 KiB
Markdown
Raw Normal View History

2022-04-09 18:28:37 +02:00
# Perlin Explorer [`perlin_explorer`]
2022-05-12 12:02:54 +02:00
Version: 1.0.2
2022-04-21 03:49:54 +02:00
2022-04-17 06:49:43 +02:00
Perlin Explorer is a mod for Minetest to allow to test and experiment around with Perlin noises.
This is especially useful for game and mod developers who want to fine-tune the noises in an
2022-04-21 01:16:21 +02:00
efficient manner. Its also useful to discover useful noise parameters for the various
2022-04-17 06:49:43 +02:00
mapgen settings in Minetest.
2022-04-21 01:16:21 +02:00
This mod uses Minetests builtin Perlin noise, so the same rules apply here.
Refer to Minetests documentation to learn about noise parameters.
2022-04-17 06:49:43 +02:00
2022-04-17 11:48:18 +02:00
## /!\ WARNING WARNING WARNING /!\
This mod can aggressively **grief** your world due to its
mapgen feature! Dont use it in worlds with buildings
you care about.
**NEVER** use this mod on a public server, it has not been
2022-04-21 01:42:22 +02:00
security-tested.
2022-04-17 11:48:18 +02:00
2022-04-17 06:49:43 +02:00
## Features
* Powerful noise parameter editor to quickly adjust parameters
* Look up Perlin noise value at a given position
* Special nodes to represent noise values
* Color denotes value, cutoff points can be customized
* Choose between solid nodes, transparent grid nodes, and tiny climbable cube nodes
* Generate a small portion of the noise as map at a given area
2022-04-21 01:42:22 +02:00
* Enable “mapgen mode” to automatically generate nodes as you move around
2022-04-17 06:49:43 +02:00
* Load predefined Perlin noises from the Minetest configuration
* Save noise parameters into profiles for later use
* Mathematical and statistical analysis of noises
## Usage
### Before you begin
This document assumes you already have a rough understanding of what
2022-04-17 11:48:18 +02:00
Perlin noises are used for.
2022-04-17 06:49:43 +02:00
2022-04-17 11:48:18 +02:00
To use this mod, create a brand new world to avoid accidents.
Everything in this mod requires the `server` privilege, so obtain
this privilege as well.
2022-04-17 06:49:43 +02:00
### Overview
The main feature and tool in this mod is the Perlin Noise Creator. Using
this item opens a window in which you can view, modify, analyze and
2022-04-17 11:48:18 +02:00
manage noise parameters, generate nodes and perform some basic
analysis.
2022-04-17 06:49:43 +02:00
### What are noise parameters?
These are used by Minetest for the Perlin noises.
2022-04-21 01:42:22 +02:00
Perlin noises are used for various things such as generating the world,
2022-04-17 06:49:43 +02:00
decorations (trees, plants, etc.), ores, biomes and much more.
And noise parameters are, well, the parameters that are used
to tweak the Perlin noises. They change the output numbers,
2022-04-21 01:42:22 +02:00
they stretch or squeeze the noise, they make more or less
2022-04-17 06:49:43 +02:00
detailed, and more.
The Perlin Explorer mods main use case is to allow you to
try out various parameters and to modify them in a quick
manner so you can quickly get results. This is much more
efficient than tweaking the noise in the Minetest settings
or Lua code.
2022-04-17 11:48:18 +02:00
This document is *not* an introduction to Perlin noises
2022-04-21 01:42:22 +02:00
and noise parameters themselves! Please refer to the Minetest
Lua API documentation to learn more.
2022-04-17 11:48:18 +02:00
2022-04-21 01:16:21 +02:00
### Active noise
2022-04-21 01:42:22 +02:00
This mod heavily relies on something called the “active noise”
2022-04-21 01:16:21 +02:00
(or “active noise parameters”). These are the noise parameters
and options that the mod will use for various operations, like
getting values, generating nodes, using mapgen mode, etc. The “Apply” button
in the Perlin Noise Creator tool sets the active noise.
There can only be one active noise parameters. Also, the active
noise is always valid; if you enter invalid noise parameters,
the mod refuses them for the active noise.
2022-04-21 01:42:22 +02:00
Initially, there are no active noise parameters, so you have
2022-04-21 01:16:21 +02:00
to push the “Apply” button mentioned before first.
2022-04-17 06:49:43 +02:00
### The tools
This section explains the various tools you have at your disposal.
2022-04-17 11:48:18 +02:00
These tools are items, so check out your Creative Inventory
2022-04-17 06:49:43 +02:00
(or something similar) to get them.
#### Perlin Noise Creator
2022-04-21 01:42:22 +02:00
This is the main tool of this mod. Hold this item in hand and punch
2022-04-17 06:49:43 +02:00
to open a window.
The window has multiple sections:
* Noise parameters: You specify noise parameters here
* Noise options: This is how the noise parameters are being interpreted
* Node generation: Stuff you need to specify when you want to generate
a chunk (or chunks) of nodes
##### Noise parameters
This section has 2 parts: The top part is a list of profiles.
An explanation for that is below.
2022-04-21 01:42:22 +02:00
The bottom part contains the actual noise parameters:
2022-04-17 06:49:43 +02:00
* Offset
* Scale
* Seed
* X/Y/Z Spread
* Octaves
* Persistence
* Lacunarity
2022-04-21 01:42:22 +02:00
* Flags (defaults, eased, absvalue)
2022-04-17 06:49:43 +02:00
Please refer to Minetest Lua API documentation for a definition.
2022-04-21 01:42:22 +02:00
This mod enforces a few sanity checks on some for the values,
2022-04-21 01:16:21 +02:00
i.e. octaves cant be lower than 1.
2022-04-17 06:49:43 +02:00
2022-04-21 01:42:22 +02:00
**Hint**: If you hit “Enter” while the focus is on any of the noise
2022-04-17 06:49:43 +02:00
parameters, this is the same as if you clicked “Accept” or “Accept
and create” (see below). Use this to your advantage to quickly
tweak a particular value.
The little dice button randomizes the seed, its a simple
convenience.
2022-04-21 01:16:21 +02:00
The “Analyze” button shows you some basic info about the
noise parameters as displayed in the form. First, the
2022-04-21 01:42:22 +02:00
theoretical minimum and maximum possible value
of the entire noise.
Then, the “wavelengths” for each axis. This means across
how many nodes (roughly) the noise is stretched out, specified
for each octave, beginning with the first.
2022-04-17 06:49:43 +02:00
If any wavelength reaches a number lower than 1, it will be
2022-04-21 01:42:22 +02:00
shown in red because this means your noise parameters are invalid.
If this happens, either increase the spread or decrease the octaves
or lacunarity.
2022-04-17 06:49:43 +02:00
2022-04-21 01:42:22 +02:00
**Note**: The Analyze feature uses the noise parameters as they
are displayed in the form, *not* the *active* noise parameters.
This is because the active noise must always be valid.
2022-04-21 01:16:21 +02:00
2022-04-17 06:49:43 +02:00
###### Profiles
A profile is just noise parameters that you can load for later use.
Its a convenience feature.
The drop-down list to the left is the list of all profiles.
2022-04-20 20:45:20 +02:00
This list contains three types of profiles:
2022-04-17 06:49:43 +02:00
2022-04-20 20:45:20 +02:00
* Active noise parameters: Special profile that represents
the currently active noise. Can not be deleted.
2022-04-17 06:49:43 +02:00
* Builtin profiles are the noise parameters
of the official Minetest mapgens, loaded from settings.
Their name always begins with `mg_`
2022-04-20 20:45:20 +02:00
Can not be deleted.
* User profiles: These are your profiles, you can
2022-04-17 06:49:43 +02:00
add and remove them at will. These are named like
“Profile 1”
2022-04-20 20:45:20 +02:00
User profiles will also automatically saved on disk so they
2022-04-21 01:42:22 +02:00
get restored when restarting the world.
2022-04-20 20:45:20 +02:00
2022-04-17 06:49:43 +02:00
The buttons do the following:
2022-04-20 20:45:20 +02:00
* Add: Save the current noise parameters into a new user profile
2022-04-17 06:49:43 +02:00
* Load: Load the currently selected profile and replace the
input fields
2022-04-20 20:45:20 +02:00
* Delete: Delete the currently selected user profile (not possible
for non-user profiles)
2022-04-17 06:49:43 +02:00
2022-04-17 11:48:18 +02:00
##### Noise options
2022-04-21 01:42:22 +02:00
This section roughly says how the noise parameters are “interpreted”.
These fields are available:
2022-04-17 06:49:43 +02:00
* Number of dimensions (2D or 3D)
* 2D: Noise is 2-dimensional. In the world, only the X and Z
coordinates are used. The Y coordinate is ignored.
* 3D: Noise uses the same 3 dimensions as the Minetest world,
with X, Y and Z coordinates.
* Pixelization: If this number is higher than 1, the noise values
will be repeated for this number of nodes, along every axis.
This gives a “pixelized”/“voxelized” look. You normally dont need
this but its useful to emulate the `sidelen` parameter of
mapgen decorations (relevant for game development)
2022-04-21 01:42:22 +02:00
* Statistics: Will calculate tons of values (without generating
nodes) in a predefined area/volume to make some statistics. This
2022-04-17 06:49:43 +02:00
will take a while to do so.
The main feature is a histogram which shows which values were the most
common. The first row shows the percentage, the 2nd and 3rd row show
the maximum and minimum value of that column. For example,
if the column says “31.4%”, “0.0” for “Max.” and “-4.2” for “Min.” that means
that 31.4% of all values that were calculated were greater than or equal
to -4.2, but smaller than 0.
2022-04-21 01:16:21 +02:00
The statistics always distributes the values into “buckets” of
2022-04-17 06:49:43 +02:00
equal sizes, beginning with the lowest theoretical value and
ending with the highest one.
2022-04-21 01:42:22 +02:00
The histogram is useful if you want to see how common or rare
each value is.
2022-04-21 01:16:21 +02:00
**Note**: This button will calculate statistics of the noise settings
2022-04-21 01:42:22 +02:00
as they were displayed in the form. It does *not* use the active noise.
2022-04-17 06:49:43 +02:00
2022-04-17 11:48:18 +02:00
##### Node generation
2022-04-17 06:49:43 +02:00
Playing around with parameters isnt very useful if you dont
get a visual result. Thats where the node generation comes
into play. Here you specify parameters for generating nodes
from the noise.
2022-04-21 01:42:22 +02:00
All noise values are either high or low; they are divided
by the **midpoint**: Values equal to or higher than the
midpoint are high, otherwise low.
2022-04-17 06:49:43 +02:00
2022-04-20 18:46:10 +02:00
In 2D mode, the mapgen will be a flat XZ plane with nodes.
2022-04-17 06:49:43 +02:00
In 3D mode, the mapgen will place nodes at every position
2022-04-20 18:46:10 +02:00
in the 3D world.
###### Build modes
The drop-down list to the bottom right stands for the
“build modes”. This sets for which noise values nodes
will be generated:
* Auto: In 2D mode, generate nodes for every value,
in 3D mode, only generate nodes for high values
* All: Generate nodes for every value
* High only: Only generate nodes for high values
* Low only: Only generate nodes for low values
###### Node visualization
2022-04-17 06:49:43 +02:00
Generated nodes will be color-coded, which stands for the value:
2022-04-20 07:00:32 +02:00
* White to yellow to orange: High values
* Light blue to blue (with a small dot): Low values
2022-04-17 06:49:43 +02:00
There are two parameters:
2022-04-17 06:49:43 +02:00
* Low color at: The lowest noise value at which the
color gradient for low noise values begins.
* High color at: The highest noise value at which the
color gradient for high noise values ends.
2022-04-20 07:00:32 +02:00
The low color gradient begins at the “Low color at”
setting and ends right before the the midpoint.
The high color gradient begins at the midpoint
and ends at the ”High color at” setting.
For example, if 0 is the midpoint, and the “low/high color”
settings are -1 and 1, respectively, all values below 0 (the
2022-04-21 01:16:21 +02:00
midpoint) will use the low values color gradient and all
values above 0 will use the high values color gradient.
All values at -1 and below will have the “extreme low”
color (dark blue) and all values at 1 or above will have the
2022-04-21 01:16:21 +02:00
“extreme high” (orange) color.
Note that the colors only serve as a visual aid and
given the limited palette, is only an estimation
of the noise values. You can always use the Perlin Value
Getter for the exact values.
2022-04-20 16:18:16 +02:00
If you have problems seeing color differences, activate
the grayscale color palette in the mod settings.
2022-04-20 18:46:10 +02:00
###### Node types
2022-04-17 06:49:43 +02:00
2022-04-20 18:46:10 +02:00
Right to the color settings, there is a list of node types.
This is for different node styles for different
noise visualizations:
2022-04-17 06:49:43 +02:00
* Solid Nodes: Simple, solid, opaque cubes
* Grid Nodes: Solid see-through nodes (like glass)
* Minibox Nodes: See-thorough nodes, but smaller. You can also
walk and climb up on down in these
* Stone: Places stone for high values, air otherwise.
2022-04-17 06:49:43 +02:00
This uses the stone node from the game (if it supports it).
Solid Nodes are recommend to use normally.
Grid or Minibox nodes can be useful in 3D mode if you want to
2022-04-20 18:46:10 +02:00
expose the inner structure of complex 3D noises. This can be quite
trippy and reduce your FPS sharply, so consider reducing the
render distance.
###### Position settings
The following settings are only used when you want
to place nodes in a certain area:
2022-04-17 06:49:43 +02:00
2022-04-20 18:46:10 +02:00
* X, Y, Z: Coordinates of the bottom left front corner if you
want to generate an area manually with “Apply and create”
* Size: Side length of the square or cube of the area/volume
to generate, if you generate it with “Apply and create”.
**ATTENTION:** Dont make this value too large
(especially in 3D), otherwise map generation
will take forever and the game freezes.
2022-04-17 06:49:43 +02:00
#### Footer (Apply / Apply and close / Enable mapgen / Disable mapgen)
2022-04-21 01:42:22 +02:00
The footer is the final part of the form. It has these buttons:
2022-04-17 06:49:43 +02:00
* Apply: Set the current noise params as the “active noise”. If the
2022-04-21 01:42:22 +02:00
mapgen is active, it will automatically update the world around
players
2022-04-17 06:49:43 +02:00
* Apply and create: Generate some nodes at the specified XYZ coordinates
2022-04-21 01:42:22 +02:00
with the specified size (see Position settings above)
2022-04-17 06:49:43 +02:00
* Enable mapgen: Enable the mapgen mode. In mapgen mode, nodes will
automatically be generated according to the settings around players.
This allows you to actually *explore* a world.
When a new part of the world is created, a little star icon will
appear in its center to show you this part is new.
Note: When mapgen mode is enabled, the XYZ, size and “Apply and create”
buttons disappear because those are for single generations.
Note: If you modify the noise parameters and hit “Accept”, the mapgen
will automatically update.
* Disable mapgen: Disables the mapgen again. The “XYZ”, “Size”
and “Apply and create” will appear again.
### Perlin Value Getter
This item tells you the (nearly) exact value of the current active
noise parameters at a given position. You can use it on nodes
and in mid-air.
Use the “Place” key on a node to get the value of the node position.
Use the “Punch” key anywhere to get the value of *your* position (rounded).
If you hold down “Sneak” while punching, your *exact* position (not rounded)
will be used instead.
2022-04-21 01:42:22 +02:00
**Note**: This tool always calculates the values of the *active noise*
It completely ignores whatever nodes were generated and what those nodes
represents, so tool also works if you havent generated any nodes.
It actually only looks at the coordinates of the node or yourself.
2022-04-17 06:49:43 +02:00
If youre unsure about what the current active noise is, just hit “Accept” again
in the Perlin Noise Creator.
### Random Perlin seed setter
This is just a convenience item. Using it is the same as opening the Perlin Noise
Creator, changing the seed and accepting.
In mapgen mode, punching or placing will set a new seed only, but the mapgen
will then instantly update the map.
If mapgen mode is disabled, the meaning of this tool is this:
2022-04-21 01:42:22 +02:00
* Punch: Set a new seed of the active noise, but do not regenerate map
* Place: Set a new seed of the active noise, then regenerate nodes
(using the XYZ and Size parameters in the Perlin Noise Creator)
This can be useful to look at many different variations of the noise.
2022-04-17 06:49:43 +02:00
### Troubleshooting
#### The mod hangs up / is extremely slow
Sorry! :-(
This can happen if the mod tries to calculate enormous numbers of values
or generates a huge number of nodes.
Which is the case if you selected a huge number when starting to
generate nodes.
Be careful with large numbers in 3D mode as it is exponentially more
expensive to calculate than 2D.
The only thing you can do is to just not generate huge areas at once.
The mod doesnt have any warnings in place for now, so youre on
your own for now. Sorry! :-(
#### The Perlin noise gives the exact same value everywhere.
The most likely reason is that `scale` is exactly 0.
Because if `scale` is 0, the noise will return the same value
everywhere. Remember the result of all noise computations is multiplied
with `scale` at the end, so a multiplication with 0 will
literally nullify all that.
This is correct behavior but obviously useless.
Just pick a non-zero scale to fix this.
2022-04-09 18:28:37 +02:00
2022-04-17 11:48:18 +02:00
## Credits
This mod was written by Wuzzy.
2022-04-09 18:28:37 +02:00
## License
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.