Minds Eye Render/modelleer Pakket

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

Graphics

AuthorImage:[Here we need a little image from you]

[no author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Martin van Velsen

en to nl Guus Snijders

AboutTheAuthor:[A small biography about the author]

Abstract:[Here you write a little summary]

Al meer dan 2 jaar is er een project gaande met de naam MindsEye. Dit project is er op gericht een Modelleer/Render/Animatie pakket voor Linux/Unix te maken dat vergelijkbaar is met grote programma's als 3D Studio Max of LightWave. Dusver is de ontwikkelling erg goed gegaan, na een ruwe start. Sommige van implementatie ontwerpen en engineering zijn nogal uniek voor modelleer programma's.

ArticleIllustration:[One image that will end up at the top of the article]

[Illustratie]

ArticleBody:[The main part of the article]

Vooraf

MindsEye bevindt momenteel nog in een vroeg stadium. Het meeste werk gebeurd onder de interface. Dit betekend dat nog dagelijks kan veranderen wat wel of niet functioneel is. Wij geloven in een goed ontwerpplan, alvorens gebruikers leuke speeltjes te geven.

Wat is Minds Eye?

Op dit moment wordt de markt van modelleren en renderen gedomineerd door dure commerciële software pakketten. MindsEye is het het freeware (gpl) antwoord, als een pakket dat de competitie met deze pakketten aankan. Door het beste van beide werelden te nemen plus enkele innovatieve nieuwe technieken probeert MindsEye een compleet platform te zijn voor alle 3D graphische doeleinden.

Geschiedenis

Zo'n twee jaar geleden, toen Linux nog vooral een besturingssysteem voor hackers was, ontstond het idee om te gaan werken aan een render/modelleer/animatie programma voor Linux. Geïnspireerd door het werk van de Gimp mensen, gingen we aan het werk om te zien of het eigenlijk mogelijk was om een dergelijk beest te schrijven. Voor bijna een jaar speelden we met wat ontwerp ideeëen. In het begin begonnen we helemaal verkeerd. Er werden berichten geplaatst in nieuwsgroepen om te zien of er mensen geïnteresseerd waren in meehelpen. We kregen veel reacties en het leek erop dat het geen probleem zou zijn om met dit project te beginnen. De naam was toen Free-D. Een naam die later veranderd werd in MindsEye omdat het anders verwarring zou opleveren met het Free3D library project. Het project groeide erg langzaam. Er waren tegenslagen die niets met het project te doen hadden. Zo hadden mensen erg specifieke ideeëen over wat ze graag geïmplementeerd wilden hebben. Op de mailinglist zagen we dus vaak argumenten over en weer gaan over ontwerp specificaties. Het kostte meer dan een jaar om eigenlijk wat code te produceren.

Ontwerp

Het interessantste van MindsEye is het ontwerp. Alle delen zijn modulair, van het kleinste element tot het grootste onderdeel, zoals de modeller. Het hart van het programma wordt gevormd door wat wij de MindsEye kernel noemen. Dit is een stuk software dat zelf niet in staat is om enig grafisch werk te doen. In plaats daarvan beheerd het alle modules en plugins. Je zou het een grote bronnen manager kunnen noemen. Het is ook de plaats waar de volledige datastructuur wordt bewaard. Er is een duidelijk verschil tussen een module en een plugin in MindsEye. Een module is wat dynamische code waar de kernel zich van bewust is. Een module wordt geladen en verwijderd door de kernel. Als we zeggen "bewust van", betekent dit dat de kernel iets weet over de modules. Zo is de netwerk module bijvoorbeeld een gateway die meerdere kernels verbindt. De netwerk module kun je zien als een dummy module die een van de andere modules vervangt. Op dit moment hebben we een set basis modules gedefinieerd, deze bestaat uit:


Dus, hoe ziet deze setup eruit in een programma? Zoals dit:

[kernel_layout]

Een van onze modules is de animatie module. Het is in principe een 3d editor die gespecialiseerd is in animaties. Deze gebruikt onze viewport manager, die op zijn beurt onze algemene viewport code gebruikt. Al onze code is modulair en kan in andere delen van het programma worden gebruikt. Als voorbeeld zie je in de schermafdruk hieronder een ruwe versie van onze animator, met 4 viewports.

[animator]

Voor onze 3d uitvoer gebruiken we OpenGL. De makefiles nemen aan dat je MesaGL gebruikt als je werkt onder Linux. De GUI toolkit die je in actie ziet, is de QT toolkit van Trolltech (http://www.troll.no). We gebruiken deze toolkit omdat het enkele elementen bevat die we nodig hadden en die niet door andere toolkit konden worden gegenereerd (tenminste niet op een GPL basis). Op het moment dat we begonnen, was Gtk niet iets waar we vertrouwen in hadden. Ook hadden we specifieke wensen voor de GUI, die met Gtk niet konden en wel met Qt.

[materialen]

Net als de commerciële programma's zal MindsEye een materiaal editor omvatten. Evenals de andere delen zal de code voor deze module gebaseerd zijn op andere code. Zo zullen bijvoorbeeld de viewports die worden gebruikt om de materialen weer te geven hetzelfde zijn als dialoogboxen voor de lichtbronnen. Ze worden afgeleid uit basiscode die een OpenGL bol met verschillende eigenschappen weergeeft. De materiaal editor zal weten hoe om te gaan met alle eigenschappen. De materiaal editor hoeft zich alleen bezig te houden met het beheer van alle materialen en de beschikbare data. Zoals met alle delen van het programma, is de filosofie: verdeel alle onderdelen in de eenvoudigste vorm. In wezen volgen we hier hetzelfde pad dat Unix maakte tot wat het nu is.

[render dialoog]

Voor de render uitvoer gebruiken we... wat er maar is. Sommige engines zullen intern worden gebruikt, zoals de SIPP engine. Andere engines zullen worden gebruikt als externe programma's. Alles is afhankelijk van de natuur en complexiteit van het doel-render-systeem. Als de uitvoer engine intern is, zal het in principe worden geladen als een plugin. De render module zal weten hoe hij ermee moet omgaan en zal het een datastructuur en een buffer geven om de gerenderde afbeelding in op te slaan met wat parameters. Op dit moment kijken we naar SIPP, POVRay en Renderman als onze renderers, maar ontwikkelaars kunnen alles gebruiken wat ze maar willen. Zoals alles in MindsEye, zullen de interface een goed gedefinieerde API hebben.

Toekomstige Technologiëen

MindsEye probeert een erg solide programma te zijn vanuit het oogpunt van software architectuur. Er zullen vele nieuwe technologiëen worden geïmplementeerd en het programma zou heel goed kunnen dienen als testomgeving voor nieuwe rendering en modellerings technieken. Enkele features die in de planning staan om te intergreren zijn:

RCS voor werelden

De kans bestaat dat in de nabije toekomst de scenes groter en complexer worden. Het beheren van deze grote werelden is een taak op zich. MindsEye wil helpen bij het werken aan een scene met meer dan een modeller tegelijkertijd. Deze mogelijkheid scheelt integratie tijd en brengt de totale modelleertijd omlaag. Een manier om dat te doen is door een soort RCS (Revision Control System) te implementeren voor scenes/werelden. Zo zou een modeller bijvoorbeeld kunnen werken aan een kleine dataset in een grote scene. Deze data wordt gereserveerd (gelocked) voor die modeller. Andere mensen kunnen aan andere delen van de data werken, zonder modellen te verstoren die zijn gelocked door andere modelleerders.

Programmeren op de LEGO® manier

Een MindsEye kernel is niets meer dan een taak en bronmanager. Als je een van de modules wilt gebruiken, heb je de kernel nodig. Een voordeel van een kernel-gebaseerd systeem is dat het hele pakket min of meer als LEGO© werkt. Hoe functioneerd dit systeem? Wel, stel je voor; je hebt een animatie bedrijf hebt met de naam Paxir, je werkt aan een nieuwe film en besluit om MindsEye te gebruiken als ontwikkelplatform. Het bedrijf is gewend te werken met clusters van modelleerders en heeft een renderfarm. Een dergelijk systeem is relatief makkelijk op te zetten met MindsEye. Op iedere machine, ongeacht het platform of doel, wordt een kaal MindsEye systeem geïnstalleerd. Afhankelijk van de rol van de machine worden er modules toegevoegd. Zo krijg je dus een cluster van modelleerders met de kernel en modelleer module, samen met een rendering module en een preview plugin.Verder rust je de renderfarm uit met de kernel en de netwerkmodule en de favoriete render-plugin. Iedere kernel begrijpt zijn rol en functioneert aansluitend.

Transparante Netwerk rendering

Zoals in de laatste sectie uitgelegd, zou netwerk rendering veel flexibeler moeten zijn met MindsEye. Waar het op neer komt, is het aan elkaar kopelen (daisy chaining) van een set MindsEye kernel en ieder van hen een deel van de animatie laten renderen. Als effect is iedere kernel verantwoordelijk voor zijn eigen taak, al doen de render-module en de rendering-plugin het eigenlijke werk. Het volledige ontwerp en opbouw van het programma zijn gericht op een modulaire opzet. Vele ideeën en concepten zijn in gedachten gehouden tijdens het programmeren voor dit project. Netwerk ondersteuning is slechts een onderdeel, maar zoals je kunt zien zit het bij het hart van waar MindsEye voor staat.

Gebruik

Op het moment is MindsEye een programma dat vooral erg interessant is voor ontwikkelaars. Voor eindgebruikers is het nog niet zo heel erg bruikbaar. We werken hard om de kern van het programma erg goed te krijgen. Als dat klaar is, is de kans aanwezig dat de functionaliteit versneld beschikbaar wordt. Hieronder kun je een screendump zien van de huidige modelleer setup. Dit is een afbeelding van MindsEye-0.5.19 op een Enlightment desktop. In de modelleerder kun je zien dat er een scene met de naam rings5.nff is geladen. MindsEye kan meerdere scenes laden. Hoewel er nog niet veel bestandsformaten worden ondersteund, is de code die zorgt voor het laden en opslaan erg flexibel. Protocollen voor het dynamisch toevoegen van bestandstypen zijn in ontwikkeling. Ieder type wordt geladen door de bijbehorende plugin. MindsEye zal actief naar plugins kunnen scannen. Dit betekend dat componenten direct (on the fly) kunnen worden toegevoegd of verwijderd.




Referenties en gerelateerde Links

Mindseye:
http://mindseye.luna.net
http://yukon.genie.uottawa.ca/info/soft/nurbs (Libs nodig)
http://www.troll.no (Libs nodig)

Mailing list:
http://mailarchive.luna.nl/mindseye/

Bestandsformaten:
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/

RayTracers:
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 Modellers:
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 (This place has a ton of good stuff)
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

Vergelijkbare projecten:
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