Crédits
Tout le code est de moi. LWSINTERP.C s’appuie sur l’implémentation d’Ernie Wright, le décodage JPEG sur la bibliothèque IJG, et le son sur FMOD de Firelight Technologies.
L’écran d’accueil Win32 et les icônes sont de Yoyo. Jylam a testé la version Linux X11, Med et f0st ont testé le reste, et Yoz, Xbarr et Fraa ont fourni des scènes LightWave de test — les mêmes personnes dont les scènes se sont retrouvées dans les démos.
jfyeNG est gratuit pour un usage non commercial.
Just For Your Eyes NG
jfyeNG est un lecteur de scènes construites sous Newtek LightWave 6.x et 7.x : on lui désigne un fichier .LWS, et il rejoue la scène en temps réel. C’est le moteur qui se trouve sous chacune des productions PlayStation 2 de Condense en 2002 — PS2Room, Monalisa, Evolution, Lobotomia — et, dans sa version Windows, sous Red Line l’année suivante. En avril 2003, j’ai sorti l’outil lui-même.
Les exécutables de l’archive ont été compilés le 20 mars 2003 et se présentent comme jfyeNG (c) Arnaud Storq 1998-2003 : la ligne de copyright remonte à cinq ans avant la sortie.
Plates-formes
La documentation en annonce trois, et dit de l’architecture qu’elle est « robuste, modulable et portable » :
- Win32 — 95, 98, Me, NT4, 2000 et XP, en deux versions, l’une passant par OpenGL et l’autre rendant en software
- Linux — X11, via Mesa
- PlayStation 2 — EE et GS seulement, pas de vector units
L’archive qui subsiste sur scene.org, remise en ligne en décembre 2012, ne contient plus que les deux versions Windows, l’archiveur, le précalculateur, le pack de démonstration et la documentation. Les couches Linux et PlayStation 2 sont sorties à l’intérieur des démos plutôt que sous forme d’exécutables téléchargeables.
Ce qu’il lisait d’une scène
La documentation ouvre son chapitre de compatibilité par un avertissement au lecteur : jfyeNG fait du rendu temps réel, donc évitez les fonctions avancées de LightWave. Voici ce qu’il lisait vraiment.
- Scène : taille, couleur du backdrop
- Objets : motion, dissolve, parent, null objects, deformation, morph mixer (endomorph), pivot point
- Lumières (versions accélérées matériellement uniquement) : lumières distant et rien d’autre, intensité, motion, couleur
- Caméra : motion, parent, zoom factor
- Surfaces, en nombre quelconque par objet : scrolling, gouraud, additive, double-sided, et le mapping —
- planar
- UV
- cubic
- cylindrical
- spherical
- environment, simulé
- Images : JPG, et TGA en 8, 16, 24 et 32 bits, raw ou packed
Gouraud, mapping et additive se combinent librement : une surface peut être en gouraud et en planar mapping à la fois.
Ce qu’il refusait
Une partie figure dans la documentation, le reste, le moteur vous le dit lui-même quand une scène échoue au chargement et que l’écran vire au rouge :
- les objets doivent être en LWO2, donc LightWave 6.x et au-delà — Error : %s is not a LWO2 file (LW 6.X+) !
- un seul layer par objet — Error : %s has more than 1 layer !
- ni NURBS ni bones — Error : %s has a bad polyCount definitions ! (Nurbs & Bones are not supported)
- le morphing ne fonctionne qu’avec les mappings planar et environment ; UV mapping et endomorph ensemble déclenchent un warning dans le log et sont ignorés
- les versions software et PlayStation 2 n’ont aucune lumière
- les textures doivent être en JPG ou en TGA
Textures défilantes
Il n’existe nulle part dans l’interface de paramètre de défilement. On met un mot-clé dans le nom du fichier de texture et le moteur va le lire là : SCUP pour le haut, SCDN pour le bas, SCLT pour la gauche, SCRT pour la droite. Une texture appelée TEXTURE_SCUP.TGA défile vers le haut.
Archives et précalcul
Deux outils compagnons accompagnent le lecteur, tous deux réservés à Windows.
jfyeNGArchiver rassemble scènes, objets, textures, fichiers de précalcul et audio dans un seul .JNG compressé. Une scène chargée depuis une archive ne transporte plus les chemins absolus de la machine sur laquelle elle a été construite, et c’est ce qui rend une démo distribuable — l’autre solution consistait à espérer que le spectateur ait son propre C:\LW\LWS\.
jfyeNGPrecacher parcourt une scène à l’avance et écrit un .PRK à côté d’elle, qui recense ce qu’il n’y aura jamais besoin de dessiner parce qu’autre chose le recouvre. Le lecteur récupère le fichier tout seul et écrit Precaching file found dans le log, puis (using precalculation) à l’écran.
La lecture
La fenêtre, c’est une playlist et une rangée de boutons : Add et Remove pour les scènes et les archives, Set LW path pour le Content directory de LightWave — il se comporte exactement comme celui de LightWave — Set audio file, une résolution parmi 320×240, 512×384, 640×480, 800×600 et 1024×768, et deux cases à cocher, Full-screen et Bilinear. Tout cela est retenu dans jfyeNG.ini, et tout ce qui se passe est écrit dans jfyeNG.log.
Le son passe par FMOD, généreux en formats : MOD, S3M, XM et IT, MIDI en .MID, .RMI et .SGT, WAV, MP2 et MP3, Ogg Vorbis, WMA et ASF.
Pendant qu’une scène est jouée, quatre touches font quelque chose :
- barre d’espace — passer à la scène suivante
- L — lines mode, la scène en fil de fer
- S — snapshot, écrit en TGA dans le répertoire courant
- T — l’affichage de contrôle, qui compte les frames, indique combien de triangles pour combien d’objets, et donne le nombre d’images par seconde
Quand la dernière scène de la playlist se termine, la playlist repart du début.
Le pack de démonstration
jfyeNGDemo.JNG est une archive de 3,2 Mo contenant douze scènes, et c’est un tour d’horizon assez juste de ce que le moteur savait faire. Cinq d’entre elles portent le nom d’un mode de mapping et ne montrent que cela — planar, spherical, cylindrical, cubic, environment — avec scroll pour les textures défilantes. Les autres sont du vrai travail : sallefeu, la salle en feu de Xbarr, celle à partir de laquelle PS2Room a été bâtie ; evolution, tirée de la démo de la ronde 7 ; hotpursuit, une Porsche et une BMW sur une route en boucle, roues modélisées séparément des carrosseries ; citrouille ; john ; et fresco, de loin la plus grosse, cent douze objets et textures pour un pont, une tour, une île, un papillon et un garde de l’Olympe.
Ce qui restait sur la liste
La documentation se termine par une liste de choses à faire, dans l’ordre de priorité de l’auteur, qui se lit aujourd’hui comme un compte rendu honnête de l’endroit où le moteur s’est arrêté :
gestion des bones · gestion correcte des lumières · un afficheur de bitmaps 2D pour les billboards · les particules · le triangle stripping · un dissolve correct, avec tri des faces en blending · les compressions LZW et RLE dans les fichiers .JNG · le lancement en économiseur d’écran · le retrait d’objets par bounding box · un packer LWO qui enlève les chunks inutilisés