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

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

Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода краткое содержание

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - описание и краткое содержание, автор Thomas Larsson, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Третье издание, расширенное и обновлённое для Blender 2.57

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать онлайн бесплатно полную версию (весь текст целиком)

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать книгу онлайн бесплатно, автор Thomas Larsson
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

domain = bpy.context.object

domain.name = 'Domain'

bpy.ops.object.shade_smooth()

# Добавление модификатора домену

mod = domain.modifiers.new(name='FluidDomain', type='FLUID_SIMULATION')

# mod.settings is FluidSettings

mod.settings.type = 'DOMAIN'

# mod.settings now changed to DomainFluidSettings

settings = mod.settings

settings.use_speed_vectors = False

settings.simulation_scale = 3.0

settings.slip_type = 'FREESLIP'

settings.tracer_particles = 10

settings.generate_particles = 1.5

#settings.start_time = 0.0

#settings.end_time = 2.0

return domain

def createFluid(origin):

# Жидкость

bpy.ops.mesh.primitive_ico_sphere_add(

size=3.5,

subdivisions=1,

location=origin)

fluid = bpy.context.object

fluid.name = 'Fluid'

fluid.hide = True

fluid.hide_render = True

# Добавление модификатора жидкости

mod = fluid.modifiers.new(name='Fluid', type='FLUID_SIMULATION')

mod.settings.type = 'FLUID'

return fluid

def createObstacle(origin):

# Препятствие

bpy.ops.mesh.primitive_cylinder_add(

vertices=12,

radius=0.3,

depth=2,

cap_ends=True,

location=origin + Vector((0,0,-2.5)),

rotation=(pi/2, 0, 0))

bpy.ops.object.modifier_add(type='FLUID_SIMULATION')

obst = bpy.context.object

obst.name = 'Obstacle'

# Добавление модификатора препятствию

bpy.ops.object.modifier_add(type='FLUID_SIMULATION')

mod = obst.modifiers[-1]

mod.settings.type = 'OBSTACLE'

# Анимация препятствия

scn = bpy.context.scene

scn.frame_current = 1

bpy.ops.anim.keyframe_insert_menu(type='Rotation')

scn.frame_current = 26

bpy.ops.transform.rotate(value=(pi/2,), axis=(-0, -0, -1))

bpy.ops.anim.keyframe_insert_menu(type='Rotation')

scn.frame_current = 1

for fcu in obst.animation_data.action.fcurves:

fcu.extrapolation = 'LINEAR'

for kp in fcu.keyframe_points:

kp.interpolation = 'LINEAR'

return obst

def createInflow(origin):

# Приток

bpy.ops.mesh.primitive_circle_add(

radius=0.75,

fill=True,

location=origin+Vector((-3.9,0,3)),

rotation=(0, pi/2, 0))

inflow = bpy.context.object

inflow.name = 'Inflow'

# Добавление модификатора притоку

bpy.ops.object.modifier_add(type='FLUID_SIMULATION')

mod = inflow.modifiers[-1]

mod.settings.type = 'INFLOW'

settings = mod.settings

settings.inflow_velocity = (1.5,0,0 )

settings.volume_initialization = 'SHELL'

return inflow

def createOutflow(origin):

# Отток

bpy.ops.mesh.primitive_circle_add(

radius=0.75,

fill=True,

location=origin+Vector((3.9,0,-3)),

rotation=(0, -pi/2, 0))

outflow = bpy.context.object

outflow.name = 'Outflow'

# Добавление модификатора оттоку

bpy.ops.object.modifier_add(type='FLUID_SIMULATION')

mod = outflow.modifiers[-1]

mod.settings.type = 'OUTFLOW'

mod.settings.volume_initialization = 'SHELL'

return outflow

def createFluidParticle(name, origin, data):

# Частицы жидкости

bpy.ops.mesh.primitive_monkey_add(location=origin)

monkey = bpy.context.object

monkey.name = name

# Добавление модификатора жидкости-частиц

bpy.ops.object.modifier_add(type='FLUID_SIMULATION')

mod = monkey.modifiers[-1]

mod.settings.type = 'PARTICLE'

(drops, floats, tracer) = data

mod.settings.use_drops = drops

mod.settings.use_floats = floats

mod.settings.show_tracer = tracer

# Настройка типа частиц созданной системы частиц

psys = monkey.modifiers[-1].particle_system

psys.name = name+'Psys'

#psys.settings.name = name+'Pset'

return (mod.settings, None)

def run(origin):

domain = createDomain(origin)

fluid = createFluid(origin)

obst = createObstacle(origin)

inflow = createInflow(origin)

outflow = createOutflow(origin)

(settings, pset) = createFluidParticle('Drops',

origin+Vector((-2,7,0)), (True, False, False))

settings.particle_influence = 0.7

settings.alpha_influence = 0.3

(settings, pset) = createFluidParticle('Floats',

origin+Vector((0,7,0)), (False, True, False))

(settings, pset) = createFluidParticle('Tracer',

origin+Vector((2,7,0)), (False, False, True))

settings.particle_influence = 1.5

settings.alpha_influence = 1.2

return

if __name__ == "__main__":

bpy.ops.object.select_all(action='SELECT')

bpy.ops.object.delete() run(Vector((0,0,0)))

#bpy.ops.fluid.bake()

Ноды

Эта программа создаёт нодовую сеть.

#---------------------------------------------------

# File nodes.py

#---------------------------------------------------

import bpy, math

# Включение нодов

bpy.context.scene.use_nodes = True

tree = bpy.context.scene.node_tree

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)

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

Интервал:

Закладка:

Сделать


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

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




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


Отзывы читателей о книге Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода, автор: Thomas Larsson. Читайте комментарии и мнения людей о произведении.


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

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