見出し画像

【Blender】初めて Python (BPY) やってみた

もうずいぶん前の事、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 bpy
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 アドオンあるじゃん、ってツッコミは無しで)


WEBデザイナー(自営業)のおばちゃんです。最近はBlenderネタ多めです。