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

271 lines
5.0 KiB
Markdown

---
title: Fonctions de Densité
type: docs
weight: 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
```java
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 :
```yaml
Type: ConstantDensity
Value: 1.0
```
### NoiseDensity
Utilise le bruit pour la variation du terrain :
```yaml
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 :
```yaml
Type: HeightGradient
BaseHeight: 64
Falloff: 32
```
```java
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 :
```yaml
Type: AddDensity
Functions:
- terrain_base
- terrain_hills
- terrain_mountains
```
### MultiplyDensity
Multiplie les valeurs des fonctions :
```yaml
Type: MultiplyDensity
Functions:
- terrain_base
- mask_function
```
### BlendDensity
Mélange entre fonctions :
```yaml
Type: BlendDensity
FunctionA: plains_terrain
FunctionB: mountain_terrain
Blender: biome_blend
```
## Fonctions de Bruit
### SimplexNoise
Bruit lisse et naturel :
```java
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 :
```yaml
Type: PerlinNoiseDensity
Scale: 0.02
Octaves: 6
Persistence: 0.5
Lacunarity: 2.0
```
### VoronoiNoise
Bruit basé sur les cellules :
```yaml
Type: VoronoiDensity
Scale: 0.005
Type: Distance # ou Edge, Cell
```
## Façonnage du Terrain
### CliffFunction
Crée des formations de falaises :
```java
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 :
```yaml
Type: TerraceDensity
TerraceHeight: 8
Smoothing: 0.5
```
### OverhangFunction
Crée des surplombs et des arches :
```yaml
Type: OverhangDensity
BaseFunction: terrain_base
OverhangNoise: overhang_noise
Threshold: 0.3
```
## Fonctions Spécifiques aux Biomes
```yaml
# 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 :
```yaml
Type: MaskedDensity
Function: mountain_terrain
Mask:
Type: NoiseMask
Scale: 0.001
Threshold: 0.5
```
## Configuration
```yaml
# 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
```java
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 >}}