Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
links = tree.links
# Удаление нодов по-умолчанию
for n in tree.nodes:
tree.nodes.remove(n)
# Создание входного нода Render layer
rl = tree.nodes.new('R_LAYERS')
rl.location = 0,200
# Создание нода SEP_RGBA
sep = tree.nodes.new('SEPRGBA')
sep.name = "Split"
sep.location = 200,200
links.new(rl.outputs[0],sep.inputs[0]) # image-image
# Создание нода VIEWER
viewer = tree.nodes.new('VIEWER')
viewer.label = "Alpha"
viewer.location = 400,400
links.new(sep.outputs[3],viewer.inputs[0]) # A-image
# Создание нода COMBRGBA
comb = tree.nodes.new('COMBRGBA')
comb.label = "Cyan"
comb.location = 400,200
links.new(sep.outputs[1],comb.inputs[2]) # G - B
links.new(sep.outputs[2],comb.inputs[1]) # B - G
# Создание нода HUE_SAT
hs = tree.nodes.new('HUE_SAT')
hs.label = "Violet"
hs.location = 600,200
hs.color_hue = 0.75
hs.color_saturation = 1.5
links.new(comb.outputs[0],hs.inputs[1]) # image-image
# Создание нода вывода
comp = tree.nodes.new('COMPOSITE')
comp.location = 600,400
links.new(hs.outputs[0],comp.inputs[0]) # image-image
Так это всё стандартные ноды, их и так добавить можно... А где программируемые, PyNode??? - возмущение переводчика.
Пакетный запуск
Программа запускает все скрипты в каталогах object и simulation. Основной целью является проверить, что все скрипты выполняются правильно, или, по крайней мере, что они могут быть выполнены, не вызывая ошибок.
Большинство скриптов не смогут работать в более ранних версиях Блендера. Чтобы убедиться, что мы не застряли в устаревшем Блендере, мы сначала проверяем текущую версию Блендера, которая доступна как bpy.app.version.
#----------------------------------------------------------
# File batch.py
#----------------------------------------------------------
import bpy, sys, os, mathutils
from mathutils import Vector
# Проверка версии Блендера
version = [2, 57, 0]
(a,b,c) = bpy.app.version
if b < version[1] or (b == version[1] and c < version[2]):
msg = 'Blender too old: %s < %s' % ((a,b,c), tuple(version))
raise NameError(msg)
# Удаление всех старых объектов, так что мы начинаем с чистого листа.
scn = bpy.context.scene
for ob in scn.objects:
scn.objects.active = ob
print("Delete", ob, bpy.context.object)
bpy.ops.object.mode_set(mode='OBJECT')
scn.objects.unlink(ob)
del ob
# Путь к коду. Вы должны изменить его, если вы разместили
# папку примеров не в вашем домашнем каталоге
scripts = os.path.expanduser('~/snippets/scripts/')
for folder in ['object', 'simulation', 'interface']:
sys.path.append(scripts+folder)
print(sys.path) origin = Vector((0,0,0))
# Меши и арматуры
origin[2] = 0
import meshes
meshes.run(origin)
origin[0] += 5
import armature
armature.run(origin)
origin[0] += 5
import rigged_mesh
rigged_mesh.run(origin)
origin[0] += 5
import shapekey
shapekey.run(origin)
origin[0] += 5
# Три способа конструирования объектов
import objects
objects.run(origin)
origin[0] += 5
# Материалы и текстуры
origin[2] = 5
origin[0] = 0
import material
material.run(origin)
origin[0] += 5
import texture
texture.run(origin)
origin[0] += 5
import multi_material
multi_material.run(origin)
origin[0] += 5
import uvs uvs.run(origin)
origin[0] += 5
import chain
chain.run(origin)
# Действия и управляющие элементы
origin[2] = 25
origin[0] = 0
import ob_action
ob_action.run(origin)
origin[0] += 5
import pose_action
pose_action.run(origin)
origin[0] += 5
import epicycle
epicycle.run(origin)
origin[0] += 5
import driver
driver.run(origin)
# Симуляции
origin[2] = 15
origin[0] = 0
import hair
hair.run(origin)
origin[0] += 5
import edit_hair
edit_hair.run(origin)
origin[0] += 5
import particle
particle.run(origin)
origin[0] += 5
import cloth
cloth.run(origin)
origin[0] += 5
import softbody
softbody.run(origin)
origin[2] = 10
origin[0] = 0
import fire
fire.run(origin)
origin[0] += 5
import flags
flags.run(origin)
origin[0] += 5
import smoke
smoke.run(origin)
origin[0] += 5
import crystal
crystal.run(origin)
origin[0] += 5
origin[2] = -4.02
origin[0] = -10
import pile
pile.run(origin)
# Восстановление движка рендера
bpy.context.scene.render.engine = 'BLENDER_RENDER'
# Другие типы данных
origin[2] = 20
origin[0] = 0
import text
text.run(origin)
origin[0] += 5
import lattice
lattice.run(origin)
origin[0] += 5
import curve
curve.run(origin)
origin[0] += 5
import path
path.run(origin)
import camera
camera.run(Vector((0,0,0)))
# Слои и группы
import layers
layers.run()
import groups
groups.run()
# Восстановление слоёв после "Слоёв и групп"
scn.layers[0] = True
for n in range(1,20):
scn.layers[n] = False
# Вид
import world
world.run()
import view
view.run()
В кадре 71 ваш экран должен выглядеть как на картинке внизу. Отрендеренная версия представлена на главной странице.