Files
Documentation/content/world/worldgen/density-functions.fr.md
2026-01-20 20:33:59 +01:00

5.0 KiB

title, type, weight
title type weight
Fonctions de Densité docs 8

Les fonctions de densité définissent la forme du terrain en calculant des valeurs de densité à chaque point dans l'espace 3D.

Package: com.hypixel.hytale.builtin.hytalegenerator.density

Concept de Fonction de Densité

Les fonctions de densité retournent des valeurs qui déterminent solide vs air :

  • Valeurs positives = terrain solide
  • Valeurs négatives = air
  • Zéro = limite de surface
public interface DensityFunction {
    // Calculer la densité à une position
    float calculate(int x, int y, int z, GenerationContext context);
}

Fonctions de Densité de Base

ConstantDensity

Retourne une valeur constante :

Type: ConstantDensity
Value: 1.0

NoiseDensity

Utilise le bruit pour la variation du terrain :

Type: NoiseDensity
NoiseType: Simplex
Scale: 0.01
Amplitude: 1.0
Octaves: 4
Persistence: 0.5

HeightGradient

Crée un terrain plat à une hauteur spécifique :

Type: HeightGradient
BaseHeight: 64
Falloff: 32
public class HeightGradient implements DensityFunction {
    private int baseHeight;
    private float falloff;

    public float calculate(int x, int y, int z, GenerationContext ctx) {
        return (baseHeight - y) / falloff;
    }
}

Fonctions Composites

AddDensity

Combine plusieurs fonctions par addition :

Type: AddDensity
Functions:
  - terrain_base
  - terrain_hills
  - terrain_mountains

MultiplyDensity

Multiplie les valeurs des fonctions :

Type: MultiplyDensity
Functions:
  - terrain_base
  - mask_function

BlendDensity

Mélange entre fonctions :

Type: BlendDensity
FunctionA: plains_terrain
FunctionB: mountain_terrain
Blender: biome_blend

Fonctions de Bruit

SimplexNoise

Bruit lisse et naturel :

public class SimplexNoiseDensity implements DensityFunction {
    private SimplexNoise noise;
    private float scale;
    private int octaves;
    private float persistence;

    public float calculate(int x, int y, int z, GenerationContext ctx) {
        float value = 0;
        float amplitude = 1;
        float frequency = scale;

        for (int i = 0; i < octaves; i++) {
            value += noise.noise3D(x * frequency, y * frequency, z * frequency) * amplitude;
            amplitude *= persistence;
            frequency *= 2;
        }

        return value;
    }
}

PerlinNoise

Bruit Perlin classique :

Type: PerlinNoiseDensity
Scale: 0.02
Octaves: 6
Persistence: 0.5
Lacunarity: 2.0

VoronoiNoise

Bruit basé sur les cellules :

Type: VoronoiDensity
Scale: 0.005
Type: Distance  # ou Edge, Cell

Façonnage du Terrain

CliffFunction

Crée des formations de falaises :

public class CliffFunction implements DensityFunction {
    private float cliffHeight;
    private float steepness;

    public float calculate(int x, int y, int z, GenerationContext ctx) {
        float baseNoise = ctx.noise2D(x, z, 0.01f);
        float cliffFactor = Math.abs(baseNoise) > 0.3f ? steepness : 1.0f;
        return (64 - y) * cliffFactor;
    }
}

TerraceFunction

Crée un terrain en terrasses :

Type: TerraceDensity
TerraceHeight: 8
Smoothing: 0.5

OverhangFunction

Crée des surplombs et des arches :

Type: OverhangDensity
BaseFunction: terrain_base
OverhangNoise: overhang_noise
Threshold: 0.3

Fonctions Spécifiques aux Biomes

# density/forest_terrain.yaml
Type: BiomeDensity
Biome: forest
Function:
  Type: AddDensity
  Functions:
    - Type: HeightGradient
      BaseHeight: 68
      Falloff: 24
    - Type: NoiseDensity
      Scale: 0.02
      Amplitude: 0.3

Fonctions de Masque

Contrôle où la densité s'applique :

Type: MaskedDensity
Function: mountain_terrain
Mask:
  Type: NoiseMask
  Scale: 0.001
  Threshold: 0.5

Configuration

# density/terrain_config.yaml
DensityFunctions:
  terrain_base:
    Type: HeightGradient
    BaseHeight: 64
    Falloff: 32
  terrain_hills:
    Type: NoiseDensity
    Scale: 0.01
    Amplitude: 16
  terrain_combined:
    Type: AddDensity
    Functions: [terrain_base, terrain_hills]

Fonction de Densité Personnalisée

public class MyDensityFunction implements DensityFunction {
    @Override
    public float calculate(int x, int y, int z, GenerationContext ctx) {
        // Logique de terrain personnalisée
        float baseHeight = 64 + ctx.noise2D(x, z, 0.01f) * 20;
        return baseHeight - y;
    }
}

// Enregistrer dans le setup du plugin
densityRegistry.register("my_terrain", new MyDensityFunction());

Bonnes Pratiques

{{< callout type="info" >}} Directives des Fonctions de Densité :

  • Utilisez des fonctions composites pour un terrain complexe
  • Équilibrez les échelles de bruit pour une apparence naturelle
  • Testez avec des outils de visualisation
  • Considérez les performances avec les fonctions complexes
  • Utilisez le cache pour les calculs coûteux {{< /callout >}}