【Blender】使って初めて Python やってみた
2024.08.01訂正 今回のコードはたぶん BPY は関係ありません。私の書いたコード(Copilot さんの含め) は、Blender Python API 上で Python のコードで計算をさせているだけです。 Blender の操作と連動しているわけではありません。
タイトルから BPY を削除しました。混乱させるようなことを書いてしまってすみません。本人も混乱しておりますゆえご容赦願いまする。
2024.09.08訂正 記事の中で「頂点と頂点の間の長さを測る」ために、Python でコードを書いておりますが、Blender には始めから距離を測るツール「Measure(メジャー)」がありました。
よって、今記事は「Blender に Python が動く環境があったので、とりあえず Python のコードを走らせてみた。」という内容になります。
↓言い訳してる記事
もうずいぶん前の事、Python にチャレンジしようと、知り合いの Python 使いに Anaconda を Macbook にインストールしてもらった。
しかし、通信環境が悪くて何やかんやでインストールに1時間ぐらいかかってしまったために、肝心の Python プログラミングは “Hello World” ぐらいしか教えてもらえなかったという残念な顛末だった。
その後、再チャレンジしようとするも、Anaconda のバージョンが古くなりすぎ & バージョンアップのやり方がわからない。オンライン上で動くやつもよくわからない。で、結局 Python を諦めていた。
今回、一念発起でチャレンジしたのは、Blender には最初から Python が動く環境「Blender Python API(BPY)」が入っていたことと、note でフォローさせていただいている、すうちさんの Python 記事がわかりやすくて、再再チャレンジできそうな気持ちになれたからだった。
頂点と頂点の間の長さを測る
Blender で指輪のモデリングをしていると、最初はタテヨコ同じ長さの円も歪になってくる。
指輪の内側を歪ませてしまった時など、グリッドのマス目を一つずつ数えたり、パソコンのモニタに実物の定規をあてたりして、タテヨコが同じ長さの円になるように修正していた。
そんなこともあって、けっこう前から頂点と頂点の間の長さを測りたい、と思っていた。
超初心者コンソール直書き
そこで今回、10cm✖️10cm✖️10cm の立方体(自分の頭が理解しやすい数字とカタチ)の座標A(5, 5, 5)と座標B(-5, -5, -5)、AB間の長さを測るコードを Python で書いてみることに挑んだ。
基本的な考え方は、直方体の対角線の長さを求める式をコードにする。
で、書いたのがこちら↓
import math
x1 = 5
y1 = 5
z1 = 5
x2 = -5
y2 = -5
z2 = -5
X = (x1 - x2) ** 2
Y = (y1 - y2) ** 2
Z = (z1 - z2) ** 2
XYZ = X + Y + Z
val = math.sqrt(XYZ)
print(val)
書き方汚いし、座標の値は応用が効かないし、なんか JavaScript 風味を感じるし・・・
Microsoft Copilot に書き直してもらう
さあ、ここで AI のチカラよ。
上のチープなコードを、Microsoft Copilot(無料版)に入力して、こう書いた。
「Please rewrite this code to be cool.」
すると、Copilot さんはこう言った。
「確かに!あなたのコードに華を添えましょう。これを3次元空間の2点間のユークリッド距離を計算する関数に変えてみるのはどうだろう?🚀」
(確かに。って、私のコードがショボイっていちいち肯定してくれなくていいよ。そして「ユークリッド距離」って何?)
import math
def cool_distance(x1, y1, z1, x2, y2, z2):
X = (x1 - x2) ** 2
Y = (y1 - y2) ** 2
Z = (z1 - z2) ** 2
distance = math.sqrt(X + Y + Z)
return distance
# Example usage:
point1 = (5, 5, 5)
point2 = (-5, -5, -5)
result = cool_distance(*point1, *point2)
print(f"Cool distance: {result:.2f}")
綺麗、なんか綺麗。しかも、コードがちゃんと Python っぽい。
Copilot さんのコードに「import bpy」を付けて、Blender のコンソールで試してみたら、ちゃんと
Cool distance: 17.32
って出た。
自分で書いたコードはショボイけど、Copilot のコードは自分のチカラじゃないけど、それでも初めて自分のやりたい事が Python で出来て大感激!
これから、ゆっくりでも Python 勉強していきます。
(距離を測る Blender アドオンあるじゃん、ってツッコミは無しで)