OneonetのPyBE

Python,Blender,Excelのいろいろ

弾性パラメタの違い

衝突映像の作成には欠かせない弾性パラメタですが、0~1.0以下の値が指定できるとは知りつつも、どのくらいが丁度いいのかな?という話。実際にUV球を配置して、弾性パラメタを変化させてどの程度跳ね返ることになるのか見てみました。結論から言いますと0.5以上にしておかないとあまり目立った反応無し、といったところです。

ソースコードを少し解説しますと、まずは大き目の床板を作成。restitution(物理演算プロパティ→リジッドボディ→表面の反応→弾性 になります)を1としておきます。10個のUV球を高さ10に並べて、 restitutionを0.5から1.0まで0.05刻みとしました。テキストを入れてありますが、スクリプトでうまく表現できませんでしたのでこれは手で入れました。

落としてみると映像の通り。0.6~0.9ぐらいを設定すると"跳ねる"感じが出ているように思います。

blenderをインストールしてスクリプトをコピペするだけで再現できます。是非一度やってみてください。念のため手順をおさらい。

  1. Blenderを起動する
  2. クリックしてスプラッシュ(3.0.0だと女の子と小鳥)を閉じる
  3. 画面上部メニューの"scripting"を選択
  4. 新しく出てきたパネルの上部中央にある"+ 新規"をクリック
  5. 数字の1が赤く出たと思います。エディタになっているので以下のソースコードをコピペ。
  6. "+ 新規"のすぐ右にある右向き三角"▶"でスクリプトの実行
  7. 画面上部メニューの"Animation"を選択
  8. 画面下部にあるアニメーション再生ボタン(右向き三角"▶")をクリック

どうでしょう?同じ映像が再生されたと思います。面白いですよね、Blender

#blender 3.0.0 で 動作確認済
import bpy

for item in bpy.data.meshes:
    bpy.data.meshes.remove(item)

f = 10

#大き目の床板。弾性1.0に指定
bpy.ops.mesh.primitive_plane_add(size=40, enter_editmode=False, align='WORLD', location=(0, 0, -1), scale=(1, 1, 1))
bpy.ops.rigidbody.object_add()
bpy.context.object.rigid_body.type = 'PASSIVE'
bpy.context.object.rigid_body.restitution = 1

#10個の球を弾性0.5~1.0まで10個
for x in range (0,f):
    bpy.ops.mesh.primitive_uv_sphere_add(radius=0.5, enter_editmode=False, align='WORLD', location=(x*2-f, 0, 10), scale=(1, 1, 1))
    bpy.ops.rigidbody.object_add()
    bpy.context.object.rigid_body.restitution = 0.5 + x / 20 -0.01

動画についてはミラーブログでご確認ください。
oneonet-blog.blogspot.com