Init
This commit is contained in:
270
content/world/worldgen/density-functions.fr.md
Normal file
270
content/world/worldgen/density-functions.fr.md
Normal file
@@ -0,0 +1,270 @@
|
||||
---
|
||||
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 >}}
|
||||
Reference in New Issue
Block a user