Предисловие
MindsEye пока что находится на ранней стадии развития.
Основная работа ведется над интерфейсом, поэтому его
действующие части могут менятся день ото дня.
На первое место мы ставим разработку хорошего дизайна, а не просто
предложение пользователям интересных игрушек.
Что такое Minds Eye?
В данный момент на рынке modeling и rendering преобладают дорогие
коммерческие программные пакеты. MindsEye представляет ( или будет
представлять) пример бесплатной (freeware, gpl) программы которая может
соревноваться с этими
коммерческими версиями. Взяв самое лучшее от уже известного и применив
некоторые новые методы MindsEye пытается стать универсальной и
многоцелевой платформой для 3d-графики.
История
Около 2 лет назад, когда linux ещё был в основном хакерской операционной
системой, появилась идея начать разаработку
renderer/modeler/animation программы для Linux. Вдохновившись тем,
что было сделано группой Gimp, мы начали работу, чтобы понять
насколько реально создание такого монстра.
Почти год мы пробовали различные идеи дизайна. В начале
всё было не так. Чтобы найти возможных участников проекта в различных
newsgroups
были помещены объявления. Мы получили массу ответов и было похоже, что
у нас не будет проблем с началом проекта. Название тогда было Free-D.
Это название позже было заменено на MindsEye, поскольку создавало
путаницу с Free3D проектом библиотек. Проект рос очень медленно. По пути
попадались ловушки и ямы не относящиеся к делу. Например, разные
люди имеют определенные идеи того что они хотят увидеть воплощенным.
Поэтому в нашем mailing list мы часто встречали продолжительные споры
об особенностях дизайна. В результате создание хотя бы какого-то
кода потребовало больше года.
Дизайн
Дизайн - это самая интерестная часть MindsEye. Все части, начиная
с наименьших элементов и кончая такими как modeler являются модульными.
В центре программы находится то, что мы называем ядро MindsEye. Это
часть программы, которая сама по себе не способна выполнять графическую
работу. Вместо этого она управляет всеми модулями и plugins. Её можно
назвать большой планировщик ресурсами (big resource manager).
Это также место, где содержится вся
структура данных. В MindsEye существует четкое различие между модулем и
plugin. Модуль - это некий динамический код, о котором "знает" ядро.
Модуль загружается и выгружается ядром. Например, сетевой
модуль (network module) это мост, который соединяет несколько ядер.
Сетевой модуль можно рассматривать как модуль, который замещает какой
нибудь из других модулей.
В настоящее время мы определили набор основных модулей:
Network (Сеть)
Modeling Editor (Редактор-моделер)
Animation Editor (Редактор анимации)
Materials Editor (Редактор материалов)
IO Module
Итак, как же это выглядит в действительности? Смотрите:
Один из нашиж модулей - модуль анимации (animation module).
Это, в основном, 3d-редактор специализирующийся на анимации.
Он использует наш планировщик демонстрационных окон (viewport manager),
который, в свою очередь, использует соответсвующий код.
Весь наш код является модульным и может быть использован в
других частях программы. Так, для примера, ниже
вы видите приблизительную версию аниматора с 4 демонстрационными окнами (viewports).
Для 3d изображения мы использум OpenGL. The makefiles предполагают
что вы используете MesaGL работая под Linux. The GUI пакет, который
Вы видите в действии - это пакет QT из TrollTech ( http://www.troll.no
). Мы выбрали этот пакет потому что он предоставляет некоторые
необходимые нам элементы, которых нет в других пакетах (по крайней мере
на основе GPL). В то время когда мы начинали, Gtk не достиг еще такой
стадии чтобы мы могли уверенно его использовать. Кроме этого у нас были
конкретные пожелания для GUI которые Gtk не был способен
осуществить в отличие от Qt.
Подобно коммерческим программам MindsEye будет иметь редактор "материалов"
(materials
editor). Также как и с другими частями, код этого модуля основан на другом
коде. Например демонстрационные окна, которые показывают "материалы" будут
такими же и для
диалоговых окон источника света. Они получены из базового кода для
OpenGL сферы с различными свойствами. Демонстрационные окна
будут уметь обращаться со этими свойствами. В таком случае,
сам редактор "материалов" (materials editor)
должен будет только управлять всеми доступными материалами и данными.
Как и со всеми другими частями программы, наша политика: разделить
все части на их основные компоненты. То есть следуя пути, который привел Unix
в современное состояние.
Для получения изображения (rendering output) мы используем....
да всё что только можно.
Некоторые механизмы будут использованы внутренне, например как SIPP.
Некоторыен механизмы будут использованы как наружние программы.
Всё это зависит от природы и
сложности того что мы предполагаем нарисовать. Если output engine внутренний,
тогда это будет загружаться как plugin. Изображающий модуль "render module"
будет знать
как с этим обращаться и будет обеспечивать его данными (datastructure) и
буфером для сохранения изображаемого образа
и некоторых параметров. Сейчас мы рассматриваем SIPP, POVRay
и Renderman как наши изобразительные модули , но разработчики могут
подключать всё
что им нравиться. Как и всё остальное в MindsEye, все интерфейсы будут
иметь хорошо определенный API.
Будущие технологии
Целью MindsEye является создание очень основательной с точки зрения программной архитектуры программы.
Будет использовано много новых технологий и программа
сможет служить в качестве испытательного полигона для них.
Некоторые из планируемых возможностей:
RCS for worlds
Скорее всего, в ближайшем будущем, сцены будут больше и сложнее.
Управление этими большими мирами сложная задача. MindsEye собирается
облегчить работу над одной сценой с более чем одним моделером
одновременно. Такая возможность сократит время интеграции и
общее время моделирования. Один из способов сделать это - применение
чего-то подобного RCS ( Revision Control System ) для сцен/миров.
Например моделер может работать над небольшим набором данных
в большой сцене. Эти данные будут закреплены за этим моделером.
Другие люди могут работать с другими частями данных не нарушая
моделей друг друга.
Программирование из кирпичиков
Каждое ядро MindsEye не более чем task и resource manager.
Если Вы хотите запустить какой-либо модуль, Вам необходимо ядро. Одно
из преимуществ такой системы, то что весь пакет работает
как LEGO. Как это работает в реальной жизни ? Предположим
что существует компания называемая Paxir. Вы работаете над новым
фильмом и Вы решили использовать MindsEye в качестве основной платформы.
Компания обычно работает с наборами моделеров и имеет одну главную
rendering farm. Такую систему относительно легко установить для MindsEye.
На каждой машине, не зависимо от типа платформы и цели,
устанавливается минимальная система MindsEye. В зависимости от роли этой
машины, добавляются модули. Таким образом набор моделеров будет
иметь ядро и modeling модуль вместе с rendering модулем и preview
plugin. Rendering farm с другой стороны, будет иметь ядро и
сетевой модуль вместе с предпочитаемым rendering plugin. Каждое ядро
будет понимать свою роль и действовать соответственно.
Простое Network Rendering
Как объяснялось выше, сетевое построение изображения (network rendering)
должно быть гораздо более
гибким с MindsEye. Всё сводится к установлению связей между ядрами
MindsEye - и каждое из них будет выполнять свою часть анимации.
В действительности, каждое ядро отвечает за свою задачу, несмотря на
то, что работу выполняют render-module и rendering-plugin. На
протяжении всей работы по дизайну и созданию MindsEye мы реализуем
модульную структуру. При работе над этим проектом использовались
различные идеи и концепции. Сетевая поддержка - это только небольшая часть
пакета, но она является типичным воплощением тех идей, на которых основан
MindsEye.
Использование
В настоящий момент MindsEye представляет собой большой интерес для
разработчиков. Для обычных пользователей она пока что не так уж полезна.
Мы сейчас стараемся сделать сердевину программы как следует. Когда это будет
сделано, функциональность будет быстро нарастать. Ниже Вы можете
видеть как выглядит моделер в настоящий момент. Это вид
MindsEye-0.5.19
на Enlightment desktop.
В моделере Вы можете видеть, что загруженная сцена называется: rings5.nff.
MindsEye обладает способностью загружать многочисленные сцены.
Хотя поддерживаются ещё далеко не все форматы файлов, код
управляющий загрузкой и сохранением очень гибок. Протоколы были задуманы и
созданы так чтобы добавлять типы файлов динамически. Каждый тип
загружается соответствующим plugin. MindsEye будет способен
проводить активное сканирование plugin. Это значит, что компоненты
могут быть добавлены и убраны по ходу работы.
Ссылки
Mindseye:
http://mindseye.luna.net
http://yukon.genie.uot
tawa.ca/info/soft/nurbs (Libs needed)
http://www.troll.no (Libs
needed)
Mailing list:
http://mailarchive.luna.nl/mind
seye/
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.co
mpuserve.com/homepages/thbaier/
Mesa(OGL):
http://ssec.ssec.wisc.ed
u/~brianp/Mesa.html
http://www.sgi.com/Technology/
openGL/
ftp://iris.ssec.wisc.edu/pub/Mesa
/
RayTracers:
Pov:
http://www.povray.org/
http://www.geocit
ies.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.aim
net.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.uot
tawa.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/mo
onlight
http://www.geocities.com/SiliconValley/Lakes/7705/Virtuoso.html
Other intresting sites:
http://www.ics.uci.ed
u/~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/<
BR>
http://www.coolfun.com
http://www.grimmware.com/Crys
talSpace/
http://www.cs.technion.a
c.il/~gershon/irit/
ftp://ftp.eecs.umich.edu/.0/people/aprakash/collaboration/papers/CSE-TR-
156-14.ps.gz
|