質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

Q&A

0回答

321閲覧

blender 結合

akaRIP

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Blender

Blenderとは、オープンソースの3DCGソフトウェアです。フリーでありながら、3Dモデル作成、レンダリング、アニメーション、コンポジットなどのハイエンドに匹敵する高い機能を持ち、さらにゲームエンジンも搭載しています。

0グッド

0クリップ

投稿2022/10/30 08:38

前提

ここに質問の内容を詳しく書いてください。
(例)
blenderのScripring(python)を利用して、
3×3×3の27個の球を結合して動かすようにするにはどのようにすればいいですか?
物理演算も利用したいため、材質はACTIVEにしたい。

実現したいこと

blenderのScripring(python)を利用して、
3×3×3の球の27個の球を二つ作成させて動くようにさせて、ぶつけ合ってはじくようにしたい。

発生している問題・エラーメッセージ

結合した球を動かそうとすると、全てはじけ飛んでしまう。

ソースコード

import bpy #Python から Blender を操作するためのモジュール import math #数学関数を使うためのモジュール import random bpy.ops.object.select_all(action='SELECT') #全てのオブジェクトを選択 bpy.ops.object.delete(True) #選択した全てのオブジェクトを削除 #光源の設定 bpy.ops.object.light_add( type="SUN", #光源の種類(POINT:点光源,SUN:平行光線, #SPOT:スポットライト,AREA:エリアライト) location=( 0, 0, 10), #光源の位置 rotation=( 0, 0, 0 ), #光源の角度 ) #光源の設定(追加) bpy.context.object.data.energy = 100 #光源の強さ(デフォルト値は 10) bpy.context.object.data.color=(0,1,0) #光源の色(赤,緑,青) #カメラの設定 bpy.ops.object.camera_add( location=( 10, -10, 10 ), #カメラの位置 rotation=( math.pi/3.2, 0, math.pi/4), #カメラの方向 ) #カメラのクリッピング設定 bpy.context.object.data.clip_start = 0.1 #カメラのクリッピング開始位置 bpy.context.object.data.clip_end = 100 #カメラのクリッピング終了位置 #レンダリングの設定 scene = bpy.context.scene #シーンオブジェクトデータを変数 scene に代入 scene.render.resolution_x = 1280 #レンダリング画像の X 方向の解像度 scene.render.resolution_y = 720 #レンダリング画像の Y 方向の解像度 scene.render.resolution_percentage = 100 #レンダリングする画像サイズの百分率 #材質の設定 material = bpy.data.materials.new('Color') #材質データの作成(Color の部分は材質名) material.diffuse_color = (1.0, 0.0, 0.0, 1.0) #材質データの色(赤,緑,青,透過度) #プリミティブの追加 #関数(球の追加) def add_uv_sphere(location,color): #関数の宣言(引数は location と color) #材質の設定 material = bpy.data.materials.new('Color') #材質データの作成 material.diffuse_color = (color) #材質データの色(引数で受け取った値) #プリミティブの追加(球) bpy.ops.mesh.primitive_uv_sphere_add( location=(location) #プリミティブの設定(引数で受け取った値) ) bpy.context.object.data.materials.append(material) #材質の反映 bpy.ops.object.modifier_add(type="SUBSURF") #モディファイア処理 bpy.ops.rigidbody.object_add( type='ACTIVE' ) bpy.context.object.rigid_body.mass = 10 #剛体の重さの設定 bpy.context.object.rigid_body.friction = 0.5 #剛体の摩擦の設定(0.0-1.0) bpy.context.object.rigid_body.restitution = 1.0 #剛体の弾性の設定(0.0-1.0) add_uv_sphere((0,0,15),(1.0, 0.0, 0.0, 1.0)) #球の追加(Z 軸 10 で赤色に設定) add_uv_sphere((0.5,0.5,1),(0.0, 0.0, 1.0, 1.0)) #球の追加(原点からずらして青色に設定) #プリミティブの追加(平面) bpy.ops.mesh.primitive_plane_add( location=(0,0,0) ,#プリミティブの設定(位置) rotation=(0, 0, 0) ) bpy.ops.transform.resize(value=(10,10,1)) #平面を拡大 bpy.ops.rigidbody.object_add( #剛体の設定 type='PASSIVE' #剛体をパッシブに設定(動かない) ) #3×3 で原点を中心に並べて 9 つの球の追加 for x in range(3): for y in range(3): for z in range(3): add_uv_sphere((x*1, y*1, z*1+1),(random.random(), random.random(),random.random(), 1.0)) bpy.context.object.data.materials.append(material) #材質の反映 bpy.ops.object.modifier_add(type="SUBSURF") #モディファイア処理 bpy.ops.rigidbody.object_add( type='ACTIVE' ) bpy.context.object.rigid_body.mass = 10 #剛体の重さの設定 bpy.context.object.rigid_body.friction = 0.5 #剛体の摩擦の設定(0.0-1.0) bpy.context.object.rigid_body.restitution = 1.0 #剛体の弾性の設定(0.0-1.0) bpy.context.scene.cursor.location=(0,0,0) #カーソルの座標を設定(この場合原点) bpy.ops.object.origin_set(type='ORIGIN_CURSOR') #カーソル位置をオブジェクト原点に bpy.context.scene.frame_start = 0 #レンダリング動画の最初のフレームの設定 bpy.context.scene.frame_end = 240 #レンダリング動画の最後のフレームの設定 bpy.context.scene.frame_set(0) #最初のキーフレーム番号を設定 obj = bpy.context.view_layer.objects.active #動かすオブジェクトをアクティブ化 obj.keyframe_insert(data_path='location') #キーフレームで「移動」を可能にする obj.keyframe_insert(data_path='rotation_euler') #キーフレームで「回転」を可能にする bpy.context.scene.frame_set(240) #最後のキーフレーム番号を設定 obj.location.x += 5 #オブジェクトの移動を設定(z 軸+5) obj.location.y += 5 #オブジェクトの移動を設定(z 軸+5) obj.rotation_euler[2] += math.pi*2 #オブジェクトの回転を設定(z 軸 360 度) obj.keyframe_insert(data_path='location') #キーフレームで「移動」を反映する obj.keyframe_insert(data_path='rotation_euler') #キーフレームで「回転」を反映する #グループ化(Z 座標が 1 のオブジェクトを対象) for obj in bpy.data.objects: #全てのオブジェクトを調べる loc_z = (obj.location.z) #オブジェクトの Z 座標を取得 if loc_z >= 1 and loc_z <= 10: #そのオブジェクトの Z 座標が 1 の場合 obj.select_set(True) #選択状態にする bpy.ops.object.join() #選択したオブジェクトを統合 bpy.context.scene.frame_start = 0 #レンダリング動画の最初のフレームの設定 bpy.context.scene.frame_end = 240 #レンダリング動画の最後のフレームの設定 bpy.context.scene.render.image_settings.file_format = 'FFMPEG' #ファイル形式を設定 bpy.context.scene.render.ffmpeg.format = 'MPEG4' #コンテナの設定 bpy.context.scene.render.filepath = "C:\\tmp\\sample6_1.mp4" #ファイル名を設定

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問