Beforehand
MindsEye is currently in it's early stages. Most work is done underneath
the interface. So this means that if you try it out the actual functional
parts may differ on a dayly basis. We believe in a good design foundation
before giving users cool toys to play with.
What is Minds Eye?
Right now the modeling and rendering market is dominated by expensive
commercial software packages. MindsEye is ( or will be ) the freeware (gpl)
answer to a package that can compete with these commercial versions. Taking
the best of both worlds and some innovative new techiniques MindsEye tries
to be an overall platform for all 3d graphics purposes.
History
About 2 years ago, when linux was still very much a hackers operating
system, the idea popped up to start work on a renderer/modeler/animation
program for Linux. Inspired by what was done by the Gimp people we set
to work to see if it was possible to actually write such a beast. For about
a year we played with some design ideas. At the beginning it started out
completely wrong. Posts were made in newsgroups to see if people were interested
to join. We got a lot of replies and it seemed that there would be no problem
starting this project. The name then was Free-D. A name that was later
changed to MindsEye because it would have caused confusion with the Free3D
library project. Very very slowly the project grew. Along the way were
traps and pitfalls that had nothing to do with the project. For example
people have a specific idea of what they would like to see implemented.
So on our mailing list we would frequently see arguments going back an
forth on design specs. It took more than a year to actually produce some
code.
Design
The most interesting part about MindsEye is it's design. All parts
are modular from the smallest element to the biggest parts like the modeler.
At the hart of the program is what we call the MindsEye kernel. This is
piece of software that is by itself incapable of doing any graphics work.
Instead it manages all the modules and plugins. you could call it a big
resource manager. It is also the place where the entire datastructure is
kept. There is a distinct difference between a module and a plugin in MindsEye.
A module is some dynamic code that the kernel is aware of. A module will
be loaded and unloaded by the kernel. When we say "aware", it
means that the kernel knows something about the modules. For example the
network module is a gateway that connects several kernels. The network
module could be viewed as a dummy module that replaces one of the other
modules. Right now we have defined a set of basic modules, these are:
Network
Modeling Editor
Animation Editor
Materials Editor
IO Module
So how does this setup look like in the actual program ? Like this:
On of our modules is the animation module. It is basically a 3d editor
specializing in animation. It uses our viewport manager which in turn uses
our generic viewport code. All of our code is modular and can be used in
other parts of the program. So for example, in the screenshot below you
see a rough version of the animator, with 4 viewports.
For our 3d output we use OpenGL. The makefiles assume you are using MesaGL
if you are working under Linux. The GUI toolkit you see in action, is the
QT toolkit from TrollTech ( http://www.troll.no
). We chose this toolkit because it features some elements that we needed
and which no other toolkit could produce ( at least not on a GPL basis
). At the time we started Gtk was not at a point where we felt confident
to use it. Also we had specific wishes for the GUI that Gtk was unable
to produce and Qt was.
Just like the other commercial programs, MindsEye will feature a materials
editor. Like all the other parts this module's code is based on other code.
For example the viewports that display the materials will be the same for
light source dialog boxes. They are derived from base code that displays
an OpenGL sphere with several properties. The viewports will know how to
deal with all the properties. The materials editor will then only have
to deal with the managing of all the materials and data currently available.
As with all parts of the program, the philosophy is: devide all the parts
into it's most basic form. Basically following the path that made Unix
the way it is now.
For our rendering output we use.... whatever is out there. Some engines
will be used internally like the SIPP engine. Some engine will be used
as external programs. It all depends on the nature and complexity of the
target rendering system. If the output engine is internal, then it will
basically be loaded as a plugin. The render module will know how to deal
with it and will hand it a datastructure and a buffer to store the rendered
image along with some parameters. Right now we are looking at SIPP, POVRay
and Renderman as our renderers but developers can hook up anything they
like to it. As anything else within MindsEye all interfaces will have a
well defined API.
Future Technologies
MindsEye aims at a program that is very solid from a software architecture
point of view. A lot of new technologies will be implemented and the program
might very well function as a test bed for new rendering and modeling techniques.
Some of the features that we are planning to integrate are:
RCS for worlds
Chances are that in the near future scenes will get bigger and more complex.
Managing these large worlds is a task by itself. MindsEye wants to facilitate
an easy way to work on one scene with more than one modeler at the same
time. Being able to do that saves integration time and cuts down on total
modeling time. One way to do that is to implement a kind of RCS ( Revision
Control System ) for scenes/worlds. For example a modeler might be working
on a small set of data in a large scene. This data will be locked for that
modeler. Other people can work on other parts of the data without disturbing
models that are locked by other modelers.
Programming the LEGO® way
Each MindsEye kernel is nothing more than a task and resource manager.
If you want to run any of the modules you will need the kernel. One advantage
of having a kernel based system is, that it makes the whole package work
more or less like LEGO ©. How does this concept work in real life ? Well
suppose you have an animation company called Paxir. You are working on
a new movie and you decided to use MindsEye as your main development platform.
The company is used to working with clusters of modelers and has one main
rendering farm. Setting such a system up with MindsEye would be relatively
easy to do. On each machine, no matter what kind of platform or purpose,
a bare MindsEye system is installed. Depending on what the role of that
machine is, modules are added. So one cluster of modelers would have the
kernel and modeling module together with a rendering module and a preview
plugin. The rendering farm on the other hand would have the kernel and
the network module together with the favorite rendering plugin. Each kernel
would understand it's role and act accordingly.
Transparent Network Rendering
As explained in the last section, network rendering should be a lot more
flexible with MindsEye. What it comes down to is daisy chaining a set of
MindsEye kernels and let each one of them render part of the animation.
In effect each kernel is responsible for it's task even though the render-module
and rendering-plugin does the actual work. Through the entire design and
engeneering work of the program a modular setup is kept in mind. A lot
of ideas and concepts are kept in mind when programming for this project.
Network support is only a small part but as you can see it is at the very
hart of what MindsEye stands for.
Usage
At the moment MindsEye is a program that is very interesting from a developers
point of view. For general users it's not that usefull. We are working
hard to get the core of the program done very well. When that is done,
chances are that functionality will come in accelerated rate. You can see
a screenshot of the current modeler setup below. This is a view of MindsEye-0.5.19
on an Enlightment desktop.
In the modeler you can see that a scene is loaded called: rings5.nff. MindsEye
has the capability to load multiple scenes. Although not a lot of file
formats are supported yet, the code that drives the loading and saving
is very flexible. Protocols are being build and designed to dynamically
add file-types. Each type is loaded by it's appropriate plugin. MindsEye
will be able to do active plugin scanning. This means that components can
be added and removed on the fly.
References and Related Links
Mindseye:
http://mindseye.luna.net
http://yukon.genie.uottawa.ca/info/soft/nurbs (Libs needed)
http://www.troll.no (Libs needed)
Mailing list:
http://mailarchive.luna.nl/mindseye/
FileFormats:
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
Other 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
Similar projects:
http://www.fpa-engineers.com/OD/
http://www.cybersociety.com/moonlight
http://www.geocities.com/SiliconValley/Lakes/7705/Virtuoso.html
Other intresting 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
|