Sculpt natural island edges and deliver alpha.2 with Prism updates
Build Sanctuary / build (push) Canceled after 0s
Build Sanctuary / build (push) Canceled after 0s
This commit is contained in:
+77
-18
@@ -29,14 +29,17 @@ de test et les sauvegardes personnelles doivent rester distincts.
|
||||
avec `xz_scale=0.25`, `y_scale=0.25`, `xz_factor=80`, `y_factor=160`, `smear=4`,
|
||||
ainsi que ses deux gradients verticaux. Reliefs, surplombs, trous et fragments
|
||||
dépendent donc de la seed Minecraft.
|
||||
- Une enveloppe limite l'île à un rayon nominal de **256 blocs**. Le bord varie
|
||||
avec un second bruit lié à la seed, jusqu'à **288 blocs au maximum** pour la
|
||||
roche. Les arbres peuvent dépasser ce bord de quelques blocs.
|
||||
- Une masse centrale ellipsoïdale, centrée en `(0, 76, 0)`, garantit du sol
|
||||
même quand le bruit historique creuse l'origine. Son rayon horizontal est de
|
||||
96 blocs et son rayon vertical de 42 blocs. Le reste du relief peut monter
|
||||
au-dessus de cette masse. La géométrie du noyau est volontairement stable.
|
||||
- La roche se trouve entre `Y=1` et `Y=255` ; il n'y a ni plancher de bedrock,
|
||||
- Le terrain naturel reste libre de laisser un trou à l'origine, de former des
|
||||
surplombs ou de se séparer en fragments. **Aucun noyau ellipsoïdal, cylindre ou
|
||||
plateforme de départ n'est ajouté.** Le centre conserve exactement le champ
|
||||
historique dans un rayon de 128 blocs, entre `Y=32` et `Y=224`.
|
||||
- Le pourtour est sculpté par retrait de matière à partir du rayon **128 blocs**.
|
||||
Le contour de référence de 256 blocs est déformé par les bruits, entre 204 et
|
||||
288 blocs ; il indique la fin de l'érosion, pas un mur de roche.
|
||||
La côte réelle apparaît plus tôt, selon la densité du terrain et la seed.
|
||||
Il reste du vide permanent au-delà de **288 blocs**, sans répétition d'îles.
|
||||
Les arbres peuvent dépasser la côte rocheuse de quelques blocs.
|
||||
- La roche disparaît progressivement avant `Y=0` et `Y=256` ; il n'y a ni plancher de bedrock,
|
||||
ni mer globale, ni reprise du terrain à distance. Le Nether et l'End restent
|
||||
ceux de Minecraft.
|
||||
- `sanctuary:starter_forest` reprend végétation, minerais et animaux de la forêt
|
||||
@@ -52,11 +55,57 @@ complète des ressources de survie et variété de biomes constituent le prochai
|
||||
ticket de terrain. Les minerais vanilla conservent leurs plages d'altitude ;
|
||||
leur abondance n'est donc pas encore équilibrée pour une île flottante.
|
||||
|
||||
## Sculpture du pourtour — génération v2
|
||||
|
||||
La version **0.1.0-alpha.2** retire deux contraintes de la génération v1
|
||||
(`0.1.0-alpha.1`) : le noyau central qui remplissait les creux du bruit naturel,
|
||||
et la découpe radiale qui pouvait exposer une tranche verticale à toutes les
|
||||
altitudes. Les identifiants `sanctuary:*` du preset et de la fonction restent
|
||||
stables. Il s'agit d'une évolution du terrain, pas d'une migration de sauvegarde.
|
||||
|
||||
Trois passes composent désormais la densité finale, après l'interpolation du
|
||||
champ historique :
|
||||
|
||||
1. Un bruit horizontal à grande échelle déforme le contour. Dans la bande
|
||||
extérieure, large de 128 blocs avant déformation, une érosion progressive
|
||||
(`2 × t⁴`) augmente le seuil nécessaire pour conserver de la roche. Une
|
||||
érosion supplémentaire, quadratique selon la hauteur et nulle à l'intérieur,
|
||||
fait reculer les faces hautes et basses même lorsque le bruit naturel est
|
||||
saturé dans une grande masse pleine. Elle arrondit le pourtour sans ajouter
|
||||
de volume au centre.
|
||||
2. Un bruit **3D**, échantillonné à la hauteur réelle, déplace ce contour et
|
||||
creuse des renfoncements plus larges. Le bord peut ainsi changer de position
|
||||
avec l'altitude au lieu de prolonger une ligne verticale.
|
||||
3. Un second bruit **3D**, plus fin, ajoute de petites irrégularités. Ces deux
|
||||
passes s'atténuent progressivement vers l'intérieur ; elles ne remplissent
|
||||
jamais un trou du terrain initial.
|
||||
|
||||
Les bruits `island_edge`, `island_sculpt` et `island_detail` sont tous initialisés
|
||||
avec la seed du monde. Ils utilisent respectivement les octaves de base
|
||||
`-7`, `-5` et `-3`. Les nouvelles entrées `sculpt` et `detail` du codec sont
|
||||
optionnelles pour garder les anciennes définitions JSON lisibles ; leur absence
|
||||
ne rétablit pas le noyau de la génération v1.
|
||||
|
||||
L'érosion est toujours soustraite à la densité bornée du terrain. Une densité
|
||||
nulle ou négative ne peut donc jamais devenir solide. Même avec un terrain
|
||||
d'entrée maximalement positif, elle est négative dès le rayon 280, avant la
|
||||
limite de sécurité 288. Deux transitions verticales douces protègent aussi les
|
||||
bornes de hauteur, sans découper de dalle à `Y=0` ou `Y=256`.
|
||||
|
||||
**Tester cette version dans un nouveau monde.** Mettre à jour le pack ne remodèle
|
||||
pas les chunks enregistrés ; aucun chunk n'est supprimé ou régénéré par le mod.
|
||||
Continuer à explorer une ancienne sauvegarde avec ce générateur peut juxtaposer
|
||||
les deux versions du terrain. Aucun contrat de migration n'est livré.
|
||||
|
||||
## Apparition commune
|
||||
|
||||
Une injection limitée à la création initiale cherche une surface de 3 × 3 blocs
|
||||
stable, avec deux blocs libres en hauteur, à proximité de l'origine. Elle ne
|
||||
s'applique qu'à l'Overworld utilisant les paramètres `sanctuary:sanctuary`.
|
||||
Une injection limitée à la création initiale cherche du sol naturel depuis
|
||||
l'origine vers l'extérieur, dans toute l'emprise finie de l'île. Elle préfère
|
||||
une surface stable de 3 × 3 blocs, avec deux blocs libres en hauteur. En
|
||||
l'absence d'une telle surface, elle retient une colonne de sol praticable ; si
|
||||
aucun emplacement naturel sûr n'existe, la création signale la seed concernée
|
||||
plutôt que d'ajouter une plateforme. Elle ne s'applique qu'à l'Overworld
|
||||
utilisant les paramètres `sanctuary:sanctuary`.
|
||||
Elle enregistre le spawn partagé dans la sauvegarde et ne le réinitialise pas
|
||||
au redémarrage : les modifications administratives de `/setworldspawn` restent
|
||||
conservées. Les lits et la dispersion habituelle du spawn suivent encore les
|
||||
@@ -78,8 +127,9 @@ maintenant un `DensitySampler`, leurs opérateurs JSON utilisent
|
||||
surfaces passent par le registre `worldgen/material_rule`. Les données de cette
|
||||
branche suivent ces formats réels ; copier directement les JSON 26.2 ne suffit
|
||||
pas. Les bruits utilisent également `base_octave`, `octave_count` et
|
||||
`amplitude_modifiers`. Le seul opérateur Java ajouté, `sanctuary:main_island`, compose les deux
|
||||
champs de bruit et impose la limite extérieure après interpolation.
|
||||
`amplitude_modifiers`. Le seul opérateur Java ajouté, `sanctuary:main_island`,
|
||||
compose le terrain et les trois champs de sculpture et impose la limite
|
||||
extérieure après interpolation.
|
||||
|
||||
## Vérification
|
||||
|
||||
@@ -88,11 +138,14 @@ champs de bruit et impose la limite extérieure après interpolation.
|
||||
./gradlew :sanctuary:runGameTest
|
||||
```
|
||||
|
||||
Le smoke test vérifie le noyau garanti même avec un bruit entièrement négatif,
|
||||
le vide dans les quatre directions même avec un bruit entièrement positif, les
|
||||
limites verticales, la préservation de l'influence du champ de terrain et la
|
||||
symétrie de l'enveloppe pour des entrées identiques. Les coordonnées testées incluent la limite du monde et
|
||||
les grands entiers pour détecter débordements et répétitions involontaires.
|
||||
Le smoke test vérifie qu'aucun sol n'est ajouté, que l'intérieur conserve le champ
|
||||
naturel et que l'érosion évolue progressivement sur un profil de terrain contrôlé.
|
||||
Il vérifie aussi qu'un lobe plein recule d'au moins 30 blocs en haut et en bas
|
||||
par rapport à son milieu, pour éviter une paroi verticale simplement déplacée.
|
||||
Il couvre aussi l'influence des deux bruits de sculpture, le vide avant les
|
||||
bornes de sécurité, et le vide dans les quatre directions même avec un bruit
|
||||
entièrement positif. Les coordonnées testées incluent les limites de Minecraft
|
||||
et des entiers Java pour détecter débordements et répétitions involontaires.
|
||||
|
||||
Les GameTests chargent le preset réel sur un serveur éphémère, vérifient le
|
||||
spawn après décoration, puis inspectent des chunks complets à distance dans
|
||||
@@ -102,6 +155,12 @@ JSON invalides et les blocs que des features pourraient ajouter après le calcul
|
||||
de densité. Les injections du serveur de test sont isolées dans
|
||||
`src/gametest` et ne sont pas distribuées dans le mod.
|
||||
|
||||
Les graines de régression de la génération v2 sont **0**, **42** et **8675309**.
|
||||
Le serveur de test exporte leurs cartes de hauteur et coupes de densité dans
|
||||
`mods/sanctuary/build/run/gameTest/diagnostics/`. Ces images permettent de
|
||||
contrôler le profil des bords et les anciens volumes forcés ; elles ne montrent
|
||||
pas les arbres ni les matériaux et ne remplacent pas un essai visuel en jeu.
|
||||
|
||||
## Contrat du prochain ticket : expansion
|
||||
|
||||
Avant de créer des continents, définir une donnée **persistante par monde**
|
||||
|
||||
Reference in New Issue
Block a user