Accueil / FAQ
FAQ — problèmes courants
Les situations les plus fréquentes rencontrées à la compilation, au lancement et au rendu, avec les messages exacts émis par le moteur et la marche à suivre.
Aucun renderer / interface ne se charge
Les plugins .so sont recherchés dans le dossier ./plugins relatif au
répertoire courant, et non à l’emplacement de l’exécutable. Si vous lancez le
programme depuis un autre dossier, ce chemin n’existe pas et aucun renderer ni interface n’est
chargé. Lancez toujours le binaire depuis la racine du projet :
cd /chemin/vers/raytracer_V2
./raytracer tests/configs/subject.json
Si ./plugins est absent ou vide, (re)compilez avec make : la compilation
produit à la fois ./raytracer et les plugins .so dans ./plugins.
Un chargement correct affiche sur la sortie standard :
Loaded 2 renderer plugin(s)
Le nombre annoncé correspond aux plugins effectivement trouvés dans
./plugins. S’il indique 0, c’est que le dossier est vide ou introuvable
depuis le répertoire de lancement.
« Failed to load font »
L’interface graphique charge sa police depuis assets/font.ttf par un
chemin relatif. Ce message apparaît lorsque le programme est lancé depuis un
dossier où assets/ n’existe pas. La solution est identique à celle des plugins :
lancez le programme depuis la racine du projet, là où se trouvent
assets/ et plugins/.
« Setting vertical sync not supported »
Il s’agit d’un message informatif de SFML, sans conséquence sur le rendu. Il est fréquent sous WSL, où l’affichage OpenGL passe par un rendu logiciel (Mesa/llvmpipe) qui ne gère pas la synchronisation verticale. Vous pouvez l’ignorer : l’image s’affiche et se rend normalement.
Un rapport « LeakSanitizer: detected memory leaks » à la fermeture
Le projet est compilé avec AddressSanitizer (-fsanitize=address dans le
Makefile), qui embarque un détecteur de fuites (LeakSanitizer) exécuté automatiquement
à la fermeture du programme.
Si le rapport pointe des adresses <unknown module> issues de calloc,
sans aucune image de la pile appartenant au code du projet, il s’agit d’une petite
allocation unique du pilote graphique Mesa/swrast (rendu logiciel sous WSL),
extérieure au moteur. Ces allocations de pilote ne sont pas symbolisées et ne
peuvent donc pas être filtrées par nom de fonction.
Pour n’auditer que les fuites du code applicatif — qui, elles, doivent être nulles — lancez un rendu en mode headless : il n’ouvre aucun contexte graphique, donc aucune allocation du pilote n’intervient.
# Audit des fuites du moteur (sans interface graphique)
ASAN_OPTIONS=detect_leaks=1 ./raytracer -r sortie.png scene.json
Pour une session graphique, vous pouvez désactiver uniquement le rapport de fuites afin de ne pas être gêné par l’allocation du pilote :
# Désactiver le rapport de fuites pour une session graphique
ASAN_OPTIONS=detect_leaks=0 ./raytracer scene.json
detect_leaks=0 ne désactive que le détecteur de
fuites. Les autres vérifications d’AddressSanitizer (use-after-free, débordements de tampon,
double-free…) restent actives dans tous les cas.
« object "…" : … » ou « Missing camera / objects »
Le SceneParser signale les problèmes du fichier de scène sur la sortie d’erreur. Les
messages structurants sont notamment :
| Message | Cause |
|---|---|
Missing camera section | La section camera est absente du JSON. |
Missing objects section | La section objects est absente du JSON. |
Missing camera resolution | La caméra n’a pas de clé resolution. |
Camera resolution must be [width, height] | resolution n’est pas un tableau de 2 nombres. |
Missing camera fov | La caméra n’a pas de clé fieldOfView. |
Missing object type | Un objet n’a pas de clé type (chaîne). |
object "…": Unknown or incomplete object definition | Le type est inconnu ou les champs requis manquent. |
Vérifiez donc que :
- le fichier est un JSON valide et porte l’extension
.json(sinonINVALID_FILE_EXTENSION) ; - les sections
cameraetobjectssont présentes ; - la caméra fournit
resolution([largeur, hauteur]) etfieldOfView, qui sont obligatoires ; - chaque objet possède un
typevalide (voir la liste des types).
Les clés inconnues d’un objet sont silencieusement ignorées :
le parseur ne traite que les champs qu’il connaît. Un paramètre mal orthographié (ex.
normal au lieu de axis pour un plan) ne provoque donc aucune erreur :
l’objet prend simplement ses valeurs par défaut.
Mon matériau ne s’applique pas
Un objet référence un matériau par son nom
("material": "Mon matériau"). Ce nom doit correspondre exactement à une
entrée name de la section materials. Dans le cas contraire, le parseur émet
sur la sortie d’erreur :
object "…" material: Unknown material "…"
et l’objet est ignoré. Vérifiez l’orthographe et la casse du nom, et que le matériau est bien déclaré
dans materials avant d’être référencé.
Les objets métalliques ou en verre paraissent très sombres
Le moteur ne dispose pas d’environnement (skybox) : un matériau très réfléchissant ou transparent renvoie donc principalement du « vide » sombre là où il n’y a ni géométrie ni lumière à réfléchir ou à réfracter. Deux remèdes :
- ajoutez de la géométrie et des lumières autour de l’objet, pour lui donner quelque chose à réfléchir ;
- ou réduisez
reflectivity/transparencydu matériau pour un rendu plus lisible.
« --render cannot be combined with --server » et autres erreurs d’options
Certaines options de la ligne de commande sont mutuellement exclusives. Les messages exacts émis sur la sortie d’erreur sont :
| Message | Cause |
|---|---|
Error: --render (headless) cannot be combined with --server or --connect. | Le mode headless (-r/--render) ne peut pas être combiné avec le cluster. |
Error: --server and --connect cannot be used together. | --server et --connect sont exclusifs. |
Error: --connect requires an IP address and a PORT. | --connect attend deux arguments : IP puis PORT. |
Error: unknown option '…'. Use --help for usage. | Option non reconnue. |
Utilisez --help pour afficher l’usage complet et les exemples.
Fenêtres / interface sous WSL
Sous WSL, l’interface rend le fenêtrage thread-safe (XInitThreads) et
force le rendu OpenGL logiciel afin de supporter plusieurs fenêtres (pop-ups) sans
planter. Si l’interface ne s’ouvre pas :
- assurez-vous que WSLg (ou un serveur X) est disponible ;
- vérifiez que la variable
DISPLAYest bien définie.
Un maillage .obj ne se charge pas
Vérifiez que le chemin de la clé file est correct par rapport au répertoire d’où
vous lancez le programme, et non par rapport au fichier de scène : un chemin relatif
est résolu depuis le répertoire courant. Des maillages d’exemple sont fournis dans
tests/obj/.
À l’import, les faces sont triangulées et un BVH local est construit pour le maillage ; pour de très gros modèles, cette première construction peut prendre un instant.