ParaLOD is a BepInEx plugin for Paralives that makes high poly modded assets stop wrecking performance, and gives players and modders the measurement tools the game does not provide.
Creator: infinition Target Game: Paralives Early Access (BepInEx 5.4+)
Paralives hands the same mesh to the renderer and to the MeshCollider. That is harmless for base game content, whose median is 268 triangles. It is ruinous for imported assets.
Measured on a real modded lot, same save, same camera, only the fix toggled:
| State | Median frame rate | Stutters |
|---|---|---|
| Without ParaLOD | 7.6 fps | 53 frames between 50 and 200 ms |
| With ParaLOD | 333.9 fps | none, worst frame 5 ms |
Forty four times faster, in plain gameplay, with no stress test involved.
Left: collider fix disabled. Right: the same lot with it enabled.
ParaLOD swaps in a simplified collision mesh above a triangle threshold, computed once and cached on disk. A 3,128,969 triangle temple ends up with a 2,214 triangle collider, 0.1 percent of the original.
Rendering is never touched, so your asset looks exactly the same. Clicking still works, because a decimated mesh keeps the shape rather than wrapping it in a convex blob.
This runs on its own. There is nothing to type.
A full day of measurement went into this plugin, and most of it disproved the obvious answers. On a scene of 2,222 objects:
| Lever | Gain |
|---|---|
| Removing 6.7 million triangles from rendering | +1.5 % |
| Turning off all shadows | 0 % |
| Rendering at a quarter of the resolution | +2 % |
| Disabling all 2,306 colliders | 0 % |
| Not drawing the objects at all | 12.9 ms down to 3.0 ms |
Triangles, shadows and pixels are nearly free in this game. What costs is the act of drawing each object, roughly 4.2 microseconds per renderer, which is draw call and material state change territory.
This is why a classic level of detail system would not help. Swapping a mesh for a lighter one still issues the same draw call. That is also why the culling feature below is marked experimental rather than sold as a miracle.
Press CTRL + SHIFT + C in-game to open the cheat console. Every command starts with paralod and appears in the autocompletion. Both forms work: paralodfps and paralod fps.
| Command | Action |
|---|---|
paralod |
Current state of everything. |
paralodhelp |
What each command is for, when and why. paralodhelp cull for details on one. |
paralodcolliders [on|off] |
Collider simplification stats, and its on and off switch. |
paralodfps [reset] |
Median frame rate and stutter count. |
paralodheavy [n] |
Heaviest meshes currently drawn, and their share of the total. |
paralodscene |
Renderers, triangles, breakdown by type and by size. |
paralodmem [n] |
Texture and managed memory, largest textures first. |
paralodimport |
Where asset import time actually goes. |
paralodcull [on|off|<threshold>] |
Hides objects too small on screen. (Experimental) |
paralodprobe <mode> |
Isolates one cost so you can measure it. (Experimental) |
paraloddebug [n] |
Per object culling numbers, for tuning the threshold. |
Console output follows the language selected in Paralives. English by default, French when the game runs in French.
Warning
Experimental features: paralodcull and paralodprobe are experimental. Culling is a real tradeoff, not free performance, and probes deliberately alter the game to measure it. Probes revert on their own after 60 seconds so a forgotten one never leaves the game in a broken state, and paralodprobe rescue repairs anything left behind.
Tip
Do not trust benchmarkfps. The game's own benchmark averages over fifteen seconds, so a single long frame makes it report 11 fps while the game is genuinely running at 400. That single trap produced four wrong diagnoses during this plugin's development. It also never returns while the game is paused, because it counts down with Time.deltaTime.
Use paralodfps instead. It separates the two things an average blends together:
- A low median means a slow game.
- A high median with many stutters means a game that hitches, which is a completely different problem with completely different causes.
Typical workflow: paralodfps reset, wait ten seconds without touching anything, then paralodfps.
paralodcull hides objects that became too small on screen, which removes draw calls. On a 2,222 object lot it took the frame rate from 77 to 104 fps at a threshold of 0.02.
That gain came at a price: more than half the visible objects were hidden. This is a genuine tradeoff, which is why it ships disabled by default. Turn it on, look at your own screen, and decide.
The threshold is a fraction of screen height. 0.02 is about 21 pixels at 1080p. Above 0.03 the popping becomes obvious.
- Base game content is untouched. With the default 20,000 triangle threshold, nothing in Paralives itself qualifies. Its heaviest furniture mesh sits around 16,500 triangles. Only modded assets are affected.
- First contact costs time. The very first time a heavy mesh is encountered, its simplification runs on the main thread. Measured 1,127 ms for a 3.1 million triangle temple. It is paid once ever, then read from disk.
- Asset import is out of reach. Importing a large FBX takes tens of seconds, and 93 percent of that is TriLib parsing the source file. No mod can change it.
paralodimportshows the split. - Rendering is not optimised. ParaLOD does not reduce the triangles your assets draw, because measurement showed that gains nothing here.
- Download
BepInEx_win_x64_5.4.23.x.zipfrom BepInEx Releases. - Open your Paralives game folder (In Steam: right-click Paralives > Manage > Browse local files).
- Extract everything directly into the root Paralives folder (alongside
Paralives.exe). - Launch Paralives once to generate the BepInEx folders, then exit.
- Download
ParaLOD.zipfrom the Releases page. - Extract
ParaLOD.dllinto your BepInEx plugins directory:Paralives/BepInEx/plugins/ParaLOD/ParaLOD.dll - Launch Paralives. The collider fix is already working.
- Open the console with
CTRL+SHIFT+Cand typeparalodhelp.
Options live in BepInEx/config/infinition.paralives.paralod.cfg:
| Setting Key | Default | Description |
|---|---|---|
Colliders / Enabled |
true |
Replaces the collision mesh of heavy assets with a simplified one. |
Colliders / ThresholdTriangles |
20000 |
Collision meshes above this count get simplified. |
Colliders / TargetTriangles |
2000 |
Triangle count aimed for. Higher means more faithful picking and heavier physics. |
Culling / Enabled |
false |
Experimental screen size culling. |
Culling / ScreenSize |
0.02 |
Screen height fraction below which an object stops being drawn. |
Culling / EvaluationsPerFrame |
400 |
Objects re-evaluated per frame, using a circular walk. |
Culling / RescanSeconds |
2 |
Delay between sweeps looking for newly placed objects. |
Diagnostics / ProbeAutoRestoreSeconds |
60 |
Delay after which a diagnostic probe reverts on its own. |
The simplified collision meshes are cached in
AppData/LocalLow/Paralives/Paralives/ParaLOD/collision/. Deleting that folder simply makes them recompute.
Tip
ParaForge, a Blender extension that validates 3D models against Paralives rules, builds texture maps, and exports ready to use .mod packages.
ParaReload, hot-reloads mod assets in game without restarting.
For the measurement methodology, the mesh simplification algorithm and how to build the C# project, see the Technical Details Documentation.
ParaLOD est un plugin BepInEx pour Paralives qui empêche les assets de mods très détaillés de ruiner les performances, et fournit aux joueurs comme aux moddeurs les outils de mesure que le jeu ne propose pas.
Créateur : infinition Cible : Paralives Early Access (BepInEx 5.4+)
Paralives donne le même maillage au renderer et au MeshCollider. Sans conséquence pour le contenu du jeu, dont la médiane est de 268 triangles. Ruineux pour un asset importé.
Mesuré sur un terrain de mod réel, même sauvegarde, même caméra, seul le correctif change :
| État | Cadence médiane | À coups |
|---|---|---|
| Sans ParaLOD | 7,6 img/s | 53 images entre 50 et 200 ms |
| Avec ParaLOD | 333,9 img/s | aucun, pire image 5 ms |
Quarante quatre fois plus rapide, en jeu normal, sans le moindre test de résistance.
À gauche, correctif désactivé. À droite, le même terrain avec le correctif actif.
ParaLOD substitue un maillage de collision simplifié au delà d'un seuil de triangles, calculé une seule fois et conservé sur le disque. Un temple de 3 128 969 triangles se retrouve avec un collider de 2 214 triangles, soit 0,1 pour cent de l'original.
Le rendu n'est jamais touché, ton asset a exactement la même apparence. Le clic reste juste, car un maillage décimé conserve la forme au lieu de l'envelopper dans une bulle convexe.
Tout cela fonctionne seul. Il n'y a rien à taper.
Une journée entière de mesure a nourri ce plugin, et l'essentiel a servi à démolir les réponses évidentes. Sur une scène de 2 222 objets :
| Levier | Gain |
|---|---|
| Retirer 6,7 millions de triangles du rendu | +1,5 % |
| Couper toutes les ombres | 0 % |
| Diviser la résolution par quatre | +2 % |
| Désactiver les 2 306 colliders | 0 % |
| Ne plus dessiner les objets du tout | 12,9 ms à 3,0 ms |
Les triangles, les ombres et les pixels ne coûtent presque rien dans ce jeu. Ce qui coûte, c'est le fait même de dessiner chaque objet, environ 4,2 microsecondes par renderer, ce qui relève de l'appel de dessin et du changement d'état de matériau.
C'est pour cette raison qu'un système de LOD classique n'aiderait pas. Échanger un maillage contre un plus léger émet toujours le même appel de dessin. C'est aussi pour cette raison que le masquage ci dessous est marqué expérimental plutôt que vendu comme un miracle.
Appuie sur CTRL + MAJ + C en jeu pour ouvrir la console. Toutes les commandes commencent par paralod et apparaissent dans l'autocomplétion. Les deux formes fonctionnent : paralodfps et paralod fps.
| Commande | Action |
|---|---|
paralod |
État courant de tout. |
paralodhelp |
À quoi sert chaque commande, quand et pourquoi. paralodhelp cull pour le détail. |
paralodcolliders [on|off] |
Statistiques du correctif de collision, et son interrupteur. |
paralodfps [reset] |
Cadence médiane et comptage des à coups. |
paralodheavy [n] |
Maillages les plus lourds actuellement dessinés, et leur part du total. |
paralodscene |
Renderers, triangles, ventilation par type et par taille. |
paralodmem [n] |
Mémoire de textures et mémoire gérée, les plus grosses d'abord. |
paralodimport |
Où part réellement le temps d'import des assets. |
paralodcull [on|off|<seuil>] |
Masque les objets trop petits à l'écran. (Expérimental) |
paralodprobe <mode> |
Isole un coût pour le mesurer. (Expérimental) |
paraloddebug [n] |
Chiffres de masquage objet par objet, pour régler le seuil. |
Les retours de commande suivent la langue choisie dans Paralives. Anglais par défaut, français quand le jeu est en français.
Warning
Fonctionnalités expérimentales : paralodcull et paralodprobe sont expérimentales. Le masquage est un vrai compromis, pas un gain gratuit, et les sondes modifient délibérément le jeu pour mesurer. Elles se restaurent seules au bout de 60 secondes pour qu'un oubli ne laisse jamais le jeu cassé, et paralodprobe rescue répare ce qui traînerait encore.
Tip
Ne fais pas confiance à benchmarkfps. Le benchmark du jeu moyenne sur quinze secondes, donc une seule image longue lui fait afficher 11 img/s alors que le jeu tourne réellement à 400. Ce seul piège a produit quatre diagnostics faux pendant le développement de ce plugin. Il ne rend d'ailleurs jamais la main quand le jeu est en pause, puisqu'il décompte avec Time.deltaTime.
Utilise paralodfps. Il sépare les deux choses qu'une moyenne mélange :
- Une médiane basse signifie un jeu lent.
- Une médiane haute avec beaucoup d'à coups signifie un jeu qui hoquette, ce qui est un problème complètement différent, aux causes complètement différentes.
Méthode type : paralodfps reset, attendre dix secondes sans rien toucher, puis paralodfps.
paralodcull masque les objets devenus trop petits à l'écran, ce qui supprime des appels de dessin. Sur un terrain de 2 222 objets, la cadence est passée de 77 à 104 img/s au seuil 0,02.
Ce gain a un prix : plus de la moitié des objets visibles étaient masqués. C'est un vrai compromis, et c'est pourquoi la fonction est livrée désactivée par défaut. Active la, regarde ton écran, et décide.
Le seuil est une fraction de la hauteur d'écran. 0,02 vaut environ 21 pixels en 1080p. Au delà de 0,03 la disparition se voit.
- Le contenu du jeu n'est pas touché. Avec le seuil par défaut de 20 000 triangles, rien dans Paralives ne qualifie. Son mobilier le plus lourd plafonne autour de 16 500 triangles. Seuls les assets de mods sont concernés.
- Le premier contact coûte du temps. À la toute première rencontre d'un maillage lourd, sa simplification tourne sur le thread principal. Mesuré à 1 127 ms pour un temple de 3,1 millions de triangles. C'est payé une seule fois, ensuite c'est lu du disque.
- L'import d'assets est hors de portée. Importer un gros FBX prend des dizaines de secondes, dont 93 pour cent passés dans TriLib à parser le fichier source. Aucun mod ne peut y toucher.
paralodimportmontre la répartition. - Le rendu n'est pas optimisé. ParaLOD ne réduit pas les triangles dessinés par tes assets, parce que la mesure a montré que cela ne rapporte rien ici.
- Téléchargez
BepInEx_win_x64_5.4.23.x.zipdepuis Releases BepInEx. - Ouvrez le dossier du jeu (Dans Steam : clic droit sur Paralives > Gérer > Parcourir les fichiers locaux).
- Extrayez tout directement à la racine de Paralives, à côté de
Paralives.exe. - Lancez Paralives une fois pour créer les dossiers BepInEx, puis fermez le jeu.
- Téléchargez
ParaLOD.zipdepuis la page des Releases. - Extrayez
ParaLOD.dlldans votre dossier de plugins BepInEx :Paralives/BepInEx/plugins/ParaLOD/ParaLOD.dll - Lancez Paralives. Le correctif de collision fonctionne déjà.
- Ouvrez la console avec
CTRL+MAJ+Cet tapezparalodhelp.
Les options sont dans BepInEx/config/infinition.paralives.paralod.cfg :
| Clé | Défaut | Description |
|---|---|---|
Colliders / Enabled |
true |
Remplace le maillage de collision des assets lourds par une version allégée. |
Colliders / ThresholdTriangles |
20000 |
Les maillages de collision au dessus de ce seuil sont simplifiés. |
Colliders / TargetTriangles |
2000 |
Nombre de triangles visé. Plus haut donne un clic plus fidèle et une physique plus coûteuse. |
Culling / Enabled |
false |
Masquage expérimental par taille à l'écran. |
Culling / ScreenSize |
0.02 |
Fraction de hauteur d'écran sous laquelle un objet cesse d'être dessiné. |
Culling / EvaluationsPerFrame |
400 |
Objets réévalués par image, en parcours circulaire. |
Culling / RescanSeconds |
2 |
Intervalle entre deux recensements des objets posés. |
Diagnostics / ProbeAutoRestoreSeconds |
60 |
Délai au bout duquel une sonde se restaure toute seule. |
Les maillages de collision simplifiés sont conservés dans
AppData/LocalLow/Paralives/Paralives/ParaLOD/collision/. Supprimer ce dossier les fait simplement recalculer.
Tip
ParaForge, une extension Blender qui valide vos modèles 3D selon les règles de Paralives, génère les textures et exporte des packages .mod prêts à l'emploi.
ParaReload, qui recharge les assets de mods en jeu sans redémarrer.
Pour la méthode de mesure, l'algorithme de simplification et la compilation du projet C#, consultez la Documentation Technique (en anglais).
