promotional bannermobile promotional banner

OmniGen

Server-side chunk pregeneration and a real-block far terrain renderer (LOD) that keeps your TPS and FPS stable, in singleplayer and multiplayer.
Back to Files

omnigen-v0.3.37.24-mc1.21.1-0.3.37.24.jar

File nameomnigen-v0.3.37.24-mc1.21.1-0.3.37.24.jar
Uploader
ZAurel360ZAurel360
Uploaded
Sep 26, 2026
Downloads
7
Size
758.1 KB
Mod Loaders
NeoForge
File ID
8982430
Type
B
Beta
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:omnigen-1713060:8982430"

Learn more about Curse Maven

What's new

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.

This mod has no related projects