Help us understand the problem. What is going on with this article?

Python for Blender クックブック ~はじめに~

More than 1 year has passed since last update.

Pythonを使ってBlenderでできる事を、出題->解答の形式でまとめています。

はじめに

Blenderってたまに面倒臭いですよね?
Pythonで自動化しちゃいましょう!

レシピ一覧

レシピ一覧用ページ

3D操作

マテリアル操作

使い方

Q&A

Q. Blenderのバージョンは?

Blender2.79b用、Blender2.80用のコードをそれぞれ記載しています。
Blender2.80のコードはない場合もあります。

Q. Pythonのバージョンは?

Blender2.79bはpython3.?を使います。
Blender2.80はpython3.?を使います。

Q. 出題はどうやって使うの?

解いてもいいし、さっさと答えを見てもいいです。

Q. どの出題をやったらいいの?

難易度やハッシュタグ(例:#メッシュ)を参考にして下さい。
ページ内検索とか便利です。

Q. OOのサンプルコードが欲しい

Qiitaコメント欄や私のツイッターアカウント(@KTakahiro1729)でリクエストを受け付けています。
できるとも限りませんし、作成物は全てここで公開しますが、それでよければお気軽にどうぞ。

Pythonの難易度

各出題には、Python文法の難易度が★☆☆☆☆~★★★★★で表されています。
下にある各難易度のサンプルコードが理解できたら、文法上は問題ないでしょう。

★☆☆☆☆のサンプルコード

a = (4 - 1) * -1
print("aは", a + 1) # 嘘付きな出力
b = str(a)
c = min(len(b),abs(a))
d = [a, b, c]
e = {"整数": (a,abs(a)), "文字列": b}
print(d, d[1],
  list(e.keys()), e["文字列"][0])

import datetime as d
print(d.datetime.now())
  • 数値計算
  • 変数への代入
  • 関数の使用
  • printを使った出力
  • コメント
  • 型の変換
  • リスト、辞書、タプルの利用
  • プロパティー、メソッドの利用
  • ライブラリーのインポート

★★☆☆☆のサンプルコード

def fizzbuzz(i):
    """数字をもらうとfizzbuzzの結果を返す。

    数字というのはint"""
    if type(i) == int:
        pass
    else:
        try:
            i = int(i)
        except:
            print("型が変")
            return None
    if (i % 15) == 0:
        return "fizzbuzz"
    elif not (i - (i // 5)*5):
        print(i)
        return "buzz"
    elif 1- bool(i % 3):
        return "fizz"
    else: return str(i)

while True:
  max_i = input("最大値")
  if not (len(max_i)):
    continue
  max_i = int(max_i)
  break

result = []
for i in range(1,max_i + 1):
    result.append(fizzbuzz(i))

print(",".join(result))
  • 関数の作成
  • 複数行コメント
  • for文
  • if-elif-else文
  • while文
  • try-except文
  • break-continue文
  • 標準入力
  • 型の確認
  • 高度な数値計算(~数IIBレベル)

★★★☆☆のサンプルコード

import random

class Character():
    def __init__(self,name, hp=20):
        self.name = name
        self.hp = hp
        self.atk = 10
        self.isAlive = True
    def calc_damage(self):
        return int(self.atk * random.random())
    def attack(self, target):
        damage = self.calc_damage()
        target.hp -= damage
        print("{0} attacked {1} with {2} so {3} left".format(self.name, target.name, damage, target.hp))
        if target.hp <= 0:
            target.die()
    def die(self):
        self.isAlive = False
        print(self.name, "has died")

class Hero(Character):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.atk = 20
    def introduce(self):
        print ("I'm ",self.name)

class Monster(Character):
    pass

name = input("Please input name: ")
player = Hero(name)
player.introduce()
monster = Monster("monster1", 10)

turn = (player, monster)
while monster.isAlive and player.isAlive:
    turn[0].attack(turn[1])
    turn = turn[::-1]

print("".join(["完" if i == 5 else "=" for i in range(20) if i < 12]))

  • オブジェクト指向
  • ファイル入出力
  • format
  • リスト内包表記
  • 三項演算子

★★★★☆のサンプルコード

  • 細かめな仕様の把握
    • lambda関数
    • デコレーター
    • など……
  • numpy, pandasの基礎的な利用
  • 数IIBより高度な数学の知識
    • 行列
  • 基本的なコンピューターの知識
    • .csv
    • ファイルのパス

★★★★★のサンプルコード

  • ★★★★☆に含めるのに気がひけるもの
    • メタプログラミング
  • 高度なコンピューターの知識
    • 抽象構文木
    • ソケット通信

ただし、★★★★☆の知識だけで分かるように簡単な解説を加えています。

ライセンス

ソースコード

GPLのライブラリー(bpyとかbmeshとか)をインポートしている場合は、当然GPLです。
その他は基本的にMITライセンスです。

本文・画像・サンプルファイルなど

ソースコード以外はCC0です。(例外は明記します)
どこかに使いたければ、勝手に使ってください。

編集リクエスト

編集リクエストは歓迎しますが、その内容には上記ライセンスが適用される事を了承したものと見なします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした