2023年4月2日日曜日

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

aaa

参考

2023年3月26日日曜日
製作 002b 未来光円錐の方向 線路レールで








import bpy
import math


zion_collection_name = "円錐 色変化"

# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)




import bpy
import math


zion_collection_name = "合成0.1 放出点 x軸移動 増速 "

# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)



import bpy
import math

zion_collection_name = "合成0.2 放出点 x軸移動 増速 "

# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)



import bpy
import math


zion_collection_name = "幻想0.0 放出点 x軸移動 増速 "

# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)







#円錐台 未来光円錐 kaizou


import bpy
from math import radians


# 回転させる軸を選択する
zion_xyz = 'xana'  #kairyou



# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=60, radius2=0, depth=60)

# オブジェクトに名前を付ける
bpy.context.object.name = "未来光円錐 色変化"


# 円錐の位置を変更する
bpy.context.object.location[0] = 0.0  # X座標
bpy.context.object.location[1] = 0.0  # Y座標
bpy.context.object.location[2] = 30.0  # Z座標



if zion_xyz == 'xana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(180)
    bpy.context.object.rotation_euler[2] = radians(0)
    # X軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
elif zion_xyz == 'yana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(90)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Y軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
elif zion_xyz == 'zana':
    # Z軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Z軸方向に伸ばす
    bpy.context.object.scale[0] = 30
    bpy.context.object.scale[1] = 30
    bpy.context.object.scale[2] = 1
    
else:
    print('Invalid rotation axis selected.')


# 作成されたオブジェクトを取得する
cone = bpy.context.object

# アニメーション開始時の位置
start_loc = cone.location

# 移動距離
move_dist = 0

# アニメーションのフレーム数
frame_count = 600

# アニメーションの最終フレームを設定する
bpy.context.scene.frame_end = frame_count

# マテリアルを作成する
mat = bpy.data.materials.new(name="Material")
cone.data.materials.append(mat)

# 移動アニメーションと色のアニメーションのキーフレームを設定する
for i in range(frame_count):
    # 現在のフレームにおける位置と色を計算する
    current_loc = (start_loc[0] + move_dist * i / frame_count, start_loc[1], start_loc[2])
    if i < frame_count / 2:
        # 前半は青から緑色に変化する
        mat.diffuse_color = (0, i / (frame_count / 2), 1 - i / (frame_count / 2), 1)
    else:
        # 後半は赤色からショッキングピンク色に変化する
        t = (i - frame_count / 2) / (frame_count / 2)  # 0から1に変化する
        if t < 0.5:
            # 真っ赤の半分の明るさで始まる
            mat.diffuse_color = (1, 0, 0.5 * t, 1)
        else:
            # ショッキングピンクに変化する
            mat.diffuse_color = (1, 0, 1, 1)
    
    # 位置と色を設定し、キーフレームを追加する
    cone.location = current_loc
    cone.keyframe_insert(data_path='location', frame=i+1)
    mat.keyframe_insert(data_path='diffuse_color', frame=i+1)











#円錐台 過去k光円錐 改造


import bpy
from math import radians


# 回転させる軸を選択する
zion_xyz = 'xana'  #kairyou



# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=60, radius2=0, depth=60)

# オブジェクトに名前を付ける
bpy.context.object.name = "過去光円錐"


# 円錐の位置を変更する
bpy.context.object.location[0] = 0.0  # X座標
bpy.context.object.location[1] = 0.0  # Y座標
bpy.context.object.location[2] = -30.0  # Z座標



if zion_xyz == 'xana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # X軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
elif zion_xyz == 'yana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(90)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Y軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
elif zion_xyz == 'zana':
    # Z軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Z軸方向に伸ばす
    bpy.context.object.scale[0] = 30
    bpy.context.object.scale[1] = 30
    bpy.context.object.scale[2] = 1
    
else:
    print('Invalid rotation axis selected.')


# 作成されたオブジェクトを取得する
cone = bpy.context.object

# アニメーション開始時の位置
start_loc = cone.location

# 移動距離
move_dist = 0

# アニメーションのフレーム数
frame_count = 600

# アニメーションの最終フレームを設定する
bpy.context.scene.frame_end = frame_count

# マテリアルを作成する
mat = bpy.data.materials.new(name="Material")
cone.data.materials.append(mat)

# 移動アニメーションと色のアニメーションのキーフレームを設定する
for i in range(frame_count):
    # 現在のフレームにおける位置と色を計算する
    current_loc = (start_loc[0] + move_dist * i / frame_count, start_loc[1], start_loc[2])
    if i < frame_count / 2:
        # 前半は青から緑色に変化する
        mat.diffuse_color = (0, i / (frame_count / 2), 1 - i / (frame_count / 2), 1)
    else:
        # 後半は赤色からショッキングピンク色に変化する
        t = (i - frame_count / 2) / (frame_count / 2)  # 0から1に変化する
        if t < 0.5:
            # 真っ赤の半分の明るさで始まる
            mat.diffuse_color = (1, 0, 0.5 * t, 1)
        else:
            # ショッキングピンクに変化する
            mat.diffuse_color = (1, 0, 1, 1)
    
    # 位置と色を設定し、キーフレームを追加する
    cone.location = current_loc
    cone.keyframe_insert(data_path='location', frame=i+1)
    mat.keyframe_insert(data_path='diffuse_color', frame=i+1)





# zure 時間差放出 合成 別慣性系 事象情報 拡散線

import bpy
import math
import random
from mathutils import Vector

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

# 速度を指定する
zion_speed = 1.0

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

# 放出間隔を指定する
zion_slow = 2.0

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

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

# x軸方向の移動量を指定する
zure_xx = 0.1

# 球体を作成する関数
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.location.x += zure_xx  # x成分に移動量を追加する
        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 * int(6 * 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 * 6000  # 半径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 = 1400
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp"








# zure 時間差放出 幻想

import bpy
import math
import random
from mathutils import Vector

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

# 速度を指定する
zion_speed = 1.0

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

# 放出間隔を指定する
zion_slow = 2.0

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

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

# x軸方向の移動量を指定する
zure_xx = 0.0

# 球体を作成する関数
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.location.x += zure_xx  # x成分に移動量を追加する
        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 * int(6 * 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 * 6000  # 半径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 = 1400
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp"

















# zure 時間差放出 合成 別慣性系 0.2事象情報 拡散線

import bpy
import math
import random
from mathutils import Vector

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

# 速度を指定する
zion_speed = 1.0

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

# 放出間隔を指定する
zion_slow = 2.0

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

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

# x軸方向の移動量を指定する
zure_xx = 0.2

# 球体を作成する関数
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.location.x += zure_xx  # x成分に移動量を追加する
        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 = "0.2事象情報 拡散線 sphere"
    spheres.append(obj)


# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = i * int(6 * 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 * 6000  # 半径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 = 1400
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp"















# オブジェクトに名前を付ける
bpy.context.object.name = "慣性系 x0.1倍 速度 追加"

# オブジェクトに名前を付ける
bpy.context.object.name = "慣性系 x0.0倍 速度 追加"



bbb

改良中

aaa






はい、zion_zousoku_xを1.0以外の値にすることで、x軸方向の移動速度を調整できます。zion_zousoku_xが1.0より大きければ、x軸方向の移動速度が加速し、1.0より小さければ減速します。例えば、zion_zousoku_x = 2.0とすると、x軸方向の移動速度が2倍になります。








import bpy
import math
import random
from mathutils import Vector

# 速度を指定する
zion_speed = 1.0
zion_zousoku_x = 2.0  # x軸方向の速度を倍率で調整

# 目標位置を指定する
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(100):
    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, 1.0)
    obj = bpy.context.active_object
    obj.name = "分布拡大sphere"
    spheres.append(obj)

# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = 1
    end_frame = 600
    location = sphere.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 60  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    # x軸方向の速度を加算する
    speed_x = distance / (zion_speed + zion_zousoku_x)
    speed = zion_speed / distance + zion_zousoku_x / speed_x
    set_animation(sphere, start_frame, end_frame, target_location, speed)












最終地点も 動かしたが 倍率で動かしたので 無効




import bpy
import math
import random
from mathutils import Vector

# 速度を指定する
zion_speed = 1.0
zion_zousoku_x = 1.1

# 目標位置を指定する
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(100):
    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, 1.0)
    obj = bpy.context.active_object
    obj.name = "分布拡大sphere"
    spheres.append(obj)

# アニメーションを設定する
for i, sphere in enumerate(spheres):
    start_frame = 1
    end_frame = 600
    location = sphere.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 60  # 半径30の球体表面に沿って動く
    # x軸方向の速度を調整する
    if target_location.x > location.x:
        target_location.x *= zion_zousoku_x
    else:
        target_location.x /= zion_zousoku_x
    distance = (target_location - location).length
    speed = zion_speed / distance 
    set_animation(sphere, start_frame, end_frame, target_location, speed)

# 最終位置のx成分も調整する
if not parallel:
    for sphere in spheres:
        location = sphere.location
        if location.x > 0:
            sphere.location.x *= zion_zousoku_x
        else:
            sphere.location.x /= zion_zousoku_x













bbb

zure_xx 放出

aaa
















import bpy
import math
import random
from mathutils import Vector

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

# 速度を指定する
zion_speed = 1.0

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

# 放出間隔を指定する
zion_slow = 4.0

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

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

# x軸方向の移動量を指定する
zure_xx = 0.1

# 球体を作成する関数
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.location.x += zure_xx  # x成分に移動量を追加する
        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 * int(6 * 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 * 6000  # 半径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"























bbb

Sure, here is the modified code that emits particles from the sphere every 50 frames:

aaa







































bbb

できた 放出連続

aaa
import bpy
import math
import random
from mathutils import Vector

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

# 速度を指定する
zion_speed = 1.0

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

# 放出間隔を指定する
zion_slow = 2.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 * int(6 * 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 = 3000
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp/animation.avi"
b



































import bpy
import math
import random
from mathutils import Vector

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

# 速度を指定する
zion_speed = 1.0

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

# 放出間隔を指定する
zion_slow = 4.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 * int(6 * 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 * 6000  # 半径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"
b




bbb
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

湧き出る 球体

aaa








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 = []
for i in range(100):
    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  # 球体生成時のフレームからアニメーションを開始する
    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

# 速度を指定する
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)

# 球体を作成してアニメーションを設定する関数
def create_sphere_with_animation(frame, frame_interval):
    phi = random.uniform(0, math.pi)
    theta = random.uniform(0, 2*math.pi)
    radius = 0.0001
    x = radius * math.sin(phi) * math.cos(theta) + random.uniform(-0.2, 0.2)
    y = radius * math.sin(phi) * math.sin(theta) + random.uniform(-0.2, 0.2)
    z = radius * math.cos(phi)
    location = Vector((x, y, 0))
    create_sphere(location, 1.0)
    obj = bpy.context.active_object
    obj.name = "分布拡大sphere"
    start_frame = frame
    end_frame = frame + int(1/zion_speed)
    location = obj.location
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 60  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    speed = zion_speed / distance
    set_animation(obj, start_frame, end_frame, target_location, speed)

# アニメーションを設定する
frame_interval = 0.1
frame_count = 0
for frame in range(1, 601):
    if frame_count == 0:
        create_sphere_with_animation(frame, frame_interval)
    frame_count = (frame_count + 1) % int(frame_interval * bpy.context.scene.render.fps)






















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

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