original in en Martin van Velsen
en to nl Guus Snijders
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.
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.
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.
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:
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.
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.