2023年4月2日日曜日

aaa
次々に 0.5秒で作成



import bpy
import math
import random
from mathutils import Vector

# 速度を指定する
zion_speed = 1.0

# 目標位置を指定する
zion_target = Vector((0, -60, 0))

# 平行移動するかどうかを指定する
parallel = False

# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300))  # ここを変更する

# 球体を作成する関数
def create_sphere(location, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)

# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
    distance = (target_location - obj.location).length
    duration = distance / speed
    for frame in range(start_frame, end_frame+1):
        t = (frame - start_frame) / duration
        obj.location = obj.location.lerp(target_location, t)
        obj.keyframe_insert(data_path="location", frame=frame)

# 分布想定 球体を作成する
spheres = []
ttt = 0.5  # 球体を生成する間隔を指定する(秒)
frame_num = 0
while frame_num <= 600:
    if frame_num % int(ttt * 60) == 0:
        phi = random.uniform(0, math.pi)
        theta = random.uniform(0, 2*math.pi)
        radius = 0.0001
        x = radius * math.sin(phi) * math.cos(theta)
        y = radius * math.sin(phi) * math.sin(theta)
        z = radius * math.cos(phi)
        location = Vector((x, y, 0))
        create_sphere(location, 2.0)
        obj = bpy.context.active_object
        obj.name = "分布拡大sphere"
        spheres.append(obj)
    frame_num += 1

# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = i * int(ttt * 60)  # 球体生成時のフレームからアニメーションを開始する
    end_frame = start_frame + 1000
    location = sphere.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 3600  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    speed = zion_speed / distance 
    set_animation(sphere, start_frame, end_frame, target_location, speed)

# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 6000
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp/animation.avi"
bpy.ops.render.render(animation=True)













import bpy
import math
import random
from mathutils import Vector

# 球体の数を指定する
nnn = 50

# 速度を指定する
zion_speed = 1.0

# 目標位置を指定する
zion_target = Vector((0, -60, 0))

# 平行移動するかどうかを指定する
parallel = False

# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300))  # ここを変更する

# 球体を作成する関数
def create_sphere(location, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)

# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
    distance = (target_location - obj.location).length
    duration = distance / speed
    for frame in range(start_frame, end_frame+1):
        t = (frame - start_frame) / duration
        obj.location = obj.location.lerp(target_location, t)
        obj.keyframe_insert(data_path="location", frame=frame)

# 分布想定 球体を作成する
spheres = []
for i in range(nnn):
    phi = random.uniform(0, math.pi)
    theta = random.uniform(0, 2*math.pi)
    radius = 0.0001
    x = radius * math.sin(phi) * math.cos(theta)
    y = radius * math.sin(phi) * math.sin(theta)
    z = radius * math.cos(phi)
    location = Vector((x, y, 0))
    create_sphere(location, 2.0)
    obj = bpy.context.active_object
    obj.name = "分布拡大sphere"
    spheres.append(obj)

# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = i * 6  # 球体生成時のフレームからアニメーションを開始する
    end_frame = start_frame + 600
    location = sphere.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 3600  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    speed = zion_speed / distance 
    set_animation(sphere, start_frame, end_frame, target_location, speed)

# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 6000
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp/animation.avi"
bpy.ops.render.render(animation=True)









半分成功

import bpy
import math
import random
from mathutils import Vector

# 球体の数を指定する
nnn = 50

# 速度を指定する
zion_speed = 1.0

# 目標位置を指定する
zion_target = Vector((0, -60, 0))

# 平行移動するかどうかを指定する
parallel = False

# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300))  # ここを変更する

# 球体を作成する関数
def create_sphere(location, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)

# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
    distance = (target_location - obj.location).length
    duration = distance / speed
    for frame in range(start_frame, end_frame+1):
        t = (frame - start_frame) / duration
        obj.location = obj.location.lerp(target_location, t)
        obj.keyframe_insert(data_path="location", frame=frame)

# 分布想定 球体を作成する
spheres = []
for i in range(nnn):
    phi = random.uniform(0, math.pi)
    theta = random.uniform(0, 2*math.pi)
    radius = 0.0001
    x = radius * math.sin(phi) * math.cos(theta)
    y = radius * math.sin(phi) * math.sin(theta)
    z = radius * math.cos(phi)
    location = Vector((x, y, 0))
    create_sphere(location, 2.0)
    obj = bpy.context.active_object
    obj.name = "分布拡大sphere"
    spheres.append(obj)



# 放出間隔を指定する
zion_slow = 10.0  # ここを変更する

# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = i * zion_slow  # 球体生成時のフレームからアニメーションを開始する
    end_frame = start_frame + 600
    location = sphere.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 3600  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    speed = zion_speed / distance 
    set_animation(sphere, start_frame, end_frame, target_location, speed)



# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 6000
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp/animation.avi"
bpy.ops.render.render(animation=True)














import bpy
import math

# 半径1の球体を作成する
bpy.ops.mesh.primitive_uv_sphere_add(radius=1, enter_editmode=False, location=(0, 0, 0))

# 発生場所を設定する
bpy.context.scene.cursor.location = (0, 0, 0)

# パーティクルシステムを追加する
bpy.ops.object.particle_system_add()

# パーティクルシステムの設定を変更する
psys = bpy.context.object.particle_systems[0].settings
psys.frame_start = 1
psys.frame_end = 1
psys.emit_from = 'VERT'
psys.emit_from_vertices = True
psys.use_emit_random = False
psys.count = 100
psys.lifetime = 5
psys.emit_speed = 2000/ 1000  # 1秒あたり1000個
psys.particle_size = 0.01

# パーティクルの初期速度を設定する
for p in psys.particles:
    angle = math.radians(kakudo)
    p.velocity = (math.cos(angle), math.sin(angle), 0)

# シーンのレンダリング設定を変更する
bpy.context.scene.render.engine = 'BLENDER_WORKBENCH'

# アニメーションをレンダリングする
bpy.context.scene.frame_set(1)
bpy.ops.render.render(animation=False, write_still=True)




















1秒 間隔で 球体を 動かす 命令の途中



import bpy
import math
import random
from mathutils import Vector

# 速度を指定する
zion_speed = 1.0

# 目標位置を指定する
zion_target = Vector((0, -60, 0))

# 平行移動するかどうかを指定する
parallel = False

# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300))  # ここを変更する

# 球体を作成する関数
def create_sphere(location, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)

# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
    distance = (target_location - obj.location).length
    duration = distance / speed
    for frame in range(start_frame, end_frame+1):
        t = (frame - start_frame) / duration
        obj.location = obj.location.lerp(target_location, t)
        obj.keyframe_insert(data_path="location", frame=frame)

# 分布想定 球体を作成する
spheres = []
ttt = 0.5  # 球体を生成する間隔を指定する(秒)
frame_num = 0
while frame_num <= 600:
    if frame_num % int(ttt * 60) == 0:
        phi = random.uniform(0, math.pi)
        theta = random.uniform(0, 2*math.pi)
        radius = 0.0001
        x = radius * math.sin(phi) * math.cos(theta)
        y = radius * math.sin(phi) * math.sin(theta)
        z = radius * math.cos(phi)
        location = Vector((x, y, 0))
        create_sphere(location, 2.0)
        obj = bpy.context.active_object
        obj.name = "分布拡大sphere"
        spheres.append(obj)
    frame_num += 1

# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = i * int(ttt * 60)  # 球体生成時のフレームからアニメーションを開始する
    end_frame = start_frame + 1000
    location = sphere.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 3600  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    speed = zion_speed / distance 
    set_animation(sphere, start_frame, end_frame, target_location, speed)

# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 6000
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp/animation.avi"
bpy.ops.render.render(animation=True)




bbb

連番 007 未来光円錐 過去光円錐 円周中心からの球体放出

aaa 参考 2023年3月26日日曜日 製作 002b 未来光円錐の方向 線路レールで https://ia2023sha.blogspot.com/2023/03/002b.html import bpy import math zion_co...