Blender-Empire 4

Page 1

“ Ш п а р га л к а ”

“ И лл ю з и я н а L i n u x ” “ С в я ж и с е б е с в ит е р ”

“ Д е л а е м ш к о л у ма г и и ” “ С к р и п ты - э то н е с т р а ш н о ”


От редактора Всем привет. И Вы в очередной раз читаете новенький журнал про Blender. Как Вы заметили, Я изменил формат журнала. Теперь он стал более похож на интернет – журнал. И это связано с тем, что данный формат удобнее читать с экрана монитора. И чем же Вас заинтересует этот номер?

редактор журнала: В ы ч е г ж а н и н В л а д и м и р (noc-emperor)

e-mail: noc-emperor@yandex.ru nocemperor@gmail.com

интернет-журнал

сов. Не пропустите. Это очень интересное интервью.

Далее в номере идут серия уроков. Они сильно отличаются друг от друга. Одном из них Вы узнаете как создать очень красивую свечу с подсвечником (от Эмиля ака Em). В другом научитесь вязать свитеры (от kynjo). Но самым не ординарным Во-первых, Я полностью переделал раз- уроком станет урок от Романа Вяткина, кодел «Новости», он стал менее похож на торый расскажет, как с помощью скритов полное копирование новостей с других можно создавать очень интересные сайтов. И к тому же у меня есть предло- вещи. Его урок оформлен в стиле прожение, для тех кому интересно поуча- граммного кода, так что не пугайтесь и чиствовать в создании журнала. Нужно тайте пояснения. вести несколько разделов журнала, так как они отнимают значительную часть Так же в номере появился раздел времени от подготовки материала. Так «Письма от Вас…». В этих письмах Вы зачто кому интересно, то пишите мне на no- даете мне вопросы на которые я пока не в cemperor@gmail.com. (есть еще неболь- силах правильно ответить, и поэтому я шое требование к ведущему разделы – предложил ответить на них другим читателям. знание английского языка). Во-вторых, в номере есть интервью с, Также имеется не плохая «Галерея» одним из переводчиков книги Essential только из Ваших работ. Ну вроде все. Blender, Дмитрием Гриценко, также он является директором студии «Иллюзио- Удачи! И приятного чтения. никс». Он любезно ответил на несколько вопро-

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

1


Содержание

Новости

Интервью с Дмитрием Гриценко

3

4-6

Свеча с подсвечником

8-10

Свяжи себе свитер

12-13

Скрипт - Календарь

15-22

Шпаргалка

25

Письма от Вас

24

Галерея

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

26-31

www.blender-empire.ru

2


Новости

http://blenderteam.net/

Раздел новостей Я слегка упростил. Вам надо почитать последние новости? Я предлагаю Вам отправиться на те сайты, которые особо тщательно следят за миром. И в любое время, когда у Вас на экране этот журнал Вы можете узнать самые последние новости о мире Blender’а.

http://blenderlearn.blogspot.com/

http://blender3d.org.ua/ интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

3


Интервью с Дмитрием Гриценко Дмитрий Гриценко aka AzoDeeps основной переводчик проекта Essential Blender Ru и директор студии "Иллюзионикс" (г.Волгоград).

Здравствуйте Дмитрий. Хочу Вас от всего сообщества поблагодарить за организацию такого сложного мероприятия, как перевод книги. Это просто великолепно, и к тому же сейчас есть реально хороший материал для тех, кто только начинает изучать Blender. Здравствуйте, Владимир. Со своей стороны, я тоже хотел бы поблагодарить Вас за первый русскоязычный журнал о Blender, который тоже помогает в изучении этой программы.

Интересно, Вам сложно было организовать такое мероприятия? Хотелось бы сразу сказать, что на самом деле перевод был организован не мной, а насколько я знаю, Ldir и PulSun. В процессе перевода многие переводчики не смогли справиться с таким большим объемом информации, так как в книге содержится более 600 страниц. Я подключился к проекту, чуть позже, когда не занятых переводчиками глав, было около четырех. Решив, что перевод, как и в некоторых других проектах будет сделан не до конца, а это отрицательно скажется на самом проекте, так как полностью переве-

интернет-журнал

“ И лл ю з и я н а L i n u x ”

денная книга, может гораздо больше помочь сообществу в изучении Blender, чем недоделки, я приступил к переводу этих глав. Впоследствии оказалось, что не все забронированные главы переведены или переведены не полностью и мне пришлось переводить оставшиеся части. Перевод такого большого материала сложное дело, но всё таки мы справились. А сколько времени прошло с того самого момента когда был объявлен перевод до его полного окончания? Приблизительно три месяца и то, только потому, что почти половина была переведена мною. Если бы остальные тратили бы побольше времени, а не переводили максимум несколько абзацев в неделю, то можно было бы перевести в течении нескольких недель. Я понимаю, что у всех работа, учеба, лень (нужное подчеркнуть :), но лучше быстро сделать, чем постоянно думать о не завершенном деле. Ну, а насчет полного окончания, я бы так не сказал. Осталось ещё немного работы. На данном этапе необходимо исправить ошибки, добавить некоторые изображения и прийти к единому наименованию интерфейса. Также необходимо найти blend файлы примеров, используемых в уроках. Сколько людей участвовало в переводе? Всего участвовало 16 человек, это: Юрий Азовцев (aka gumanoed), PalSan, Y-Gin, happyblender, Дмитрий Бурмистров (aka Demon™), wither, Morphin, VeryCold, SkyWolf, Yadovit, Pnd, Viper_FF, Ldir, GoG, Sfepa. За это им БОЛЬШОЕ СПАСИБО! Приятно видеть, что в сообществе есть сознательные люди.

октябрь 2008

BLEN DER-EM PIRE

Были ли трудности в подготовке материала? Мои познания в английском языке достаточно посредственные, поэтому я использовал онлайн переводчики (google.ru и translate.ru, последний позже был заменен на программу онлайн перевода Language Translator). Текст разбивался на абзацы и между ними вставлялся автоматически пе-

реведенный текст. В 50% случаев вполне понятно переводил google, ещё 25% - Language Translator, оставалось только поменять порядок слов и окончания. Для всех остальных случаев я использовал программу-переводчик Stardict и собственную голову :) или искал помощи на IRC канале #3dmaniacs. Такой способ перевода, позволил значительно сократить сроки перевода. Достаточно большое количество времени занимала разбивка на абзацы и подготовка к переводу, а затем выкладывание на wiki, корректировка ссылок, загрузка некоторых изображений, форматирование подразделов. Все это, могли бы делать люди, которые из английского знают только: «My name is Dima». Будет ли книга издаваться в печатном виде или она будет только онлайн варианте? Скорее всего книга появиться и в печатном виде, так как на форумах были замечены пожелания приобрести именно печатное издание. На выставке Softool'2008 была достигнута предварительная договоренность с компаниями AltLinux и LinuxCenter, которые также заинтересованы в издании книги по Blender. Но для этого необходимо полностью завершить перевод. Возможно кто-то из читателей журнала, сможет помочь, хотя бы просто прочитав текст.

Кому будет или уже принадлежат права на эту книгу? Оригинальная книга распространяется под лицензией OpenDoc, а права пренадлежат Роланду Хессу (Ronald Hess). Проект перевода создан сообществом, поэтому я думаю будет тяжело определить конкретного правообладателя. И еще моли бы вы рассказать про свою студию.

Как давно она существует? И чего начало все ваше существование (проект)? Студия официально открыта с мая 2008 года. До этого с сентября 2007 года проходила подготовка — изучение программ, подбор команды. Анимационная студия — это сложный проект и создания её с нуля долгий процесс. Некоторые

www.blender-empire.ru

4


люди в команде вообще не имели опыта с трехмерной графикой. Почти никто не знал, что есть такая замечательная программа Blender. На чем вы базируетесь (платформа и софт)? Все составляющие в студии Open Source: платформа Linux (Ubuntu, в частности русский проект Runtu), софт соответствующий - для графики, так называемая большая тройка BIG (Blender, Inkscape, Gimp), а также специальная программа для сценаристов Celtx; для звука Audacity, Ardour, LMMS. Для рендера используем встроенный рендер со скриптом FarmerJoe, который позволяет создать рендерферму. На выходе получаем последовательность кадров, которую монтируем в Blender или Cinelerra. Также для рендера используем YafaRay или LuxRender.

Чем знаменита данная студия? Подобие Шрека или Рататуя, мы пока не создали, да и ещё не скоро создадим, поэтому о знаменитости пока рано го-

ворить :) В одно время, хотели сделать один из наших готовых проектов, как Open Movie, но потом пришли к выводу, что нам ещё далеко до команды Peach и у нас получилось бы, не как НАДО делать, а как НЕ НАДО делать. Дело в том, что в Blender существуют удобные инструменты организации работы, о которых мы узнали только с течением времени. Поэтому все наши достижения, можно будет увидеть чуть позже. Ну, а из отличительных черт, можно сказать, что мы используем только свободное программное обеспечение. Какое направление развития? Или проще говоря, чем Вы занимаетесь? Основное направление, это анимационные компьютерные трехмерные фильмы. Но мы также занимаемся архитектурной графикой: интерьеры, экстерьеры и т.д.

Почему именно "Иллюзионикс"? Название «Иллюзионикс» родилось почти сразу. В нем содержится и слово Иллюзион (от франц. видимость, мираж, обман воображения), что является намеком на нереальность мира создаваемого в трехмерной графике и ссылка на Икс (X-графическая оболочка Linux), что подчеркивает используемое нами свободное программное обеспечение. В итоге получилось, что-то вроде: Иллюзия на Linux.

Если есть какие-либо работы (я думаю, они, конечно же, есть), можно ли их показать? Полноценных работ, которые можно показать, немного. Это связано со сложностью создания анимационных проектов, которые начинаются со сценария и раскадровок, и только в заклю-

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

чительной части проекта можно увидеть то, ради чего велась вся предварительная работа. Для примера могу показать несколько кадров из наших работ. Все остальное, в том числе видео, мы разместим на своем сайте www.illusionix.ru, который откроется в ближайшее время. Мы не стали создавать сайт с самого открытия студии, так как считаем, что лучше показывать несколько хороших работ, чем много посредственных. Поэтому «созрели» к сайту только недавно.

Большой ли штат студии? В общей сложности около 30 человек. Это так называемые резервисты и у них различные уровни подготовки в 3д графике. Мы можем привлечь их для больших, серьезных проектов. Основная команда состоит из 7-10 человек. Это специалисты узкого профиля: сценаристы, художники, моделеры, аниматоры, музыканты и т.д., хотя широта кругозора не мешает им иметь знания в других областях проекта. Так же, к нам время от времени приходят новые люди, которым мы помогает погрузиться в таинство 3д графики. Какие планы на будущее? Над чем сейчас работает студия? В данное время идет разработка двух анимационных проектов. Один из них, возможно, станет Open Movie проектом, а другой создается для коммерческого показа на телевидении. Сейчас, главной задачей, является установка

www.blender-empire.ru

5


на твердые финансовые рельсы. Нам, также хотелось бы заняться Renderman совместимыми рендерами, и всвязи с этим, финансировать российских разработчиков скрипта экспортера, да и собственно программистов для Blender, который уже сейчас, достаточно мощная программа для производства трехмерной графики и с каждым днем становится лучше. Надо только немного исправить и дополнить его. А наши разработчики, я думаю, вполне могут составить конкуренцию зарубежным коллегам. Надо только их финансово поддержать. В серьезных студиях всегда есть программисты, так почему же не использовать тех, кто уже знаком с Blender. А также, в ближайших планах у нас, продолжить перевод документации по Blender, в частности, релиз логов, так как считаем, что начальной информации уже достаточно, а вот переводов новых возможностей, явно недостаточно. Огромное спасибо.

И вам, спасибо, Владимир. Удачного Блендинга!

Удачного Блендинга!

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

6


автор: Дима Куликов (DiMeDrRol) Комментарий автора: моя первая органика

ар т лис т


Свеча с подсвечником Начну с того, что если вы совершенно не знаете, как работать в Blender’е, или знаете недостаточно хорошо, вам следует изучить учебник, который вы можете скачать на этом сайте. От начала до конца, желательно. То есть вы должны обладать хотя бы основами работы в Blender. Далее. Рендерить мы будем в Indigo, поэтому желательно, чтобы вы выполняли этот урок в Blender версии 2.45, не выше. Вот ссылка на страницу, где вы можете познакомиться с Indigo, там же сказано, где можно скачать этот рендер и всё, что необходимо для него: http://b3d.mezon.ru/index.php/Indigo (рус) вот ещё несколько ссылок:

http://blenderman.org.ua/indigotut (рус) почти полное руководство по работе с Indigo, хотя и устаревшее, но довольно познавательное,

“Делаем школу магии”

цилиндр, уменьшим его до примерных размеров свечи (относительно стола) и вытянем по оси z (нажмите S+Z): Далее сделаем капли воска. Для этого

http://www.indigorenderer.com/joomla/inde x.php?option=com_openwiki&Itemid=69 - а этот сайт английский, но на нём собрана вся информация об индиго. Надеюсь, вам повезет, как и мне и Indigo будет у вас работать.

от Эмиля (Em)

интернет-журнал

Приступим теперь непосредственно к уроку, если можно это так назвать. Откроем Блендер, и не будем удалять, созданный по умолчанию, куб, а сразу сделаем из него стол. Просто растянем его так, чтобы поверхность целиком доходила до нижнего края вида из камеры, примерно, как на рисунке, вы так же можете сделать его более похожим на стол: Теперь будем делать свечу. Создаем

октябрь 2008

BLEN DER-EM PIRE

Mesh (Delete original)) и соединим все это в один объект (выбираем капли и свечу и нажимаем Ctrl + J), после чего применим модификатор Subsurf, примерно на 2 уровня. Не хватает самого главного - фитилька и огня. Но сделать их очень просто - огонь из сферы, а фитиль из куба:

создадим мета-шар, уменьшим его, копируем, масштабируем (не бойтесь импровизировать, главное правдоподобность и реализм) и надо получить при этом результат, как на рисунке. Потом преобразуем мета в меш (Alt + C,

www.blender-empire.ru

8


Пора заняться подсвечником.

Здесь, по сути, нет ничего сложного. Добавляем куб (рядом с нашей новоиспеченной свечой). Применяем SubSurf. Третьего уровня будет достаточно. В режиме редактирования экструдируем (Е), изменяем размер (S) так, чтобы получилось красиво. Посмотрите на рисунок. Если вам нравится форма моего подсвечника, можете сделать так же. Если нет - придумайте своё! Это будет даже лучше.

Ещё, для ободков вам понадобится меш Torus. При его создании в строке Minor Radius укажите 0.5. Так он будет потоньше.

Итак, свеча и подсвечник готовы! Ура! Займемся материалами и освещением. Indigo не поддерживает ни одной лампы, кроме Sun и меш-лайт. Но у нас стоит зажжённая свеча, значит на улице темно… (смотрите настроики материалов в приложении)

Голубые линии и есть нормали. Если они не направлены на свечу сделайте это сами. Выбираем грань и нажимаем Ctrl+Shift+N или Ctrl+N. Сделайте так, чтобы нормали, как лучи, направлялись на свечу.

Итак. Пора поставить хорошо камеру, если вы до сих пор этого не сделали, и установить размер изображения 240х480. И наконец мы дошли до стадии рендера.

Одним пламенем светло не будет.

интернет-журнал

e-mail: emgf@inbox.ru.

Пишите, буду рад ответить на любой вопрос. Em

Вот какой материал сделайте для золотого подсвечника: Самое главное здесь - ввести в строку NK data надпись Au.nk. Вспоминаете уроки химии?

Теперь осталось нажать на кнопку EKSPORT Scene и подождать несколько часов, в зависимости от вашего компьютера и желаемого качества… Шум можно убрать, например в Photoshope.

А вот для узоров подсвечника нам нужно материал “Золото”. Но в Indigo уже есть готовый! Просто создайте пока материал и не меняйте там ничего. Далее вы увидите, где взять золото.

Теперь нам нужен свет...

ICQ: 476894781

Поэтому создайте несколько плоскостей. И добавьте им тот же материал, что вы сделали для огня.Самое главноепроверить направление нормалей. Смотрите как:

Вот что у меняполучилось и Я немного отредактировал изображение.

Никаких настроек менять не будем, кроме материалов.

октябрь 2008

BLEN DER-EM PIRE

Надеюсь вам хоть чем-нибудь понравился мой урок. Но наверняка возникли вопросы, предложения, пожелания до написания следующего урока. В любом случае вот мои контакты:

www.blender-empire.ru

9


Настройки материалов для:

Реклама

обод (рубин)

свеча

огонь

стол

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

10


автор: Александр Елисеев (wlkdv) Комментарий автора: начинал с блена. через 3 месяцев изучения сделал это

ар т лис т


Свяжи себе свитер 1

Конвертируем полученное в мэш (Alt+C). И добавляем модификатор Array. Вот тут-то и начинается.

4

Чтобы получить нормальную «вязку», будет не достаточно 2-х Array’ев. от kynjo

Данный способ создания вязаного свитера ( и не только его) я подглядел в одном из выпусков галереи сайта 3domen.com. Все очень просто. Начнем. Добавим сплайн (RBM -> Add -> Curve -> Bezier Curve). И делаем с ним примерно то, что вы видите на скриншоте.

Если не верите – попробуйте сами. Решается эта проблема очень легко (см. скрин). Т.е. множим как бы пары витков. Вот этапы добавления модификатора Array:

3

Попробуем теперь анимировать. Здесь тоже пришлось потыкаться. Единственный способ, который я нашел – это модификатором Mesh Deform привязать то, что хотелось, т.е. саму поверхность куска свитера. И так, создаем куб, подгоняем его под нашу болванку, привязываем его кнопкой Bind и ждем. 5 Должно получиться так:

2

Этап 1

Этап 2

Этап 3

Этап 4

Можно сделать тоже самое, через Lattice, но к данному типу объекта невозможно применить симуляцию ни ткани, ни мягких тел (если вы придумали способ пооригинальней предложенного пишите на pf_woow@inbox.ru) Теперь делаем куб, который будет деформировать нашу «вязанку», тканью. Лучше поставить не Cotton, а Denim, т.к. он более жесткий. Жмем Bake. Думаю, вы заметите, что не все так идеально получается (узелки вязки, те что сверху сплющиваются из-за того что деформирующий их «куб» прогибается сверху). Поэтому если найдете способ проще и лучше – пишите.

интернет-журнал

6 октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

12


Стек модификаторов

Если вы все сделали правильно, то увидите примерно такое:

А вот уже в режиме симуляции:

7

8

P.S. То ли баг, то ли так надо: иногда перестает работать кнопка Pinning of cloth при включенной Collision .

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

13


автор: Андрей Изранцев (bdancer)

ар т лис т


Скрипт - Календарь

“ С к р и п т ы - э то н е с тр а ш н о ”

Урок предоставлен Роман Владимирович Вяткин, сетевого администратора с «ИжАвто». Данный урок есть не что иное, как полный код скрипта для создания календаря в Python. Урок оформлен немного не в обычной манере и большей части ориентирован на тех людей кому интересно программирование. Но пропускать его не стоит, Разобраться в нем можно очень легко. Каждое действие подписано и у Вас не будет проблем в понимании урока. К тому же в Вы можете ознакомиться еще с одним уроком Романа если скачаете дополнительные материалы. В этом уроке описан способ снятия фасок при помощи скриптов. Так что не попустите. #!BPY slair_create_calendar.1251.py (http://pronkin.webhop.net/slair/tut2/slair_create_calendar.1251.py) slair_create_calendar.koi8.py (http://pronkin.webhop.net/slair/tut2/slair_create_calendar.koi8.py) slair_create_calendar.utf8.py (http://pronkin.webhop.net/slair/tut2/slair_create_calendar.utf8.py)

# скрипт следует положить в каталог скриптов блендера # у меня он лежит в /usr/lib/blender/.blender/scripts/ это системный каталог # для пользователя это будет /home/<username>/.blender/scripts/ # под windows это будет наверное c:\Documents and Settings\<username>\.blender\ # ну или каталог установки блендера, зависит от типа его установки scene example (http://pronkin.webhop.net/slair/tut2/calendar.blend)

# регистрация в меню

""" Name: 'calendar' Blender: 243 Group: 'AddMesh' Tip: 'Create calendar' """ __author__ = "slair" __url__ = ("") __version__ = "1.0" __bpydoc__ = """ """

import Blender, BPyAddMesh, bpy # модули питона встроенные в блендер, документация по их использованию import math, calendar, datetime # встроенные модули питона, чтобы их использовать надо установить питон

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

# для сокращения писанины, сократим вызовы некоторых функций PI = math.pi # число пи Vector = Blender.Mathutils.Vector # конструктор класса Vector def setup_camera(): """ установка камеры """ scene=Blender.Scene.GetCurrent() # берём текущую сцену cam = scene.objects.camera # камера из сцены if cam: # если камера есть в сцене, если нет то ничего не будет, то есть создастся только объект календаря if cam.constraints: # если у камеры были какие то привязки constraints_to_remove=map(None, cam.constraints) # copy to new array map(cam.constraints.remove, constraints_to_remove) # удаляем привязки камеры cam.loc = Vector(19.2, 0, 0) # задаём новую позицию камеры cam.rot = (PI/2, 0, PI/2) # направление камеры render = scene.getRenderingContext() # получаем параметры визуализации сцены if render: render.sFrame=1 # устанавливаем начальный кадр визуализации render.eFrame=1 # устанавливаем конечный кадр визуализации render.sizeX=132*3 # размеры выходной картинки по Х render.sizeY=176*3 # ... по Y scene.update() # обновить параметры сцены Blender.Window.RedrawAll() # перерисовать все окна def get_create_material(name, **default_material): """ если материал с указанным именем name существует - возвращает его иначе создаёт новый материал с именем name и параметрами и возвращает его """ try: # обработка исключения mat = Blender.Material.Get(name) # пробуем получить материал по имени except: # не вышло :( mat = Blender.Material.New(name) # создаём новый материал for key in default_material.keys():

www.blender-empire.ru

15


try: mat.__setattr__(key, default_material[key]) # устанавливаем некоторые переданные аттрибуты COLOR и.т.д. except: print "Error! %s - unknown material parameter!"%key # неверный аттрибут, перечень аттрибутов можно посмотреть тут в разделе Instance Variable Summary (http://www.blender.org/documentation/245PythonDoc/Material.Materialclass.html) return mat def create_mesh(name, v, f, m=None): """ создаём объект-меш, с именем name v - массив вертексов f - массив фэйсов m - материал """ scene = Blender.Scene.GetCurrent() # текущая сцена mesh = Blender.Mesh.New(name) # создаём новый меш-блок с именем mesh.verts.extend(v) # добавляем к мешу вертексы mesh.faces.extend(f) # добавляем фэйсы if m: # если задан материал, mesh.materials+=[m] # ... добавляем его ob = scene.objects.new(mesh, name) # создаём новый блок объекта, связанный с мешем, имя такое же как и у меша scene.update() # апдейтим сцену Blender.Window.RedrawAll() # перерисовываем интерфейс return ob # возвращаем созданный объект def create_text3d(name, text, pos, fontpath, size=1.0, spacing=1.0, ext=0.1, bevdep=0.010, bevres=1, mat=None): """ создаём объект curve с заданным текстом name - имя нового объекта text - текст pos - позиция центра объекта fontpath - путь к шрифту size - размер шрифта spacing - расстояния между буквами ext - величина выдавливания (extrude) bevdep - глубина бевела bevres - бевел резолюшн mat - материал """ global T_MainScale div = T_MainScale.val # "делитель" - коэффициент общего мас-

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

штаба text3d = Blender.Text3d.New(name) # создаём 3д-текст с указанным именем f = Blender.Text3d.Font.Load(fontpath) # загружаем шрифт text3d.setFont(f) # устанавливаем параметры: шрифт text3d.setText(text) # текст text3d.setSize(size) # размер шрифта text3d.setSpacing(spacing) # расстояние между буквами text3d.setExtrudeDepth(ext) # глубина выдавливания text3d.setExtrudeBevelDepth(bevdep) # величина скругления (bevel) text3d.setBevelAmount(bevres) # количество граней при скруглении (bevel resolution) text3d.setAlignment(Blender.Text3d.MIDDLE) # выравние текста (щас посредине) scene = Blender.Scene.GetCurrent() # берём текущую сцену ob = scene.objects.new(text3d, name) # в ней создаём объект, связанный с нашим текстом-кривой ob.RotX = PI/2 # задаём ориентацию по оси X ob.RotZ = PI/2 # ... по оси Z #~ ob.setDrawType(1) # это смена режима отображения отдельного объекта (SHADED, SOLID, WIRE, BOUNDS) scene.update() # апдейтим сцену и перерисовываем интерфейс, Blender.Window.RedrawAll() # если этого не сделать, блендер не рассчитает boundingBox вновь созданного объекта bb = ob.boundingBox # берём bounding box, он нам нужен для точного центрирования объекта cbb = Vector(0, 0, 0) # это будет центр объекта, на основании bounding box'а for i in bb: # суммируем все вершины ограничивающего куба (bounding box'а) cbb = cbb+i # объект создавался в точке 0, 0, 0 cbb = cbb*div # масштабируем полученный вектор - это расчитанный геометрический центр ограничивающего объект куба pos = -cbb+pos # новая позиция объекта ob.LocX, ob.LocY, ob.LocZ = pos.x, pos.y, pos.z # устанавливаем объект в новую локацию scene.update() # апдейтим сцену Blender.Window.RedrawAll() # и интерфейс curve = Blender.Curve.Get(name) # берём кривую с текстом, материал накладывается именно на объект типа Curve try: if mat: # если задан материал для 3д-текста curve.materials = [mat] # применяем его к нашему тексту, материал хранится в объекте кривой (curve) except: print "error placing material on curve object!" return ob # возвращаем созданный объект

www.blender-empire.ru

16


def masshtab(array,div): """ масштабирование массива, обычно это массив вертексов возвращается новый массив с отмасштабированными элементами функцию можно ускорить и упростить, используя функцию питона map """ res = [] for item in array: res.append([item[0]*div, item[1]*div, item[2]*div]) return res

def create_calendar(): """создание календаря""" # глобальные переменные, для юзер интерфейса global T_Year, T_Month, T_MainScale, T_CH, T_CW, T_LBH, T_UBH global T_MF, T_MSIZE, T_MSPACING, T_MEXT, T_MBEVDEP, T_MBEVRES global T_NF, T_NSIZE, T_NSPACING, T_NEXT, T_NBEVDEP, T_NBEVRES global T_WDF,T_WDSIZE,T_WDSPACING,T_WDEXT,T_WDBEVDEP,T_WDBEVRES scene = Blender.Scene.GetCurrent() # текущая сцена cal_width = T_CW.val # ширина календаря cal_height = T_CH.val # высота экрана для календаря ubh = T_UBH.val # высота верхней панели lbh = T_LBH.val # высота нижней панели div = T_MainScale.val # глобальный масштаб h_cells = 8 # количество клеток по горизонтали v_cells = 8 # количество клеток по вертикали month = T_Month.val # месяц year = T_Year.val # год

# это тоже плоскость, но по размеру календаря, закомментарено #~ vertsdata = [ #~ [0,-(cal_width/2),-(cal_height/2)], # (0) #~ [0,-(cal_width/2),(cal_height)/2], # (1) #~ [0,(cal_width/2),(cal_height)/2], # (2) #~ [0,(cal_width/2),-(cal_height/2)] # (3) #~ ]

# плоскость (подложка, бумага, paper) на которой будет всё твориться, она в два раза шире и выше календаря vertsdata = [ [0,-(cal_width), -(cal_height)], # (0) [0,-(cal_width), (cal_height)], # (1) [0,(cal_width), (cal_height)], # (2)

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

[0,(cal_width), -(cal_height)] # (3) ] vertsdata = masshtab(vertsdata,div) # масштабируем плоскость facedata = ([0,1,2,3]) # плоскость состоит из одного фэйса

mat = get_create_material("paper", R=1.0, G=1.0, B=1.0) # раз бумага, так и назовём paper, и будет оно по умолчанию белого цвета # если материал с именем paper уже есть, то будет использоваться он, параметры R, G, B будут проигнорированы ob_paper = create_mesh("paper", vertsdata, facedata, mat) # создаём объект # верхняя панель, закомментарено, было для отладки и контроля размеров #~ vertsdata = [ #~ [0,-(cal_width/2),(cal_height/2)-ubh], # (0) #~ [0,-(cal_width/2),(cal_height)/2], # (1) #~ [0,(cal_width/2),(cal_height)/2], # (2) #~ [0,(cal_width/2),(cal_height/2)-ubh] # (3) #~ ] #~ vertsdata = masshtab(vertsdata,div) #~ facedata = ([0,1,2,3]) #~ create_mesh("upper_bar_proxy",vertsdata,facedata)

# нижняя панель, тоже закомментарено #~ vertsdata = [ #~ [0,-(cal_width/2),-((cal_height/2)-lbh)], # (0) #~ [0,-(cal_width/2),-((cal_height)/2)], # (1) #~ [0,(cal_width/2),-((cal_height)/2)], # (2) #~ [0,(cal_width/2),-((cal_height/2)-lbh)] # (3) #~ ] #~ vertsdata = masshtab(vertsdata,div) #~ facedata = ([0,1,2,3] ) #~ create_mesh("lower_bar_proxy",vertsdata,facedata)

# прокси объект календаря, он состоит из граней, то есть из двухвертексных фэйсов # при рендере он не будет виден, если не включить соответствующий режим # нужен для контроля позиционирования объектов

vertsdata = [ [0,-(cal_width/2), (cal_height/2)-ubh], [0,(cal_width/2), (cal_height/2)-ubh] ] dh = cal_width/float(h_cells)

# (0) верхняя левая точка # (1) верхняя правая точка

# размер клетки по горизонтали

www.blender-empire.ru

17


dv = (cal_height-ubh-lbh)/float(v_cells) # размер клетки по вертикали, календарь не размещается на панелях # ... значит вычитаем верхнюю и нижнюю панели for j in xrange(1,v_cells+1): # цикл по вертикали for i in xrange(2,2+h_cells+1): # цикл по горизонтали vertsdata.append([0, -(cal_width/2)+(dh*(i-2)), ((cal_height/2)-ubh)-dv*j]) # добавляем точки

vertsdata.append([0, 0, (cal_height/2)-ubh-dv/2]) # добавляем точку центра для названия месяца i_month_center = len(vertsdata)-1 # запоминаем её индекс sp = vertsdata[2] # стартовая точка для расчёта центров клеток i_letter_centers = [] # массив, будем тут центры клеток запоминать for j in xrange(v_cells-1): # по вертикали for i in xrange(h_cells): # по горизонтали vertsdata.append([sp[0], sp[1]+dh/2+dh*i, sp[2]-dv/2-dv*j]) # добавляем центры i_letter_centers.append(len(vertsdata)-1) # и запоминаем их в массив

facedata = [[0, 1], [0, 2], [1, 2+h_cells]] # верхние грани, три штуки, это клетка для названия месяца for i in i_letter_centers: # цикл по центрам клеток min1=min2=min3=min4=1e10 # "самопальная" очередь для хранения минимальных расстояний от центра клетки до её краёв, делаем заведомо большим i_min1=i_min2=i_min3=i_min4=0 # такая же очередь для хранения их индексов, ближайших точек должно быть только 4

c = Vector(vertsdata[i])

интернет-журнал

# вектор созданный из центра клетки, для

октябрь 2008

BLEN DER-EM PIRE

математических операций с векторами # лениво было писать математический алгоритм заполнения граней, поэтому был придуман такой алгоритм с минимальными расстояниями for j in xrange(2, (h_cells+1)*v_cells+2): # цикл по всем точкам прокси клетки кроме верхних двух tp = Vector(vertsdata[j]) # тестовая точка lv = tp - c # вектор, получаемый вычитанием вектора центра клетки из вектора тестовой точки if (lv.length<=min1): # сравниваем длину полученного вектора со значениями из нашей очереди min4=min3; i_min4=i_min3 # если меньше то сдвигаем очередь, min3=min2; i_min3=i_min2 # в результате цикла min2=min1; i_min2=i_min1 # очередь будет содержать 4 индекса самых ближайших к центру клетки точек min1=lv.length; i_min1=j facedata.append([i, i_min1]) ближайшим краям facedata.append([i, i_min2]) facedata.append([i, i_min3]) facedata.append([i, i_min4])

# добавляем грани из центра клетки к её

# # #

vertsdata = masshtab(vertsdata,div) # масштабируем вертексы прокси клетки в соответствии с заданным масштабом # это цикл по горизонтали, он заполняет горизонтальные грани for j in xrange(v_cells): # цикл по вертикали for i in xrange(h_cells): # цикл по горизонтали i_1 = 2+((h_cells+1)*j)+i # вычисляем индексы точек i_2 = 3+((h_cells+1)*j)+i facedata.append([i_1, i_2]) # и соединяем их гранями (edges) между собой

# такой же цикл, но обратный, тут заполняем вертикальные грани for j in xrange(h_cells+1): for i in xrange(v_cells-1): i_1 = 2+j+(h_cells+1)*i i_2 = 2+j+(h_cells+1)+(h_cells+1)*i facedata.append([i_1, i_2])

facedata.append([i_month_center,0]) # добавляем клетку для названия месяца facedata.append([i_month_center,1]) # это грани идущие из центра названия месяца facedata.append([i_month_center,2]) # к краям клетки facedata.append([i_month_center,2+h_cells]) #

www.blender-empire.ru

18


ob_calendar_proxy = create_mesh("calendar_proxy", vertsdata, facedata) # создаём меш объект для прокси ob_paper.makeParent([ob_calendar_proxy], 0, 1) # "парентим" его к подложке (paper)

# массив локализованных названий месяцев month_local = ['', 'ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ', 'ИЮЛЬ', 'АВГУСТ', 'СЕНТЯБРЬ', 'ОКТЯБРЬ', 'НОЯБРЬ', 'ДЕКАБРЬ'] month_name = month_local[month] # локализованное название выбранного месяца mat = get_create_material("month", R=1.0, G=0.0, B=0.0) # материал для названия месяца

# создаём объект - кривую с текстом названия месяца и выбранным материалом ob_month = create_text3d("month", month_name, Vector(vertsdata[i_month_center]), T_MF.val, T_MSIZE.val, T_MSPACING.val, T_MEXT.val, T_MBEVDEP.val, T_MBEVRES.val, mat) ob_calendar_proxy.makeParent([ob_month], 0, 1) # "парентим" его к прокси объекту

dw=("", "П", "В", "С", "Ч", "П", "С", "В") # локализованные названия дней недели mat1 = get_create_material("workdays", R=0.0, G=1.0, B=0.0) # материал для рабочих дней недели mat2 = get_create_material("holydays", R=0.0, G=1.0, B=1.0) # материал для выходных дней

for i in xrange(1, 8): # цикл создания дней недели if i in [6, 7]: # выходные дни ob_dummy = create_text3d("dw"+str(i), dw[i], Vector(vertsdata[i_letter_centers[i]]), T_WDF.val, T_WDSIZE.val, T_WDSPACING.val, T_WDEXT.val, T_WDBEVDEP.val, T_WDBEVRES.val, mat2) ob_calendar_proxy.makeParent([ob_dummy], 0, 1) # дни недели тоже "парентим" к прокси объекту else: # рабочие дни ob_dummy = create_text3d("dw"+str(i), dw[i], Vector(vertsdata[i_letter_centers[i]]), T_WDF.val, T_WDSIZE.val, T_WDSPACING.val, T_WDEXT.val, T_WDBEVDEP.val, T_WDBEVRES.val, mat1) ob_calendar_proxy.makeParent([ob_dummy], 0, 1) # дни недели тоже "парентим" к прокси объекту

mat1 = get_create_material("workn_n_days", R=0.0, G=0.5, B=0.0) # материал рабочих дней недели mat2 = get_create_material("holy_n_days", R=0.0, G=0.5, B=0.5) # материал для выходных дней

for i in xrange(1, 7): # циклы заполнения календаря днями недели for j in xrange(1, 8): # то есть мы пробегаем по каждой клетке, предназначенной для числа дня index = i*8+j # и ставим там соответствующее число if (dn>0)and(dn<=ld): # то есть с 1-го числа и по последний день месяца if j in [6, 7]: # создаём выходные дни ob_dummy = create_text3d("num"+str(index), str(dn), Vector(vertsdata[i_letter_centers[index]]), T_NF.val, T_NSIZE.val, T_NSPACING.val, T_NEXT.val, T_NBEVDEP.val, T_NBEVRES.val, mat2) ob_calendar_proxy.makeParent([ob_dummy], 0, 1) # дни недели тоже "парентим" к прокси объекту else: # создаём рабочие дни ob_dummy = create_text3d("num"+str(index), str(dn), Vector(vertsdata[i_letter_centers[index]]), T_NF.val, T_NSIZE.val, T_NSPACING.val, T_NEXT.val, T_NBEVDEP.val, T_NBEVRES.val, mat1) ob_calendar_proxy.makeParent([ob_dummy], 0, 1) # дни недели тоже "парентим" к прокси объекту dn += 1 # переходим к следующему дню scene.objects.selected = [] # убираем выделение в сцене, то есть делаем всё невыделенным, так, на всякий случай # тут создание объекта завершается def draw(): """ отрисовка интерфейса пользователя и запуск или отмена выполнения скрипта """

sh_d, ld = calendar.monthrange(year, month) # получаем день недели первого дня месяца и количество дней в месяце dn = -sh_d+1 # сдвиг если месяц начинается не с понедельника

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

19


# глобальные переменные уже инициализированы, но в них занесены только значения global T_Year, T_Month, T_MainScale, T_CH, T_CW, T_LBH, T_UBH global T_MF, T_MSIZE, T_MSPACING, T_MEXT, T_MBEVDEP, T_MBEVRES global T_NF, T_NSIZE, T_NSPACING, T_NEXT, T_NBEVDEP, T_NBEVRES global T_WDF,T_WDSIZE,T_WDSPACING,T_WDEXT,T_WDBEVDEP,T_WDBEVRES global EVENT_NOEVENT, EVENT_CREATE, EVENT_EXIT, EVENT_SELMF,EVENT_SELWDF,EVENT_SELNF # на интерфейсе названия месяцев будут на английском языке, можно сделать на русском, но это зависит от платформы, могут быть проблемы с кодировками m_month = "January %x1|February %x2|March %x3|April %x4|May %x5|June %x6|July %x7|August %x8|September %x9|October %x10|November %x11|December %x12" Blender.BGL.glClear(Blender.BGL.GL_COLOR_BUFFER_BIT) # очистка окна spx, spy = 10, 430 # начальные координаты для отрисовки интерфейса

Blender.BGL.glRasterPos2d(spx, spy+30) # устанавливаем начальную позицию для текстовой метки Blender.Draw.Text("Main parameters") # рисуем текстовую метку # рисуем год T_Year = Blender.Draw.Number("Year:", EVENT_NOEVENT, spx, spy, 100, 20, T_Year.val, 1980, 3000, "Год") # месяц T_Month = Blender.Draw.Menu(m_month, EVENT_NOEVENT, spx+110, spy, 100, 20, T_Month.val, "Месяц") # масштаб T_MainScale = Blender.Draw.Slider("Main scale:", EVENT_NOEVENT, spx+220, spy, 210, 20, T_MainScale.val, 0.001, 1, 0, "Общий масштаб") # ширина экрана для календаря T_CW = Blender.Draw.Number("Screen width:", EVENT_NOEVENT, spx, spy-30, 210, 20, T_CW.val, 32, 1280, "Ширина экрана") # высота экрана T_CH = Blender.Draw.Number("Screen height:", EVENT_NOEVENT, spx+220, spy-30, 210, 20, T_CH.val, 32, 1280, "Высота экрана") # размер верхней панели T_UBH = Blender.Draw.Number("Upper bar height:", EVENT_NOEVENT, spx, spy-60, 210, 20, T_UBH.val, 0, 1024, "Высота верхей панели, обычно используется для индикаторов сети и батарей.") # нижняя панель T_LBH = Blender.Draw.Number("Lower bar height:", EVENT_NOEVENT, spx+220, spy60, 210, 20, T_LBH.val, 0, 1024, "Высота нижней панели, обычно используется для подсказок к кнопкам.")

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

# параметры шрифта для месяца Blender.BGL.glRasterPos2d(spx, spy-80) Blender.Draw.Text("Month name parameters") T_MF = Blender.Draw.String("Font for month name:", EVENT_NOEVENT, spx, spy-110, 370, 20, T_MF.val, 255, "Шрифт для названия месяца") Blender.Draw.Button("Select", EVENT_SELMF, spx+380, spy-110, 50, 20, "Выбрать файл шрифта") T_MSIZE = Blender.Draw.Number("Size:", EVENT_NOEVENT, spx, spy-140, 210, 20, T_MSIZE.val, 0.001, 10, "Размер шрифта") T_MSPACING = Blender.Draw.Number("Spacing:", EVENT_NOEVENT, spx+220, spy140, 210, 20, T_MSPACING.val, 0.001, 10, "Межбуквенный интервал") T_MEXT = Blender.Draw.Number("Extrude depth:", EVENT_NOEVENT, spx, spy-170, 150, 20, T_MEXT.val, 0.001, 5.0, "Выдавливание") T_MBEVDEP = Blender.Draw.Number("Bevel amount:", EVENT_NOEVENT, spx+155, spy-170, 150, 20, T_MBEVDEP.val, 0.001, 2.0, "Величина фасок") T_MBEVRES = Blender.Draw.Number("Bevel resol.:", EVENT_NOEVENT, spx+310, spy-170, 120, 20, T_MBEVRES.val, 1, 32, "Скругление фасок") # параметры шрифта для дней недели Blender.BGL.glRasterPos2d(spx, spy-190) Blender.Draw.Text("Weekdays parameters") T_WDF = Blender.Draw.String("Font for weekdays:", EVENT_NOEVENT, spx, spy-220, 370, 20, T_WDF.val, 255, "Шрифт для названий дней недели") Blender.Draw.Button("Select", EVENT_SELWDF, spx+380, spy-220, 50, 20, "Выбрать файл шрифта") T_WDSIZE = Blender.Draw.Number("Size:", EVENT_NOEVENT, spx, spy-250, 210, 20, T_WDSIZE.val, 0.001, 10, "Размер шрифта") T_WDSPACING = Blender.Draw.Number("Spacing:", EVENT_NOEVENT, spx+220, spy250, 210, 20, T_WDSPACING.val, 0.001, 10, "Межбуквенный интервал") T_WDEXT = Blender.Draw.Number("Extrude depth:", EVENT_NOEVENT, spx, spy-280, 150, 20, T_WDEXT.val, 0.001, 5.0, "Выдавливание") T_WDBEVDEP = Blender.Draw.Number("Bevel amount:", EVENT_NOEVENT, spx+155, spy-280, 150, 20, T_WDBEVDEP.val, 0.001, 2.0, "Величина фасок") T_WDBEVRES = Blender.Draw.Number("Bevel resol.:", EVENT_NOEVENT, spx+310, spy-280, 120, 20, T_WDBEVRES.val, 1, 32, "Скругление фасок") # параметры для дней месяца Blender.BGL.glRasterPos2d(spx, spy-300) Blender.Draw.Text("Numbers parameters") T_NF = Blender.Draw.String("Font for numbers:", EVENT_NOEVENT, spx, spy-330, 370, 20, T_NF.val, 255, "Шрифт для названий дней недели") Blender.Draw.Button("Select", EVENT_SELNF, spx+380, spy-330, 50, 20, "Выбрать файл шрифта") T_NSIZE = Blender.Draw.Number("Size:", EVENT_NOEVENT, spx, spy-360, 210, 20, T_NSIZE.val, 0.001, 10, "Размер шрифта") T_NSPACING = Blender.Draw.Number("Spacing:", EVENT_NOEVENT, spx+220, spy-

www.blender-empire.ru

20


360, 210, 20, T_NSPACING.val, 0.001, 10, "Межбуквенный интервал") T_NEXT = Blender.Draw.Number("Extrude depth:", EVENT_NOEVENT, spx, spy-390, 150, 20, T_NEXT.val, 0.001, 5.0, "Выдавливание") T_NBEVDEP = Blender.Draw.Number("Bevel amount:", EVENT_NOEVENT, spx+155, spy-390, 150, 20, T_NBEVDEP.val, 0.001, 2.0, "Величина фасок") T_NBEVRES = Blender.Draw.Number("Bevel resol.:", EVENT_NOEVENT, spx+310, spy-390, 120, 20, T_NBEVRES.val, 1, 32, "Скругление фасок")

# кнопки Blender.Draw.Button("Create", EVENT_CREATE, spx, spy-420, 210, 20, "Создать календарь") Blender.Draw.Button("Exit", EVENT_EXIT, spx+220, spy-420, 210, 20, "Выход")

elif evt == EVENT_SELMF: Blender.Window.FileSelector(select_mf, "Select font file", T_MF.val) elif evt == EVENT_SELWDF: Blender.Window.FileSelector(select_wdf, "Select font file", T_WDF.val) elif evt == EVENT_SELNF: Blender.Window.FileSelector(select_nf, "Select font file", T_NF.val) elif evt == EVENT_CREATE: # кнопка создания create_calendar() # создать календарь setup_camera() # отпозиционировать камеру # интерфейс скрипта остаётся в окне если необходимо убрать его раскомментарьте нижеследующие строки #~ Blender.Draw.Exit() # выход из скрипта

def event(evt, val): """обработка нажатий клавиш""" if evt == Blender.Draw.ESCKEY: # если нажать ESC и если не активен ни один элемент интерфейса скрипт завершит свою работу Blender.Draw.Exit() return

def main(): # поскольку юзер интерфейс тут будет достаточно большим # мы не будем использовать PupBlock, а используем целое окно блендера Blender.Draw.Register(draw, event, button) # запускаем юзер интерфейс # вот и всё, или мы сделали календарь или нет # если всё прошло успешно то рендер (F12) должен выдать нечто подобное

def select_mf(filename): # callback функция, вызываеваемая из файлселектора при подтверждении выбора файла global T_MF T_MF.val = filename

def select_wdf(filename): # callback функция, вызываеваемая из файлселектора при подтверждении выбора файла global T_WDF T_WDF.val = filename

def select_nf(filename): # callback функция, вызываеваемая из файлселектора при подтверждении выбора файла global T_NF T_NF.val = filename def button(evt): """обработка нажатий на кнопки интерфейса""" global T_MF global EVENT_NOEVENT, EVENT_CREATE, EVENT_EXIT, EVENT_SELMF,EVENT_SELNF if evt == EVENT_EXIT: Blender.Draw.Exit() # кнопка выход

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

21


# скрипт стартует именно отсюда # подготовка к запуску скрипта now=datetime.datetime(2007, 9, 1).today() # получаем текущую дату # создаём виджеты T_Year = Blender.Draw.Create(now.year) # год T_Month = Blender.Draw.Create(now.month) # месяц T_MainScale = Blender.Draw.Create(0.1) # глобальный масштаб T_CW = Blender.Draw.Create(132) # ширина календаря T_CH = Blender.Draw.Create(176) # высота календаря T_UBH = Blender.Draw.Create(19) # высота верхней панели (индикаторы сети, батареи) T_LBH = Blender.Draw.Create(18) # высота нижней панели (софт клавиши, кнопка меню)

# параметры названия месяца T_MF = Blender.Draw.Create(bpy.config.fontDir+"adg85__c.pfb") # шрифт для названия месяца T_MSIZE = Blender.Draw.Create(2.0) # размер шрифта месяца T_MSPACING = Blender.Draw.Create(1.0) # расстояние между буквами T_MEXT = Blender.Draw.Create(0.1) # глубина выдавливания T_MBEVDEP = Blender.Draw.Create(0.010) # глубина скругления T_MBEVRES = Blender.Draw.Create(4) # количество фасок скругления

EVENT_SELWDF = 5 # нажатие кнопки выбора файла шрифта для названий дней недели EVENT_SELNF = 6 # нажатие кнопки выбора файла шрифта для чисел месяца

# параметры подготовлены, запускаем интерфейс if __name__=='__main__': main() # запуск главной функции, почему так - читайте документацию по питону, это урок о скриптах блендера

Если возникнут вопросы то обращайтесь контакты: e-mail: s9lair@mail.ru ICQ: 206626810

# параметры названий дней недели T_WDF = Blender.Draw.Create(bpy.config.fontDir+"bng85__c.pfb") # шрифт T_WDSIZE = Blender.Draw.Create(2.0) # размер шрифта T_WDSPACING = Blender.Draw.Create(1.0) # расстояние между буквами T_WDEXT = Blender.Draw.Create(0.1) # глубина выдавливания T_WDBEVDEP = Blender.Draw.Create(0.010) # глубина скругления T_WDBEVRES = Blender.Draw.Create(4) # количество фасок скругления

# параметры чисел месяца T_NF = Blender.Draw.Create(bpy.config.fontDir+"ocr55__c.pfb") # шрифт T_NSIZE = Blender.Draw.Create(1.5) # размер шрифта T_NSPACING = Blender.Draw.Create(1.0) # расстояние между буквами T_NEXT = Blender.Draw.Create(0.1) # глубина выдавливания T_NBEVDEP = Blender.Draw.Create(0.010) # глубина скругления T_NBEVRES = Blender.Draw.Create(4) # количество фасок скругления

# события генерируемые и обрабатываемые в юзер интерфейсе EVENT_NOEVENT = 1 # нет события EVENT_CREATE = 2 # нажатие кнопки создать (Create) EVENT_EXIT = 3 # нажате кнопки выход (Exit) EVENT_SELMF = 4 # нажатие кнопки выбора файла шрифта для названия месяца

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

22


автор: Степан Крани Комментарий авторы: первая работа в блендере после кубиков и сфер. спасибо всем, кто подсказывал в ВИПе

ар т лис т


нис Письмо от: Де od@rambler.ru p E-mail: gelos-

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

gel Пись o sм pod о от @r : Д е am н ble ис r.ru

более к вам как к ь с ю а щ а р ть нь! Об и к кому ес , р е д Добрый де н е л Б на программу х блендера а м е л знающему б о р п сти отворить о о правдиво контакт. Го ь т а д га и , . румах т сомнения ю а в разных фо ы з ы в ндера ов у меня движке Бле м ветов юзер о в о гр и м в блема оздал рядо с , у р го Так вот: про л а д т.д., что я соз движения и а н - суть в том б у к л а в аммиро (Game) гора ы гр и м куб, запрогр и ж е ем ко вхожу в р ???(( Вобщ а м е л но как толь б о р п жим в чём же входе в ре и р исчезает((( п у м е ч о ой - п ты? вопрос так ругие обьек д т ю а з е ч с игры, и Спасибо.

ail:

Еще раз приветствую всех читателей. Этот небольшой раздел посвящен Вашим письмам. На некоторые письма Я смог ответить, или, по крайней мере, Я нашел информацию, которая помогла людям. Но вот остались письма, которые пока мне не по силам. И все кто читает эти страницы и знает, как ответь на эти вопросы, пожалуйста, ответьте. Письма можно присылать как авторам писем, так и лично мне. Там уж Я сам разберусь.

До До бры ид воль й ден е чес я — но д ь. и п кой сдел авно к во роч) исти ать у м .М е зм т каж ож од (с ко рехм ня р бы дым ност ель д стям ерн одил ь у От ло ви пал дви олжн и, су ю м ась од куд с ь ст г а дн т а ц ча л м а вз о, ка ем о ть вс дава авам ель ранн ч игр ед и, ял тд ки ей ть м ел а я на аю н ицин ась и е мы ельн кист поль ыш овец кан удар а уда у (а п дея? шцы о, чт ью ц зова ами т о и н е о р ны том Дел как бы лик елю ня тов ых тия (н я е т по х. В п у зна о в сокр при ом и как н т н за руки е им ольк ял, роце ю ан ом, ащаю этом е ч ч По то ил уст ют о о ба то б ссе о атом то я тся. р р я и о и б мо вил ин оены том абан льш уче ю) и изу, о д а па ель сь м е ме , ка чти щик инст ния еще ло к и точ чку руки ысл лкое ие с твор и) во во м гры и ь Ре ки з и п , вло сде дви трукт тся общ узыре ал о ж ни каз ить лать жени уры в рук е поьн уж о ать е отв ах, не е. в л яа г де еча и ра отов и это нато , ка эту р кую м ют мы , к т ые у р и с это ку ехм на дела и. б ну шцы на е а вс р ю к т ? е р раба рную Бл про Реа отор абот ь в Б н аб ки ен г ота ную де рам льно ые ске ленд му ра ет мо ер л л ,н с о с (кото и сд жно етов е? Е е с од р д л т ьл ер ая р ать "на ля жи ра и Б а н б л е те щ го отает кую ива енкод ть о о )? тдел тдел " ьн ьоо т E-m

Письма от Вас...

www.blender-empire.ru

24


Шпаргалка Каждый раз, когда Вы скачиваете новое обновление Blender’а, в нем нет никакой help’а, чтобы начать работу с программой. В комплект с программой идет только pdf’ый файл, где расписаны только основные функции программы. Данный файл имеет несколько ошибок и самое главное он на английском языке. И Вам программа сразу перестает нравиться и Вы возвращаетесь к 3D max’у или другой программе. Таким образом, русское сообщество любителей Blender’а не растет. Так что же делать в этом случае?

И тут у меня есть предложение. Прежде, чем бросить изучать Blender посмотрите эту шпаргалку. Может Вы измените свое мнение о Blender’е?!

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

http://blender-empire.ru/wp-content/uploads/2008/10/shpora.pdf www.blender-empire.ru

25


Галерея

работа: Школа магии автор: Em описание: Победитель сентябрьского конкурса Ваша модель на баннере BlenderУкраина, с темой конкурса "Школьная пора". интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

работа: Сириус Громовержец автор: dengess описание: Победитель октябрьского конкурса Ваша модель на баннере BlenderУкраина, с темой конкурса "Летательный аппарат".

www.blender-empire.ru

26


автор: Denisu G0R61N614 Grn описание:Моя первая удачная, на мой взгляд, работка.

автор: Denisu G0R61N614 Grn описание: Собор Парижской Богоматери

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

27


автор: Андрей riff Лесников комментарий автора: вечером делать нечгео было просто...

работа: Peugeot Design Contest 2008 автор: cooler_inc комментарий автора: Еще один пыжик для конкурса, естественно не прошедший жюри.Вобщем что расписывать, мне просто интересно ваше мнение:) Спасибо! интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

28


автор: Дмитрий Малышев

автор: Степан Крани комментарий автора: шутка про буратино

автор: Виталий 仁者 Исаков интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

29


автор: Дмитрий Gopych Гапоненко комментарий автора: Экспериментик...

интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

30


firemans

Мышеловки от Denis(Axelerator)

Em

NurZhaN интернет-журнал

октябрь 2008

BLEN DER-EM PIRE

www.blender-empire.ru

31


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.