Lucas Burdier
GitHub

Catch broken 3D assets before they reach your game.Repère les assets 3D cassés avant qu'ils n'arrivent dans ton jeu.

Open source · CLI · GitHub ActionOpen source · Ligne de commande · GitHub Action

Powered by the EasyUV enginePropulsé par le moteur EasyUV

EasyUV
Lint

UV overlaps, flipped faces, texel density, polycount, scale and naming, checked on your machine or on every pull request. OBJ, glTF, GLB and FBX.Chevauchements d'UV, faces retournées, densité de texels, polygones, échelle et noms, vérifiés sur ta machine ou à chaque pull request. OBJ, glTF, GLB et FBX.

easyuv-lint HTML report with UV previews

01 · What it checks01 · Ce qu'il vérifie

14 rules14 règles

Exact measurements from the EasyUV engine, not a low-resolution estimate. Every rule can be tuned or turned off.Des mesures exactes issues du moteur EasyUV, pas une estimation basse résolution. Chaque règle se règle ou se désactive.

uv.missing

Missing UVsUV manquantes

The object cannot be textured.L'objet ne peut pas être texturé.

errorerreur
uv.overlap

UV overlapsChevauchements d'UV

UV area covered twice, shown in red in the report.Surface UV couverte deux fois, en rouge dans le rapport.

max 1 %
uv.flipped

Flipped facesFaces retournées

Faces mirrored relative to their island.Faces en miroir par rapport à leur îlot.

max 0
uv.outside

Outside the tileHors de la tuile

UVs outside 0-1. Turn off for UDIMs.UV hors de 0-1. À désactiver pour les UDIM.

max 1 %
uv.distortion

DistortionDistorsion

Stretched angles and areas.Angles et aires étirés.

max 0.15
uv.density_spread

Even texel densityDensité de texels égale

Density that changes between islands.Densité qui change d'un îlot à l'autre.

max 30 %
uv.density

Texel density rangePlage de densité

px/m for your texture size.px/m pour ta taille de texture.

min · max
uv.score

UV scoreScore UV

Overall EasyUV score out of 100.Score EasyUV global sur 100.

min 60
mesh.tris

Triangle budgetBudget de triangles

Per object, set by the preset.Par objet, selon le préréglage.

max 100,000
mesh.degenerate

Degenerate facesFaces dégénérées

Collapsed or zero-area faces.Faces écrasées ou d'aire nulle.

max 0
mesh.nonmanifold

Non-manifold edgesArêtes non-manifold

Edges shared by more than two faces.Arêtes partagées par plus de deux faces.

max 0
mesh.scale

ScaleÉchelle

Catches a crate exported in centimetres.Repère une caisse exportée en centimètres.

0.01 → 100 m
mesh.ngons

N-gonsN-gones

Faces with more than four sides.Faces de plus de quatre côtés.

off
name.pattern

NamingNommage

Names that break your convention.Noms qui ne respectent pas ta convention.

regex

02 · Quick start02 · Démarrage rapide

Three ways
to use it
Trois façons
de l'utiliser

01

GitHub Action

Annotations on the faulty files, a job summary and the HTML report as an artifact.Annotations sur les fichiers fautifs, résumé du job et rapport HTML en artefact.

# .github/workflows/assets.yml
on: [push, pull_request]
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: lburdier/easyuv-lint@v0
        with:
          paths: Assets/Models
          preset: game
02

Command lineLigne de commande

One binary for Windows, Linux and macOS.Un seul exécutable pour Windows, Linux et macOS.

easyuv-lint Assets/Models
easyuv-lint hero.fbx --preset mobile
easyuv-lint . --html report.html
easyuv-lint . --format json
easyuv-lint . --lang fr
03

Your own rulesTes propres règles

An easyuv-lint.toml at the root of the repository.Un easyuv-lint.toml à la racine du dépôt.

preset = "game"
texture_size = 2048
ignore = ["ThirdParty/"]

[rules]
"uv.overlap" = { level = "error", max = 0.5 }
"uv.density" = { min = 512, max = 1024 }
"mesh.tris" = { max = 25000 }

03 · Presets03 · Préréglages

One budget
per target
Un budget
par cible

PresetTrianglesTrianglesTextureAlsoEn plus
game100,000100 0002048 pxThe defaultsLes valeurs par défaut
mobile15,00015 0001024 pxTexel density 256 to 1024 px/m, n-gons warnedDensité de 256 à 1024 px/m, n-gones signalés
web50,00050 0002048 pxthree.js and other glTF viewersthree.js et les autres visionneuses glTF
filmNo limitSans limite2048 pxMore tolerant on distortion and scorePlus tolérant sur la distorsion et le score

04 · Why easyuv-lint04 · Pourquoi easyuv-lint

Built for
pipelines
Pensé pour
les pipelines

ExactExact

The same metrics EasyUV uses to unwrap: distortion, overlaps, flips, density.Les mêmes mesures qu'EasyUV utilise pour déplier : distorsion, chevauchements, faces retournées, densité.

Every formatTous les formats

OBJ, glTF, GLB and FBX, with the UVs already in the file.OBJ, glTF, GLB et FBX, avec les UV déjà présentes dans le fichier.

VisualVisuel

An HTML report with a UV preview of every object, problems in red.Un rapport HTML avec l'aperçu des UV de chaque objet, les problèmes en rouge.

FreeGratuit

Open source under GPL-3.0. Contributions welcome, in English or French.Open source sous GPL-3.0. Contributions bienvenues, en anglais ou en français.