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 >}}