Michel Anders - Написание скриптов для Blender 2.49

Тут можно читать онлайн Michel Anders - Написание скриптов для Blender 2.49 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Программы. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Написание скриптов для Blender 2.49
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.38/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Michel Anders - Написание скриптов для Blender 2.49 краткое содержание

Написание скриптов для Blender 2.49 - описание и краткое содержание, автор Michel Anders, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Расширьте мощность и гибкость Блендера с помощью Питона: высокоуровневого, легкого для изучения скриптового языка

Написание скриптов для Blender 2.49 - читать онлайн бесплатно полную версию (весь текст целиком)

Написание скриптов для Blender 2.49 - читать книгу онлайн бесплатно, автор Michel Anders
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Мы хотим, чтобы наши семена не просто двигались вместе с нашей семенной головкой, а следовали за любым локальным изгибом и самостоятельно ориентировались перпендикулярно поверхности головки, так чтобы мы могли, например, искривить главный меш с помощью пропорционального редактирования, и все подключенные к нему семена следовали за ним. Для достижения этого мы используем трёх-вершинный вариант родителя.

При присвоении объекту родителя в виде трех различных вершин меша, этот объект последует за позицией этих вершин и ориентирует себя относительно нормали (смотри следующие иллюстрации):

Нам не нужно соединять все эти триплеты вершин так как главный меш сам не - фото 30

Нам не нужно соединять все эти триплеты вершин, так как главный меш сам не рендерится (он будет полностью закрыт семенами). Все-же мы определим грань в каждом триплете вершин; в противном случае для разработчика модели будет трудно увидеть главный меш в режиме редактирования.

Лепестки являются отдельными объектами главный меш будет их родителем как - фото 31

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

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

Дублирование против связанной копии

Мы сказали, что все наши семена и лепестки - отдельные объекты, но имеет больше смысла сделать взамен него экземпляр (в Блендере называется создать связанную копию). Так как все семена и все лепестки, которые мы смоделировали, идентичны, мы можем ссылаться на те же самые меш-данные и просто изменять позицию, вращение, или масштаб объекта как нужно, сохраняя приличное количество памяти. При использовании Блендера интерактивно, мы можем создать экземпляр объекта, нажимая Alt + D (вместо Shift + D для обычной копии). В нашем скрипте, мы просто определяем новый объект и указываем его на тот же меш-объект, передавая ссылку на тот же меш при вызове Object.New() .

Выращивание подсолнуха

Давайте посмотрим на основную часть скрипта, который создаёт подсолнух (полный скрипт доступен как sunflower.py). Первый шаг должен вычислить позицию семян:

def sunflower(scene,nseeds=100,npetals=50):

pos = kernelpositions(nseeds)

Исходя из этих позиций мы создаем головку, у которой вершины и грани мы можем сделать родителем зёрен и собрать их в меш головки (выделенная часть следующего кода):

headverts=pos2verts(pos)

faces=[(v,v+1,v+2) for v in range(0,len(headverts),3)]

head=Tools.addmeshobject(scene,headverts,

faces,name='head')

Следующий шаг должен создать базовый меш для зерна и создать объекты, которые ссылаются на этот меш (выделенная часть следующего кода):

kernelverts,kernelfaces=kernel(radius=1.5,

scale=(1.0,1.0,0.3))

kernelmesh = Tools.newmesh(kernelverts,

kernelfaces,name='kernel')

kernels = [Tools.addmeshduplicate(scene,kernelmesh,

name='kernel')

for i in range(nseeds)]

Каждому зерну затем назначается пригодная позиция и родитель - подходящие вершины в меше головки цветка (выделенная часть следующего кода):

for i in range(nseeds):

loc = Tools.center(head.data.verts[i*3:(i+1)*3])

kernels[i].setLocation(loc)

head. makeParentVertex([kernels[i]],

tuple([v.index for v in

head.data.verts[i*3:(i+1)*3]]))

Затем мы создаем меш лепестка и размещаем дубликаты этого меша вдоль обода головки цветка (выделенная часть следующего кода):

petalverts,petalfaces=petal((2.0,1.0,1.0))

petalmesh =

Tools.newmesh(petalverts,petalfaces,name='petal')

r = sqrt(nseeds)

petals =

[ Tools.addmeshduplicate(scene,petalmesh,name='petal')

for i in range(npetals)]

Каждый лепесток позиционируется, поворачивается вдоль обода и назначается потомком головки (выделенная часть следующего кода):

for i,p in enumerate(petals):

a=float(i)*2*pi/npetals

p.setLocation(r*cos(a),r*sin(a),0)

e=p.getEuler('localspace')

e.z=a

p.setEuler(e)

head. makeParent(petals)

Наконец, мы создаём меш и объект стебля, и назначаем стебель родителем головки. Таким образом, весь цветок может перемещаться при перемещении стебля:

# добавление стебля (stalk) (head назначается потомком

stalk)

stalkverts,stalkfaces=stalk()

stalkob =

Tools.addmeshobject(scene,stalkverts,stalkfaces,

name='stalk')

stalkob.makeParent([head])

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

kernelgroup = Blender.Group.New('kernels')

kernelgroup.objects=kernels

petalgroup = Blender.Group.New('petals')

petalgroup.objects=petals

all = Blender.Group.New('sunflower')

all.objects=sum([kernels,petals],[head,stalkob])

Функция addmeshduplicate() , используемая в коде, объявлена в модуле Tools следующим способом:

def addmeshduplicate(scn,me,name=None):

ob=scn.objects.new(me)

if name : ob.setName(name)

scn.objects.active=ob

me.remDoubles(0.001)

me.recalcNormals()

for f in me.faces: f.smooth = 1

me.update()

Blender.Window.RedrawAll()

return ob

Принимая сцену, меш, и имя (необязательное) для объекта, она добавляет новый объект в сцену. Меш-объект принимается как аргумент, и может использоваться снова и снова для создания новых объектов, которые ссылаются на этот же меш.

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

Также, для удобства, мы установили атрибут smooth (плавно) для всех граней, чтобы получить более гладкие изображения при рендере. Наконец, мы обновляем (update) список отображения для этого меша и уведомляем всё окно Блендера, что имеется изменение.

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

Одна из вещей, которую Вы можете заметить - то, что мы разместили семена в специфической спирали. Этот тип спирали, где последующие позиции вдоль спирали расположены идующими с так называемым Золотым сечением, называется спираль Ферма(Fermat's spiral). Такой спиралью получается естественным образом во многих семенных головках, когда цветочки или семена формируются в середине и выталкиваются наружу, в результате получается очень рациональная (плотная) упаковка.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Michel Anders читать все книги автора по порядку

Michel Anders - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Написание скриптов для Blender 2.49 отзывы


Отзывы читателей о книге Написание скриптов для Blender 2.49, автор: Michel Anders. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x