« Программируем трехмерную графику с Irrlicht . Часть 1 | Программируем трехмерную графику с Irrlicht . Часть 3 » |
Программируем трехмерную графику с Irrlicht . Часть 2
Эффективное программирование 3d-приложений с помощью Irrlicht и jython. Часть 2.
В прошлый раз мы остановились на том, что выбирали 3d движок который будем использовать для этой серии уроков в качестве основы был использован ресурс http://www.devmaster.net/engines. Если вы открыли и внимательно его изучили, то нашли три интересные колонки, в которых перечислены “самые, самые” рейтинга “3d-движков”.
Первая из них – самые популярные или лучшие (мне трудно выделить какое либо из этих двух слов) движки на лицензии open source (упрощенно говоря с открытым исходным кодом и бесплатно). Хотя, по правде говоря, это не всегда синонимы, часто коммерческие продукты поставляются с открытыми кодами. Это важно, например, если вы начинаете проект “TheGame!”, который использует библиотеку X, и ваш бюджет порядка двух лет. То за это время выйдет несколько очередных версий данной библиотеки X от ее поставщика, вносящих определенные изменения.
Но вы будете параллельно реализовывать их сами, внося в исходники той версии, которая была актуальна на стадии начала проекта, т.к. не уверены в том, что эти изменения авторами будут внесены, не уверены, что они будут реализованы именно так как вам нужно. Поверьте, что смена технологии или версии используемого ПО в середине проекта почти всегда приводит к откату его на начальную стадию, а может даже еще хуже. Люди ведь не машины, которые набирают код и получают в обмен за это деньги. Нам хочется видеть и ощущать прогресс, видеть то, что мы делаем: “вот смотри какая классная штука получается”. Если же этого не происходит, то возникает разочарование, и разработчики бегут прочь от такого мертвого проекта. Так бывает, если конечно Архитектор Проекта, создавая Т.З. - Техническое Задание - причем именно так с большой буквы, не учел перспективу смены движка, языка, технологии. Не зря же ведущий программист или архитектор получает гораздо больше любого даже самого квалифицированного программиста (просто выполняющего план).
Вторая колонка на странице devmasters – это платные движки, сразу скажу, если вы хотите заниматься разработкой профессионально, т.е. пытаться зарабатывать деньги, то покупка лицензии может стать для вас наилучшим выбором. Я уверен, что если бы разработчики коммерческого движка делали некачественную вещь, или не оказывали поддержку покупателей, отвечая на их вопросы и быстро (действительно быстро) исправляя ошибки, то они бы вышли из большого бизнеса. Что делать, конкуренция, акулы бизнеса не дремлют.
Теперь о деньгах, существуют разные финансовые политики, как именно вы платите за используемый движок. Я имею в виду не технический вопрос как перевести деньги, для этого вам потребуется просто карточка Visa, ее вполне можно оформить, если у вас есть паспорт, я говорю именно о методике отчислений. Вариант номер один: деньги платятся сразу и все.
В этом случае вы перечисляете компании продавцу денежки, получаете договор, ключ, диск с П.О., секретный пароль для входа в раздел поддержки сайта компании и можете делать с этим движком все что угодно, для одного двух, десяти проектов, продавая их любым тиражом.
Момент в том, что действительно качественный движок (на уровне современного Quake4 с поддержкой новомодных 3d-технологий и грамотной физики и средствами программировании AI, поддержкой сети) будут стоить под сто тысяч, а то и больше, и явно, не белорусских рублей. Для многих начинающих команд или одиночек – это непосильная трата.
Поэтому, есть вариант 2 – вы платите, скажем, пару тысяч за движок, но компания получает отчисления с каждого проданного диска, скажем 10%. Конкретные цифры вы узнаете, когда будете заключать договор, но идея должна быть вам понятна. Также очевидно, что с Васей Пупкиным, крутым кулхацером из незалежной Рохляндии этот номер не пройдет, вы должны быть юридическим лицом.
Если вас интересует не gamedev, а задачи визуализации математических поверхностей, физических или химических процессов, то предыдущие варианты слишком громоздки. Вариант три, наверное, самый подходящий для нас, движок того же Quake4 вы не купите, но, заплатив пару сотен, получите в вечное пользование без лицензионных отчислений вполне неплохой движок.
Например, в рейтинге того же devmasters первое место занимает (по крайней мере, на момент написания данного материала) torque. SDK для которого (SDK – проще говоря набор средств разработчика – тех самых библиотек функций, очень часто без дополнительных сред программирования адаптированных под специфику используемого языка или библиотек) стоит порядка 150. плюс за дополнительные деньги вы получаете компакт-диски с ресурсами в виде текстур, моделей персонажей, строений или gamebuilder – уже визуальной среды для программирования.
Так что одна месячная зарплата и вы счастливый обладатель всего этого. Заодно, это хороший способ проверить серьезность своих намерений или намерений вашей команды. Как известно, время гораздо дороже денег.
Третья колонка на сайте devmasters – это движки, которые обновились в последнее время. Здесь вы можете найти ссылки на пока еще неизвестные широкой общественности, но быстро развивающиеся проекты.
Сначала рассмотрим некоторые коммерческие проекты, наиболее известные Unreal engine 3, Source engine, Doom 3 engine, CryEngine.
Естественно что ни с одним из этих движков я не работал, т.к. демоверсии и прочие версии для ознакомления никто не выдает, знания же я почерпнул на их официальных сайтах. Например, Unreal engine 3 стоит порядка 800 000 американских рублей, поддерживает DirectX 9.0, Xbox 360 и PlayStation 3, графические возможности HDR, стенсильные и мягкие размытые тени, продвинутые методики освещения, физика NovodeX. Первая версия Unreal Engine 1 вышла в далеком 1998 г. Затем последовали Unreal Engine 2 в 2003 году, последняя законченная версия это Unreal Engine 3, судя по всему в разработке сейчас находится Unreal Engine 4, но конкретные сроки завершения пока не определены. Достаточно подробный список игр сделанных на основе unreal engines 1-3 можно посмотреть по адресу: http://en.wikipedia.org/wiki/Unreal_engine.
Меня более правда интересует наличие развитых средств для проектирования/моделирования/программирования. Есть отличные редакторы (судя по скриншотам на http://www.unrealtechnology.com/html/technology/ue30.shtml) частиц, редактор анимации, редактор скриптов AI, средства локализации для поддержки нескольких языков, редактор звука, поддержка сети тоже на уровне (сомневаться в авторах серии Tournament не приходится).
Мы же уделим внимание все же колонке номер 1 рейтинга самых-самых.
На первом месте находится OGRE, его сайт ogre3d.org, есть и русское комьюнити по адресу http://orge3d.org.ru.
OGRE расшифровывается как объектно-ориентированный движок рендеринга. Чтобы писать на нем вам нужны знания c++ и методик ООП. Термин “ движок рендеринга” говорит, что ничего кроме графических средств в OGRE нет, нет физики, ai, сети и gui. Но количество подпроектов OGRE добавляющих данные возможности очень велико. Чтобы оценить возможности OGRE посмотрите на вышедшую где-то год назад (скоро должно быть дополнение) игру “Стальные Монстры” на тему моря, кораблей и битв второй мировой войны. На сайте http://orge3d.org.ru в разделе форума был разговор в стиле вопрос-ответ между сотрудниками фирмы разработчика и фанами OGRE, великих секретов раскрыто, конечно, не было, но получить заряд бодрости духа вполне можно.
Второе место занимает irrlicht, его сайт http://irrlicht.sourceforge.net/.
Irrlicht это open source 3d движок написанный на c++. Может быть запущен на windows,linux,mac, также разрабатываются портированные версии для xbox, psp. С его помощью можно разрабатывать коммерческие приложения. Существуют bindings (механизмы позволяющие вызывать функции написанные на одном языке, например c++, из другого языка, например c#) для perl, python, lua, .net, java.
Irrlicht построен по принципу микроядра и позволяет выполнять 3D rendering с помощью opengl, directx 8,9. На-отлично реализована поддержка наиболее известных форматов 3d моделей и изображений, так нарисовав красивую модельку персонажа в 3dsmax, вы можете импортировать ее в среду irrlicht, а не строить из элементарных блоков вроде куб, сфера, конус. В irrliht реализована поддержка 2D GUI, а также интеграция с физическими движками: ODE, Newton. Есть правда негативный момент в том, что русскоязычных ресурсов посвященных irrlicht “кот наплакал”.
С помощью google нашлось несколько ресурсов заглохших пару лет назад, да и то большей частью их информационное наполнение - калька с официального английского сайта, причем устаревшая. Максимум что можно найти – это пара переведенных уроков из тех, что поставляются вместе с irrlicht, в общем смотри gamedev.ru. Плюс изредка поднимаются темы на разных форумах, но такой мощной русскоязычной поддержки как у ogre пока нет. Отчасти эта причина в том, что ogre постарше, отчасти это из за слабой раскрутки. Для того же ogre есть изданные книги, разумеется, на английском и, разумеется, купить их можно только на amazon.
Почетное третье место занимает проект jmonkeyengine (jme).
Довольно неожиданно. Дело в том, что данный движок полностью написан на java. Разумеется, что в основе своей непосредственно отрисовка выполняется с помощью средств opengl. Однако третье место более удивительно из за того что разработка движка ведется очень неровно. Периоды бурной активности сменяются полугодовыми затишьями когда изменения не доступны не только в виде полноценных релизов, но и даже в cvs репозитарии (cvs – система управления версиями исходных файлов и прочих ресурсов проекта) глухо. Пару слов об CVS/SVN.
Вкратце, идея в том, что представьте, будто вы пишите заказчику программу “калькулятор”, разумеется, что работа идет коллективная – и у нас работают два программиста: Вася и Петя. Очевидно, что чем больше участников проекта и чем больше файлов, которые содержат исходный код, тем больше средств и сил нужно тратить на противодействие силам хаоса. Если Вася внес какие то изменения в код, то это изменение журналируется, определяется что было до и что стало после его изменения, и ставится задача оповещения Пети о том, что Вася внес некоторые изменения.
Следовательно, Петя должен регулярно закачивать к себе на рабочее место изменения сделанные Васей, причем так чтобы не затереть те изменения, которые за это время внес он сам. Представим себе развитие ситуации, когда наши два программиста сдали проект калькулятора заказчику и начали следующую версию уже с 12 разрядами. Через год заказчик звонит нашей команде и сообщает, что обнаружил ошибку при делении 5 на 2, следовательно, необходимо внести изменения именно в ту версию, которую получил заказчик, а не ту над которой работают сейчас наши разработчики. Умножим количество разработчиков на 10, а заказчиков на 100 и получим ….
В общем, вы догадались, что мы получим, если не будем использовать специализированное ПО, для управления версиями и изменениями в составе проекта. Это и есть CVS и SVN – две наиболее известные и широко применяемые технологии. Наиболее часто с помощью CVS, SVN вы выкачиваете к себе изменения сделанные за прошедшую ночь и должны их сами “собрать” – читай, скомпилировать.
Чего не скажешь об форуме и wiki проекта – здесь активность не утихает ни на минуту. Есть подпроекты позволяющие выполнять интеграцию jme с физическими движками. Есть подпроект jmonkey world editor – программа позволяющая визуально проектировать 3d-мир. Реализованы конвертеры наиболее известных форматов 3d моделей в формат который используется jme. Есть и примеры успешно завершенных проектов.
За чертой лидеров, но не за чертой внимания находится panda3d.
Вот здесь момент. В отличие от трех предыдущих кандидатов это не только 3d движок а комплексное решение для разработки 3d игр или приложений. Здесь есть и графика, и физика, и звук, найдется поддержка работы с сетью и много другое. Для использования panda3d вам будут нужны знания в области языка python. Разработка panda3d ведется рядом американских университетов и используется в рамках их образовательных программ. Официальный сайт http://www.panda3d.org/.
Общие слова об языка, какие они бывают и почему я выбрал то что выбрал
Очевидно, что инструмент мы выберем не по принципу “кто занимает первое место”. А основываясь на возможностях и перспективах достижения нашей конечной цели сформулированной в первой статье. А, кроме того, конечно очень важен фактор “с чем я лучше всего знаком”. А лучше всего я знаком с irrlicht. Так что остается выбрать только язык программирования, и здесь не все так однозначно.
Казалось бы, раз библиотека irrlicht написана на c++ , то код для доступа к ее возможностям мы также будем писать с помощью с++. Нет, лучше мы пойдем другим путем. Сначала небольшой экскурс в историю, давным-давно, когда я только начинал заниматься программированием, меня, скажем прямо, злило то, что я вынужден тратить достаточно много времени на компиляцию и сборку разрабатываемого проекта.
Скажем проект на c++, объемом порядка 50000 строк (примерно, конечно) собирался порядка 20 минут на очень хорошей по тем временам машине (во время чего можно смело было идти курить, так как что-то делать на машине со сто процентной загрузкой процессора было просто не реально). Может быть, конечно, я, что-то делал не так, но похожий проект на Delphi ребятами из соседней комнаты собирался за время в течении которого горит спичка, а нам всякие хитрости с прекомпилированными заголовками (идея в том, что ведь не все же 50000 строк проекта изменяются каждый раз, поэтому имеет смысл разделить проект на части и компилировать их отдельно, перекомпилируя только то, что изменилось) и опциями компилятору, помогали мало.
Ладно, на конечной стадии, если делается проект, для которого критически важна скорость работы и даже 10 процентов могут стать критерием “покупать или нет”, высокая оптимизация кода просто необходима. Но на стадии обучения или быстрого создания прототипа – нет и еще раз нет, я хочу получить результат за приемлемое время, я хочу работать максимально в интерактивном режиме, внес изменения - сразу посмотрел, что получилось, подправил и снова посмотрел изменения.
В конце концов, сейчас ведь не 70-ые годы, когда программисты отдавали свой исходный текст девушкам-перфораторщицам, которые набивали их на перфокарте. Затем перфокарты неслись в вычислительный центр, и лишь спустя неделю разработчики получали сообщение об ошибке в программе, бывает, забыл преобразовать угол падения, скажем луча света, из градусов в радианы, и неделя работы насмарку.
В общем, есть в irrlicht подпроект jirr. Вы ведь помните, что каждый подпроект это плюс бал к оценке качества нашего 3d движка. Данный подпроект поставил своей целью дать возможность вызывать функции irrlicht из такого языка как java. А из java можно использовать средства языка Jython. Как вы еще не знаете, что это за язык. Все очень просто, это реализация на языке java языка Python. Понятнее не стало. Ладно, тогда разложим все по полочкам.
Есть языки компилируемые, и есть языки интерпретируемые, разница между ними в наше время как-то сгладилась, но отличительные черты сохранились. Представьте себе, что меня пригласили читать лекцию, скажем по основам программирования на jython, в campbridge, а английского я, к сожалению, не знаю. Итак, в общем случае, у меня есть два подхода.
Первый из них, это взять текст моей лекции пойти к профессиональному переводчику, который за деньги, зато с гарантией качества переведет этот материал на английский язык, напишет мне этот перевод транслитерацией, даже с учетом особенностей местного акцента (если это хороший переводчик), и я буду говорить студентам: “Хелло ворлд, деар стъюдентс …”, разумеется, что я не понимаю ни слова из того, что говорю, но при условии, что студенты не будут задавать вопросы из аудитории, я достигну поставленных задач.
Другой подход – это взять в аудиторию вместе с собой переводчика, который все что я буду говорить, будет переводить слушателям, а все что они будут спрашивать у меня – будет переводить мне. Минусы и плюсы очевидны, мы приобретаем во втором подходе интерактивность общения, а теряем скорость. Что составляет собой качество – сложный вопрос, иногда важнее скорость, скажем, если это лекция, как у нас в ВУЗах любят, под диктовку, иногда важнее возможность задать вопрос по ходу лекции. Итак, первый подход – подход компилирования, второй – соответственно, интерпретирования.
В случае компилирования, исходный текст программы преобразуется в двоичный код, исполняемый непосредственно на процессоре, во втором же случае исходный код поставляется вместе с исполняющей машиной – тем самым переводчиком, который на лету переводит команды, написанные на высокоуровневом языке (такую программу мы называем скрипт), в двоичный код конкретного процессора.
Python очень известный язык используется как встраиваемый язык программирования в том же openoffice, blender, разные игры используют в качестве скрипта для написания ai именно python. В крайнем случае, даже если вы не будете использовать python для 3d графики, то знания в нем вам пригодятся в веб-программировании. И это в отличии, от всяких “доморощенных” XScript, YScript, ZScript – очень простыми и понятными скриптовыми языками (как пишут о них в рекламе) часто встраиваемыми в некоторые коммерческие и не очень 3d-движки.
Но, и это очень важно, которые не имеют никакого применения вне сферы этого движка. У Python есть множество альтернативных сфер применения. Python не единственный скриптовый язык, есть еще ruby, php, lua, perl и многие другие.
Теперь, разберемся с тем, кто такой Jython? В общем, идея в том, что Python – это не конкретный продукт, а скорее стандарт языка, определяющий то, какими функциями он должен обладать, какие должны быть правила грамматики и лексики языка. Естественно, что могут параллельно существовать несколько реализаций данного стандарта. Также очевидно, что какую бы из реализаций, прочитав толстую книжку вроде “Python 2.1 Bible”, вы не взяли, то можете начинать сразу на ней программировать.
Так есть CPython – реализация интерпретатора Python на C, и Jython – реализация Python на java. Но, и в этом самое вкусное, Jython не просто брат близнец CPython отличающийся только разными командами разработчиков и двумя буквами в названии, но и тем, что предоставляет возможность из скрипта python использовать возможности java.
А, то, что в java за прошедшие годы наработаны и отлажены тысячи библиотек и полезных функций, спорить никто не будет. Последний момент: почему именно jython, а не python. Увы, хоть биндинги для python есть, но их разработка ведется, скажем прямо, нерегулярно в отличие от jirr. Тогда следующий логический вопрос: почему jython а не непосредственно java.
Я не настаиваю на идеальности своего выбора, более того как человек искушенный и в python|jython с одной стороны и java с другой, я бы выбрал именно java, но для учебных целей, чем проще язык тем легче. А сделать “быстрый старт” на python гораздо легче, чем на java.
Кроме того, за счет некоторых своих языковых особенностей python более активно формирует навыки культуры программирования. Разумеется, что в общем случае CPython быстрее, чем Jython, но, может, стоит просто выгрузить из памяти компьютера лишние ненужные утилиты, и начать наслаждаться этим отличным коктейлем.
В такой связке irrlicht – jirr компания Xenoage Software (http://www. xenoage.com) разработала 3d игру футбол Slam Soccer 2006. Получится ли у нас нечто подобное я еще не знаю, но, как говорится “дорогу идущий осилит”.
« Программируем трехмерную графику с Irrlicht . Часть 1 | Программируем трехмерную графику с Irrlicht . Часть 3 » |