Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - [7]

Шрифт
Интервал



Используйте этот рисунок как текстуру и измените имя на color.png:



>#----------------------------------------------------------

># File texture.py

>#----------------------------------------------------------

>import bpy, os 


>def run(origin):

> # Загрузка файла с рисунком. Измените здесь, если каталог snippets

> # расположен не в Вашем домашнем каталоге.

>    realpath = os.path.expanduser('~/snippets/textures/color.png')

>    try:

>        img = bpy.data.images.load(realpath)

>    except:

>        raise NameError("Cannot load image %s" % realpath)


>    # Создание текстуры image из загруженного рисунка

>    cTex = bpy.data.textures.new('ColorTex', type = 'IMAGE')

>    cTex.image = img


>    # Создание процедурной текстуры

>    sTex = bpy.data.textures.new('BumpTex', type = 'STUCCI')

>    sTex.noise_basis = 'BLENDER_ORIGINAL'

>    sTex.noise_scale = 0.25

>    sTex.noise_type = 'SOFT_NOISE'

>    sTex.saturation = 1

>    sTex.stucci_type = 'PLASTIC'

>    sTex.turbulence = 5


>    # Создание текстуры blend с цветовой полосой (color ramp)

>    # Не знаю, как добавлять элементы к полосе, так что сейчас только два

>    bTex = bpy.data.textures.new('BlendTex', type = 'BLEND')

>    bTex.progression = 'SPHERICAL'

>    bTex.use_color_ramp = True

>    ramp = bTex.color_ramp

>    values = [(0.6, (1,1,1,1)), (0.8, (0,0,0,1))]

>    for n,value in enumerate(values):

>        elt = ramp.elements[n]

>        (pos, color) = value

>        elt.position = pos

>        elt.color = color


>    # Создание материала

>    mat = bpy.data.materials.new('TexMat')


>    # Добавление текстурного слота для цветной текстуры

>    mtex = mat.texture_slots.add()

>    mtex.texture = cTex

>    mtex.texture_coords = 'UV'

>    mtex.use_map_color_diffuse = True

>    mtex.use_map_color_emission = True

>    mtex.emission_color_factor = 0.5

>    mtex.use_map_density = True

>    mtex.mapping = 'FLAT'


>    # Добавление текстурного слота для bump-текстуры

>    mtex = mat.texture_slots.add()

>    mtex.texture = sTex

>    mtex.texture_coords = 'ORCO'

>    mtex.use_map_color_diffuse = False

>    mtex.use_map_normal = True

>    #mtex.rgb_to_intensity = True


>    # Добавление текстурного слота

>    mtex = mat.texture_slots.add()

>    mtex.texture = bTex

>    mtex.texture_coords = 'UV'

>    mtex.use_map_color_diffuse = True

>    mtex.diffuse_color_factor = 1.0

>    mtex.blend_type = 'MULTIPLY'


>    # Создание нового куба и наложение на него UV-раскладки

>    bpy.ops.mesh.primitive_cube_add(location=origin)

>    bpy.ops.object.mode_set(mode='EDIT')

>    bpy.ops.uv.smart_project()

>    bpy.ops.object.mode_set(mode='OBJECT')


>    # Добавление материала к текущему объекту

>    ob = bpy.context.object

>    me = ob.data

>    me.materials.append(mat)


>    return 


>if __name__ == "__main__":

>    run((0,0,0))


Множественные материалы

Эта программа добавляет три материала к одному мешу.



>#----------------------------------------------------------

># File multi_material.py

>#----------------------------------------------------------

>import bpy 


>def run(origin):

>    # Создание трёх материалов

>    red = bpy.data.materials.new('Red')

>    red.diffuse_color = (1,0,0)

>    blue = bpy.data.materials.new('Blue')

>    blue.diffuse_color = (0,0,1)

>    yellow = bpy.data.materials.new('Yellow')

>    yellow.diffuse_color = (1,1,0)


>   # Создание меша и назначение материалов

>    bpy.ops.mesh.primitive_uv_sphere_add(

>        segments = 16,

>        ring_count = 8,

>        location=origin)

>    ob = bpy.context.object

>    ob.name = 'MultiMatSphere'

>    me = ob.data me.materials.append(red)

>    me.materials.append(blue)

>    me.materials.append(yellow)


>    # Назначение материалов граням

>    for f in me.faces:

>        f.material_index = f.index % 3


>    # Установка левой половины сферы в плавное затенение,

>    # правой половины — в плоское затенение

>    for f in me.faces:

>        f.use_smooth = (f.center[0] < 0)  


>if __name__ == "__main__":

>    run((0,0,0))


Слои UV-раскладки

Эта программа добавляет два UV-слоя к мешу.



>#----------------------------------------------------------

># File uvs.py

>#----------------------------------------------------------

>import bpy import os 


>def createMesh(origin):

>    # Создание меша и объекта

>    me = bpy.data.meshes.new('TetraMesh')

>    ob = bpy.data.objects.new('Tetra', me)

>    ob.location = origin

>    # Привязка объекта к сцене

>    scn = bpy.context.scene

>    scn.objects.link(ob)

>    scn.objects.active = ob scn.update()


>    # Списки вершин и граней

>    verts = [

>        (1.41936, 1.41936, -1),

>        (0.589378, -1.67818, -1),

>        (-1.67818, 0.58938, -1),

>        (0, 0, 1)

>    ]

>    faces = [(1,0,3), (3,2,1), (3,0,2), (0,1,2)]

>    # Создание меша из передаваемых списков вершин, рёбер, граней.

>    # Или рёбра или грани должны быть [], или Вам нужны проблемы

>    me.from_pydata(verts, [], faces)


>    # Обновление меша с новыми данными

>    me.update(calc_edges=True)


>    # Первый текстурный слой: Главная UV текстура (UVMain)

>    texFaces = [

>        [(0.6,0.6), (1,1), (0,1)],

>        [(0,1), (0.6,0), (0.6,0.6)],

>        [(0,1), (0,0), (0.6,0)],

>        [(1,1), (0.6,0.6), (0.6,0)]

>    ]

>    uvMain = createTextureLayer("UVMain", me, texFaces)


>   # Второй текстурный слой: проекция спереди (UVFront)


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.