Format 3D Nexus

Nexus 3D

Fichiers .nxset .nxz.

Outils

nxsbuild

Usage typique

nxsbuild -r 16384 -c "<input file>.obj" -o "<output_file>.nxs"

Encodage KTX: Les textures doivent être de taille multiples de 4!

####Options utiles

  • -c : supprime les « vertex color ». Dans le cas contraire elles sont gardées même si elles sont redondantes avec les textures
  • -F : Importance relative des textures dans le poids des nodes (0.05)
  • -r : RAM autorisée en MB. 2000 par défaut.
  • -C : centre le modèle. Utile pour les modèles géoréférencés
  • -f : nombre de faces par patch (32768)
  • -t : nombre de faces pour le noeud racine (4096)
  • -q : qualité d’encodage des JPEG (95)

Recommandations

Donner une valeur élevée à -r, mais inférieure au total du système. Changer -f et -t quand les résultats initiaux sont mauvais (voir ci-dessous). si les images sources sont déjà en JPEG, laisser -q à 90-95. Si c’est des PNG (ou BMP, TIFF, WEBP-lossless), 75-85 sera généralement plus approprié.

Idéalement on cherche une taille de node ≈1MB. Si les nodes sont de taille très inégale, on peut changer la valeur de -F.

nxscompress

nxscompress "<input_file>.nxs" -o "<output_file>.nxz"

nxsedit

Pour analyser les fichiers .nxs et .nxz.

nxsedit --info "<fichier>" # statistiques générales
nxsedit -n "<fichier>" # statistiques des nodes
nxsedit -q "<fichier> # statistiques des patches
nxsedit -d "<fichier> # forme du DAG

Le format est moyennement lisible d’une part, et omet les informations de texture d’autre part. Il est en revanche assez facile de scripter un parser qui pourra récupérer davantage d’informations.

Compiler les outils

# Debian 13, from scratch
sudo apt-get install -y build-essential cmake ninja-build git \
    qt6-base-dev libglew-dev libglu1-mesa-dev mesa-common-dev

git clone --recurse-submodules https://github.com/cnr-isti-vclab/nexus.git
git clone --branch devel https://github.com/cnr-isti-vclab/vcglib.git   # sibling of nexus
cd nexus

# CLI tools only (known-good on Qt6):
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_NXS_VIEW=OFF
cmake --build build

Faire une scène de démo

Depuis la branche de test de voyager: npm run build-prod, puis faire une archive:

Créer un fichier index.html:

<!doctype html>
<html>
<head>
        <meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
        <title>Voyager Explorer 0.62.0 NEXUS</title>
        <style>
                body {
                        background: #303030;
                }
        </style>
        <script defer="defer" src="./dist/js/voyager-explorer.min.js"></script>
</head>
<body>
        <voyager-explorer root="." document="scene.svx.json" resourceRoot="./dist/"></voyager-explorer>
</body>
</html>
scenes/
+-- my_scene/
|   +-- dist/ # dossier "dist" de voyager
|   +-- index.html
|   +-- scene.svx.json
|   +-- my_model.nxz

Encodage KTX des textures

nxs_ktx2.mjs (5,5 Ko)

Améliorations souhaitées

Textures:

  • format explicite (mime)
  • Taille explicite (octets, au minimum. Dimensions?)
    Matériaux:
  • Paramètres (metalic, specular), maps?
  • Variantes?