✨ Modpack prêt à jouer avec shaders / Ready-to-play modpack with shaders :OmniGen with Shaders — OmniGen + Sodium + Iris + Miniature Shader, déjà réglés ensemble / already tuned together.
FR
🌀 OmniGen — Voyez loin. Vraiment loin.
Un horizon de plusieurs milliers de blocs, une carte du monde, et un serveur qui respire.
Minecraft s'arrête à quelques centaines de blocs. OmniGen dessine le terrain bien au-delà — montagnes,
océans, forêts et constructions — sans charger un seul chunk supplémentaire côté serveur.
Pas de génération parallèle, pas de monde dupliqué : OmniGen affiche votre monde réel, y compris ce que
les joueurs ont construit.
🏔️ Terrain lointain
Un rendu voxel du monde jusqu'à plusieurs milliers de blocs, calculé à partir des données réelles du
serveur — vos bâtiments, vos routes et vos terraformations apparaissent à l'horizon, pas seulement le
relief brut.
Paliers de détail progressifs — la précision décroît doucement avec la distance, sans marches visibles
Brouillard calibré sur l'horizon réellement dessiné : le terrain se fond dans le ciel au lieu de
s'arrêter net
Distance automatique — le mod cherche seul la portée que votre machine tient, la jauge devenant un
plafond plutôt qu'un pari
Cycle jour/nuit respecté, y compris sous shaders
🗺️ Minimap intégrée
Une carte du terrain en haut à droite, alimentée par les données que le mod possède déjà — donc sans
aucun coût de génération supplémentaire.
Un pixel par chunk, nord en haut, avec un ombrage du relief. Elle utilise exactement les mêmes couleurs que
l'horizon lointain : ce que vous voyez sur la carte est ce que vous verrez en tournant la tête.
Activable et désactivable dans les options — si vous préférez une autre minimap, coupez la nôtre, le choix
est mémorisé.
⚙️ Prégénération de fond
OmniGen explore et prépare votre monde pendant que vous jouez, en spirale depuis le spawn, régulé par la
charge réelle du serveur : il travaille quand le serveur a du mou, il se tait quand il rame.
Résultat : un horizon qui se remplit tout seul au fil des sessions, sans commande à lancer ni serveur à
mettre à l'arrêt.
🫀 Soupape de pression — la puissance des joueurs, en renfort
Le serveur génère son monde lui-même, normalement. Mais lorsqu'il sature — pic d'exploration, plusieurs
joueurs qui partent dans des directions opposées — OmniGen peut confier une partie du calcul aux machines
des joueurs connectés.
Déclenché uniquement sous surcharge mesurée, jamais en fonctionnement normal
Le serveur reste la source de vérité : ce que renvoie un client est vérifié avant d'être accepté
Repli automatique et silencieux en génération vanilla si un client tarde, échoue ou triche
C'est une soupape, pas un moteur : elle sert quand la marmite chauffe, et reste invisible le reste du temps.
🔧 Compatibilité
NeoForge 1.21.1 — requis côté client ET serveur
Mods de génération de terrain (Terralith, Biomes O' Plenty, Tectonic…) : pris en charge. OmniGen
compare son résultat à celui du serveur et, en cas de désaccord, repasse la dimension en génération
serveur pure — mieux vaut renoncer à un gain de performance que de livrer un terrain faux.
Sodium et Iris : compatibles, shaders inclus — ou tout prêt dans le modpack OmniGen with Shaders.
Sinytra Connector : fonctionne.
📊 Le mod se mesure lui-même
OmniGen écrit dans le journal ce qu'il fait réellement : temps de calcul serveur, mémoire suivie, décisions
du régulateur de distance, envois vers la carte graphique.
Ce n'est pas de la décoration : si vous rencontrez un problème, votre fichier de log contiendra déjà les
chiffres nécessaires pour le comprendre — sans avoir à reproduire l'incident.
⚠️ Les version Bêta — ce qu'il faut savoir
OmniGen est ces version bêta progresse vite. Le terrain lointain, la minimap et la prégénération sont
fonctionnels et utilisés quotidiennement, mais des défauts visuels subsistent à très grande distance, et les
performances dépendent beaucoup de votre machine.
Chaque option importante est désactivable individuellement, précisément pour que vous puissiez isoler un
problème au lieu de désinstaller le mod.
Licence MIT — libre d'utilisation, y compris en modpack.
🐛 Signaler un bug
Un formulaire dédié collecte automatiquement votre configuration et pose les questions qui font gagner des
journées entières de recherche. Tout y est facultatif, mais chaque champ rempli compte.
A horizon thousands of blocks deep, a world map, and a server that breathes.
Minecraft stops a few hundred blocks out. OmniGen draws the terrain far beyond — mountains, oceans,
forests and builds — without loading a single extra chunk on the server.
No parallel generation, no duplicated world: OmniGen displays your actual world, including everything
your players have built.
🏔️ Distant terrain
A voxel rendering of the world up to several thousand blocks away, built from the server's real data —
your buildings, roads and terraforming appear on the horizon, not just raw landscape.
Progressive detail tiers — precision fades smoothly with distance, without visible steps
Fog calibrated on the horizon actually being drawn: terrain blends into the sky instead of stopping
dead
Automatic distance — the mod finds the range your machine can hold on its own; the slider becomes a
ceiling rather than a guess
Day/night cycle respected, shaders included
🗺️ Built-in minimap
A terrain map in the top-right corner, fed by data the mod already holds — so it costs no extra
generation at all.
One pixel per chunk, north up, with relief shading. It uses exactly the same colours as the distant
horizon: what you see on the map is what you'll see when you turn your head.
Can be toggled in the options — if you prefer another minimap, turn ours off and the choice is remembered.
⚙️ Background pregeneration
OmniGen explores and prepares your world while you play, spiralling out from spawn and regulated by the
server's real load: it works when the server has slack, and goes quiet when it struggles.
The result is a horizon that fills itself in over successive sessions — no command to run, no server
downtime.
🫀 Pressure valve — player CPU as backup
The server generates its world on its own, normally. But when it saturates — an exploration spike,
several players heading in opposite directions — OmniGen can hand part of the computation to connected
players' machines.
Triggered only under measured overload, never during normal operation
The server remains the source of truth: whatever a client returns is verified before being accepted
Automatic, silent fallback to vanilla generation if a client is slow, fails, or cheats
It's a valve, not an engine: it opens when the pot boils over, and stays invisible the rest of the time.
🔧 Compatibility
NeoForge 1.21.1 — required on BOTH client and server
World generation mods (Terralith, Biomes O' Plenty, Tectonic…): supported. OmniGen compares its own
result against the server's and, on any mismatch, switches that dimension back to pure server
generation — better to give up a performance gain than to serve wrong terrain.
Sodium and Iris: compatible, shaders included — or all set up in the OmniGen with Shaders modpack.
Sinytra Connector: works.
📊 The mod measures itself
OmniGen logs what it actually does: server tick cost, tracked memory, distance-regulator decisions, GPU
uploads.
This isn't decoration: if you hit a problem, your log file will already contain the numbers needed to
understand it — no need to reproduce the incident.
⚠️ Beta Versions — What You Need to Know
OmniGen and its beta versions are progressing fast. Distant terrain, the minimap, and pregeneration are functional and used daily, but visual glitches still occur at very long distances, and performance heavily depends on your machine.
Each major option can be disabled individually, specifically so you can isolate an issue instead of having to uninstall the mod.
MIT License — free to use, including in modpacks.
🐛 Reporting a bug
A dedicated form collects your configuration automatically and asks the questions that save entire days of
investigation. Everything is optional, but every field filled in counts.
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/pfKNDRfcQbY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
# OmniGen 0.3.39
> Publiée le 22/10/2026 (version ouverte le 18/10). Validée en jeu le 22/10 (NeoForge 1.21.1, Sodium + Iris, RTX 5070) :
> 200 à 290 FPS au détail maximal avec le shaderpack Miniature, portée détaillée jusqu'à 128 chunks sur une carte de 12 Go.
---
# ✨ Nouveautés
## 🎬 Mode cinéma (nouveau)
Pour tourner une bande-annonce ou une vidéo sans toucher à la souris.
- **F7** lance (ou arrête) un script de caméra ; **F8** note la position et le regard exacts dans
`.minecraft/omnigen/cinema/reperes.txt`. Les deux touches sont réassignables (Commandes → OmniGen).
- Le script est un fichier texte, `.minecraft/omnigen/cinema/script.txt` (créé avec un exemple), relu à chaque
lancement : on le modifie jeu ouvert. Une étape par ligne :
- `attendre 3`
- `bouger duree=4 incline=-25` — relève la tête (+ = vers le bas, comme Minecraft) ;
- `bouger duree=12 tourne=+140` — panoramique ;
- `bouger duree=6 avance=30 monte=8 fov=60` — travelling, champ de vision ;
- `bouger duree=5 x=… y=… z=… yaw=… pitch=…` — vers une position et un regard absolus ;
- `courbe=douce` (défaut), `lineaire`, `entree`, `sortie`.
- **F9** remet les repères à zéro (l'ancien fichier est gardé, renommé avec la date).
- Fluide à chaque image : la pose est calculée pour l'instant exact de l'image, pas au tick. Pendant la lecture :
interface masquée, oscillation de vue coupée, souris ignorée ; tout revient à la fin.
## 🎚️ Profil d'utilisation : Normal, Streamer, Petit PC
- Constat : en enregistrant une vidéo, OmniGen occupait tant la carte graphique que l'encodeur d'OBS ne
suivait plus ; et l'ancien choix « Affichage » (Stream / Dev / Discret) ne réglait que les messages. Il devient un
**profil** qui règle ce qu'OmniGen PREND (les FPS du jeu ne sont jamais plafonnés) :
- **Normal** : OmniGen prend ce qu'il faut ;
- **Streamer** : même rendu que Normal ; moitié moins de fils de maillage, mémoire vive d'OmniGen ≤ 1,5 Go ; le chat
d'OmniGen se tait et la barre d'action ne montre plus de coordonnées, mais garde les informations vitales (région
voisine verrouillée pendant sa génération, chargement du terrain, portail prêt). Un premier essai bornait le temps
de carte du LOD à 3 ms : mesuré en jeu, le LOD coûte déjà 3,2-4,7 ms au détail minimal (coût fixe du fond et de
l'horizon) — le détail s'effondrait en méga-blocs sans rien libérer, le jeu remplissant la marge avec plus d'images.
Abandonné : pour laisser de la place à l'encodeur, c'est la limite d'images de Minecraft qui compte ;
- **Petit PC** : réglages de petite machine (réserve ≤ 1 Go, mémoire ≤ 768 Mo, 2 fils, 3 M triangles de détail au
lieu de 10 M), terrain lointain voxel borné à 128 chunks (l'horizon lissé prend le relais au-delà).
Passer à un profil aux plafonds plus bas (Petit PC) reconstruit tout le terrain lointain (premier essai : la géométrie
déjà construite dépassait le nouveau plafond → plus rien ne se rangeait, anneau de trous) ; Normal ↔ Streamer ne
reconstruit rien (une reconstruction repasse d'abord par des cases grossières avant l'affinage).
- **Choix intelligent** : au premier lancement, une machine détectée « petite » (puce intégrée, moins de 3 Go de mémoire
vidéo, moins de 7 Go de RAM ou 4 cœurs au plus) passe d'elle-même en Petit PC, avec un message. Et quand **OBS Studio,
Streamlabs, XSplit ou Twitch Studio** est ouvert hors profil Streamer, OmniGen le recommande dans le chat, avec un
lien qui bascule en un clic (commande `/omnigenprofil normal|streamer|petit_pc`) ; à la fermeture du logiciel, il
propose de revenir en Normal. La liste des programmes est relue toutes les 20 s par un fil de fond.
- **Portails : plus de coordonnées à l'écran**, pour personne (le serveur ne connaît pas le profil du joueur) : « Portail
prêt → le Nether (lié au portail d'en face) », « Portail « Base » → Nether ». Elles restent dans le journal du serveur.
- **Infos développeur** (options avancées) remplace l'ancien mode « Dev » : messages détaillés, et une ligne de mesure sous
le compteur de FPS (temps de carte du LOD, réserve, portée, profil).
## 💻 OmniGen s'adapte à la machine (nouveau)
Constat (18/10, journal d'un joueur sur portable) : AMD Radeon Graphics intégrée, 6 Go de RAM, 2 Go donnés à Java,
OmniGen seul sans Sodium → 5 à 15 FPS. La mémoire vidéo n'était lue que sur NVIDIA : une puce intégrée recevait les
plafonds d'une carte de 8 Go.
- Au démarrage, OmniGen lit la carte graphique (et reconnaît les puces intégrées Intel et AMD), la mémoire vidéo
(NVIDIA et désormais AMD), la RAM de l'ordinateur, la mémoire donnée à Java, les cœurs et la présence de Sodium.
Il en déduit un palier : petite, moyenne ou grande machine (`[OmniGen/Machine]` dans le journal).
- Petite machine : géométrie du terrain lointain plafonnée (proche 384 Mo, anneau fin 192 Mo, couverture 256 Mo),
un seul fil de prédiction, portée par défaut 24 chunks (une seule fois, jamais si le joueur l'a changée).
Machine moyenne : plafonds intermédiaires, portée par défaut 40.
- Un message en jeu annonce le palier, conseille la mémoire à donner à Minecraft pour CETTE machine (la moitié de la
RAM, entre 3 et 6 Go) et Sodium s'il est absent.
- Bascule « Profil de la machine » (options avancées) pour revenir aux réglages complets.
## 🌍 English
- Ticket de KorinMC (21/10) : « There are no languages except French ». Toute l'interface du client est maintenant
traduite en anglais : écran des options, options avancées (les ~106 réglages et leurs descriptions), paliers LOD,
choix du terrain lointain, carte et repères, compteur de FPS, messages du chat (profil de la machine, versions,
mode cinéma, murs de génération). Le jeu en français garde le texte d'origine ; toute autre langue reçoit l'anglais.
- Les noms des réglages restent leurs identifiants (configuration enregistrée, préréglage sûr) : seule leur
AFFICHAGE est traduit (`client/Tr`, table `assets/omnigen/i18n/en.json`). Les réponses des commandes serveur
restent en français pour l'instant.
- Bouton YouTube des options : nouvelle chaîne **@OmniGenMod**. Bouton Discord : nouvelle invitation `discord.gg/9GnnmJVwaU`.
- Sonde au viseur, touche **F6** : écrit dans le journal ce que le terrain lointain dessine là où l'on regarde (bloc,
prédit ou réel, finesse, sprites, teinte, couleur lue dans l'atlas, peinture, motif) et l'état de l'horizon au même
endroit (`[OmniGen/Sonde F6]`).
## 🏔️ Horizon lointain lissé (nouveau, palier 3 du terrain prédit)
Constat (21/10, comparatif contre Distant Horizons) : FPS égaux, mais DH voyait plus loin. Les voxels prédits s'arrêtaient
au rayon de prédiction (384 chunks) alors que la distance réglée allait jusqu'à 1 024 chunks : entre les deux, rien.
- Au-delà des voxels et jusqu'à la distance réglée, un **relief continu** : tuiles de 512 × 512 blocs, grille de hauteurs
au pas de 32, 64 ou 128 blocs selon la distance, normales lissées d'une tuile à l'autre, jupes contre les fentes.
- Hauteurs calculées depuis la **densité réelle du datapack** (compatible Terralith, Biomes O' Plenty, JJThunder…), couleur
du **biome exact** par point, roche sur les pentes, neige en altitude, eau sous le niveau de la mer.
- Calcul en arrière-plan (1 ou 2 fils à priorité minimale selon la machine), **gardé sur le disque**
(`.minecraft/omnigen/horizon/`) : la seconde visite est instantanée. Journal `[OmniGen/Horizon]` toutes les 30 s.
- Profil machine : horizon plafonné à 6 km sur petite machine, 10 km sur machine moyenne.
- Bascule « Horizon lointain lissé » (options avancées, allumée par défaut).
- **Mélange colonnes / lissé** (les blocs ne doivent pas trop grossir, même à la lunette) : colonnes
façon Minecraft de 4 blocs jusqu'à 2,5 km, de 8 blocs jusqu'à 5 km (relief lu tous les 16 blocs, interpolé, arrondi
au bloc ; dessus fusionnés, flancs seulement aux marches, terre sous l'herbe, roche aux marches raides) ; relief lissé
au-delà (32 → 64 → 128). Petite machine : lissé seulement.
- Comble les manques RÉELS de voxels (région par région), plus seulement au-delà du rayon de prédiction ; dessin groupé
(le programme est réglé une fois par image au lieu d'une fois par tuile : −25 ms de processeur mesurés).
## 🗺️ L'horizon prédit sur la carte
- Toute la distance générée se voit maintenant sur la carte. Au-delà du terrain voxel, la carte lit les tuiles de l'horizon sur le disque (pas de 16 à 128 blocs), hachurées
comme le reste du prédit. Ligne `[OmniGen/Carte]` : « pixels pris à l'horizon prédit ».
## 🟫 Peinture à motif
- Dans un même carré de peinture, plusieurs petits carrés, comme les textures de Minecraft. Chaque face peinte est
découpée en cases de la taille du motif d'origine ; chacune prend l'une des 16 couleurs de la vraie texture réduite à 4×4, selon sa position. Sur les flancs, la rangée du haut (liseré d'herbe) ne
va qu'au sommet. Même géométrie que les flancs tuilés d'avant la peinture. Bascule « Peinture à motif ».
- Plus de grain (un arbre au loin ne doit plus être un vert uniforme) : le motif garde 85 % de l'écart
à la couleur moyenne (au lieu de 60 %), ±30 % de luminance (au lieu de ±18 %) et les trois quarts de sa teinte.
## 🧰 Menu des options avancées
- Neuf bascules étaient invisibles (absentes de toute catégorie) : hauteur et pente des fluides, escaliers en
demi-bloc, plafond et brouillard du Nether, fondu « cape d'invisibilité », LOD à plat près de vous, et les deux
sondes de diagnostic. Elles sont rangées et ont leur valeur dans le préréglage sûr.
---
# 🎨 Rendu du terrain lointain
## ⛰️ Détail sur les montagnes du fond lointain
- Les montagnes ne sont plus des méga-blocs (le plat peut rester en gros blocs). Le relief de chaque
région (écart de surface entre ses chunks, lu dans les résumés déjà calculés) décide : au-delà de 28 blocs d'écart,
la région passe en cases de 8 (jusqu'à 350 chunks) puis de 12 (jusqu'à 700), au lieu de 16. Les plaines gardent leurs
grandes cases. Sous le plafond de mémoire du fond. Bascule « Détail sur les montagnes ».
## 🎨 Flancs peints au loin
- Quand la texture serait trop étirée, une peinture qui lui ressemble la remplace. Sur les
paliers grossiers, le flanc d'herbe répété une fois par case de 4 à 12 blocs empilait des coulures vertes géantes sur
les falaises. Au-delà d'un motif de 4 blocs, les flancs sont désormais peints (couleur moyenne de la vraie texture ×
teinte du biome) : un seul rectangle par flanc, que la fusion des flancs peut réunir. Bascule « Flancs peints au loin ».
## 🎨 Plus de méga-blocs d'herbe : peinture dès 2 blocs, dessus compris
- Fini les méga-blocs d'herbe : la peinture est beaucoup plus détaillée. Les flancs ET les dessus sont peints dès que leur texture serait répétée moins d'une fois par bloc (motif
de 2 blocs ou plus) ; les dessus gardent le dégradé de biome à leurs coins.
- **Sable cyan, glace verte, neige noire** : la couleur moyenne était lue au mipmap 4 de l'atlas, alloué mais pas
toujours rempli (le niveau réel dépend du plus petit sprite). Lue désormais au niveau 0.
- Les maillages construits avant la lecture de l'atlas (au chargement du monde) n'étaient jamais peints : ils sont
refaits une fois la lecture faite.
- Les faces ÉTIRÉES (un seul sprite sur toute la face : terrain prédit, paliers fusionnés) sont peintes elles aussi dès
2 blocs — c'étaient elles, les méga-blocs restants. Eau et lave gardent leur texture animée.
- Horizon : carte de lumière liée explicitement (taches noires), et masqué sur toute région qui a des voxels.
## 🪨 Roche sous les falaises lointaines
- Au loin (paliers de 12 chunks et plus), les murs qui ferment le terrain prenaient le flanc du **sol sur 24 à 32 blocs** :
une pente enneigée devenait une colonne blanche, une prairie une bande verte étirée. Ils gardent maintenant **2 blocs**
d'herbe, de terre, de neige ou de glace en haut, puis passent à la **pierre**, comme une vraie falaise — le tout peint, jamais étiré.
- Même règle sur les flancs de l'horizon lointain.
- Bascule : « Roche sous les falaises lointaines » (activée).
## 🌅 Horizon lointain : plus jamais sous les voxels, couleurs recalées
- Une tuile d'horizon (512 blocs, 16 régions) n'était retirée que si ses 16 régions avaient des voxels : à moitié couverte,
elle se dessinait **sous** le terrain voxel, 4 blocs plus bas. On la voyait à travers l'eau (le **bleu criard** au loin) et
elle affleurait par bandes sur les pentes (les **rayures noires** la nuit). Chaque tuile est maintenant maillée sans les
régions déjà affichées, et refaite quand elles changent. Bascule « Horizon jamais sous les voxels ».
- Couleurs mesurées sur capture : herbe de l'horizon (79, 171, 73) contre (120, 120, 78) pour l'herbe voxel juste devant,
eau (51, 82, 188) contre (105, 128, 169). Recalées (teinte × texture, comme le voxel). Bascule « Horizon aux couleurs du terrain ».
- Les colonnes vont jusqu'à **7 km** (cases de 16 blocs entre 5 et 7 km) au lieu du relief lisse en triangles, qui y faisait
des pics bariolés hors du style « blocs ».
## 🌊 Eau du LOD à la hauteur de Minecraft
- Un trait sombre en polygone sur la mer, à la limite des vrais chunks. Les eaux dormantes du LOD
étaient dessinées à 1 bloc, la vraie eau à 8/9 : 11 cm de marche dont le flanc ombré se voyait. Désormais à 8/9.
Bascule « Eau à la hauteur de Minecraft ».
## 📏 Plus de marche au bord des vrais chunks
- Sous shaderpack, l'anneau de LOD situé juste au-delà de la distance de rendu restait enfoncé d'un demi-bloc (biais de
jonction), alors que le LOD n'est plus jamais dessiné sur un vrai chunk et que le fond lointain, lui, affleure : une
marche à la distance de rendu et une autre six chunks plus loin, dont on voyait le dessous (le trait sombre qui suivait
les chunks sur l'eau). Au-delà de la distance de rendu, le LOD affleure partout. Bascule « Pas de marche au bord des
vrais chunks » (activée).
## 🌊 Plus de mur d'eau au bord des régions prédites
- Une bande sombre et droite traversait la mer au bord d'une région. C'était une paroi d'eau,
de la surface au fond, vue à travers l'eau : émise parce que le chunk voisin n'était pas encore connu au moment du
maillage. Une colonne d'eau ne se ferme plus jamais vers l'inconnu. Bascule « Pas de mur d'eau au bord des régions ».
## 💧 Plus jamais d'eau peinte
- Plages et morceaux de mer **verts** ou **cyan** (21/10 au soir) : le journal montrait `water_still` dans la liste des
textures peintes. Peinte, l'eau perdait sa texture translucide et ne gardait que la teinte du biome (verte dans un
marais, cyan dans une mer chaude). Les fluides ne sont plus jamais peints, sur aucun chemin.
- Sonde : une face peinte qui sortirait presque noire est écrite une fois par texture (`face peinte presque NOIRE`).
---
# 🐞 Corrections
## 🖥️ Écran des options coupé sur les petits écrans
- Ticket de KorinMC (22/10) : « Settings GUI is cut. There're more settings above LOD » (écran 1536×864 à 125 %).
Les 10 rangées de 38 px dépassaient la hauteur de l'interface (~288 px) : le titre et la rangée « Profil » sortaient
par le haut. L'écart entre rangées se resserre maintenant pour tenir dans la hauteur ; sans la place, les libellés de
section ne sont pas dessinés.
## ✅ Plages cyan, neige noire, glace vert citron : la VRAIE cause (débordement de couleur)
- Mesuré à la sonde F6 (sable : peinture ×1,058, teinte blanche) : la couleur d'un sommet passait au-dessus de 1, et
`BufferBuilder.setColor(float…)` la convertit en octet SANS la borner — 1,058 → 269 → 13. Le rouge du sable retombait à
zéro (turquoise), tout canal au-dessus de 1 (neige, calcite, glace, herbe claire) virait au noir ou au vert. Les couleurs
des sommets sont désormais ramenées à 1 en gardant leur nuance (LOD voxel et horizon). Les deux correctifs ci-dessous
(texel unique, garde-fou) visaient de fausses pistes ; ils restent, sans effet nuisible.
## 💡 Lumière du LOD sous shaderpack
- Avec un shaderpack, la lumière du terrain lointain était mal rendue, sur tous les packs (sans pack, rien). La sonde des sommets
montrait une tangente NULLE (at_tangent = 0, 0, 0) sur les faces peintes : elles prenaient toutes le même point de
texture, et Iris calcule la tangente à partir des écarts de coordonnées de texture. Le pack bâtissait donc son
éclairage sur un vecteur nul. Chaque coin reçoit maintenant un quart de texel d'écart autour du même texel (même
couleur) : tangente propre. Même correctif pour l'horizon lissé. Bascule « Peinture compatible shaderpack » (activée).
## 🕳️ Trous sous shaderpack : corrigés (mesuré)
- Mesure du 21/10 (`[OmniGen/Profondeur]`) : sous shaderpack, plan lointain de Minecraft 128 blocs contre 17 408 pour
le LOD → à 32 blocs, le LOD « paraissait » 6,4 blocs plus près et passait devant le vrai sol (trous, parois sombres).
- Sous shaderpack, le LOD ne se dessine plus sur aucun chunk que Minecraft dessine (ni dessous, ni en lisière).
Bascule « Pas de LOD sur les vrais chunks (shaderpack) », allumée par défaut.
## 🧱 Génération par région : plus de région figée à « 0/64 »
- La région en cours restait à **0/64, 0 en vol** pendant 18 minutes, et rien ne se générait
plus autour du joueur. Cause : depuis le 17/10, un chunk déjà complet sur le disque est sauté sans être chargé ; il ne
cochait donc jamais sa case dans la région. Une région générée lors d'une session précédente bloquait tout. Les chunks
sautés comptent maintenant comme finis.
## 🟩 Murs lointains verts
- Les jupes des paliers fusionnés multipliaient le flanc du sol par la teinte du biome même quand ce flanc n'est pas
teinté (flanc d'herbe déjà colorié en marron) : murs verdis, vert franc une fois peints. La teinte n'est plus
appliquée qu'aux flancs teintés, comme au maillage fin depuis le 08/09.
- Sonde d'à-coups : la ligne `[OmniGen/À-coup]` nomme maintenant les deux étapes les plus lourdes du dessin
(étapes du terrain voxel, horizon : choix des tuiles / envois / dessin, lecture de l'atlas).
## ⬛ Flancs peints : couleurs lues sur la carte graphique
- Glace peinte en **vert citron**, neige peinte en **noir**. La couleur moyenne était lue dans
l'image d'origine de chaque texture, qui n'est plus fiable dans son pack une fois l'atlas envoyé à la carte (des mods
d'optimisation libèrent cette mémoire) : on y lisait n'importe quoi. Elle est maintenant lue dans l'atlas tel que la
carte le dessine, au niveau de mipmap où une texture 16×16 tient en un pixel, qui est sa moyenne. Une lecture sur le
fil de rendu, quelques centaines de Ko, refaite après F3+T. Tant qu'elle n'est pas faite, les flancs gardent leur
vraie texture. Couleurs écrites dans le journal (`[OmniGen/Peinture]`).
## ⬛ Flancs peints noirs, verts ou cyan : première piste (mipmap)
- Le journal du 21/10 au soir montrait des couleurs lues justes et aucune face peinte noire : le défaut n'était pas
la couleur. La face peinte étalait tout le sprite du béton blanc ; un flanc fin à l'écran fait prendre à la carte un
mipmap très réduit, où un texel mélange le béton et ses VOISINS dans l'atlas. Les faces peintes échantillonnent
désormais un point unique au centre du sprite : blanc pur à toute distance.
## 🛡️ Garde-fou de la peinture
- Toute face qui sortirait CYAN ou presque NOIRE alors que sa texture ne l'est pas
n'est pas peinte : elle garde sa vraie texture. Chaque cas est écrit dans le journal (texture, teinte d'entrée,
multiplicateur) et compté sur la ligne `[OmniGen/GPU] … flancs`. Motif adouci (±18 % de luminosité, teinte proche de
la moyenne) : plus de minerais en pavés.
## 💥 Plantage du pilote graphique à 4 Go de géométrie
- Deux plantages natifs le 21/10 au soir (accès mémoire interdit dans `glMultiDrawElementsBaseVertex`), le second
0,4 s après l'agrandissement de la réserve de géométrie à 4 095 Mo. Plafond ramené à 3,5 Go : au-delà, le LOD
libère de la place au lieu de grossir (c'est aussi ce qui provoquait le gel de 10 s).
---
# ⚡ Performances
## 🎚️ Détail du terrain : le pilote ne dégrade plus l'image pour rien
- Mesure du 22/10 : le pilote de détail (crans 0 à 7, taille d'un bloc à l'écran) tombait au cran le plus grossier
pendant le chargement (« 33 FPS ») et y restait : 5 min de verrou, 115 FPS pour remonter. Or le cran ne décidait pas des
FPS (128 au cran 2, 100-115 au cran 0). D'où les méga-blocs devant, avec un lointain plus fin que le proche.
- Plus de jugement pendant la première minute ; il faut 5 s d'affilée sous 90 FPS pour baisser ; 30 s de répit après un
changement de cran ; chaque baisse est vérifiée et annulée si elle ne fait pas gagner 8 % d'images.
- Plus rapide (un joueur ne reste pas immobile des minutes devant le paysage) : montée en 8 s quand les FPS
dépassent 2× l'objectif, deux crans d'un coup au-delà de 2,5×. Le cran tenu 60 s est retenu
(`config/omnigen-detail.txt`) : la partie suivante démarre directement au bon cran. Mesuré : cran 1 → 7 en 34 s au
lieu de 3 min 30, puis directement au cran 7 ; 200 à 290 FPS au cran 7 avec Miniature (RTX 5070).
## 🏔️ Fond lointain : affiné au-delà de l'anneau
- Mesure : le fond n'affinait qu'une fois toute la portée couverte en 16×16 (~52 000 régions : jamais) ; au-delà de
~166 chunks, tout restait en pavés de 16 blocs. Il prend maintenant son palier fin (8, 12, 14) jusqu'à 350 chunks pendant
la couverture, le plus proche d'abord. Anneau fin : 1 Go sur les cartes de 12 Go (au lieu de 600 Mo).
- Le proche d'abord : le fond ne grandit plus au-delà de 80 % (fin) / 84 % (couverture) de la réserve, et rend sa
mémoire au-delà de 86 % (régions fines à plus de 200 chunks → couverture). Sans ça, la portée détaillée reculait de
64 à 30 chunks (« des gros blocs devant pendant quelques secondes »).
- Bouche-trous du proche (régions dont les chunks ne sont pas prêts) : 4×4 sous 32 chunks seulement, 8×8 au-delà
(3,5 Mo → 0,6 Mo par région ; 74 régions = 257 Mo en tournant la tête).
## 📦 Réserve de géométrie : 5 Go sur les cartes de 12 Go
- La réserve (3,5 Go) était le vrai frein du détail, pas les FPS. Sur les cartes de 12 Go et plus, elle passe à 5 Go et
le proche à 3 Go. Depuis les pages, aucun tampon ne dépasse 256 Mo (le plantage du 21/10 venait d'un tampon unique
de 4 Go).
## 📄 Réserve de géométrie en pages : plus de gel de 10 s ni de tampon géant
- Mesure du 21/10 : une image de 10,6 s au moment où la réserve passait de 3,7 à 4 Go — elle créait un tampon neuf et y
recopiait tout. La réserve est maintenant faite de pages de 256 Mo : grandir = ouvrir une page, rien n'est recopié ;
Le dessin se fait
page par page (dessin direct et dessin trié par la carte), chaque page a sa propre liste de commandes.
- Une page ouverte reste ouverte pour la session : les rendre à la carte dès que la fin de la réserve reculait
faisait ouvrir et fermer 40 pages en 30 s (premier essai du 22/10, image de 4,4 s).
- Les seuils de recul de la portée « pour la mémoire » suivent maintenant le plafond réel de la réserve (ils visaient
encore l'ancien plafond de 4 Go et ne se déclenchaient plus).
## 🗺️ L'horizon sur la carte charge bien plus vite
- Carte dézoomée : ~4 000 tuiles d'horizon à l'écran pour un cache de 384 → des milliers de fichiers relus à chaque
rafraîchissement, au pas le plus fin. La carte lit maintenant le pas qui correspond à son zoom (au plus grossier, un
fichier fait 300 octets) et garde jusqu'à ~24 Mo de tuiles en mémoire.
---
# 🔧 Diagnostic et développement
## 🔍 Diagnostic : trous sous shaderpack
- Constat (17/10) : sous shaderpack, des trous près du joueur (le LOD apparaît à la place du vrai sol). Sans pack,
rien.
- Cause probable, à confirmer en jeu : sous pack, Minecraft et le LOD n'utilisent pas le même plan lointain, donc
pas la même échelle de profondeur ; le LOD gardé sous les vrais chunks paraît plus proche qu'il n'est (~4 blocs à
64 blocs de distance) et passe devant le vrai sol.
- Nouvelle bascule de diagnostic (options avancées, coupée par défaut) : « Profondeur du LOD alignée sur Minecraft
(diagnostic) », et une ligne `[OmniGen/Profondeur]` dans le journal (plans lointains et écart calculé).
## 🔎 Mesures ajoutées
- Sonde F6 : sol de la colonne visée (hors feuillage), palier du maillage de chunk, région lointaine qui la dessine,
horizon AU POINT visé — pour les feuilles qui flottent au loin.
- À-coups : « chunks proches » détaillé (fond lointain, ordonnanceur, tri et dessin par la carte, dessin par le
processeur) ; les quatre étapes les plus lourdes sont écrites.
- Temps de carte du LOD découpé par part (horizon, terrain trié, chunks rejoués, fond, ordonnanceur, tri, attente du
processeur), triangles du fond lointain, temps processeur moyen de chaque étape ; composition de la réserve (proche,
fond fin, couverture, bouche-trous).
- Défragmentation moins gourmande tant que la réserve a de la marge (~8 Mo copiés par image au lieu de ~26).
## 🛠 Développement
- Compilation automatique sur GitHub Actions à chaque push sur `main` ; le jar est publié en artefact.
---
# 📌 À savoir
- **Serveur** : mettez le même jar sur le serveur (serveur arrêté) pour la génération par région et le terrain partagé.
- **Détail du terrain** : OmniGen règle tout seul la finesse du terrain lointain selon vos images par seconde (objectif
100 FPS, jamais plafonnées) ; le réglage trouvé est retenu pour les parties suivantes (`config/omnigen-detail.txt` —
supprimez-le pour repartir de zéro).
- **Profil** : Normal par défaut ; Streamer si vous enregistrez ou diffusez (OBS, Streamlabs…) ; Petit PC choisi tout
seul sur les petites machines. Commande `/omnigenprofil`.
- **À suivre en 0.3.40** : un nouveau format de stockage du terrain lointain (bien plus de détail au loin pour la même
mémoire, avec les vraies textures), et des corrections sur l'horizon prédit avec Terralith.
### Change Log 3.0
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/SWVNNIpAc5M" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
# OmniGen 0.3.38
**Le Nether, les portails, et un terrain lointain qui se fond enfin dans le vrai monde.** Après la 0.3.37.24, dernière
version consacrée au terrain lointain de l'Overworld, le LOD ouvre sa deuxième dimension : le Nether se voit de loin,
à travers les portails, et l'on passe de l'un à l'autre sans écran de chargement.
> Testé sur NeoForge 1.21.1, avec Sodium et Iris. Les réglages conseillés par shaderpack seront publiés avec la prochaine
> version.
---
## 🔥 Le terrain lointain du Nether — première étape : la capture
- **Le Nether est capturé.** Jusqu'ici, la capture partait du plus haut bloc de chaque colonne : dans
le Nether, c'était le toit de bedrock, et le LOD ne ramenait qu'une dalle de roche pleine. Le LOD
était donc coupé dans toute dimension à plafond.
- **Mode caverne** (dimensions à plafond seulement — l'Overworld et l'End ne changent pas d'un octet) :
chaque colonne est coupée en deux. Le **plafond** (toute la roche pleine qui descend depuis le haut de la
dimension) est gardé en entier, pour que les murs de netherrack qui relient le toit au sol aient leurs
flancs. **Sous le plafond**, le premier bloc devient la « surface », et la capture habituelle s'y applique :
coquille, fond, ouvertures profondes, seconde fenêtre. La mer de lave, les deltas de basalte, les forêts
carmin et biscornues sont désormais dans les données.
- **Une seule règle pour les deux captures** : le serveur et la resynchronisation client (casser/poser un
bloc) appellent la même fonction (`util.CaveCeiling`). Pas de couture entre les deux.
- **Aucun changement de format** : le client retrouve le plafond tout seul (le groupe de tranches jointives
du haut de chaque colonne). Rien de plus sur le réseau ni sur le disque.
- **Lumière** : sous un plafond, plus de « plein jour » forcé sur la tranche du haut (c'est le toit), et une
lumière inconnue vaut l'ambiance du Nether au lieu du plein soleil.
- **Rendu** : le sol est la surface fusionnée (greedy) et celle des paliers lointains ; le plafond est
dessiné par sa face du dessous au palier fin.
- **Brouillard** : il recule dans le Nether comme dans l'Overworld quand le LOD est actif.
- La peinture (carte des hauteurs) reste coupée sous un plafond.
## Limites connues de cette étape
- Seuls les chunks **chargés** du Nether sont capturés (en jouant, ou générés neufs). Le terrain déjà
prégénéré loin du joueur n'est pas encore rattrapé : il faudra un backfill Nether (comme l'atlas de
l'Overworld).
- Aux paliers **fusionnés** (très loin), seul le sol est dessiné, pas encore le plafond.
- Pas de bascule dans le menu pour l'instant : coupe-circuit `CaveCeiling.ENABLED` dans le code.
## 🌋 Lumière du Nether (test du 26/09 après-midi)
- **La lave, la glowstone et les champilampes éclairent le LOD.** Le Nether a une heure figée à minuit :
l'effet jour/nuit du LOD assombrissait tout ×0,22. Il est coupé dans les dimensions sans ciel.
- **Plus de plaques rouge foncé sur les parois.** Sous un plafond, une lumière « inconnue » (tranche
enterrée) s'écrivait comme du noir mesuré, et les flancs sans mesure en face la reprenaient. Le rendu ne
lit plus « l'air du dessous » que s'il y a vraiment de l'air, et une tranche enterrée prend la lumière
du sommet de sa pile. Aucun changement dans l'Overworld, aucune recapture nécessaire.
- **Le plafond tient en une seule tranche** : moins de géométrie invisible, et le sol sous les surplombs
n'est plus sacrifié par la limite de tranches par colonne.
- **La carte montre le sol du Nether**, plus le toit.
## 🗺️ Carte
- **Nouveau cran de zoom : 1 px = 0,5 bloc.** Un cran de plus que « 1 px = 1 bloc », pour lire et viser
au bloc près autour de soi (poser un repère pile au bon endroit).
## 🎥 Caméra
- **Plus d'ondulation du terrain lointain quand on prend des dégâts.** La secousse de caméra des coups
(mobs, chute…) faisait bouger le LOD comme le balancement de la marche. Elle est retirée sous le même
« Verrou oscillation » (Avancé → Caméra). L'animation de la mort est conservée.
## 🐛 Fuite de mémoire en solo (le jeu finissait à 1 FPS)
- **Cause trouvée grâce à la sonde mémoire** : la prédiction du terrain lointain reconstruisait tout le
générateur de terrain de Minecraft pour CHAQUE chunk prédit (plusieurs milliers d'objets à chaque fois),
au lieu d'un seul par monde comme le fait le jeu. La mémoire montait de plusieurs Go en quelques minutes.
Le générateur est maintenant construit une fois et réutilisé : moins de mémoire, et une prédiction bien
plus rapide.
## 🔎 Diagnostic
- **Sonde mémoire automatique** : quand la mémoire du jeu dépasse 80 %, OmniGen écrit dans le journal la
liste des types d'objets qui l'occupent (une fois, puis au plus toutes les 5 minutes). Sert à trouver
la fuite qui mettait le solo à 1 FPS.
## 🌫️ Terrain prédit (non jouable) — reconnaissable
- Le terrain que le client calcule lui-même à partir de la graine (relief et biomes, sans structures ni
arbres) est maintenant **légèrement voilé** en jeu, comme vu à travers une brume, et **hachuré** sur la
carte. On distingue d'un coup d'œil le vrai terrain du terrain seulement prédit. Il n'est jamais fusionné
avec du vrai terrain au loin, pour que la frontière reste nette.
- **Prédiction bien plus rapide** : elle se fait à 4 blocs près au plus fin (au lieu du bloc près), puis de
plus en plus grossier au loin. Le terrain prédit atteint enfin l'horizon au lieu de s'épuiser à côté du joueur.
- **Plus de « tas de sable » sur l'océan prédit** : la prédiction prenait la surface de l'eau pour le sol
et y posait une plage. Elle lit maintenant le fond marin, et remet l'eau par-dessus.
- **La prédiction comble enfin les trous lointains** : la passe « proche » épuisait à chaque balayage tout
le budget d'examen vers 22 chunks, et la passe « lointaine » ne recevait jamais rien. Chacune a son budget.
- **Océan prédit correct** : l'eau est une surface (et non plus des cubes d'eau qui flottent), au même niveau
que la vraie mer. Les colonnes prédites ont la même épaisseur que le vrai terrain : plus d'îles « suspendues »
ni de trous noirs entre deux chunks de hauteurs différentes.
- Sur la carte, seuls les pixels réellement prédits sont hachurés (plus de vrai terrain hachuré).
## Nether et Overworld ne se mélangent plus
- En passant un portail, les chunks du nouveau monde pouvaient être rangés dans le cache (et sur le disque) de l'ancien : des morceaux de Nether apparaissaient dans l'Overworld, autour du portail, et revenaient à chaque visite. Le changement de monde se fait désormais au premier tick, avant toute écriture.
- Même correctif en quittant un serveur pour un monde solo.
## Génération par région (expérimental, activé par défaut)
- Le serveur génère le terrain **par régions de 8×8 chunks**, une à la fois, et finit chaque région avant de passer à la suivante (d'abord celle où vous êtes, puis celle que vous regardez).
- Côté client, une région s'affiche **soit entièrement en réel, soit entièrement en terrain prédit** : plus de damier mi-réel mi-prédit. Elle bascule d'un coup quand 90 % de ses chunks sont arrivés.
- Le mur de génération suit les régions terminées, **dans toutes les dimensions** (Nether et End compris).
- Désactivable côté serveur : `regionGeneration=false` dans `config/omnigen-server.properties`.
## 🌀 Portails : voir l'autre côté (remplace Immersive Portals pour la vue)
- **La destination se voit à travers le portail**, dessinée par le LOD : le Nether depuis l'Overworld et
inversement, avec la bonne orientation (rotation d'un quart de tour quand les deux cadres ne sont pas dans le
même axe), le ciel ou le brouillard d'en face au fond, et les grottes autour du portail d'arrivée.
- **Visible de loin** (jusqu'à ~40 blocs) et **dès le premier coup de briquet** : avant toute traversée, la vue
montre le portail que Minecraft choisira (même règle de placement que le jeu).
- **Plusieurs portails collés, chacun avec sa propre vue** (jusqu'à 4 à la fois, les plus proches d'abord). Seul
le plus proche fait charger son arrivée ; les autres lisent le terrain déjà connu, sans coût pour le serveur.
- **Animations** : la vue glisse en douceur quand la destination se précise, et apparaît en fondu.
- **Rendu fidèle** : feu, racines, vignes et toiles en plaques ; escaliers, dalles, trappes et barrières avec leur
vrai modèle ; bûches couchées dans le bon sens ; la vue continue de se compléter tant qu'on reste près du portail.
## 🔗 Portails : des liaisons stables
- **Une liaison faite est verrouillée** : A mène toujours à B et B ramène toujours à A, sans nouvelle recherche
ni nouveau portail au milieu de nulle part. Casser le portail d'en face libère la liaison.
- **Le portail créé de l'autre côté a la même taille** que celui qu'on traverse ; un portail existant de la même
taille est réutilisé.
- **Plus jamais renvoyé au spawn** : si l'arrivée n'est pas encore générée, le portail attend et l'affiche
(« ⏳ Le portail prépare l'arrivée… n/N ») ; quand tout est prêt, « ✔ Portail prêt ». Le statut s'affiche
en permanence au pied du portail.
## ✦ Passerelles nommées par panneau (nouveau)
- **Le même texte sur un panneau collé à deux portails les relie**, à n'importe quelle distance :
Overworld ↔ Overworld, Nether ↔ Nether, ou entre les deux (sans le ×8 du jeu).
- Les deux portails doivent avoir **la même forme** (largeur × hauteur) ; sinon le passage est refusé, avec un
message qui donne les deux tailles.
- Le panneau **s'illumine** et des glyphes d'enchantement montent autour tant que la liaison est active.
- **Un levier allumé près du panneau fait faire un demi-tour** : on ressort de l'autre côté du portail d'arrivée,
tourné à 180°, et la vue montre ce côté-là (pratique quand l'arrivée donne sur un mur). Le statut affiche « ↻ demi-tour ».
- Plus de deux portails du même nom : on arrive au plus récent, et un message le signale. Sans panneau, rien ne
change (liaison verrouillée habituelle).
## 🖥️ Serveur : plus de gels
- **Gels de 10 s corrigés** : la capture du terrain lointain lisait le biome « dans le monde » depuis un autre
fil, ce qui forçait le serveur à attendre la génération d'un chunk voisin. Le biome est lu dans le chunk.
- **Frein commun** : après un tick de plus d'une seconde, toutes les tâches de fond d'OmniGen (prégénération,
régions, rattrapage, envoi du LOD) s'arrêtent 10 s. Les joueurs et les portails ne sont jamais freinés.
- **Diagnostic** : en cas de gel, le journal montre la pile du serveur et celle du fil qui l'a provoqué ; la
ligne « Chargés » donne les chargements de chunks par source.
## 🛡️ Plus de chute à travers le terrain
- Quand le serveur est en retard et que le vrai chunk n'est pas encore arrivé, le joueur est retenu au dernier
endroit sûr (« ⏳ Chargement du terrain… ») au lieu de traverser le terrain lointain et de tomber dans le vide.
## 💬 Barre d'action
- **Plus de messages qui se chevauchent** : un gestionnaire décide qui s'affiche (Minecraft et les autres mods
d'abord, puis le portail, puis le chargement, puis le mur de génération).
## 🗺️ Carte et minimap
- **Repères et marqueur du joueur au bloc près** (ils étaient ramenés au coin de leur chunk, visible aux zooms forts).
- **En grotte, la minimap se fixe au zoom 0,5 bloc** pour lire les galeries.
## 🪨 Gravité
- **Plus de pans d'île qui tombent** en cassant un bloc : seuls les petits morceaux détachés (64 blocs au plus)
tombent ; le sable des âmes et les blocs porteurs comptent comme appuis ; un morceau qui touche de la lave ou
de l'eau reste en place.
## 🧱 Terrain lointain
- Escaliers en demi-bloc : **option expérimentale, coupée par défaut** (« Escaliers en demi-bloc »). Allumée, elle laisse
encore des fentes là où les escaliers sont nombreux (montagnes de certains packs).
## 🌄 Terrain lointain et vrais chunks : plus de bordure
- **Nouveau : à la première connexion à un monde**, OmniGen demande comment afficher le terrain : « seulement au loin »
(par défaut) ou « partout » (Mode LOD forcé, plus de FPS). Le choix est retenu pour ce monde et modifiable dans les options.
- **Plus de falaise autour du joueur** quand on regarde de haut : le terrain lointain recouvre le dernier anneau de vrais
chunks et s'efface progressivement, bloc par bloc, en s'approchant du joueur.
- **Plus de trous dans les coins** de la distance de rendu, ni quand le serveur envoie moins de chunks que la distance du client.
- Panneaux, leviers, torches et portails ne sortent plus en cubes par-dessus les vrais blocs.
- **Fondu « cape d'invisibilité »** : en s'approchant, le terrain lointain ne disparaît plus bloc par bloc mais pixel par
pixel, avec un léger miroitement au bord (sans shaderpack ; sous shaderpack, le fondu par blocs reste).
- **Plus de doublon en cassant un bloc** : là où vous jouez (votre chunk, ses 4 voisins et le chunk en diagonale que
vous regardez), le terrain lointain n'est jamais dessiné sous les vrais blocs. En Mode LOD forcé, au-delà de cette
zone, le doublon reste voulu (c'est le principe du mode).
- **Plus de dalle de terrain qui flotte** à côté des vrais chunks, ni de tranchée sombre dans les rivières : le terrain
lointain n'est plus enfoncé là où il est seul, et ne dessine plus d'eau sous la vraie eau.
- **Plus de trou en forme de « plus »** sous le joueur quand on vole très haut.
- **Plus de rectangles tramés qui restent derrière le joueur** : les zones de fondu se reconstruisent en entier quand on
s'éloigne, et en altitude (là où Minecraft ne dessine plus le sol) le terrain lointain reste plein.
- **Plus de petits trous à côté des dalles** (montagnes de dalles de certains packs) : le bloc voisin dessine toujours sa face.
## 🌀 Vue à travers les portails
- **Fonctionne aussi avec un shaderpack.**
- Plus de calcul inutile : la vue n'est plus recalculée en changeant de côté du portail, ni dessinée quand le portail
est hors de l'écran (gros gain de FPS près des portails).
## 🖥️ Serveur : beaucoup moins de lectures disque
- Le terrain lointain manquant est lu **directement dans les fichiers de région**, sans charger les chunks autour : jusqu'à
plusieurs centaines de chargements/déchargements par seconde en moins.
## 💧 Eau et lave qui s'écoulent
- **Dessinées comme dans Minecraft** : à leur vraie hauteur (7/9 de bloc au premier niveau d'écoulement, 1/9 au dernier)
et **en pente douce**, chaque coin prenant la moyenne des blocs voisins, au lieu de marches de cubes pleins. Les mers
et les lacs ne changent pas. Bascules « Hauteur réelle des fluides » et « Fluides en pente ». Les chunks capturés
avant cette version prennent la bonne forme à leur recapture.
## 🔥 Nether au loin
- **Le plafond est dessiné jusqu'à l'horizon** : au-delà du détail maximal, la caverne ne s'ouvre plus sur le vide.
Bascule « Plafond du Nether au loin ».
- **Brouillard du Nether** : le terrain lointain se voile dès le joueur et se fond dans la couleur du brouillard, comme
les vrais chunks, au lieu d'un mur de brume rouge suivi d'un horizon parfaitement net. Bascule « Brouillard du Nether ».
- Diagnostic : lignes `[OmniGen/Demi-tour]` (FPS avant/après un demi-tour, raison de chaque maillage refait) et
`[OmniGen/Arrivée]` (temps d'affichage après un changement de dimension).
## ⚡ FPS
- **Demi-tour plus fluide** : les chunks proches sortis du champ de vision sont gardés 30 s ; quand la mémoire graphique
est tendue, ce sont d'abord les chunks lointains qui partent. Avant, un demi-tour refaisait jusqu'à 3 000 chunks.
## 🖥️ Serveur : plus de rechargements en boucle, plus de gel
- **Prégénération** : elle lit le fichier de région avant de poser un ticket ; un chunk déjà généré n'est plus rechargé
(avec tout son voisinage) pour rien. Mesuré : de 250-300 chunks chargés par seconde à presque rien.
- **Tout changement de bloc met le terrain lointain à jour** (commande `/fill`, explosion, piston, machine…), plus
seulement la casse et la pose d'un joueur. Avant, l'ancien terrain revenait quelques minutes après.
- **Gel de 1 à 2 s du serveur intégré toutes les 30 s** : c'était une sonde de diagnostic, maintenant coupée par défaut
(« Sondes trous et parois », options avancées).
- Journal allégé : sondes de développement coupées par défaut.
## 🔀 Distant Horizons
- Choisir Distant Horizons à la place d'OmniGen **l'allume vraiment** (rendu et génération lointaine), au lieu de le
laisser à ses propres réglages, parfois éteints. La vue à travers les portails reste disponible.
### Change Log 2.0
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/hlFPwIevl40" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
# OmniGen 0.3.37.24
**La dernière version consacrée au LOD de l'Overworld.** La suivante ouvrira le Nether.
C'est aussi la plus grosse depuis la refonte voxel : le terrain lointain gagne ses hautes herbes, ses
vraies couleurs de biome, sa lave, son éclairage, ses fonds marins et son relief. **Les îles flottantes
ne sont plus trouées.** Et il tourne bien plus vite : de 18–30 images par seconde à **plus de 100**.
> ⚠️ **Serveurs : mettez le jar à jour.** Presque tout ce qui suit a besoin des deux côtés. Si le jar
> serveur n'est pas à jour, le client vous prévient désormais **en rouge dans le tchat** au lieu de vous
> laisser chercher.
> 🔄 **Les nouveautés visuelles sont de la DONNÉE.** Les plantes, la lave, les couleurs et la lumière
> n'apparaissent que sur les chunks capturés depuis cette version. Votre terrain existant reste tel
> qu'il est jusqu'à ce qu'il soit recapturé — automatiquement quand vous circulez, ou d'un coup avec la
> nouvelle commande décrite plus bas.
---
## 🏝️ Les îles flottantes ne sont plus trouées
Le bug le plus ancien du LOD : sous les îles flottantes, on voyait le ciel à travers le terrain, et la
mer disparaissait juste en dessous. Trois causes empilées, toutes corrigées :
- **La capture ratait la mer sous certaines îles.** En cherchant le fond des grottes profondes, elle
descendait dans le vide sous l'île et s'arrêtait juste au-dessus de la mer, selon l'altitude de l'île
au bloc près. Ni surface, ni fond : un trou béant.
- **La capture faisait confiance à la hauteur notée par le jeu**, qui peut s'arrêter à la mer alors
qu'une île flotte au-dessus. Le vrai sommet de chaque colonne est désormais vérifié.
- **L'affichage jetait la mer dès qu'une île flottait au-dessus**, même quand la donnée était juste.
> 🔄 Le serveur remet à niveau tout seul les chunks déjà enregistrés (voir « Remise à niveau
> automatique ») : rien à faire.
---
## 🌿 Les hautes herbes et les fleurs
Le terrain lointain n'affichait que des blocs pleins. Les hautes herbes, fleurs, pousses et champignons
— tout ce qui se dessine en croix — étaient simplement absents : une plaine fleurie devenait une nappe
verte unie.
Ils sont là. Et comme ils coûtent cher en géométrie, leur densité **décroît avec la distance** : pleine
près de vous, éclaircie au loin, avec un motif stable — une plante qui disparaît ne réapparaît pas en
clignotant quand vous bougez.
---
## 🔥 La lave
Elle était capturée comme de l'eau. Un lac de lave au loin ressortait **bleu**.
La cause était une seule ligne : la détection de surface acceptait n'importe quel fluide au lieu de
l'eau seule. La lave a maintenant sa propre apparence, en blocs cubiques.
---
## 🎨 Les vraies couleurs de biome
En mode LOD forcé, l'herbe était uniforme partout. Or Minecraft ne l'est pas : une savane, une jungle
et une taïga n'ont pas le même vert, et le passage de l'une à l'autre est un dégradé.
Le serveur envoie désormais le **biome** de chaque zone, et le client en déduit la couleur.
**Pourquoi le biome et pas la couleur.** La première version envoyait du RVB, et toute la végétation est
ressortie **noire** sur serveur dédié. Les couleurs d'herbe et de feuillage viennent d'un *colormap* —
c'est-à-dire d'une **texture**, qui n'existe pas sur un serveur sans ressources graphiques. Le serveur
répondait donc du zéro, en toute bonne foi.
Le partage correct est celui-ci : le serveur détient la donnée de **monde** (quel biome, où), le client
détient la donnée d'**apparence** (quelle couleur pour ce biome). En prime, **un pack de ressources qui
change la couleur de l'herbe est désormais respecté** — ce que l'envoi de RVB interdisait.
Trois précisions :
- **Quatre échantillons par chunk**, pas un seul. C'est la résolution native des biomes dans Minecraft
(des blocs de 4×4). Les petits biomes ne sont plus avalés par leur voisin.
- **Les transitions sont fondues**, en 3D comme sur la carte. Un quad fusionné peut enjamber une
frontière de biome : une teinte unique y dessinerait une ligne droite, quatre teintes aux coins la
dissolvent.
- **Rien à recapturer.** La grille de biomes ne dépend que de la seed du monde — elle se calcule sans
charger le moindre chunk.
---
## 💡 La lumière
C'est le plus gros morceau de cette version, et celui dont il reste le plus à faire.
Jusqu'ici, **chaque sommet du terrain lointain était écrit en plein jour**, en dur. Dehors, ça passait —
la nuit assombrit tout globalement. Sous terre, non : la pierre réelle est noire, la nôtre était en
plein soleil, et la différence sautait aux yeux à la jointure.
Le terrain lointain porte maintenant **sa propre lumière**, mesurée à la capture. Les grottes, les fonds
marins et les surplombs deviennent sombres.
Plusieurs mécanismes s'y ajoutent :
**Le dessous d'une tranche n'a pas la lumière de son dessus.** Un plafond de grotte est le dessous d'une
colonne qui monte jusqu'à la surface : les deux faces partageaient la même mesure, prise en plein air.
Le plafond était donc éclairé comme un midi d'été.
**Une face verticale prend la lumière de l'air qu'elle regarde**, lue dans la colonne d'en face — et non
celle mesurée au sommet de sa propre colonne, parfois cent blocs plus haut. Sans ça, deux colonnes
voisines d'une même paroi pouvaient ressortir l'une noire et l'autre claire, selon ce qui les coiffait
en surface.
**La lumière est lissée par sommet** : chaque sommet prend la moyenne des cellules qui le touchent, au
lieu de recopier la sienne. C'est le *smooth lighting* de Minecraft, appliqué au terrain lointain — sans
lui, l'éclairage apparaît en plaques à bords francs.
**Votre client corrige ce qu'il traverse.** Le serveur doit deviner l'éclairage au moment où il génère un
chunk, avant que le moteur de lumière ait fini son travail. Votre client, lui, lit le vrai moteur de
Minecraft. Les chunks que vous parcourez voient donc leur lumière relue, **et conservée sur le disque** :
la zone reste corrigée pour toujours. Le serveur fait le même rattrapage de son côté, ce qui répare le
décor **pour tous les joueurs**.
> 🚧 **Ce n'est pas terminé, et autant le dire.** Il subsiste des endroits où l'éclairage n'est pas
> celui qu'on attendrait, en particulier aux frontières de chunks et dans les grandes cavités. Le travail
> continuera dans une prochaine version.
---
## ✨ Occlusion ambiante
Le terrain lointain était uniformément éclairé : une nappe plate, sans creux ni relief perçu.
Les angles rentrants, le pied des falaises et le dessous des surplombs s'assombrissent désormais — c'est
ce qui fait qu'un terrain cubique cesse d'avoir l'air en plastique.
**Et ça marche avec tous les packs de shaders**, y compris ceux qui ignorent l'existence d'OmniGen.
L'effet est cuit dans la géométrie au moment où elle est construite, pas calculé à l'affichage : coût
par image **zéro**, compatibilité totale.
C'est un premier pas volontairement modeste. Si votre machine ne tient pas un pack de shaders complet,
OmniGen vous en donne au moins ça.
---
## ⚡ Performances
### Côté client
| | avant | après |
|---|---|---|
| FPS constatés | 18 – 30 | **100 – 120** |
Le principal coupable était le nombre de faces dessinées. Les changements, dans l'ordre de leur effet :
**Nouveaux paliers de détail par défaut**, réglés à l'œil en jeu : bloc par bloc jusqu'à 30 chunks,
puis un palier tous les 15 chunks, et les grands regroupements à partir de ~150 chunks. Plus de détail
autour de vous qu'avant, et moins de géométrie au loin.
**Texture allégée au loin.** Au-delà du détail maximal, la texture est posée une fois par cellule au
lieu d'une fois par bloc : quatre à neuf fois moins de géométrie, sans différence visible de loin.
**Fusion des dessus au loin.** Au-delà du terrain proche, les faces horizontales voisines de même
altitude et même bloc sont fusionnées en un seul grand quad. Au plus près, on garde une face par bloc :
c'est ce qui garde la texture nette, et la netteté a été préférée.
**Le zoom n'affine plus que ce que regarde la lunette** : fini les ~15 images par seconde au zoom.
**Rattrapage après une reconstruction complète** (changement de shaderpack, de réglage) : le terrain
lointain revient bien plus vite.
**Lecture correcte des chunks voisins.** Un chunk dégradé ne parvenait pas à lire ses voisins : il
émettait donc des faces de bordure qui auraient dû être masquées. Corrigé, avec un effet secondaire
bienvenu sur la quantité de géométrie.
**Densité des plantes** décroissante avec la distance (voir plus haut).
### Côté serveur
Le calcul des couleurs de biome faisait **16 384 échantillonnages d'un seul bloc**, sur le fil principal.
Résultat : des ticks de 60 secondes, et le chien de garde qui tuait le serveur.
Le travail est désormais **étalé sur plusieurs ticks**, avec un budget, et il **cède le pas** quand le
serveur prend du retard. Colorer un horizon n'a aucune urgence ; un joueur qui subit des à-coups, si.
Deux files internes comptaient leur longueur en **parcourant tous leurs éléments** — jusqu'à 130 000 —
plusieurs fois par tick. À elles deux, elles pesaient plus que le déchargement des chunks de Minecraft.
| | avant | après |
|---|---|---|
| Cadence serveur | 2,7 TPS | **20 TPS** |
| Marge sur le budget de tick | — | **80 %** |
Et aussi : la recherche des chunks manquants autour des joueurs ne tourne plus sur le fil principal, et
la recapture compte son budget en travail réel — une série d'échecs ne peut plus bloquer un tick.
---
## 🎛️ Régler soi-même la distance du détail
**Nouvel écran « Distance du détail »** (Options avancées → Niveau de détail) : trois curseurs en
chunks — détail maximal, détail moyen, terrain simplifié — et trois préréglages (Automatique,
Performances, Qualité). Le compteur d'images par seconde s'affiche en direct pendant qu'on règle.
Pour les curieux, le niveau Développeur donne accès à la table complète, palier par palier.
---
## 🔧 Capture plus profonde, et une commande pour rattraper
La capture s'arrêtait à une profondeur fixe sous la surface. Les grandes cavités et le dessous des îles
flottantes tombaient dans le vide : on voyait **à travers le monde**.
Elle descend maintenant jusqu'à ce que la coquille se referme, avec une sonde supplémentaire pour le
relief caché.
Et parce que tout cela est de la donnée, une commande permet de rattraper l'existant sans attendre :
```
/omnigen recapture [rayon]
```
Rayon en chunks, de 1 à 24, 6 par défaut. Les chunks sont recapturés **et renvoyés** aux clients —
l'oubli de ce second geste avait été, à lui seul, la cause de plusieurs faux diagnostics.
### Remise à niveau automatique
Chaque correctif de capture ne valait que pour les chunks capturés après lui. Désormais, **le serveur
repère tout seul les chunks enregistrés avec une ancienne capture et les refait par-dessus**, dix à la
fois, du plus proche du joueur au plus loin, en se mettant en pause dès que le serveur force. L'ancien
terrain reste affiché jusqu'à l'arrivée du nouveau : aucun trou pendant l'opération. Comptez plusieurs
heures pour un grand monde — sans rien faire.
---
## 🌊 L'océan et ses fonds
Le terrain lointain ne gardait que quarante blocs sous la surface. Sur un océan profond, le fond
tombait dans le vide : on voyait **le soleil à travers la mer**.
- **Le fond marin est capturé** : la capture descend jusqu'au premier bloc sous l'eau, et part de là.
Sous les îles, les icebergs et les monuments aussi — le toit d'un monument ne coupe plus le fond.
- **Là où rien n'est encore capturé**, un fond bleu très sombre ferme la vue au lieu d'un trou.
- **Le fond s'assombrit avec la profondeur**, comme dans le vrai jeu.
- **L'eau lointaine est translucide partout.** Elle devenait opaque, par plaques, sur les paliers
les plus lointains.
- **Fini les plaques d'eau carrées posées au-dessus de la mer.** À la connexion à un serveur moddé,
les blocs sont renumérotés : l'eau dormante était alors prise pour de l'eau qui coule, et dessinée
en cubes.
- **Les mares et les lacs** situés sous le niveau de la mer apparaissent enfin.
- **Les cascades et l'eau qui coule** apparaissent au loin, au lieu de disparaître ou de devenir des
plaques plates. Pour l'instant sous forme de cubes d'eau : un premier pas, à affiner.
---
## 🕳️ Les grottes
- **Le fond des grandes grottes ouvertes** disparaissait, remplacé par des trous couleur ciel. Les
tranches pleines qui se touchent sont maintenant fusionnées avant d'être triées : la forme de la
grotte est gardée entière.
- **Les ouvertures profondes** (crevasses, puits) sont suivies jusqu'à leur fond.
- **Les parois s'assombrissent avec la profondeur**, et plus aucune face ne sort d'un noir d'encre
sans texture : on devine toujours la pierre.
---
## ⚙️ Réglages
Les **réglages par défaut ont changé** : ce qui était réservé aux options avancées devient le
comportement normal. Un réglage qui n'est jamais activé par défaut est un réglage que personne n'aura.
Nouvelles bascules dans **Options avancées → Lumière et shaders**, toutes activées :
| Réglage | Ce qu'il fait |
|---|---|
| **Lumière par tranche** | Le terrain lointain porte sa propre lumière |
| **Lumière lissée** | Moyenne par sommet — supprime les plaques à bords francs |
| **Lumière des flancs** | Une face prend la lumière de l'air qu'elle regarde |
| **Lumière relue par le client** | Correction persistée des chunks que vous traversez |
| **Occlusion ambiante** | Creux et angles rentrants assombris |
| **Mipmaps du terrain lointain** | Atténue le grésillement des textures au loin |
Le texte d'aide de cet écran **revient à la ligne** au lieu de déborder de l'écran — il tenait sur une
seule ligne centrée depuis sa création.
---
## 🔗 Liens
Trois boutons dans les options d'OmniGen : la chaîne YouTube, la page Modrinth et le serveur Discord.
Chacun passe par l'écran de confirmation de Minecraft — aucun lien ne s'ouvre sans votre accord.
---
## 🧱 Chaque bloc à sa vraie forme
Le terrain lointain ne savait dessiner qu'une chose : un pavé. Un tapis de mousse devenait un **bloc**
de mousse, une couche de neige un bloc de neige, un nénuphar une **croix** plantée dans l'eau, et une
barrière était purement **omise** — parce qu'un mur de pierre continu à la place d'une balustrade est
pire que rien.
Ils ont tous leur forme, maintenant. Et pas une forme approchée à la main : **celle que le bloc
déclare lui-même**. Minecraft sait quelle place occupe chacun de ses blocs ; il suffisait de le lui
demander. Ça vaut donc aussi pour les blocs des mods, sans aucune liste à tenir à jour.
**Et surtout, le terrain lointain transporte désormais l'ÉTAT du bloc, pas seulement son identité.**
C'est le changement de fond de cette version. Jusqu'ici on stockait « ceci est un escalier » ; on
stocke maintenant « ceci est un escalier tourné vers le nord, moitié haute ». Le renderer peut alors
lire le **modèle** que Minecraft a déjà cuit pour cet état précis — une barrière avec ses bras, une
dalle du bon côté, un escalier dans le bon sens.
Trois précisions :
- **Ça ne coûte pas un octet de plus.** L'identifiant d'état tient dans le même entier que l'identifiant
de bloc — c'est celui qu'emploie le protocole réseau de Minecraft lui-même. Et le tableau n'est
transmis que si au moins un bloc du chunk n'est pas à son état par défaut : un chunk de terrain nu ne
coûte rien.
- **Le vrai modèle est réservé au champ proche.** Un cube fait six faces, une barrière avec ses bras une
trentaine. Au-delà, on redessine des boîtes — à cette distance, personne ne voit la différence.
- **Rien à recapturer pour que ça n'empire pas.** Les chunks capturés avant cette version s'affichent
exactement comme hier, et gagnent leur forme à leur prochaine capture.
Deux limites assumées : la neige est vue à **une** couche, et les **dalles restent des cubes**. Une dalle
haute dessinée en bas laisserait un trou à hauteur d'œil, là où un cube n'en laisse aucun — quand on
ignore l'orientation, le mensonge le moins coûteux est celui qui ne creuse pas.
**Les blocs décoratifs des mods sont de retour**, eux aussi, dès lors qu'on sait les dessiner. Restent
masqués ceux dont le sens tient à leur **contenu** et non à leur forme — un panneau d'affichage de
Create rendu sans son texte n'est pas approximatif, il est faux.
---
## 📏 Le bloc-parfait ne dépend plus de votre altitude
En prenant de la hauteur, le terrain proche se mettait à grossir par paliers — puis, près du plafond du
monde, **toute la carte basculait d'un coup en cellules de 2×2**, pour quelques blocs de montée.
La cause : l'altitude était comptée comme de la distance, et ajoutée à **tous** les chunks — y compris
celui qui est sous vos pieds. À y=255, le terrain à vos pieds était traité comme s'il était à vingt
chunks.
Ce poids a une vraie raison d'exister : vu d'avion, la surface visible explose et il faut dégrader plus
vite. Mais il n'a aucune raison de dégrader ce qui est à deux pas. **Les seize chunks autour de vous
sont désormais bloc-par-bloc, sans condition** — ni altitude, ni zoom, ni hystérésis. Au-delà, le poids
de l'altitude fait son travail comme avant.
---
## 🔌 La lumière traverse enfin les frontières de chunk
En creusant une galerie, le fond du tunnel restait **en plein jour** pendant que le reste s'assombrissait
correctement — définitivement, pas seulement en retard.
Casser un bloc ouvre un passage à la lumière, et on ne rafraîchissait que **quatre blocs** autour de la
pioche. La lumière de Minecraft porte à quinze, et bien plus loin dans un couloir qui la canalise. Tout
ce qui était au-delà gardait la valeur mesurée avant que le tunnel existe.
Élargir naïvement aurait relancé une recapture complète à chaque coup de pioche. On a donc séparé les
deux besoins, qui n'avaient aucune raison de partager le même mécanisme : la **géométrie** ne change
qu'au bloc cassé ; la **lumière** est relue sur tout le voisinage, sans rescanner le moindre bloc.
**Et la nuit atteint enfin le terrain lointain quand vous jouez sans shaderpack.** La modulation
jour/nuit était purement coupée hors Iris — un raccourci écrit du point de vue d'un shaderpack, qui
fait ce travail lui-même, et qui ne disait rien du cas où il n'y en a pas.
---
## ⚡ Démarrage et journal
**La connexion ne bloque plus le serveur.** La recette de génération était construite sur le fil
principal au premier login : deux secondes et demie de serveur figé, et un « Can't keep up » dans la
console. Elle est préchauffée en arrière-plan, en priorité minimale.
**Le journal ne se noie plus.** Le bilan de recapture s'imprimait à chaque passe de rattrapage
automatique — une centaine de fois en trois minutes. Il ne parle plus que quand quelque chose de réel
s'est passé.
**`BUILD CHECK` affiche l'heure de compilation du jar.** Savoir si le client et le serveur tournent sur
le même build était devenu une devinette ; c'est désormais une ligne à comparer.
---
## 🎬 Affichage
- **Les mobs vus de loin ne sont plus coupés en deux**, surtout en volant haut : le sol lointain passait
devant leurs jambes. (Sans shaderpack pour l'instant.)
- **Changer de shaderpack en pleine partie** ne fait plus disparaître le terrain lointain, ni ne le
déforme en grandes nappes étirées.
- **Le terrain lointain ne disparaît plus au démarrage** en ne laissant que la mer : il lui manquait
ses textures dès qu'aucune zone vide n'était à l'écran.
- **F3+T et le changement de pack de ressources** remettent le terrain lointain à jour.
- **Le haut des flancs des blocs d'herbe** prend la couleur du biome, comme sur les vrais blocs.
- **Sapins et bouleaux** gardent leur couleur fixe ; **les cerisiers** ne sortent plus vert olive.
- **L'animation de remontée** ne se joue plus qu'à la première apparition d'une zone.
- **Les hautes herbes ne clignotent plus** sous shaderpack. **Clôtures et murets** sont affichés par défaut.
---
## 🧹 L'ancien LOD « peinture » est retiré
Le premier moteur du terrain lointain — des plaques colorées plates — tournait encore dans le mod,
coupé mais présent, avec ses réglages. Il est retiré, avec ses quatre bascules. Le menu passe à
**75 réglages**, et les outils de diagnostic (table des paliers, sonde de colonne, shader de fondu)
sont rangés au niveau Développeur.
---
## 🐛 Corrections
**Océan saumon au crépuscule.** La valeur « plein jour » écrivait une lumière de ciel **et** de bloc au
maximum. Or la lumière de bloc est chaude : tout l'océan virait au rose. « Plein jour » ne veut pas dire
« toutes les lumières au maximum » — les deux canaux ont des couleurs différentes.
**Feuilles de cerisier vertes.** Les feuilles sans résolveur de couleur recevaient la teinte du feuillage
— précisément celles qui ne doivent pas être teintées.
**Blocs de terre noirs en plein champ.** Une colonne exposée au ciel pouvait être capturée avec un
éclairage à zéro, si le moteur de lumière n'avait pas encore propagé. Une tranche qui n'a rien au-dessus
d'elle voit le ciel, par définition : on ne le devine plus, on le déduit.
**Le LOD ne se mettait pas à jour quand vous cassiez un bloc**, ou se remettait en plein jour en le
faisant.
**La carte affamait le terrain.** Les deux partageaient une seule file de demandes de couleurs, et la
carte la monopolisait.
**Rechargement en boucle** à l'arrivée des couleurs : le problème n'était pas la fréquence mais la
**portée** — on reconstruisait tout le terrain pour une région.
**Les couleurs disparaissaient** après un nettoyage de cache, définitivement pour la session.
**Les recaptures n'étaient pas sauvegardées** : l'écran se mettait à jour, le disque non. Au redémarrage
du serveur, tout revenait à l'état d'avant.
**Déconnexion au chargement d'une région** (« 20 611 octets en trop ») : encodage et décodage d'un même
paquet ne variaient pas ensemble.
**Ralentissements à la connexion** : une clé de suivi provoquait des collisions massives dans une table
d'un million et demi d'entrées.
**Réglage changé, terrain en damier** : après un clic dans le menu, des morceaux construits avec l'ancien
réglage restaient affichés pour de bon.
**Des centaines d'erreurs OpenGL par minute** dans le journal (« VAO names must be generated ») : l'eau
d'une zone refaite était dessinée avec un tampon déjà détruit. Au passage, un léger scintillement de
l'eau disparaît.
**Et aussi** : lacs opaques près des arbres ; eau proche un demi-bloc trop basse sous shaderpack ; murs
de 25 blocs plantés au milieu du terrain lointain ; distance automatique trompée sous shaderpack ; eau
grise après un long déplacement ; couleurs de biome qui ne revenaient pas après un passage en teinte
par défaut.
---
## 🚧 Connu, et à améliorer
- **Cascades** : dessinées en cubes d'eau pour l'instant.
- **Grottes vues de loin** : il reste des défauts visuels et de lumière.
- **En solo sur un monde neuf**, les couleurs de biome peuvent mettre quelques minutes à arriver
(l'herbe reste brune puis verdit) pendant que le mod génère et capture en même temps.
- **Sous shaderpack**, les mobs lointains peuvent encore être coupés par le terrain.
---
### Change Log 1.0
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/LjKJhuIt6ng" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
# OmniGen 0.3.37.23
Une version entièrement consacrée à **la carte**. Elle ne change rien au terrain lointain en jeu : ce qui suit concerne la minimap et la grande carte.
> ⚠️ **Serveurs : mettez le jar à jour.** La seconde fonctionnalité ci-dessous a besoin des deux côtés. Le reste marche avec un serveur en 0.3.37.22.
---
## 🗺 La carte n'oublie plus
Jusqu'ici, la carte lisait le cache du terrain lointain. Ce cache est borné en mémoire et **évince ce qui s'éloigne** — une zone explorée puis quittée disparaissait donc de la carte, et vous ne retrouviez que les gros pavés envoyés par le serveur.
OmniGen tient maintenant une **couche séparée**, sur votre disque : pour chaque bloc de surface, sa couleur et son altitude. Tout ce que vous avez vu une fois y reste, au bloc près, définitivement.
Pourquoi une couche à part plutôt qu'agrandir l'ancienne : le cache du terrain lointain stocke des **tranches verticales** — plusieurs par colonne, avec les grottes qui débouchent près de la surface. Il lui faut ça pour dessiner du relief en trois dimensions. La carte, elle, regarde d'en haut : une seule valeur par cellule lui suffit.
L'écart est considérable :
| | sur le disque |
|---|---|
| Cache du terrain lointain | **1,5 Go** |
| Couche de la carte | **38 Mo** |
Quarante fois plus petit, pour la même couverture au bloc près.
**Au premier lancement**, OmniGen reprend ce que vous possédez déjà : chez un joueur au gros cache, 1 567 675 chunks ont été repliés en 76 secondes, en tâche de fond, sans gêner la partie. Cette reprise n'a lieu qu'une fois par monde.
---
## 🔍 Affinage à la demande
La couche conserve la finesse qu'on lui donne — elle n'en invente pas. Les zones que vous n'avez jamais visitées restaient donc en pavés de 8 blocs : c'est l'atlas mondial du serveur, volontairement grossier pour couvrir toute la carte pour presque rien. Mesuré sur un écran type : **51 % des pixels**.
Or le serveur possède la vraie donnée. Il ne l'envoyait pas parce que son comblement travaille en anneaux **autour du joueur** — et sur une carte, on regarde ailleurs, parfois à des milliers de blocs.
Désormais, quand vous ouvrez la grande carte, le client dit au serveur quelle zone il affiche. Le serveur y applique le mécanisme d'envoi qui existait déjà, et les pavés se remplacent par du terrain réel **sous vos yeux**.
Ce n'est pas instantané et ce n'est pas censé l'être : l'envoi reste budgété à 8 chunks par tick, soit environ 160 par seconde. Laissez la carte ouverte quelques instants sur une zone inconnue.
**Bornes** — la demande est rognée à 96×96 chunks autour du centre de votre écran, une demande et demie par seconde au maximum, et ignorée si vous êtes trop dézoomé pour que le détail se voie. Un paquet venu du réseau est une demande, jamais un ordre : c'est le serveur qui décide de ce qu'il balaye.
---
## ⚙️ Réglages
Deux nouvelles bascules dans **Options avancées → Cartes et repères**, toutes deux activées :
**Carte détaillée** — la couche décrite plus haut. Coupée, la carte revient exactement au comportement de la 0.3.37.22, et aucun fichier n'est créé.
**Affinage à la demande** — la requête au serveur. Coupée, seules les zones que vous visitez physiquement s'affinent.
---
## 📊 Ce que vous pouvez vérifier vous-même
Le journal publie un relevé quand vous ouvrez la carte :
```
[OmniGen/Carte] Couche de surface — 1 070 371 pixels sur 1 070 870 servis par une tuile (99 %)
[OmniGen/Carte] Finesse à l'écran — 521 096 au BLOC PRÈS (48 %), 549 275 en pavés de 8 blocs (51 %)
```
La seconde ligne est celle qui compte : c'est la proportion de votre écran affichée au bloc près. Avec l'affinage à la demande, elle doit monter pendant que vous regardez.
---
## ⏭ À venir
Le prochain gros chantier concerne le **terrain lointain en 3D**, et non plus la carte : le *greedy meshing*. Aujourd'hui, une plaine de mille blocs d'herbe produit mille quads identiques côte à côte ; il s'agit de les fusionner en un seul. Rien ne change à l'écran, mais chaque image coûte beaucoup moins cher — donc, à performances égales, le terrain peut rester détaillé bien plus loin.
# OmniGen 0.3.37.22
Une version tournée vers **la carte** et **le confort d'utilisation**, avec deux optimisations du terrain lointain à la clé.
---
## 🗺 La minimap prend forme
**Trois formes au choix : ronde, carrée ou rectangulaire.** La ronde pour rester discret, la rectangulaire quand on veut voir large.
**Placement à gauche ou à droite.** À gauche, le compteur de FPS se décale tout seul pour lui laisser la place — plus de superposition.
**Le niveau de zoom est conservé.** Il était remis à zéro à chaque lancement. Il vous suit maintenant d'une session à l'autre.
**Le marqueur du joueur est recalé.** Il se dessinait à côté du bloc où vous vous trouvez au lieu d'être dessus. C'était particulièrement visible sur une poutre ou un pont étroit.
---
## 🌐 La grande carte s'ouvre autrement
L'ouverture ne se fait plus par agrandissement mais par **propagation circulaire** : la carte se déploie depuis votre position vers les bords. La fermeture suit le chemin inverse.
C'est une question de goût, mais c'est aussi plus juste : la carte se dévoile dans l'ordre où l'information vous parvient, du plus proche au plus lointain.
---
## 📋 Un vrai menu
Les options avancées étaient une longue colonne de 40 boutons sans structure. C'est maintenant un menu avec **les catégories à gauche, une barre de défilement à droite**, et les 42 réglages répartis en huit familles : rendu principal, niveau de détail, aspect du terrain, lumière et shaders, caméra, cartes et repères, distance et mémoire, diagnostic.
**Les outils de diagnostic ont leur propre catégorie** au lieu d'être mêlés aux réglages.
**« Préréglage sûr » a rejoint « Retour »** en bas d'écran — c'est une action, pas un réglage, elle n'avait rien à faire au milieu des interrupteurs.
L'option « Oscillation : ordre 2 » a été retirée : elle n'a jamais rien changé de mesurable.
---
## 🚀 Terrain lointain
**Nouveau — « Ne rien refaire derrière soi » (activé).** Le terrain situé dans votre dos n'est de toute façon pas affiché. Il n'est donc plus rafraîchi ni recalculé tant que vous ne le regardez pas.
Précision importante, parce que c'est le piège habituel de ce genre d'optimisation : **rien n'est dégradé et rien n'est effacé.** Un demi-tour retrouve le terrain intact — il est simplement affiné après coup au lieu de l'avoir été d'avance. Un terrain jamais construit l'est quand même, pour qu'aucun trou ne puisse s'ouvrir.
**Nouveau — « Cône resserré » (activé).** Le terrain très lointain n'était traité que dans un secteur de 100° autour du regard ; le champ de vision réel n'en fait que 51°. On en traitait donc deux fois trop, en permanence. Ramené à 75°, ce qui laisse encore une marge confortable.
> Si vous voyez du terrain lointain clignoter au bord de l'écran, c'est cette option : coupez-la et vous retrouvez le comportement précédent.
**L'apparition à la connexion est plus progressive.** Elle se faisait sur une durée fixe, ce qui la rendait brutale sur les grandes distances d'affichage. Elle avance maintenant à **cadence constante**, chunk par chunk : la vague est visible, régulière, et le travail de construction reste étalé quelle que soit votre distance d'horizon.
---
## 🔭 Détail au zoom — désactivé par défaut, et voici pourquoi
Cette option affine le terrain lointain quand vous utilisez un mod de zoom, pour qu'il reste net à la lunette. Elle fonctionne. Elle coûte aussi très cher, et le chiffre mérite d'être dit franchement : **affiner trois fois revient à traiter environ neuf fois plus de terrain**, tant que la lunette est levée.
Elle est donc **coupée par défaut** et retirée du Préréglage sûr. Elle reste disponible pour une capture d'écran immobile, avec son coût écrit dans l'infobulle plutôt que découvert en jeu.
Au passage, un vrai défaut a été corrigé : le zoom des mods de lunette est **animé**, et le terrain se reconstruisait à chaque image pendant toute l'animation. Cette part-là ne coûte plus rien.
---
## ⏭ Et ensuite
La prochaine version s'attaque à la carte elle-même. Aujourd'hui, les zones que vous n'avez jamais explorées s'affichent en pavés de 8 blocs — c'est la carte grossière envoyée par le serveur, volontairement légère. L'objectif de la 0.3.37.23 est **une carte détaillée bloc par bloc, partout**, stockée en tuiles sur le disque plutôt qu'en mémoire.
# OmniGen 0.3.37.21
Une version de correction, centrée sur deux choses : **les serveurs qui tombaient**, et **l'ondulation du terrain lointain**.
---
## 🔴 Crashs serveur — trois causes, toutes corrigées
Si vous hébergez un serveur, c'est la partie qui compte. Trois défauts distincts pouvaient bloquer un tick pendant 60 secondes, ce que Minecraft interprète comme un plantage : il coupe alors le serveur.
**Un joueur qui arrive faisait tomber le serveur.** À la connexion, le client annonce les chunks qu'il possède déjà. Ce traitement s'exécutait sur le thread principal et était proportionnel à sa mémoire — chez un joueur avec une grande carte, plus d'un million et demi de chunks à traiter d'un coup. Déplacé sur un fil dédié, et son coût par chunk divisé.
**Une file d'envoi sans limite réelle.** Un budget censé envoyer 8 chunks par tick comptait les réussites, pas les tentatives : dès qu'un envoi échouait, la boucle continuait et pouvait vider les 4096 chunks de la file dans un seul tick. Le compteur porte maintenant sur le travail effectué.
**Un inventaire annoncé trop tôt.** Le client déclarait ce qu'il possède avant d'avoir fini de relire son cache disque — il annonçait 53 000 chunks alors qu'il en avait 1 570 000. Le serveur croyait devoir tout renvoyer et déclenchait les deux défauts ci-dessus. Il attend désormais la fin de la relecture.
> ⚠️ Ces trois défauts ne se déclenchaient que pour un joueur à qui il **manque** des données — c'est-à-dire un nouvel arrivant. Un serveur pouvait donc tourner des semaines sans problème et tomber le jour de son ouverture.
---
## 🌊 L'ondulation du terrain lointain
Le terrain lointain semblait avancer et reculer à chaque pas, comme un écran qui se déroule. **La cause est identifiée** : l'oscillation de vue de Minecraft — le balancement de la caméra quand on marche — n'était pas transmise au terrain lointain. Le monde proche tanguait, le lointain restait immobile, et à cinq cents mètres ce décalage devient des dizaines de blocs.
Transmettre correctement ce balancement au terrain lointain n'est pas encore résolu. En attendant, **OmniGen désactive l'oscillation de vue** et affiche un message pour vous le dire.
Vous perdez le balancement de la marche, y compris celui de votre main. En échange, l'horizon est stable. Le verrou se retire dans **Options OmniGen → Avancé → « Verrou oscillation »**, et votre réglage d'origine est restauré.
---
## 🕳 Trous dans l'horizon
Une bande entière de terrain, entre 80 et 360 chunks, n'était dessinée par personne : ces régions étaient écartées **parce qu'elles n'avaient pas de maillage**, et cette décision intervenait avant le code qui en aurait construit un. Elles ne pouvaient donc jamais en obtenir. Mesuré : jusqu'à 1531 régions absentes en permanence.
Un second défaut du même genre laissait un anneau de 56 chunks au bord de l'horizon où aucun regroupement n'était jamais construit — les deux étages du rendu ne s'arrêtaient pas à la même distance.
---
## ⚙️ Réglages
**« Horizon LOD auto » est désormais désactivé.** Ce régulateur faisait varier la distance d'affichage selon les performances : il montait de 8 chunks toutes les trois secondes puis retombait d'un coup — soit un horizon qui avance de 768 blocs puis recule de 480, en boucle. Il est éteint chez tout le monde au premier lancement, avec un message dans le journal. Réactivable si vous y tenez.
**Le bouton « LOD » coupe enfin tout le terrain lointain.** Il ne coupait en réalité qu'une moitié du rendu. Le bouton « Textures » s'appelle maintenant **« Voxel »** : ce n'était pas une option cosmétique mais l'interrupteur principal du rendu détaillé.
**La peinture (l'ancien rendu lointain) est désactivable.** Elle tournait en permanence à côté du rendu voxel, sans interrupteur, et coupait au passage la sauvegarde du cache et la prégénération. Ces systèmes sont maintenant indépendants.
**Nouveau bouton « ✔ Préréglage sûr »** dans les options avancées : il pose les 39 réglages dans un état complet et connu, en un clic. Utile quand on a testé beaucoup de choses et qu'on ne sait plus où on en est.
**Apparition en vague** : à la connexion, le terrain lointain se dévoile du centre vers l'horizon en une dizaine de secondes. En plus d'être plus agréable, cela étale le travail de construction et supprime l'à-coup de l'arrivée.
---
## 🙏 Remerciements
L'ondulation était traquée depuis onze jours. C'est une observation d'un joueur qui l'a débusquée : le nom d'un point de repère affiché en jeu faisait le yoyo **exactement au même rythme** que le terrain. Un repère n'a ni géométrie, ni cache, ni niveau de détail — il n'a qu'une matrice de caméra. Cette seule remarque a éliminé onze jours de fausses pistes.
# OmniGen 0.3.37.20-BETA
**La version où le terrain lointain devient réellement jouable.**
Dix images par seconde avant, quatre-vingts après, au même endroit. Un horizon qui plafonnait à 64 chunks
et qui en atteint maintenant plus de 500. Un cache qui se corrompait silencieusement depuis des semaines,
et qu'on a fini par prendre la main dans le sac.
Tout ce qui suit a été mesuré en jeu, pas estimé.
---
## 🚀 Performances : 10 → 80 images par seconde
**Mesuré au même endroit, sans bouger.** Et surtout : entre 60 et 80 **stables**, que l'on regarde l'océan
lointain, une forêt ou des îles. Auparavant, tourner la tête vers du terrain boisé suffisait à diviser les
images par seconde par deux.
Trois réglages, désormais **activés par défaut** :
- **Lointain allégé** — le détail décroît deux fois plus vite avec la distance
- **Regroupement agressif** — les blocs de 32×32 chunks prennent le relais dès 48 chunks au lieu de 96
- **Reconstruction paresseuse** — le terrain lointain se reconstruit moins souvent
Tous restent désactivables individuellement dans les options avancées.
### Ce qui coûtait si cher
Le détail décroissait avec la distance, mais lentement : détail maximal jusqu'à 20 chunks, puis un cran
tous les 36. Conséquence peu intuitive — **à 64 chunks, le terrain était encore rendu presque bloc par
bloc**, soit 128 × 128 chunks de voxels quasiment pleine résolution envoyés à votre carte graphique à
chaque image. Le détail décroît maintenant deux fois plus vite. Les vingt premiers chunks autour de vous
ne changent pas d'un pixel ; c'est l'horizon qui devient plus grossier.
Ce réglage avait été assoupli fin juillet, avec la note « coût assumé, on a la marge ». La marge venait
d'une carte bien moins remplie. Un million et demi de chunks plus tard, elle n'existait plus — mais le
réglage, lui, était resté.
### Et un emballement qui s'auto-alimentait
Un régulateur interne augmentait le débit d'envoi vers la carte graphique quand les images ralentissaient.
L'intention était bonne pour le *lancement* des calculs, qui ne coûte rien. Mais la même règle s'appliquait
aux **envois**, qui se paient exactement là où ça ralentit : image lente → on envoie quatre fois plus →
image encore plus lente. Le remède était indexé sur le symptôme. Il est désormais inversé : plus l'image
est lente, moins on envoie.
Effet direct : à très grande distance d'affichage, le jeu reste jouable pendant que l'horizon se construit,
au lieu de s'effondrer à quelques images par seconde.
---
## 💾 Le cache du terrain est refait de fond en comble
C'est le changement le plus profond de cette version, et il corrige un défaut qui a coûté des semaines
sans jamais être vu.
Le cache était **un unique fichier compressé lu d'un bout à l'autre**. Trois conséquences, toutes
structurelles :
- **34 secondes de chargement au démarrage.** Pour connaître le terrain sous vos pieds, il fallait
décompresser tout le reste du monde. Rien ne s'affichait avant la fin.
- **Un octet abîmé faisait perdre tout ce qui suivait.** C'est ce qui arrivait : le fichier se corrompait
silencieusement, le jeu repartait avec un morceau arbitraire du monde, et le terrain apparaissait rayé —
un défaut longtemps cherché dans l'affichage alors qu'il était sur le disque.
- **Le fichier entier était réécrit** toutes les deux minutes pour y ajouter quelques milliers de chunks.
C'est ce volume qui rendait deux sauvegardes simultanées capables de se corrompre l'une l'autre.
Le nouveau format est **indexé** : chaque chunk se lit et s'écrit indépendamment.
- **L'horizon proche s'affiche en deux secondes** au lieu de trente-quatre, et le reste se charge pendant
que vous jouez. Le terrain est relu du plus proche au plus loin, dans l'ordre où il vous sert.
- **Une entrée abîmée ne coûte que son chunk.** Le reste demeure lisible.
- **On n'écrit plus que ce qui est neuf**, au moment où il arrive.
> **Reprise automatique.** Votre cache existant est converti au premier lancement, une seule fois. Sur un
> monde très exploré, comptez deux à trois minutes pendant lesquelles le terrain lointain n'apparaît pas —
> c'est normal, et ça n'arrivera plus jamais ensuite. L'ancien fichier est conservé sous
> `voxel.bin.migrated` : gardez-le un jour ou deux, puis supprimez-le.
>
> ⚠️ **Le cache prend plus de place qu'avant.** Compresser chaque chunk séparément coûte forcément plus que
> compresser tout le fichier d'un bloc — c'est précisément ce qui permet d'en lire un sans lire les autres.
> Sur un monde d'un million et demi de chunks, cela représente quelques centaines de mégaoctets
> supplémentaires. Le chargement instantané et la résistance à la corruption se paient là.
---
## 🗺️ Le terrain lointain se remplit enfin — trois blocages levés
Trois mécanismes empêchaient la carte de se compléter, chacun invisible seul.
**Le scanner de carte recommençait à zéro dès que vous marchiez.** Il balaie le monde en anneaux depuis
vous, et se recentrait — en repartant du premier anneau — dès que vous vous éloigniez de 64 chunks, soit
environ une minute de marche. Sur un monde joué pendant des semaines, il en était encore à **l'anneau 6**.
Il ne recentre désormais que si vous sortez réellement de la zone déjà balayée.
**Le serveur ignorait tout ce qui est à plus de 256 chunks.** Au-delà, un morceau de terrain manquant
n'était jamais mis en file : le serveur attendait que vous vous en approchiez. Cohérent quand l'horizon
plafonnait à 64 chunks, absurde depuis qu'il en atteint plus de 500. Porté à 512.
**Et le serveur remplissait le spawn pendant que vous jouiez ailleurs.** La prégénération globale reprend
maintenant uniquement quand plus personne n'est connecté — un serveur passe l'essentiel de son temps sans
joueurs, c'est là qu'il faut travailler. Le rayon prégénéré autour de vous passe par ailleurs de 96 à 256
chunks.
---
## 🌅 Le terrain apparaît en douceur
Le terrain lointain ne surgit plus d'un bloc : il **remonte à sa place** en sept dixièmes de seconde.
Combiné au remplissage en cercles concentriques depuis votre position — au lieu de bandes qui balayaient
l'écran — le paysage se construit autour de vous plutôt que par plaques.
L'effet ne repose sur aucun shader : il fonctionne donc **sous n'importe quel shaderpack**, contrairement
au flash blanc de l'ancienne transition, qui n'existait pas sous Iris.
*Désactivable : « Apparition en douceur » dans les options avancées.*
---
## 🧭 La carte
**La grande carte se met à jour toute seule.** Elle était figée entre deux actions ; elle vit maintenant
comme la minimap. La cadence s'ajuste d'elle-même à la taille de votre écran et à l'échelle : le calcul ne
prend jamais plus de la moitié du temps disponible, quelle que soit votre configuration.
**Une animation d'ouverture.** Appuyez sur **M** : la minimap quitte son coin, glisse vers le centre, puis
s'agrandit jusqu'à remplir l'écran. Purement esthétique — mais elle dit sans un mot que les deux cartes
sont le même objet vu de deux manières. Un clic ou une touche l'interrompt si vous êtes pressé.
**Le fond ne tranche plus.** Les zones non explorées et le pourtour de l'image partagent enfin la même
teinte : deux notions qui n'avaient aucune raison de se distinguer à l'œil.
---
## 🧠 Correctifs
**L'inventaire renvoyé en boucle.** Toutes les trente secondes, le client reconstruisait l'inventaire
complet de ce qu'il possède — plus d'un million et demi de chunks parcourus, une table de 24 000 régions
rebâtie de zéro — **sur le fil qui dessine vos images**, pour renvoyer au serveur un inventaire
rigoureusement identique au précédent. Deux à trois gigaoctets de déchets à ramasser toutes les trente
secondes, pour redire ce qui avait déjà été dit. Désormais : rien n'est envoyé si rien n'a changé, et le
calcul a quitté le fil de rendu.
**Des bandes entières de terrain qui n'apparaissaient pas.** Le rendu cédait la place aux grands blocs
regroupés en supposant qu'ils étaient prêts — sans vérifier. Entre le moment où il cédait et celui où la
relève arrivait, personne ne dessinait. Le terrain reste maintenant à l'écran tant que son remplaçant
n'existe pas réellement.
**Les réglages avancés sont enfin mémorisés.** Les vingt-cinq interrupteurs revenaient à leur valeur par
défaut à chaque lancement du jeu. Ils sont désormais écrits dans la configuration, sous des noms lisibles.
---
## 📊 Pour les curieux : le journal mesure ce qu'il fait
Rien de visible en jeu. Toutes les trente secondes, le journal indique en moyenne par image : combien de
dessins pour les chunks proches, combien pour les blocs regroupés, combien pour les grands blocs, et
combien d'envois vers la carte graphique. La carte publie de son côté le taux de chunks réellement
disponibles.
Si vous rencontrez une chute d'images par seconde, ces relevés disent **où** ça se passe. Ce sont eux qui
ont permis de trouver la plupart des correctifs de cette version — et notamment de cesser d'accuser
l'affichage d'un défaut qui était sur le disque.
---
## 🐛 Signaler un problème
Le formulaire de retour collecte votre configuration et pose les questions qui font gagner du temps.
Tout y est facultatif, mais chaque champ rempli peut représenter des jours de recherche en moins.
# OmniGen 0.3.37.19-BETA
## 🕳️ Le défaut le plus visible du mod est corrigé : le terrain manquant sous les îles flottantes
Depuis des semaines, sous une île flottante, l'océan et le sol n'apparaissaient pas dans l'horizon
lointain : un trou dans le paysage, exactement à l'aplomb de ce qui flotte. Le défaut a résisté à sept
correctifs successifs — parce qu'ils portaient tous sur l'**affichage**, alors que la cause était dans la
**capture**.
Pour rester léger, OmniGen ne lit qu'une « coquille » de 40 blocs sous le sommet de chaque colonne : le
reste est de la pierre invisible, inutile à stocker. Mais sous une île flottante, ce sommet, c'est l'île.
Une île à y=200 faisait lire 160→200 — et **l'océan à y=63 n'était jamais lu**. On cherchait pourquoi une
surface ne se dessinait pas, alors qu'elle n'avait jamais été enregistrée.
Le mod lit désormais une **seconde fenêtre**, sous le vide, quand il en détecte un : le terrain caché est
capturé comme n'importe quel autre. La coquille garde tout son intérêt ailleurs.
Trois défauts distincts se cachaient derrière le même symptôme, et il a fallu les trois :
- la coquille ne descendait pas jusqu'au terrain réel ;
- le test qui décidait d'ouvrir la seconde fenêtre ne lisait **qu'un seul bloc**, juste sous la coquille.
Il fonctionnait pour les petites îles, et échouait pour toutes celles plus épaisses que 40 blocs — sous
lesquelles ce bloc est de la roche, pas du vide. Le mod sonde maintenant toute la hauteur qui sépare la
coquille de la mer ;
- enfin, quand une colonne contenait trop de tranches, seules les **douze plus hautes** étaient conservées
— c'est-à-dire l'île, et jamais le terrain qu'on venait à peine de lire. La surface du sol caché est
désormais protégée de cet élagage.
## 🔧 Et surtout : les mondes déjà explorés sont réparés
Un correctif de capture ne vaut que pour ce qui reste à capturer. Les mondes déjà parcourus — donc ceux de
tous ceux qui utilisent déjà le mod — auraient gardé leurs trous pour toujours.
Au démarrage, le serveur **relit ses données enregistrées et repère les chunks incomplets** à leur
signature : des colonnes dont la matière la plus basse flotte loin au-dessus du niveau de la mer, ce qui
n'arrive jamais sur du terrain ordinaire. Ces chunks sont marqués pour être recapturés, progressivement,
sans aucune action de votre part.
Le balayage tourne en tâche de fond, à débit strictement borné, et ne se déclenche **qu'une seule fois par
monde**. Il est aussi plafonné : un chunk en attente de recapture est un trou de plus à l'écran, donc mieux
vaut réparer par vagues que tout effacer d'un coup.
⚠️ **Honnêtement** : cette détection ne peut pas distinguer avec certitude un chunk mutilé d'un authentique
sommet de montagne très élevé — la donnée enregistrée ne dit nulle part ce qu'il y avait sous la coquille.
Quelques sommets seront donc recapturés pour rien. C'est un coût ponctuel, payé une fois, et de très loin
préférable à un paysage troué.
---
## 🗺️ Nouveauté : la carte en grand
La minimap de la 0.3.37.18 avait un successeur prévu. Le voici : **touche M** ouvre la carte en plein
écran.
- glisser à la souris pour se déplacer
- molette pour zoomer, de 1 à 16 chunks par pixel — de la parcelle au continent
- **R** pour revenir sur soi, **Échap** pour fermer
- coordonnées en blocs et échelle affichées en permanence
Elle est aussi accessible par un bouton dans les options d'OmniGen, et utilise **exactement le même moteur
de rendu que la minimap** : ce que montre l'une, l'autre le montre aussi. Deux implémentations d'une même
carte finissent toujours par diverger, et le jour où l'une afficherait faux, on ne saurait plus laquelle
croire.
Le déplacement est instantané : pendant le glissement, l'image est décalée plutôt que recalculée — c'est
ce que fait toute carte, on tire le papier, on ne le redessine pas à chaque centimètre. Le calcul n'a lieu
qu'au relâchement, et déborde de l'écran pour qu'un geste ample n'expose aucun bord.
> Le monde continue de tourner pendant que la carte est ouverte : ce n'est pas un écran de pause.
*Si vous utilisez déjà Xaero ou JourneyMap, la touche M est partagée — elle se réassigne dans les options
de commandes de Minecraft, rubrique OmniGen.*
---
## 🐛 Signaler un problème
Le formulaire de retour collecte votre configuration et pose les questions qui font gagner du temps.
Tout y est facultatif, mais chaque champ rempli peut représenter des jours de recherche en moins.
# OmniGen 0.3.37.18-BETA
## 🗺️ Nouveauté : la minimap
Une carte du terrain en haut à droite de l'écran, alimentée par les données que le mod possède déjà.
Un pixel = un chunk, nord en haut, avec un ombrage du relief pour qu'on reconnaisse un paysage plutôt
qu'une nappe de couleur. Elle utilise exactement les mêmes couleurs que l'horizon lointain : ce que vous
voyez sur la carte est ce que vous verrez en tournant la tête.
Activée par défaut, et **désactivable dans les options d'OmniGen** (à côté du compteur de FPS). Le choix
est mémorisé : si vous préférez une autre minimap, coupez-la une fois et elle ne reviendra pas.
---
## ⚡ Performances : le défaut qui coûtait le plus cher
Un profilage a montré que **16,7 % du temps de rendu** partait dans des recherches de table de hachage.
La cause tenait en une ligne : la manière de calculer la clé d'un chunk faisait atterrir tous les chunks
d'une même diagonale au même endroit de la table. Sur une carte d'un million et demi de chunks, cela
revenait à ranger 1,5 million d'entrées dans 2 048 cases — chaque consultation devait alors parcourir un
arbre de plusieurs centaines d'éléments, seize fois par image.
Après correction, ce coût tombe à **2,3 %**. Un profil de contrôle le confirme : la fonction la plus
lourde a purement disparu du classement.
Effet le plus net : **le jeu ne se dégrade plus au fil de la session.** L'ancien coût grandissait avec le
nombre de chunks en mémoire — plus vous jouiez longtemps, plus chaque recherche devenait lente. Ce n'était
donc pas la distance d'affichage qui pesait, c'était la durée de jeu.
---
## 🔁 Correction : le terrain qui disparaissait et réapparaissait
Certains joueurs voyaient une zone lointaine s'effacer puis revenir, environ toutes les trente secondes.
La cause : le régulateur de distance automatique **oscillait**. Il réduisait la distance de 15 %, la
remontait de 10 %, et recommençait toutes les trois secondes — un aller-retour complet prenant vingt à
quarante secondes. À chaque réduction, l'anneau extérieur sortait du rayon d'affichage ; à chaque remontée,
il revenait.
Pire : le rayon de libération de mémoire suivait cette valeur mouvante. Une baisse d'images passagère ne
masquait donc pas le terrain lointain, elle le **supprimait** — et la remontée retrouvait un vide qu'elle
avait elle-même créé, ce qui déclenchait une nouvelle réduction. La boucle s'alimentait toute seule.
Quatre verrous ont été posés, réunis sous l'option **Distance stable** (activée) :
- une marge de tolérance à l'affichage : le rayon décide de ce qu'on **fabrique**, plus de ce qu'on efface
- la libération de mémoire suit désormais **votre réglage**, pas la valeur du moment
- après chaque augmentation, un délai laisse le terrain neuf arriver avant tout nouveau jugement
- le plancher du régulateur ne peut plus dépasser votre propre réglage (une distance basse était ignorée)
Le régulateur écrit maintenant chacune de ses décisions dans le journal.
---
## 🧠 Serveur : mémoire
⚠️ **Cette version ne garantit pas la disparition des problèmes de mémoire signalés.** Elle supprime un
gaspillage réel et mesuré, mais l'ampleur du gain dépend beaucoup de la façon dont votre serveur est
utilisé. Les mesures ci-dessous viennent d'un serveur de test, pas du vôtre.
Ce qui a changé :
- un cache serveur conservait **800 octets par chunk, indéfiniment**, pour répondre à une simple question
par oui ou non. Ces données étaient envoyées aux clients puis plus jamais relues. Le cache est devenu une
simple liste de repères : **seize fois plus léger**, comportement identique.
- le même défaut de hachage que côté client s'appliquait au serveur. Il ne coûtait pas que du temps :
les tables dégénérées y consomment aussi davantage de mémoire.
- une structure interne ajoutée récemment grandissait sans limite avec la durée de jeu. Elle est
maintenant bornée et nettoyée périodiquement.
**Nouveau : le serveur rend compte de lui-même.** Toutes les cinq minutes, une ligne indique la mémoire
utilisée et le nombre d'éléments suivis par OmniGen, avec une alerte au-delà de 85 % du tas. Si vous
rencontrez une saturation, votre journal contiendra désormais les chiffres nécessaires — sans avoir à
refaire l'incident.
---
## 🐌 Nouvelle option : reconstruction paresseuse *(désactivée par défaut)*
Le terrain très lointain se reconstruisait aussi souvent que celui sous vos pieds, pour des changements
invisibles à cette distance. Cette option étire ce délai avec l'éloignement — le proche reste réactif, le
lointain se regroupe. Sur les mesures de test, cela divise le nombre d'envois vers la carte graphique par
2 à 4 selon la distance d'affichage.
Elle vise **les à-coups**, pas la moyenne d'images par seconde. À essayer si votre jeu est globalement
fluide mais entrecoupé de saccades.
Un compteur d'envois est écrit dans le journal toutes les trente secondes, option activée ou non, pour que
vous puissiez comparer vous-même.
---
## 🎨 Correctifs divers
- **L'eau s'affichait en gris sur la minimap.** La texture d'eau de Minecraft est en niveaux de gris — tout
son bleu vient d'une teinte appliquée au rendu, qu'un fluide ne permettait pas de retrouver.
- Le brouillard du terrain lointain ne revenait pas correctement à son état normal lorsque deux couches de
rendu se superposaient, ce qui pouvait assombrir excessivement la scène de nuit.
- Le serveur ne redemande plus indéfiniment un chunk que le client vient d'écarter.
- L'écran des options avancées se dispose désormais selon la taille de votre interface. Avec vingt et une
bascules, la grille figée à deux colonnes pouvait faire sortir la première rangée hors de l'écran aux
grandes échelles d'affichage — des réglages étaient présents mais invisibles.
---
## 🐛 Signaler un problème
Le formulaire de retour a été enrichi : il collecte désormais votre configuration automatiquement et pose
les questions qui font vraiment gagner du temps — notamment **avez-vous testé avec OmniGen seul ?**, qui
permet à elle seule de distinguer un défaut du mod d'un conflit entre mods.
Tout y est facultatif, mais chaque champ rempli peut représenter des jours de recherche en moins.
---
*Merci à **KorinMC** pour le premier signalement extérieur du projet. Il a mis au jour un problème qu'un
serveur de développement, redémarré sans cesse et généreusement doté en mémoire, ne pouvait structurellement
pas révéler.*
# OmniGen 0.3.37.17
Une version de performances et de correctifs visuels. Le terrain lointain est nettement plus fluide, et
plusieurs défauts d'affichage tenaces sont enfin réglés — dont les forêts qui s'affichaient en bois.
---
## Performances
**Le rendu du terrain lointain a été profondément optimisé.**
Le mod reconfigurait entièrement la carte graphique pour *chaque* morceau de terrain dessiné. Sur un
horizon qui en compte des centaines, l'essentiel du temps ne servait plus à dessiner mais à préparer.
Le shader n'est désormais appliqué qu'une fois par lot.
Mesuré sur une même scène, avant et après :
| | avant | après |
|---|---|---|
| durée d'image médiane | 3,7 ms | **1,5 ms** |
| pire image | 146 ms | **22 ms** |
Concrètement : la moyenne double et les à-coups disparaissent. C'est cette dernière ligne qui compte —
une image à 146 ms, c'est un blocage que l'œil perçoit.
---
## Correctifs d'affichage
**Les forêts s'affichaient en bois.** Certains feuillages moddés — les séquoias de Biomes O' Plenty en
particulier — n'étaient jamais enregistrés dans le terrain lointain. On voyait donc les troncs et les
branches, sans une feuille : des arbres nus, pris pour des colonnes de planches. La capture ne dépend
plus d'une liste de blocs et reconnaît tous les feuillages, moddés compris.
> Si vos forêts lointaines sont encore en bois après la mise à jour, c'est que votre serveur les a
> enregistrées avant le correctif. Supprimez le dossier `omnigen_voxelstore` du monde, serveur arrêté :
> il se remplira de nouveau, correctement.
**Le feuillage prenait la couleur du biome où vous vous trouviez.** Toutes les feuilles de l'horizon
partageaient une seule teinte, prise sous vos pieds — debout dans des badlands, les forêts lointaines
viraient au brun. Elles suivent maintenant le climat du terrain qu'elles occupent.
**Trou sous les îles flottantes.** Vues de dessous, elles n'étaient pas fermées. Le volume est
désormais clos sur son épaisseur réelle, et non à une profondeur fixe.
**Terrain lointain trop lumineux la nuit sous shaders.** Il s'assombrit maintenant avec le reste du
monde. Correctif partiel : le terrain lointain partage encore une seule valeur de lumière.
---
## Stabilité
**Perte possible du cache d'affichage lointain.** Se déconnecter pendant que le cache se rechargeait
écrasait le fichier complet par la portion déjà lue — silencieusement, et sans retour possible. La
sauvegarde attend désormais la fin du chargement.
**Régulation serveur.** Le garde-fou censé mettre en pause les tâches de fond ne se déclenchait
qu'*après* la chute de TPS, jamais avant : il lisait l'intervalle entre deux ticks, qui vaut 50 ms tant
que le serveur tient la cadence, quelle que soit sa charge. Il lit maintenant le temps de calcul réel.
Le rapport de diagnostic affiche également la charge et la marge restante.
---
## Outils (options avancées)
Un menu **Options avancées** enrichi, accessible en jeu, qui sert autant au diagnostic qu'à dépanner :
chaque mécanisme du terrain lointain a son interrupteur, avec une ligne d'explication.
**Audit des textures** — vérifie chaque type de bloc présent dans le terrain lointain : texture
résolue, texture cohérente avec le bloc, teinte appliquée, identifiant valide. Un rapport est écrit dans
`omnigen/diag/`. C'est cet outil qui a permis de nommer le défaut des séquoias.
**Diagnostic** — écrit sur disque le contenu réel du terrain lointain en mémoire, avec la table
complète des blocs.
**Système hybride** (expérimental, désactivé) — convertit le terrain lointain peint en terrain texturé.
Très coûteux en l'état ; sera réactivé quand la reconstruction par région sera incrémentale.
---
## Compatibilité
Minecraft 1.21.1 · NeoForge · compatible Iris, Sodium, Biomes O' Plenty, Terralith.
Aucune action requise à la mise à jour, sauf pour les mondes dont les forêts étaient déjà enregistrées
en bois (voir la note plus haut).