2023年3月18日土曜日

土台形成

aaa  土台作成






import bpy
import math

# 新しいコレクションを作成
new_collection = bpy.data.collections.new("01dodai")
bpy.context.scene.collection.children.link(new_collection)




# マテリアルを作成
mat = bpy.data.materials.new("Green")
mat.diffuse_color = (0.39, 0.7, 0.5, 0.5)

# 円を作成
bpy.ops.mesh.primitive_circle_add(radius=30, fill_type='TRIFAN')
circle = bpy.context.object
circle.data.materials.append(mat)



# オブジェクトを新しいコレクションに追加
new_collection.objects.link(obj)

# 古いコレクションを取得して、オブジェクトを新しいコレクションに移動
old_collection = bpy.data.collections.get("Collection")
if old_collection is not None:
    for obj in old_collection.objects:
        new_collection.objects.link(obj)

    # 古いコレクションを削除
    bpy.data.collections.remove(old_collection)







































bbb

正方形 RGBA値を使用してエメラルドグリーンの色

aaa

mat.diffuse_color = (0.39, 0.7, 0.5)
RGB値は、0から1までの小数で表され、各色成分の強度を示します。エメラルドグリーンは、赤みの少ない濃い緑色であり、赤成分が低く、青と緑の成分が高い色です

mat.diffuse_color = (0.39, 0.7, 0.5)

RGB値は、0から1までの小数で表され、各色成分の強度を示します。エメラルドグリーンは、赤みの少ない濃い緑色であり、赤成分が低く、青と緑の成分が高い色です

 


mat.diffuse_colorは、RGB値を表すタプルであり、各成分の値は0から1までの間になります。したがって、4つの項目を指定することはできません。ただし、RGBA値を使用してマテリアルの色を指定することができます。

以下のように、RGBA値を使用してエメラルドグリーンの色を指定することができます。

scss
mat.diffuse_color = (0.39, 0.7, 0.5, 1.0)

RGBA値では、最後の成分は不透明度を表し、0から1までの範囲の小数で指定されます。1.0を指定すると、完全に不透明な色になります。


 




import bpy

# 正方形を作成
bpy.ops.mesh.primitive_plane_add(size=20)

# 正方形にマテリアルを追加
mat = bpy.data.materials.new(name="Square_Material")
mat.diffuse_color = (138,149,219,1.0)
bpy.context.object.data.materials.append(mat)

# 正方形をコレクションに追加
collection = bpy.context.scene.collection
collection.objects.link(bpy.context.object)







import bpy


# マテリアルを作成
mat = bpy.data.materials.new("Blue")
mat.diffuse_color = (0.0, 0.0, 1.0, 1.0)

# 正方形を作成
bpy.ops.mesh.primitive_plane_add(size=20)
square = bpy.context.object
square.data.materials.append(mat)

# オブジェクトを新しいコレクションに追加
new_collection.objects.link(square)










































bbb

球体 radius 0から1.0 改造 大きさ変化 scale

aaa





import bpy

# 球体オブジェクトを作成
bpy.ops.mesh.primitive_uv_sphere_add(radius=10.0, enter_editmode=False, location=(0, 0, 0))
sphere_obj = bpy.context.object

# アニメーションを作成
total_frames = 800  # アニメーションのフレーム数
scale_factor = 2000 / total_frames  # 1フレームあたりのスケールファクター

for i in range(total_frames):
    bpy.context.scene.frame_set(i)
    scale = (i+1) * scale_factor
    sphere_obj.scale = (scale, scale, scale)
    sphere_obj.keyframe_insert(data_path="scale", index=-1)


































bbb

2023年3月17日金曜日

円柱の起き方

aaa

怪しいのだけど

描画できる


import bpy

# 円筒オブジェクトを作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.25, depth=1)

# オブジェクトを選択して位置を変更
cylinder_obj = bpy.context.object
cylinder_obj.location = (0, 0, 0)  # 中心を(0, 0, 0)に移動

# オブジェクトを回転して向きを変更
rotation_axis = 'X'  # 回転軸
rotation_angle = 0  # 回転角度 (度数法)
cylinder_obj.rotation_euler.rotate_axis(rotation_axis, rotation_angle)

# アニメーションを作成
for i in range(120):
    bpy.context.scene.frame_set(i)
    scale = 0.1 * i
    cylinder_obj.scale = (scale,1, 1)  # x軸方向にスケールする
    cylinder_obj.keyframe_insert(data_path="scale", index=-1)




ああああああああああああああああああああああああああああ

import bpy

# 円筒オブジェクトを作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.25, depth=1)

# オブジェクトを選択して位置を変更
cylinder_obj = bpy.context.object
cylinder_obj.location = (0, 0, 0)  # 中心を(0, 0, 0)に移動

# オブジェクトを回転して向きを変更
rotation_axis = 'X'  # 回転軸
rotation_angle = 0  # 回転角度 (度数法)
cylinder_obj.rotation_euler.rotate_axis(rotation_axis, rotation_angle)

# アニメーションを作成
for i in range(120):
    bpy.context.scene.frame_set(i)
    scale = 3 * i / 119  # 0から3に変化するように設定
    cylinder_obj.scale = (scale, 1, 1)  # x軸方向にスケールする
    cylinder_obj.keyframe_insert(data_path="scale", index=-1)


 

import bpy

# 円筒オブジェクトを作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.25, depth=1)

# オブジェクトを選択して位置を変更
cylinder_obj = bpy.context.object
cylinder_obj.location = (0, 0, 0)  # 中心を(0, 0, 0)に移動

# オブジェクトを回転して向きを変更
rotation_axis = 'X'  # 回転軸
rotation_angle = 0  # 回転角度 (度数法)
cylinder_obj.rotation_euler.rotate_axis(rotation_axis, rotation_angle)

# アニメーションを作成
for i in range(120):
    bpy.context.scene.frame_set(i)
    scale = 0.1 * i
    cylinder_obj.scale = (scale,1, 1)  # x軸方向にスケールする
    cylinder_obj.keyframe_insert(data_path="scale", index=-1)











このスクリプトでは、アニメーション部分で、 cylinder_obj.scale を (scale, 1, 1) に変更し、x軸方向にスケールしています。また、半径も小さくなっているため、円筒が長くなる方向もx軸方向になります。

このスクリプトも、Blender上で実行することができます。











import bpy

# 円筒オブジェクトを作成
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth= 1)

# アニメーションを作成
for i in range(120):
    bpy.context.scene.frame_set(i)
    scale = 0 + 0.1* i
    bpy.context.object.scale = (1, 1, scale)
    bpy.context.object.keyframe_insert(data_path="scale", index=-1)

































bbb
aaa





import bpy
import math

# トーラス1の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 0, 0), major_radius=0.3, minor_radius=0.01)

# トーラス2の作成
bpy.ops.mesh.primitive_torus_add(location=(0, -30, 0), major_radius=0.3, minor_radius=0.01)
torus2 = bpy.data.objects['Torus.001']

# トーラス3の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 30, 0), major_radius=0.3, minor_radius=0.01)
torus3 = bpy.data.objects['Torus.002']







# アニメーションの設定
torus = bpy.data.objects['Torus']
major_radius = 0.0
major_radius_inc = (30.0 - major_radius) / (3.0 * bpy.context.scene.render.fps)

for frame in range(0, int(600.0 * bpy.context.scene.render.fps)):
    major_radius += major_radius_inc
    torus.scale = (major_radius, major_radius, 1.0)
    torus.keyframe_insert('scale', frame=frame)
    torus2.scale = (major_radius, major_radius, 1.0)
    torus2.keyframe_insert('scale', frame=frame)

    torus3.scale = (major_radius, major_radius, 1.0)
    torus3.keyframe_insert('scale', frame=frame)


































bbb
aaa






import bpy
import math

# トーラス1の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 0, 0), major_radius=0.3, minor_radius=0.01)

# トーラス2の作成
bpy.ops.mesh.primitive_torus_add(location=(0, -30, 0), major_radius=0.3, minor_radius=0.01)
torus2 = bpy.data.objects['Torus.001']

# トーラス3の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 30, 0), major_radius=0.3, minor_radius=0.01)
torus3 = bpy.data.objects['Torus.002']





# トーラス4の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 0, 0), major_radius=0.3, minor_radius=0.01)
torus4 = bpy.data.objects['Torus.003"]

# トーラス5の作成
bpy.ops.mesh.primitive_torus_add(location=(0, -30, 0), major_radius=0.3, minor_radius=0.01)
torus5 = bpy.data.objects['Torus.004']


# トーラス6の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 30, 0), major_radius=0.3, minor_radius=0.01)
torus6 = bpy.data.objects['Torus.005']




# カメラとライトの設定
bpy.ops.object.camera_add(location=(0, -10, 5), rotation=(1.0472, 0, 0))
bpy.ops.object.light_add(type='SUN', location=(5, 5, 5))

# アニメーションの設定
torus = bpy.data.objects['Torus']
major_radius = 0.0
major_radius_inc = (30.0 - major_radius) / (5.0 * bpy.context.scene.render.fps)

for frame in range(0, int(600.0 * bpy.context.scene.render.fps)):
    major_radius += major_radius_inc
    torus.scale = (major_radius, major_radius, 1.0)
    torus.keyframe_insert('scale', frame=frame)
    torus2.scale = (major_radius, major_radius, 1.0)
    torus2.keyframe_insert('scale', frame=frame)

    torus3.scale = (major_radius, major_radius, 1.0)
    torus3.keyframe_insert('scale', frame=frame)


































bbb

3トーラス 円周 拡大

aaa






import bpy
import math

# トーラス1の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 0, 0), major_radius=3.0, minor_radius=0.1)

# トーラス2の作成
bpy.ops.mesh.primitive_torus_add(location=(0, -30, 0), major_radius=3.0, minor_radius=0.1)
torus2 = bpy.data.objects['Torus.001']

# トーラス3の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 30, 0), major_radius=3.0, minor_radius=0.1)
torus3 = bpy.data.objects['Torus.002']




# カメラとライトの設定
bpy.ops.object.camera_add(location=(0, -10, 5), rotation=(1.0472, 0, 0))
bpy.ops.object.light_add(type='SUN', location=(5, 5, 5))

# アニメーションの設定
torus = bpy.data.objects['Torus']
major_radius = 3.0
major_radius_inc = (30.0 - major_radius) / (10.0 * bpy.context.scene.render.fps)

for frame in range(0, int(30.0 * bpy.context.scene.render.fps)):
    major_radius += major_radius_inc
    torus.scale = (major_radius, major_radius, 1.0)
    torus.keyframe_insert('scale', frame=frame)
    torus2.scale = (major_radius, major_radius, 1.0)
    torus2.keyframe_insert('scale', frame=frame)

    torus3.scale = (major_radius, major_radius, 1.0)
    torus3.keyframe_insert('scale', frame=frame)


































bbb
aaa





import bpy
import math

# トーラス1の作成
bpy.ops.mesh.primitive_torus_add(location=(0, 0, 0), major_radius=3.0, minor_radius=0.1)

# トーラス2の作成
bpy.ops.mesh.primitive_torus_add(location=(0, -30, 0), major_radius=3.0, minor_radius=0.1)
torus2 = bpy.data.objects['Torus.001']

# カメラとライトの設定
bpy.ops.object.camera_add(location=(0, -10, 5), rotation=(1.0472, 0, 0))
bpy.ops.object.light_add(type='SUN', location=(5, 5, 5))

# アニメーションの設定
torus = bpy.data.objects['Torus']
major_radius = 3.0
major_radius_inc = (30.0 - major_radius) / (10.0 * bpy.context.scene.render.fps)

for frame in range(0, int(10.0 * bpy.context.scene.render.fps)):
    major_radius += major_radius_inc
    torus.scale = (major_radius, major_radius, 1.0)
    torus.keyframe_insert('scale', frame=frame)
    torus2.scale = (major_radius, major_radius, 1.0)
    torus2.keyframe_insert('scale', frame=frame)


































bbb

大きき成る トーラス 不具合あるようだが 完成品とする

aaa





import bpy

# トーラスの作成
bpy.ops.mesh.primitive_torus_add(location=(0, 0, 0))

# カメラとライトの設定
bpy.ops.object.camera_add(location=(0, -10, 5), rotation=(1.0472, 0, 0))
bpy.ops.object.light_add(type='SUN', location=(5, 5, 5))

# アニメーションの設定
torus = bpy.data.objects['Torus']
torus.scale = (1.0, 1.0, 1.0)
torus.keyframe_insert('scale', frame=0)

bpy.context.scene.frame_set(0)

torus.scale = (1.0, 1.0, 1.0)
torus.keyframe_insert('scale', frame=1)

bpy.context.scene.frame_set(150)

torus.scale = (10.0, 10.0, 1.0)
torus.keyframe_insert('scale', frame=150)











# イージング設定
fcurve = torus.animation_data.action.fcurves[0]
modifier = fcurve.modifiers.new(type='SMOOTH')

# レンダリング設定
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.filepath = "C:\aaa screen presso\Screenpresso/output/filename.png"


# アニメーションのレンダリング
bpy.ops.render.render(animation=True)





bpy.context.scene.render.filepath = 
"C:\aaa screen presso\Screenpresso/output/filename.png"



































bbb
aaa





import bpy
import math

# トーラスの情報を格納するリスト
torus_info_list = [{'tag_name': 'torus_r30&0.2_0_0_0', 'location': (0, 0, 0)}]

for torus_info in torus_info_list:
    tag_name = torus_info['tag_name']
    location = torus_info['location']

    # コレクションを取得する
    collection = bpy.data.collections.get(tag_name)

    # コレクションが存在しない場合は作成する
    if not collection:
        collection = bpy.data.collections.new(tag_name)
        bpy.context.scene.collection.children.link(collection)

    # トーラスの半径と太さ
    major_radius = 30.0
    minor_radius = 0.2

    # トーラスを作成するための頂点と面のリスト
    verts = []
    faces = []

    # トーラスの頂点を作成する
    num_major_segments = 64
    num_minor_segments = 32
    major_angle_step = 2 * math.pi / num_major_segments
    minor_angle_step = 2 * math.pi / num_minor_segments
    for i in range(num_major_segments):
        for j in range(num_minor_segments):
            x = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.cos(major_angle_step * i)
            y = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.sin(major_angle_step * i)
            z = minor_radius * math.sin(minor_angle_step * j)
            verts.append((x, y, z))

    # トーラスの面を作成する
    for i in range(num_major_segments):
        for j in range(num_minor_segments):
            a = i * num_minor_segments + j
            b = (i + 1) % num_major_segments * num_minor_segments + j
            c = (i + 1) % num_major_segments * num_minor_segments + (j + 1) % num_minor_segments
            d = i * num_minor_segments + (j + 1) % num_minor_segments
            faces.append((a, b, c, d))

    # メッシュオブジェクトを作成する
    mesh = bpy.data.meshes.new(tag_name + '_mesh')
    mesh.from_pydata(verts, [], faces)

    # オブジェクトを作成して、メッシュを割り当てる
    obj = bpy.data.objects.new(tag_name + '_object', mesh)
    obj.location = location
    collection.objects.link(obj)





































bbb

20230318 コレクション収納 3つのトーラス 30&0.2

aaa






import bpy
import math



# トーラスの情報を格納するリスト
torus_info_list = [
    {'tag_name': 'torus_r30&0.2_0_0_0', 'location': (0, 0, 0)},
    {'tag_name': 'torus_r30&0.2_0_30_0', 'location': (0, 30, 0)},
    {'tag_name': 'torus_r30&0.2_0_-30_0', 'location': (0, -30, 0)}
]

for torus_info in torus_info_list:
    tag_name = torus_info['tag_name']
    location = torus_info['location']

    # コレクションを取得する
    collection = bpy.data.collections.get(tag_name)

    # コレクションが存在しない場合は作成する
    if not collection:
        collection = bpy.data.collections.new(tag_name)
        bpy.context.scene.collection.children.link(collection)

    # トーラスの半径と太さ
    major_radius = 30.0
    minor_radius = 0.2

    # トーラスを作成するための頂点と面のリスト
    verts = []
    faces = []

    # トーラスの頂点を作成する
    num_major_segments = 64
    num_minor_segments = 32
    major_angle_step = 2 * math.pi / num_major_segments
    minor_angle_step = 2 * math.pi / num_minor_segments
    for i in range(num_major_segments):
        for j in range(num_minor_segments):
            x = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.cos(major_angle_step * i)
            y = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.sin(major_angle_step * i)
            z = minor_radius * math.sin(minor_angle_step * j)
            verts.append((x, y, z))

    # トーラスの面を作成する
    for i in range(num_major_segments):
        for j in range(num_minor_segments):
            a = i * num_minor_segments + j
            b = (i + 1) % num_major_segments * num_minor_segments + j
            c = (i + 1) % num_major_segments * num_minor_segments + (j + 1) % num_minor_segments
            d = i * num_minor_segments + (j + 1) % num_minor_segments
            faces.append((a, b, c, d))

    # メッシュオブジェクトを作成する
    mesh = bpy.data.meshes.new(tag_name + '_mesh')
    mesh.from_pydata(verts, [], faces)

    # オブジェクトを作成して、メッシュを割り当てる
    obj = bpy.data.objects.new(tag_name + '_object', mesh)
    obj.location = location
    collection.objects.link(obj)




























bbb

202303 18 3つのトーラス 30&0.2

aaa





import bpy
import math

# タグ名
tag_names = ["torus_r30&0.2_0_0_0", "torus_r30&0.2_0_30_0", "torus_r30&0.2_0_-30_0"]

for tag_name in tag_names:
    # コレクションを取得する
    collection = bpy.data.collections.get(tag_name)

    # コレクションが存在しない場合は作成する
    if not collection:
        collection = bpy.data.collections.new(tag_name)
        bpy.context.scene.collection.children.link(collection)

    # トーラスの半径と太さ
    major_radius = 30.0
    minor_radius = 0.2

    # トーラスを作成するための頂点と面のリスト
    verts = []
    faces = []

    # トーラスの頂点を作成する
    num_major_segments = 64
    num_minor_segments = 32
    major_angle_step = 2 * math.pi / num_major_segments
    minor_angle_step = 2 * math.pi / num_minor_segments
    for i in range(num_major_segments):
        for j in range(num_minor_segments):
            x = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.cos(major_angle_step * i)
            y = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.sin(major_angle_step * i)
            z = minor_radius * math.sin(minor_angle_step * j)
            verts.append((x, y, z))

    # トーラスの面を作成する
    for i in range(num_major_segments):
        for j in range(num_minor_segments):
            a = i * num_minor_segments + j
            b = (i + 1) % num_major_segments * num_minor_segments + j
            c = (i + 1) % num_major_segments * num_minor_segments + (j + 1) % num_minor_segments
            d = i * num_minor_segments + (j + 1) % num_minor_segments
            faces.append((a, b, c, d))

    # メッシュオブジェクトを作成する
    mesh = bpy.data.meshes.new('torus_mesh')
    mesh.from_pydata(verts, [], faces)

    # オブジェクトを作成して、メッシュを割り当てる
    obj = bpy.data.objects.new('torus_object', mesh)
    bpy.context.scene.collection.objects.link(obj)

    if tag_name == "torus_r30&0.2_0_0_0":
        obj.location = (0, 0, 0)
    elif tag_name == "torus_r30&0.2_0_30_0":
        obj.location = (0, 30, 0)
    elif tag_name == "torus_r30&0.2_0_-30_0":
        obj.location = (0, -30, 0)

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj)


































bbb

2023年3月16日木曜日

collection について

aaa






BlenderのCollectionクラスを使用して、オブジェクトをグループ化し、その可視性を切り替えるために、Pythonスクリプトでコーディングすることができます。例えば、以下のようなスクリプトがあります。
import bpy

# 新しいコレクションを作成する。
my_collection = bpy.data.collections.new("My Collection")

# コレクションにオブジェクトを追加する。
my_collection.objects.link(bpy.data.objects["Cube"])
my_collection.objects.link(bpy.data.objects["Sphere"])

# コレクション内のすべてのオブジェクトの可視性をFalseに設定する。
for obj in my_collection.objects:
    obj.hide_viewport = True

# コレクション内のすべてのオブジェクトの可視性をTrueに設定する。
for obj in my_collection.objects:
    obj.hide_viewport = False

このスクリプトでは、最初にbpy.data.collections.new()関数を使用して、「My Collection」という名前の新しいコレクションを作成します。次に、my_collection.objects.link()関数を使用して、



import bpy


# タグ名
tag_name = "2022_zionad"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(2022_zionad)
    bpy.context.scene.collection.children.link(collection)


# コレクションにいくつかのオブジェクトを追加する
object_names = [""Cone50 line ittei sokudo to center", "Suzanne"]
for name in object_names:
    obj = bpy.data.objects.get(name)
    if obj:
        new_collection.objects.link(obj)

# コレクションの表示を設定する
new_collection.hide_render = True
new_collection.hide_viewport = False






このスクリプトは、「My Collection」という新しいコレクションを作成し、2つのオブジェクト(立方体とSuzanne)を追加します。object_namesリスト内のオブジェクト名を、グループ化するオブジェクトに合わせて変更できます。最後に、スクリプトはコレクションの表示をレンダリング時には非表示、ビューポートでは表示するように設定します。必要に応じて、hide_renderとhide_viewportプロパティを必要に応じてTrueまたはFalseに変更してこれらの設定を変更できます。



import bpy

# 新しいコレクションを作成する
new_collection = bpy.data.collections.new("zionad Collection")

# コレクションにいくつかのオブジェクトを追加する
object_names = ["ugoku_123w", "Suzanne"]
for name in object_names:
    obj = bpy.data.objects.get(name)
    if obj:
        new_collection.objects.link(obj)

# コレクションの表示を設定する
new_collection.hide_render = True
new_collection.hide_viewport = False






https://cgbox.jp/2020/12/06/blender-collection/


https://bookyakuno.com/layer-management/




Blender Collectionの移動方法には、以下のような方法があります。
• オブジェクトを選択した状態でキーボードのMを押すことで、オブジェクトを別コレクションに移動する[1][2]。
• Outlinerでオブジェクトをコレクションにドラッグすることでも移動することができる[1]。
• Shift+G押してCollectionを選択すると一緒にCollectionに入っているものを移動できる[3]。
• 選択したオブジェクトを既存または新しいコレクションに移動するために、Mキーを使用する[4]。



import bpy

# タグ名
tag_name = "ugoku amee -30green"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 新しいコレクションの名前
new_collection_name = "A01234"

# 新しいコレクションを作成する
new_collection = bpy.data.collections.new(new_collection_name)

# シーンに新しいコレクションを追加する
bpy.context.scene.collection.children.link(new_collection)

# タグ名に一致するオブジェクトを取得する
objects = [obj for obj in bpy.context.scene.objects if tag_name in obj.name]

# 新しいコレクションにオブジェクトを追加する
for obj in objects:
    new_collection.objects.link(obj)

# タグ名に一致するコレクションを削除する
bpy.data.collections.remove(collection)



 これのオブジェクトすべてを collection ”A01234"に移動して




bbb

完成 半径30のトーラス 位置 0,0,0

aaa






import bpy
import math

# タグ名
tag_name = "torus_r30&0.2_0_0_0"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# トーラスの半径と太さ
major_radius = 30.0
minor_radius = 0.2

# トーラスを作成するための頂点と面のリスト
verts = []
faces = []

# トーラスの頂点を作成する
num_major_segments = 64
num_minor_segments = 32
major_angle_step = 2 * math.pi / num_major_segments
minor_angle_step = 2 * math.pi / num_minor_segments
for i in range(num_major_segments):
    for j in range(num_minor_segments):
        x = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.cos(major_angle_step * i)
        y = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.sin(major_angle_step * i)
        z = minor_radius * math.sin(minor_angle_step * j)
        verts.append((x, y, z))

# トーラスの面を作成する
for i in range(num_major_segments):
    for j in range(num_minor_segments):
        a = i * num_minor_segments + j
        b = (i + 1) % num_major_segments * num_minor_segments + j
        c = (i + 1) % num_major_segments * num_minor_segments + (j + 1) % num_minor_segments
        d = i * num_minor_segments + (j + 1) % num_minor_segments
        faces.append((a, b, c, d))

# メッシュオブジェクトを作成する
mesh = bpy.data.meshes.new('torus_mesh')
mesh.from_pydata(verts, [], faces)

# オブジェクトを作成して、メッシュを割り当てる
obj = bpy.data.objects.new('torus_object', mesh)
bpy.context.scene.collection.objects.link(obj)

# オブジェクトの位置を設定する
obj.location = (0, 0, 0)

# コレクションにオブジェクトを追加する
collection.objects.link(obj)

























































bbb

異なる速度 x軸 -30から-20

aaa






import bpy
import random

# タグ名
tag_name = "x -30 to -20"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 0.5

# 球体を表示するかどうかのフラグ
show_sphere = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    x = random.uniform(-30, -20)
    loc_a_start = (x, 0, 0)
    loc_a_end = (0, -30, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生







# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps
































bbb

半径30のトーラス 太さ0,2

aaa






import bpy
import math

# トーラスの半径と太さ
major_radius = 30.0
minor_radius = 0.2

# トーラスを作成するための頂点と面のリスト
verts = []
faces = []

# トーラスの頂点を作成する
num_major_segments = 64
num_minor_segments = 32
major_angle_step = 2 * math.pi / num_major_segments
minor_angle_step = 2 * math.pi / num_minor_segments
for i in range(num_major_segments):
    for j in range(num_minor_segments):
        x = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.cos(major_angle_step * i)
        y = (major_radius + minor_radius * math.cos(minor_angle_step * j)) * math.sin(major_angle_step * i)
        z = minor_radius * math.sin(minor_angle_step * j)
        verts.append((x, y, z))

# トーラスの面を作成する
for i in range(num_major_segments):
    for j in range(num_minor_segments):
        a = i * num_minor_segments + j
        b = (i + 1) % num_major_segments * num_minor_segments + j
        c = (i + 1) % num_major_segments * num_minor_segments + (j + 1) % num_minor_segments
        d = i * num_minor_segments + (j + 1) % num_minor_segments
        faces.append((a, b, c, d))

# メッシュオブジェクトを作成する
mesh = bpy.data.meshes.new('torus_mesh')
mesh.from_pydata(verts, [], faces)

# オブジェクトを作成して、メッシュを割り当てる
obj = bpy.data.objects.new('torus_object', mesh)
bpy.context.scene.collection.objects.link(obj)

# 3Dビューポートを更新する
bpy.context.view_layer.update()









import bpy

# Create torus
bpy.ops.mesh.primitive_torus_add(major_radius=30, minor_radius=30-0.2, location=(0, 0, 0))
























bbb

10分の1平行雨 Green

aaa






import bpy
import random

# タグ名
tag_name = "ugoku amee -30green"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 0.5

# 球体を表示するかどうかのフラグ
show_sphere = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    x = random.uniform(-30, 30)
    loc_a_start = (x, 0, 0)
    loc_a_end = (x, -30, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生







# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps









import bpy
import random

# タグ名
tag_name = "ugoku amee +30green"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 0.5

# 球体を表示するかどうかのフラグ
show_sphere = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    x = random.uniform(-30, 30)
    loc_a_start = (x, 0, 0)
    loc_a_end = (x, 30, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生







# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps























bbb

円柱2つ y軸 -30 、30

aaa






import bpy

# First cylinder at (0, 30, 0)
bpy.ops.mesh.primitive_cylinder_add(radius=0.5, depth=60, location=(0, 30, 0))

# Second cylinder at (0, -30, 0)
bpy.ops.mesh.primitive_cylinder_add(radius=0.5, depth=60, location=(0, -30, 0))

































bbb

10分の1 x軸から y=30へ  速度一定

aaa
import bpy
import random

# タグ名
tag_name = "zion cone50 line ittei sokudo to Y30"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 円錐の半径と高さを設定
radius = 0.5
height = 1.0

for i in range(50):
    # 円錐の初期位置と移動先の位置をランダムに設定
    x = random.uniform(-30, 30)
    loc_a_start = (x, 0, 0)
    loc_a_end = (0, 30, 0)

    # 円錐Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_cone_add(radius1=radius, radius2=0, depth=height, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    distance = (((0-0)**2 + (x-0)**2 + (30-0)**2)**0.5)  /30
    end_frame_a = int(distance * 20 * bpy.context.scene.render.fps)  # 円錐Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 円錐Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 円錐Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生










0,30,0 に 半径0.5の円筒
0,-30,0 に 半径0.5の円筒
 書いて
































bbb

10分の1 大きさ x 軸ランダム y-30 異なる速度

aaa
import bpy
import random

# タグ名
tag_name = "ugoku_123w"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 0.5

# 球体を表示するかどうかのフラグ
show_sphere = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    x = random.uniform(-30, 30)
    loc_a_start = (x, 0, 0)
    loc_a_end = (0, -30, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生







# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps






































bbb

円筒

aaa











import bpy
import math
import mathutils

# 円錐の高さと底面半径
height = 300
radius = 300

# 円錐を作成するための頂点と面のリスト
verts = []
faces = []

# 円錐の頂点を作成する
num_verts = 32
angle_step = 2 * math.pi / num_verts
for i in range(num_verts):
    x = radius * math.cos(angle_step * i)
    y = radius * math.sin(angle_step * i)
    z = 0
    verts.append(mathutils.Vector((x, y, z)))
verts.append(mathutils.Vector((0, 0, height))) # 円錐の先端の頂点を追加

# 円錐の面を作成する
num_faces = num_verts
for i in range(num_faces):
    face = [i, (i + 1) % num_verts, num_verts]
    faces.append(face)

# メッシュオブジェクトを作成する
mesh = bpy.data.meshes.new('cone_mesh')
mesh.from_pydata(verts, [], faces)

# オブジェクトを作成して、メッシュを割り当てる
obj = bpy.data.objects.new('cone_object', mesh)
bpy.context.scene.collection.objects.link(obj)

# 3Dビューポートを更新する
bpy.context.view_layer.update()










0,0,0 から 0,0,300 で 半径0,5の円筒書いて


0,0,0 から 0,150,300 で 半径0,5の円筒書いて


import bpy
import mathutils

# 円筒の半径
radius = 2

# 円筒の高さ
height = 300

# 円筒の作成
bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height)

# オブジェクトを取得
obj = bpy.context.object

# 円筒の位置を設定
obj.location = mathutils.Vector((0, 0, height / 2))

# 円筒を選択状態にする
obj.select_set(True)

# 円筒のスケールを設定
bpy.ops.transform.resize(value=(1, 1, height / (2 * radius)))

# 3Dカーソルの位置を設定
bpy.context.scene.cursor.location = mathutils.Vector((0, 0, height / 2))

# 3Dカーソルを円筒の中心に移動
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')

# 円筒の選択状態を解除
obj.select_set(False)
    


























import bpy
import math
import mathutils

# 円錐の高さと底面半径
height = 300
radius = 300

# 円錐を作成するための頂点と面のリスト
verts = []
faces = []

# 円錐の頂点を作成する
num_verts = 32
angle_step = 2 * math.pi / num_verts
for i in range(num_verts):
    x = radius * math.cos(angle_step * i)
    y = radius * math.sin(angle_step * i)
    z = 0
    verts.append(mathutils.Vector((x, y, z)))
verts.append(mathutils.Vector((0, 0, height))) # 円錐の先端の頂点を追加

# 円錐の面を作成する
num_faces = num_verts
for i in range(num_faces):
    face = [i, (i + 1) % num_verts, num_verts]
    faces.append(face)

# メッシュオブジェクトを作成する
mesh = bpy.data.meshes.new('cone_mesh')
mesh.from_pydata(verts, [], faces)

# オブジェクトを作成して、メッシュを割り当てる
obj = bpy.data.objects.new('cone_object', mesh)
bpy.context.scene.collection.objects.link(obj)

# 3Dビューポートを更新する
bpy.context.view_layer.update()


この円錐表面に 以下の球体中心が通過したら

球体半径0.5 の球体を 0,300,0へ 動かすアニメを作って



import bpy
import random

# タグ名
tag_name = "y zrain_l_line_drops50"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    z = random.uniform(-300, 300)
    loc_a_start = (-300, 0, z)
    loc_a_end = (0, 300, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生







# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps






bbb

失敗 円錐と円筒で ファイ現象

aaa




日本語で質問しますので、以下形式で回答してください。
【質問の英訳】
【英訳に対する英語の回答】
【英語の回答の日本語訳】
blender 3.4.1 python スクリプト 書いて 
冒頭に import math 挿入 内容は 






高さ30 半径30の円錐を z=0からz=30で 中心がx=0 y=0

高さ30 半径30の円筒を z=0からz=30で 中心がx=0 y=-60
に作って

円筒は 30秒で60動く y軸方向 プラス方向に

繰り返すアニメを 作って
blender3.4.1









































bbb

円周半径 30の 球体1の回転 16秒

aaa

import bpy
import math

# コレクション名
collection_name = "eeeee"

# コレクションを取得する
collection = bpy.data.collections.get(collection_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(collection_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径
radius = 1.0

# 球体の位置
pos_x = 30.0
pos_y = 0.0
pos_z = 0.0

# 球体を作成する
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=(pos_x, pos_y, pos_z))

# 球体オブジェクトを取得する
sphere = bpy.context.object

# コレクションにオブジェクトを追加する
collection.objects.link(sphere)

# 球体のアニメーション設定
start_frame = 1
end_frame = int(30 * bpy.context.scene.render.fps)  # 30秒分のフレーム数
bpy.context.scene.frame_start = start_frame
bpy.context.scene.frame_end = end_frame

# キーフレームを設定する
for frame in range(start_frame, end_frame + 1):
    # 球体の回転角度を計算する
    angle = (frame - start_frame) * 2 * math.pi / (bpy.context.scene.render.fps * 16)
    # 球体の位置を計算する
    pos_x = 30.0 * math.cos(angle)
    pos_y = 30.0 * math.sin(angle)
    pos_z = 0.0
    # 現在のフレームにおけるオブジェクトをアクティブにする
    bpy.context.scene.frame_set(frame)
    sphere = bpy.context.active_object
    # 球体の位置を更新してキーフレームを設定する
    sphere.location = (pos_x, pos_y, pos_z)
    sphere.keyframe_insert(data_path="location", frame=frame)













import bpy
import math


# コレクション名
collection_name = "eeeee"

# コレクションを取得する
collection = bpy.data.collections.get(collection_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(collection_name)
    bpy.context.scene.collection.children.link(collection)





# 球体の半径
radius = 1.0

# 球体の位置
pos_x = 30.0
pos_y = 0.0
pos_z = 0.0

# 球体を作成する
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=(pos_x, pos_y, pos_z))




# コレクションにオブジェクトを追加する
collection.objects.link(sphere)






# 球体のアニメーション設定
start_frame = 1
end_frame = int(16 * bpy.context.scene.render.fps)  # 16秒分のフレーム数
bpy.context.scene.frame_start = start_frame
bpy.context.scene.frame_end = end_frame

# キーフレームを設定する
for frame in range(start_frame, end_frame + 1):
    # 球体の回転角度を計算する
    angle = (frame - start_frame) * 2 * math.pi / (bpy.context.scene.render.fps * 16)
    # 球体の位置を計算する
    pos_x = 30.0 * math.cos(angle)
    pos_y = 30.0 * math.sin(angle)
    pos_z = 0.0
    # 球体の位置を更新してキーフレームを設定する
    bpy.context.object.location = (pos_x, pos_y, pos_z)
    bpy.context.object.keyframe_insert(data_path="location", frame=frame)



























import bpy

# コレクション名
collection_name = "eeeee"

# コレクションを取得する
collection = bpy.data.collections.get(collection_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(collection_name)
    bpy.context.scene.collection.children.link(collection)

# 球体を作成する
sphere_radius = 1.0
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=(pos_x, pos_y, pos_z))
sphere = bpy.context.object







# コレクションにオブジェクトを追加する
collection.objects.link(sphere)

# アニメーションのフレーム設定を行う
start_frame = 1  # アニメーションの最初のフレーム
end_frame = int(16 * bpy.context.scene.render.fps)  # アニメーションの終了フレーム
bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
bpy.context.scene.frame_end = end_frame  # アニメーションの終了フレームを設定

# キーフレームを設定する
sphere.rotation_euler = (0, 0, 0)  # 球体の初期回転を設定
sphere.keyframe_insert(data_path="rotation_euler", frame=start_frame)  # 開始フレームでキーフレームを設定
sphere.rotation_euler = (0, 0, 2 * 3.14)  # 球体の終了回転を設定
sphere.keyframe_insert(data_path="rotation_euler", frame=end_frame)  # 終了フレームでキーフレームを設定

# コレクションを取得する
collection = bpy.data.collections.get(collection_name)

# コレクションが存在している場合
if collection:
    # 表示/非表示を切り替える
    if collection.hide_viewport:
        collection.hide_viewport = False
    else:
        collection.hide_viewport = True














bbb

テスト2

aaa


# コレクションを取得する
collection = bpy.data.collections.get("コレクション名")

# コレクションが存在している場合
if collection:
    # 表示/非表示を切り替える
    if collection.hide_viewport:
        collection.hide_viewport = False
    else:
        collection.hide_viewport = True

 
上上がり 300 z 0→300 



import bpy
import random

# タグ名
tag_name = "rain_l_line_same_velocities"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

# 表示/非表示を切り替える
if collection.hide_viewport:
    collection.hide_viewport = False
else:
    collection.hide_viewport = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    y = random.uniform(-300, 300)
    loc_a_start = (0, y, -300)
    loc_a_end = (0, y, 300)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生

# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps








y z広がり





import bpy
import random

# タグ名
tag_name = "rain_l_line_same_velocities"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

# 表示/非表示を切り替える
if collection.hide_viewport:
    collection.hide_viewport = False
else:
    collection.hide_viewport = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    y = random.uniform(-300, 300)
    loc_a_start = (0, y, -300)
    loc_a_end = (0, y, 300)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生

# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps











x0    z広がり y -300から0移動

import bpy
import random

# タグ名
tag_name = "rain_yoko_test"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

# 表示/非表示を切り替える
if collection.hide_viewport:
    collection.hide_viewport = False
else:
    collection.hide_viewport = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    z = random.uniform(-300, 300)
    loc_a_start = (0, -300, z)
    loc_a_end = (0, 0, z)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生

# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps












import bpy
import random

# タグ名
tag_name = "rain_yoko2_test"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

# 表示/非表示を切り替える
if collection.hide_viewport:
    collection.hide_viewport = False
else:
    collection.hide_viewport = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    z = random.uniform(-300, 300)
    loc_a_start = (0, 300, -z)
    loc_a_end = (0, -300, -z)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生

# アニメーション再生時間を10秒延長
bpy.context.scene.frame_end += 10 * bpy.context.scene.render.fps

























import bpy
import random

# タグ名
tag_name = "ccc"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

# 表示/非表示を切り替える
if collection.hide_viewport:
    collection.hide_viewport = False
else:
    collection.hide_viewport = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    z = random.uniform(-300, 300)
    loc_a_start = (0, 300, -z)
    loc_a_end = (0, 0, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定




# コレクションを取得する
collection = bpy.data.collections.get("ccc")

# コレクションが存在している場合
if collection:
    # 表示/非表示を切り替える
    if collection.hide_viewport:
        collection.hide_viewport = False
    else:
        collection.hide_viewport = True



# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生

# アニメーション再生時間を10秒延長
bpy.context.scene.frame_end += 10 * bpy.context.scene.render.fps



bbb

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

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