Python for Blender クックブックのレシピ一覧

# レシピ一覧 (Python for Blender クックブック)

Pythonを使ってBlenderでできる事をまとめています。解説もあります。
[はじめに](https://qiita.com/KTakahiro1729/items/5de5f60982af37d23aa0)

# 簡潔な一覧
トピックごと、難易度順に並んでいます。

## 3D操作
- [一辺の大きさが1の立方体を追加する](https://qiita.com/KTakahiro1729/items/fdd904e151ebd56ea361) ★☆☆☆☆
- [デフォルトキューブをz方向に1動かす](https://qiita.com/KTakahiro1729/items/71f1e2a2f0859ea5b158) ★☆☆☆☆
- [オブジェクトの名前にメッシュ名を合わせる](https://qiita.com/KTakahiro1729/items/3a30d78a43c555de3bda) ★★☆☆☆
- [メッシュの名前を「MESH_オブジェクト名*たち*」にする](https://qiita.com/KTakahiro1729/items/febcfd6b6fd221e3f2d3)★★★☆☆
- [シーン内の全てのメッシュオブジェクトの原点を変更する](https://qiita.com/KTakahiro1729/items/2b9cef0f6d9817f5ee79)★★★★☆
- [「数字->新名」の対応を元に、「Bone_L.数字」を「新名_L」に改名する（正規表現）](https://qiita.com/KTakahiro1729/items/5c5724b091ff820ccfa5) ★★★★★

## マテリアル操作
- [Diffuse色とSpecularの強さからマテリアル名を決める](https://qiita.com/KTakahiro1729/items/e946fed089a8d8a43e86) ★★☆☆☆
- [一つのマテリアルが同じオブジェクトで重複しているのをまとめる](https://qiita.com/KTakahiro1729/items/931b20f4eacf4c76c9ad)★★★★☆
- [マテリアルをアルファベット順に並べる](https://qiita.com/KTakahiro1729/items/3c98b19b9f71d2bf9cef)★★★★☆

# 詳細 
古い順に並んでいます。
## [一辺の大きさが1の立方体を追加する](https://qiita.com/KTakahiro1729/items/fdd904e151ebd56ea361)
Pythonの難易度: ★☆☆☆☆
投稿日: 2018/10/29

### 動機
普通の立方体追加で追加される立方体は一辺の長さが2です。
スクリプトを使うことで、最初から長さ1の立方体を追加してみましょう。

### 細かい仕様
- オブジェクトモードのとき、一辺の長さが1の立方体を追加してください。
- スケールは1にしてください。
- 3Dカーソルの位置に立方体を追加してください。

## [デフォルトキューブをz方向に1動かす](https://qiita.com/KTakahiro1729/items/71f1e2a2f0859ea5b158)
Pythonの難易度: ★☆☆☆☆

### 細かい仕様
- 開いたばかりのファイルを使ってください
- オブジェクトをまるごとz方向に移動してください（原点の位置を移動する）

## [オブジェクトの名前にメッシュ名を合わせる](https://qiita.com/KTakahiro1729/items/3a30d78a43c555de3bda)
Pythonの難易度: ★★☆☆☆
投稿日: 2018/10/29

### 動機
オブジェクトの名前を変更しても、メッシュの名前までは変わりません。
いちいち変えるのも面倒くさいので、Pythonにやってもらいましょう。

### 細かい仕様
- 様々な種類のオブジェクト（メッシュ、ランプ、カメラなど）があるファイルを使ってください。
- 一つのメッシュデータが複数のメッシュオブジェクトに共有されている状態は考慮しなくてもいいです。
- メッシュオブジェクトの中のメッシュデータの名前を、メッシュオブジェクトと同じにしてください。

## [Diffuse色とSpecularの強さからマテリアル名を決める](https://qiita.com/KTakahiro1729/items/e946fed089a8d8a43e86)

Pythonの難易度: ★★☆☆☆
投稿日時: 2018/10/31

### 動機
気がついたら`Material.004`みたいな名前のマテリアルが増えていて困りますよね？
マテリアルの特徴を元にマテリアル名を改名しましょう。

### 細かい仕様
- Diffuse色は下表の通りです。0~1の間の値は四捨五入してください

|色名|大体のRGB値(0〜1)|
|:--|--:|
|black|(0,0,0)|
|<font color="Red">red</font>|(1,0,0)|
|<font color="Green">green</font>|(0,1,0)|
|<font color="Blue">blue</font>|(0,0,1)|
|<font color="#33CCFF">aqua</font>|(0,1,1)|
|<font color="Purple">purple</font>|(1,0,1)|
|<font color="#777700">yellow</font>|(1,1,0)|
|white|(1,1,1)|

- Specularの強さを四捨五入した結果が0なら`rough`、1なら`smooth`です。
- 「M_black_smooth」のように「M_Diffuse色_Specularの強さ」とマテリアルを改名してください。
- マテリアル名の重複は気にしないでください。


### [「数字->新名」の対応を元に、「Bone_L.数字」を「新名_L」に改名する（正規表現）](https://qiita.com/KTakahiro1729/items/5c5724b091ff820ccfa5)
Pythonの難易度: ★★★★★
投稿日: 2018/10/30


#### 動機
左右対称のリグを作るとき、ボーンの名前に左右を表す`_L`や`_R`が付いていると便利です。
しかし、`X-Axis Mirror`を有効にボーン編集をしても、`Bone_[LかR].[三桁数字]`というボーンが作られてしまいます。（「001」のように0埋めがされた数字も三桁数字と表現しています）
これを`Bone.[三桁数字]_[LかR]`に名付け直せると便利ですね。
また、`.001`が付いているボーンは`Sholder`に、`.002`なら`Arm`のように、数字に基づいて改名してみましょう。

#### 細かい仕様
- 名称変更を施したいアーマチュアがオブジェクトモードでアクティブだとします。
- アーマチュアのボーンの名称は「`Bone_L.[三桁数字]`／`Bone_R.[三桁数字]`／その他」のいずれかが含まれています。この内、`.[三桁数字]`は省略されている時もありますが`.000`と同じとみなします。
- `["Sholder", "Arm", ...]`のような、新しいボーンの名称がリストの形式で定義されています。（以下、`name`）
- `Bone_L.i`は`[nameのi番目の要素]_L`に、`Bone_R.i`は`[nameのi番目の要素]_R`に改名してください。
- `_L`や`_R`の一方しかない場合も、改名してください。
- その他のボーンは名前を変えないでください。

## [Diffuse色とSpecularの強さからマテリアル名を決める](https://qiita.com/KTakahiro1729/items/e946fed089a8d8a43e86)

Pythonの難易度: ★★☆☆☆
投稿日時: 2018/10/31

### 動機
気がついたら`Material.004`みたいな名前のマテリアルが増えていて困りますよね？
マテリアルの特徴を元にマテリアル名を改名しましょう。

### 細かい仕様
- Diffuse色は下表の通りです。0~1の間の値は四捨五入してください

|色名|大体のRGB値(0~1)|
|:--|--:|
|black|(0,0,0)|
|<font color="Red">red</font>|(1,0,0)|
|<font color="Green">green</font>|(0,1,0)|
|<font color="Blue">blue</font>|(0,0,1)|
|<font color="#33CCFF">aqua</font>|(0,1,1)|
|<font color="Purple">purple</font>|(1,0,1)|
|<font color="#777700">yellow</font>|(1,1,0)|
|white|(1,1,1)|

- Specularの強さを四捨五入した結果が0なら`rough`、1なら`smooth`です。
- 「M_black_smooth」のように「M_Diffuse色_Specularの強さ」とマテリアルを改名してください。
- マテリアル名の重複は気にしないでください。

## [メッシュの名前を「MESH_オブジェクト名*たち*」にする](https://qiita.com/KTakahiro1729/items/febcfd6b6fd221e3f2d3)

Pythonの難易度: ★★★☆☆
投稿日: 2018/10/31

### 動機
オブジェクトの名前を変更しても、メッシュの名前までは変わりません。
いちいち変えるのも面倒くさいので、Pythonにやってもらいましょう。

### 細かい仕様
- メッシュ名を「MESH_オブジェクト名」にしてください。
- 複数のオブジェクトに共有されている場合、オブジェクト名の間を`_`で繋いでください
- オブジェクトに使われていないメッシュは「MESH_NOUSER」と名付けてください。

## [一つのマテリアルが同じオブジェクトで重複しているのをまとめる](https://qiita.com/KTakahiro1729/items/931b20f4eacf4c76c9ad)
Pythonの難易度: ★★★★☆
投稿日: 2018/11/2

### 動機
「こことここは別のマテリアルにしようかなぁ」と思っていたけど、完成してみたらマテリアルが重複していることはありませんか？
編集モードでいちいち作業をするよりも、pythonにやらせましょう。

### 細かい仕様
- 対象のオブジェクトはアクティブと仮定できます。
- マテリアル一覧（マテリアルスロット）の中で重複しているものを除いてください。
- 各面が参照しているマテリアルは変えないでください。
- マテリアルのリンクは全てDataになっています。
- マテリアルが設定されていないものも、まとめてください。

## [シーン内の全てのメッシュオブジェクトの原点を変更する](https://qiita.com/KTakahiro1729/items/2b9cef0f6d9817f5ee79)

Pythonの難易度: ★★★★☆
投稿日: 2018/11/5

### 動機
原点、ずれますよね？
<kbd>Ctrl</kbd>-<kbd>Shift</kbd>-<kbd>Alt</kbd>-<kbd>C</kbd>押しにくいですよね。
まとめて変更しましょう。

### 細かい仕様
- オブジェクトの原点（Origin）をGeometryの中心に移動してください。
- 原点の変更はメッシュオブジェクトだけにしてください。
- 全てのオブジェクトを選択しているとは限りません。
- オブジェクトによっては隠れていたり、別レイヤーにあったりするかもしれません。
- 現在の選択状態、アクティブ状態などは変更しないでください。

## [マテリアルをアルファベット順に並べる](https://qiita.com/KTakahiro1729/items/3c98b19b9f71d2bf9cef)
Pythonの難易度: ★★★★☆
投稿日: 2018/11/5
### 動機
様々にマテリアルを試していると、整理したくなりませんか？
なのに、Blenderのマテリアル（正確にはマテリアルスロット）の並べ替えって上下移動キーしかなくて不便じゃないですか？
（頂点グループとかはあるのに）

Pythonを使ってパッとやっちゃいましょうか！

### 細かい仕様
- 対象のオブジェクトはアクティブと仮定できます。
- 対象のオブジェクトには複数のマテリアルがセットされています。
- マテリアル名の比較はpythonの文字列比較に準じます。
- 重複しているマテリアル名は元の順番を維持してください。
- 空いているマテリアルスロットは最後にまとめてください。