Produktion

JfyeNG

Herunterladen 2003_jfyeng.zip

Mitwirkende

Der gesamte Code stammt von mir. LWSINTERP.C beruht auf Ernie Wrights Umsetzung, die JPEG-Dekodierung auf der IJG-Bibliothek und der Ton auf FMOD von Firelight Technologies.

Der Win32-Startbildschirm und die Symbole stammen von Yoyo. Jylam hat den Linux-X11-Build betagetestet, Med und f0st den Rest, und Yoz, Xbarr und Fraa haben LightWave-Testszenen beigesteuert — dieselben Leute, deren Szenen in die Demos gingen.

jfyeNG ist für die nichtkommerzielle Nutzung frei.

Just For Your Eyes NG

jfyeNG ist ein Abspieler für Szenen, die in Newtek LightWave 6.x und 7.x gebaut wurden: Man zeigt ihm eine .LWS-Datei, und er gibt die Szene in Echtzeit wieder. Es ist die Engine unter jeder PlayStation-2-Produktion von Condense aus dem Jahr 2002 — PS2Room, Monalisa, Evolution, Lobotomia — und, in ihrer Windows-Gestalt, hinter Red Line im Jahr darauf. Im April 2003 habe ich das Werkzeug selbst veröffentlicht.

Der Startbildschirm: die Buchstaben JFYE aus Eis und Stein geschnitten, darunter Next Generation
Der Startbildschirm in 320×200, gezeichnet von Yoyo, von dem auch die Symbole stammen.

Die ausführbaren Dateien im Archiv wurden am 20. März 2003 gebaut und unterschreiben sich mit jfyeNG (c) Arnaud Storq 1998-2003: Die Copyright-Zeile reicht fünf Jahre vor die Veröffentlichung zurück.

Plattformen

Die Dokumentation nennt drei und behauptet von der Architektur, sie sei „robust, modulierbar und portabel“:

  • Win32 — 95, 98, Me, NT4, 2000 und XP, in zwei Builds, einem über OpenGL und einem mit Software-Rendering
  • Linux — X11, über Mesa
  • PlayStation 2 — nur EE und GS, keine Vector Units

Das Archiv, das auf scene.org überlebt hat, im Dezember 2012 erneut hochgeladen, enthält nur die beiden Windows-Builds, den Archivierer, den Precacher, das Demopaket und die Dokumentation. Die Schichten für Linux und PlayStation 2 gingen in den Demos hinaus statt als ausführbare Dateien, die sich jeder hätte herunterladen können.

Was es aus einer Szene übernahm

Die Readme eröffnet ihren Abschnitt zur Kompatibilität mit einer Warnung an den Leser: jfyeNG rendert in Echtzeit, also bitte keine fortgeschrittenen Teile von LightWave benutzen. Gelesen wurde Folgendes.

  • Szene: Größe, Hintergrundfarbe
  • Objekte: Bewegung, Dissolve, Parent, Null-Objekte, Verformung, Morph Mixer (Endomorph), Drehpunkt
  • Lichter (nur in den hardwarebeschleunigten Builds): ausschließlich Distant Lights, Intensität, Bewegung, Farbe
  • Kamera: Bewegung, Parent, Zoomfaktor
  • Oberflächen, beliebig viele je Objekt: Scrolling, Gouraud, additiv, doppelseitig, und Mapping —
    • planar
    • UV
    • kubisch
    • zylindrisch
    • sphärisch
    • Environment, vorgetäuscht
  • Bilder: JPG sowie TGA mit 8, 16, 24 und 32 Bit, roh oder gepackt

Gouraud, Mapping und additiv lassen sich frei kombinieren: Eine Oberfläche kann gleichzeitig gouraud-schattiert und planar gemappt sein.

Was es nicht tat

Ein Teil davon steht in der Dokumentation, den Rest sagt einem die Engine selbst, wenn eine Szene nicht lädt und der Bildschirm rot wird:

  • Objekte müssen LWO2 sein, also LightWave 6.x und höher — Error : %s is not a LWO2 file (LW 6.X+) !
  • eine Ebene je Objekt — Error : %s has more than 1 layer !
  • keine NURBS und keine Bones — Error : %s has a bad polyCount definitions ! (Nurbs & Bones are not supported)
  • Morphing funktioniert nur mit planarem und Environment-Mapping; UV-Mapping und ein Endomorph zusammen schreiben eine Warnung ins Log und werden ignoriert
  • die Builds für Software und PlayStation 2 haben überhaupt keine Lichter
  • Texturen müssen JPG oder TGA sein

Textur-Scrolling

Nirgends in der Bedienoberfläche gibt es einen Parameter für das Scrolling. Man setzt ein Schlüsselwort in den Namen der Texturdatei, und die Engine liest es dort: SCUP für aufwärts, SCDN für abwärts, SCLT für links, SCRT für rechts. Eine Textur namens TEXTURE_SCUP.TGA scrollt nach oben.

Archive und Precaching

Neben dem Abspieler liegen zwei Begleitwerkzeuge, beide nur für Windows.

jfyeNGArchiver fasst Szenen, Objekte, Texturen, Precaching-Dateien und Ton in einem einzigen komprimierten .JNG zusammen. Eine aus einem Archiv geladene Szene trägt die absoluten Pfade der Maschine, auf der sie gebaut wurde, nicht mehr mit sich — und genau das macht eine Demo verteilbar; die Alternative war die Hoffnung, dass der Betrachter ein eigenes C:\LW\LWS\ hatte.

jfyeNGPrecacher durchläuft eine Szene im Voraus und schreibt ein .PRK daneben, das auflistet, was nie gezeichnet zu werden braucht, weil etwas anderes es verdeckt. Der Abspieler nimmt die Datei von selbst auf, gibt Precaching file found ins Log aus und dann (using precalculation) auf den Bildschirm.

Abspielen

Das Fenster ist eine Wiedergabeliste und eine Reihe von Schaltflächen: Add und Remove für Szenen und Archive, Set LW path für das Inhaltsverzeichnis von LightWave — es verhält sich genau wie das von LightWave selbst —, Set audio file, eine Auflösung aus 320×240, 512×384, 640×480, 800×600 und 1024×768 sowie zwei Kästchen, Full-screen und Bilinear. All das wird in jfyeNG.ini behalten, und alles, was geschieht, landet in jfyeNG.log.

Der Ton läuft über FMOD, das bei den Formaten großzügig ist: MOD, S3M, XM und IT, MIDI in .MID, .RMI und .SGT, WAV, MP2 und MP3, Ogg Vorbis, WMA und ASF.

Während eine Szene läuft, tun vier Tasten etwas:

  • Leertaste — zur nächsten Szene springen
  • L — Linienmodus, die Szene als Drahtgitter
  • S — Schnappschuss, als TGA ins aktuelle Verzeichnis geschrieben
  • T — die Einblendung, die die Bilder zählt, meldet, wie viele Dreiecke in wie vielen Objekten stecken, und die Bildrate angibt

Ist die letzte Szene der Wiedergabeliste zu Ende, beginnt die Liste wieder von vorn.

Das Demopaket

jfyeNGDemo.JNG ist ein 3,2 MB großes Archiv mit zwölf Szenen und ein ordentlicher Rundgang durch das, was die Engine konnte. Fünf davon sind nach einem Mapping-Modus benannt und führen genau den vor — planar, spherical, cylindrical, cubic, environment — dazu scroll für die scrollenden Texturen. Der Rest ist echte Arbeit: sallefeu, Xbarrs brennendes Zimmer, aus dem PS2Room gebaut wurde; evolution, aus der Demo der Runde 7; hotpursuit, ein Porsche und ein BMW auf einer sich schließenden Straße, die Räder getrennt von den Karosserien modelliert; citrouille; john; und fresco, mit Abstand das größte, hundertzwölf Objekte und Texturen für eine Brücke, einen Turm, eine Insel, einen Schmetterling und einen Wächter des Olymp.

Was noch auf der Liste stand

Die Dokumentation endet mit einer To-do-Liste, in der Reihenfolge der Prioritäten des Autors, die sich heute wie eine faire Bilanz dessen liest, wo die Engine stehen blieb:

Verwaltung von Bones · korrekte Verwaltung der Lichter · ein 2D-Bitmap-Anzeiger für Billboards · Partikel · Triangle Stripping · ein korrektes Dissolve mit Sortierung der überblendeten Flächen · LZW- und RLE-Komprimierung in den .JNG-Dateien · Betrieb als Bildschirmschoner · Entfernen von Objekten anhand ihrer Bounding Box · ein LWO-Packer, der die ungenutzten Chunks wegwirft