HomeMapIndexSearchNewsArchivesLinksAbout LF
[Top Bar]
[Bottom Bar]

von:Martin van Velsen

Inhalt:

Minds Eye Rendering/Modeling Paket

Zusammenfassung: Seit etwas 2 Jahren gibt es ein Projekt namens MindsEye. Das Ziel diese Projektes ist, ein Modeling/Rendering/Animation Paket für Linux/Unix zu schaffen, das equivalent zu großen Programmen wie 3D Studio Max oder LightWave ist. Dieser Artikel gibt einen Überblick über MindsEye.


Vorweg

MindsEye befindet sich zur Zeit noch in einem frühen Entwicklungsstadium. Die meiste Arbeit unter der Oberfläche ist jedoch bereits getan. Trotzdem kann sich die Funktionalität immer noch täglich ändern. Wir wollen jedoch den Benutzern zuerst ein gutes Designkonzept zur Verfügung stellen, bevor wir coole Spielereien einbauen.

Was ist Minds Eye?

Zur Zeit wird der Modellierer- und Renderermarkt von teurer, kommerzieller Software dominiert. MindsEye ist (oder will es zumindest sein) die Freeware (GPL) Antwort, die sich mit diesen kommerziellen Programmen messen kann. MindsEye versucht eine universelle Plattform für alle Ansprüche im Grafik- und 3D-Bereich zu sein, indem das beste aus beiden Welten zusammen mit einigen neuen innovativen Techniken verwendet wird.

Geschichtliche Entwicklung

Vor ungefähr 2 Jahren, als Linux vor allem noch ein Betriebssystem für Hacker war, wurde die Idee geboren, ein Render/Modellier/Animations-Programm für Linux zu entwickeln. Inspiriert vom Gimp Projekt, setzten wir uns zusammen um zu sehen, ob sich solch ein Monster verwirklichen ließe. Gut ein Jahr lang haben wir mit verschiedenen Designideen gespielt. Der Start ging jedoch vollkommen schief. Wir posteten Artikel in Newsgruppen, um zu sehen, ob sich genügend viele interessierte Personen diesem Projekt anschliessen würden. Wir haben jede Menge Rückmeldungen bekommen und es sah so aus als wäre es kein Problem, mit dem Projekt zu beginnen. Wir nannten es Free-D. Dieser Name wurde später in MindsEye abgeändert , da die Namensähnlichkeit mit dem Free3D Bibliotheksprojekt Verwirrung stiftete. Das Projekt wuchs nur sehr, sehr langsam, da es einige Fallstricke gab, die nichts mit dem Projekt an sich zu tun hatten. Beispielsweise hatten Personen spezifische Ideen, was vordringlich implementiert werden sollte. Deshalb gingen die Argumente über Designspezifikationen auf der Mailingliste hin und her. Schließlich hat es länger als ein Jahr gedauert um ein bißchen Code zu erzeugen.

Design

Das Interessanteste an MindsEye ist sicherlich sein Design. Alle Teile, vom kleinsten bis zu den größten Elementen wie dem Modellierer sind modular aufgebaut. Das Herz des Programms nennen wir den MindsEye Kernel. Dieses Stück Software ist nicht in der Lage, auch nur die geringste Grafikarbeit zu leisten. Stattdessen verwaltet er Module und Plug-Ins. Man könnte ihn auch als großen Resourcen-Manager bezeichnen. In MindsEye gibt es einen deutlichen Unterschied zwischen Modulen und Plug-Ins. Ein Modul ist dynamischer Code, von dem der Kernel bereits vor dem Laden gewisse Eigenschaften und die Funktionalität kennt. Er wird vom Kernel geladen und auch wieder entladen. Das Netzwerk-Modul zum Beispiel bildet eine Schnittstelle, die verschiedene Kernel verbindet. Das Netzwerk-Modul kann auch als Dummy-Modul angesehen werden, welches ein anderes Modul ersetzt. Bis jetzt haben wir folgende Basismodule definiert:

  • Netzwerk
  • Modellierer
  • Animations Editor
  • Materialeditor
  • Ein-/Ausgabe Modul


  • Aber wie sieht das Ganze denn nun eigentlich aus? Das Hauptmodul stellt sich folgendermaßen dar:



    Eines unserer Module ist das Animations-Modul. Dieses ist in erster Linie ein auf Animationen spezialisierter 3D Editor. Es verwendet unseren Viewport-Manager, welcher wiederum unseren generischen Viewport Code benutzt. Der gesamte Code ist modular aufgebaut und kann in anderen Programmen verwendet werden. In dem Screenshot unten sieht man beispielsweise eine Rohversion des Animators mit 4 Viewports.



    Für die 3D Ausgabe verwenden wir OpenGL. Die Makefiles gehen davon aus, daß MesaGL benutzt wird, falls sie mit Linux arbeiten. Das GUI Toolkit, welches sie bei der Arbeit sehen, ist das Qt Toolkit von TrollTech (http://www.troll.no). Wir haben dieses Toolkit gewählt, da es einige Eigenschaften besitzt über die andere Toolkits nicht verfügen (zumindest keine auf GPL Basis). Am Beginn unserer Arbeit war Gtk noch nicht so weit, daß wir es hätten verwenden können. Außerdem hatten wir spezifische Wünsche an das GUI, die uns Gtk nicht erfüllen konnte, Qt aber schon.



    Wie andere, kommerzielle Programme wird MindsEye einen Materialeditor beinhalten. Wie alle Teile basiert er auf gemeinsam benutztem Code. Zum Beispiel sind die Viewports, die im Materialauswahldialog verwendet werden dieselben wie in den Lichtquellendialogen. Sie sind von Basiscode abgeleitet, der mittels OpenGL eine Kugel mit unterschiedlichen Eigenschaften darstellt. Die Viewports wissen, wie sie mit all den Eigenschaften umzugehen haben. Der Materialeditor hat sich dann nur noch um die Verwaltung der einzelnen Materialien und der zur Verfügung stehenden Daten zu kümmern. Wie bei allen Programmteilen ist die Philosophie diesselbe: alle Teile auf ihre kleinste Form zu bringen. Im Grunde verfolgen wir den Weg, der Unix zu dem gemacht hat was es heute ist.



    Für unsere Render-Ausgabe verwenden wir... was gerade zur Verfügung steht. Einige Grafik-Ausgabemöglichkeiten werden intern genutzt, wie die SIPP-Engine. Einige andere werden als externe Programme verwendet. Dies hängt von der Natur und der Komplexität des Ziel-Rendersystems ab. Steht die Grafik-Ausgabemaschine intern zur Verfügung wird sie grundsätzlich als Plug-In geladen. Das Render-Modul weiß, wie es damit umzugehen hat und übergibt ihr eine Datenstruktur und einen Puffer, um das gerenderte Bild zusammen mit einigen Parametern darin zu speichern. Zur Zeit verwenden wir SIPP, PoVRay und RenderMan als Renderer, aber Entwickler können alles einklinken was ihnen gefällt. Alle Schnittstellen in MindsEye haben eine definierte API.

    Zukünftige Technologien

    MindsEye bemüht sich sehr um eine solide Softwarearchitektur. Eine Menge neuer Technologien werden implementiert und das Programm kann sehr gut als Testsoftware für neue Render- und Modelliertechniken eingesetzt werden. Einige der Besonderheiten, welche integriert werden sollen, sind:

  • RCS für Welten

    Es sieht so aus, als würden in naher Zukunft die Szenen immer größer und komplexer. Diese großen Welten zu verwalten ist eine Aufgabe für sich. MindsEye möchte einen einfachen Weg einführen, um mit mehreren Modelleuren/Designern an einer Szene gleichzeitig zu arbeiten. Diese Möglichkeit spart Integrationszeit und reduziert die gesamte Modellierzeit. Eine Möglichkeit dafür ist die Einführung einer Art RCS (Revision Control System) für Szenen/Welten. Zum Beispiel könnte ein Modelleur an einer kleinen Datenmenge einer großen Szene arbeiten. Diese Daten werden durch den jeweiligen Modelleur gesperrt. Weitere Personen können an anderen Teilen der Daten arbeiten, ohne Modelle zu zerstören, welche von anderen Modelleuren gesperrt wurden.

  • Programmieren wie mit Lego®-Steinen

    Jeder MindsEye Kernel ist nichts mehr als ein Task- und Resourcenmanager. Wollen sie eines der Module ablaufen lassen, benötigen sie den Kernel. Ein Vorteil eines Kernel-basierten Systems ist, daß das gesamte Paket mehr oder weniger wie LEGO© arbeitet. Aber wie funktioniert dieses System im richtigen Leben? Angenommen sie haben eine Animationsfirma, nennen wir sie Paxir. Sie arbeiten an einem neuen Film und entscheiden sich dafür, MindsEye als ihre hauptsächliche Entwicklungsplattform zu verwenden. Ihre Firma arbeitet mit Clustern von Modellierern und hat eine Haupt-Renderfarm. Solch ein System mit MindsEye auszustatten ist relativ einfach. Auf jeder Maschine, egal welchem Zweck sie dient oder welches Betriebssystem darauf läuft, ist ein minimales MindsEye System installiert. Abhängig davon, welche Rolle den einzelnen Maschinen zukommt, werden zusätzliche Module installiert. So kann ein Cluster den Kernel und Modellier-Module zusammen mit einem Vorschau-Plug-In verwenden. Die Renderfarm auf der anderen Seite wird einen Kernel und das Netzwerk-Modul zusammen mit dem favorisierten Render-Plug-In zur Verfügung haben. Jeder Kernel wird seine Rolle verstehen und entsprechend handeln.

  • Transparentes Render in Netzwerken

    Wie im letzten Abschnitt dargestellt, dürfte Netzwerk Rendering mit MindsEye sehr einfach sein. Es kommt darauf an, mehrere verkettete MindsEye Kernel gleichzeitig an einer Animation rechnen lassen zu können. Tatsächlich ist jeder Kernel für seinen Task verantwortlich, auch wenn letztendlich die Rendering-Module und Rendering-Plug-Ins die eigentliche Arbeit erledigen. Während des gesamten Design- und Software-Engineering Entwicklungsprozesses hatten wir ein modulares Design vor Augen. Wir hatten eine Menge Ideen und Konzepte im Hinterkopf, als wir dieses Projekt programmierten. Netzwerk-Unterstützung ist lediglich ein kleiner Teil davon, aber wie sie sehen, kann diese sehr gut zur Veranschaulichung der Ideen hinter MindsEye dienen.

  • Verwendung

    Im Moment ist MindsEye aus der Sicht eines Entwicklers ein sehr interessantes Programm. Für einfache Benutzer ist es noch nicht so nützlich. Wir arbeiten sehr hart daran, eine saubere Implementation des Kernels zu schreiben. Wenn dies getan ist, stehen die Chancen sehr gut, daß die Funktionalität sehr schnell zunimmt. Unten können sie einen Screenshot der aktuellen Version des Modellierers sehen. Dies ist eine Ansicht von MindsEye-0.5.19 auf einem Enlightenment Desktop. Im Modellierer können sie sehen, daß eine Szene namens rings5.nff geladen ist. MindsEye hat die Fähigkeit mehrere Szenen zu laden. Obwohl bis jetzt noch nicht so viele Dateiformate unterstützt werden, ist der Code für die Ein- und Ausgabe sehr flexibel. Die Protokolle sind entwickelt und designt worden um das dynamische Hinzufügen neuer Dateitypen zu ermöglichen. Jeder Typ wird durch sein passendes Plug-In geladen. MindsEye wird aktives Plug-In-Scannen beherrschen. Dies bedeutet, daß Komponenten zur Laufzeit hinzugefügt und entfernt werden können.





    Übersetzt von Bernd Waibel

    Referenzen und Links

    Mindseye:
    http://mindseye.luna.net
    http://yukon.genie.uottawa.ca/info/soft/nurbs (Bibliothek wird benötigt)
    http://www.troll.no (Libs needed)

    Mailinglisten:
    http://mailarchive.luna.nl/mindseye/

    Dateiformate:
    http://www.mediatel.lu/workshop/graphic/3D_fileformat/h_format.html
    http://www.dcs.ed.ac.uk/%7Emxr/gfx/3d-hi.html
    http://www.cgrg.ohio-state.edu/~smay/RManNotes/rmannotes.html
    http://www.europa.com/~keithr/
    http://www.sdsc.edu/vrml/
    http://ourworld.compuserve.com/homepages/thbaier/

    Mesa(OGL):
    http://ssec.ssec.wisc.edu/~brianp/Mesa.html
    http://www.sgi.com/Technology/openGL/
    ftp://iris.ssec.wisc.edu/pub/Mesa/

    RayTracer:
    Pov: http://www.povray.org/
    http://www.geocities.com/SiliconValley/Lakes/1434/
    http://www.europa.com/~keithr/
    BMRT:http://www.seas.gwu.edu/student/gritz/bmrt.html

    Andere Modellierer:
    http://www.cs.ubc.ca/nest/imager/contributions/forsey/dragon/top.html
    http://www.comp.lancs.ac.uk/computing/users/andy/ac3d.html
    http://http.cs.berkeley.edu/~schenney/sced/sced.html
    http://users.aimnet.com/~clifton/spatch/spatch.html (Hier gibts jede Menge nützliches Zeugs)
    http://www.seas.gwu.edu/student/gritz/rmanlinks.html

    QT:
    http://www.troll.no

    Nurbs:
    http://yukon.genie.uottawa.ca/info/soft/nurbs
    http://www.cs.ubc.ca/nest/imager/contributions/forsey/dragon/top.html

    Ähnliche Projekte:
    http://www.fpa-engineers.com/OD/
    http://www.cybersociety.com/moonlight
    http://www.geocities.com/SiliconValley/Lakes/7705/Virtuoso.html

    Andere interessante Sites:
    http://www.ics.uci.edu/~eppstein/gina/csg.html
    http://www.cgrg.ohio-state.edu/~smay/AL/
    http://www.XCF.Berkeley.EDU/~gimp/gimp.html
    http://www.cs.umn.edu/~amundson/gtk/
    http://arch.hku.hk/people/matchy/Tcl.html
    http://metallica.prakinf.tu-ilmenau.de/Generic/Generic.html
    http://www.mdstud.chalmers.se/~md3msns/rayeng.html
    http://cg.cs.tu-berlin.de/~ki/engines.html
    http://www.cs.rpi.edu/~martink/
    http://www.coolfun.com
    http://www.grimmware.com/CrystalSpace/
    http://www.cs.technion.ac.il/~gershon/irit/
    ftp://ftp.eecs.umich.edu/.0/people/aprakash/collaboration/papers/CSE-TR-156-14.ps.gz

    Webpages maintained by Miguel Ángel Sepúlveda
    © Martin van Velsen 1998
    Übersetzt von:Bernd Waibel
    LinuxFocus 1998