Blender 2.83 LTS を手っ取り早く始めるメモ

## 背景

* Blender 2.83 LTS 長期リリース版でました
  * いままではバージョンアップでころころ仕様や UI, python プラグインの書き方が変わる感じで, 毎回覚えなおしでつらかった
  * LTS 登場により, しばらく(5 年?)は安定して使えそうです(覚えたことが無駄にならない)

## Ubuntu の場合

Ubuntu software か snap でインストールできます.

## 手動インストール

以下は手動で Blender を落とした場合です.

### Ubuntu 18.04 のドックに登録する.

毎回コンソール開いて `./blender` も面倒なので, Ubuntu 18.04 利用している場合は, ドックに登録できるようにしておきましょう.

![Screenshot from 2020-06-24 19-06-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/0013ea54-696d-04d8-e744-8d168fde234d.png)


`blender.desktop` を編集し, blender のパスを絶対パスにし, `~/.local/share/applications` にコピーします.
(`~/.local/share/applications` に配置しないと, Dock に Favorite 登録できない)

`chmod +x blender.desktop` で実行パーミッション付与が必要かもしれません.

Blender のバージョン変わったら `~/.local/share/applications/blender.desktop` のパスをアップデートしましょう.
(変更あったら Gnome 側が自動でリロードし即時反映してくれるっぽい)


## Maya 的(?)モードにする

Blender オリジナルのキーバインドは独特です. 少なくとも **Blender 歴 22 年(!)**の私は慣れませんでした.

最近は Blender の見た目も Maya に近づいてきたような感もありますので, Maya 的モードにするとよいでしょう(あとで Maya にも移行しやすくなる)

Maya のキーバインドは他の 3D ソフトで似たように使えることが多いため, Blender では industry compatible(業界互換?)という項目になっています. 

最初の起動時, splash screen で industry compatible + Maya theme を選びます.

キーマップまとめ

default keymap

https://docs.blender.org/manual/en/latest/interface/keymap/blender_default.html

industry compatible
https://docs.blender.org/manual/en/latest/interface/keymap/industry_compatible.html

`q` で選択モード

`w`, `e`, `r`　で移動、回転、スケール

https://developer.blender.org/T54963

Shift + 'a' での物体追加は industry compatible mode では無いっぽい.
(とりあえずは, `Tab` から `add`, `cube` などと打って物体追加でしょうか)


もしくは, (画面レイアウトが初期設定の場合)左下の時計アイコンで `Preferences` を選んで設定できます.

![Screenshot from 2020-06-08 18-50-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/30f467c8-b717-4006-b4de-a71b73557e40.png)

(そのままだと画面隠れてしまうので, ペインをちょっと上にもっていくとよい)

### 座標系

Maya モードなどにしても, 座標系は Z up + right handed です.
構造的に座標系を変えるのはいろいろなところに影響があり無理と思われますので, Z up に慣れましょう.

import/export では, デフォルト値では概ね業界標準に合わせて変換してくれます
(e.g. .obj の場合は Y up になる)

#### 単位

デフォルトではメートル(`[m]`)です.

## フォント設定

フォントサイズは, 4K display だとフォントなど小さいので, resolution scale を 1.25 ~ 1.5 あたりにするとちょうどよいです.

デフォルトで設定が auto save されるようになっていますので, (以前の Blender と異なり)明示的に設定の保存は不要です.

![Screenshot from 2020-06-08 19-02-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/d302d15d-f003-60de-fa9f-cceb4089922e.png)


Blender 標準フォントはちょっとオシャンティ感がありませんね.
また, ソースコード用フォントもちょっと読みにくいです.

Preferences -> Text Rendering でフォント指定できました.
.ttf フォントあたり読めました(.otf あたりも読めそうです)

スクショは Interface, Mono-space 両方に Ricty フォントを設定したものです.

![Screenshot from 2020-06-08 19-50-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/9e262c5c-533b-3c64-38bc-075ed7eca76a.png)


## Alt キーの再割当て(ubuntu)

Maya keybinding の場合, Alt + left mouse ドラッグで viewport 回転できますが,

Ubuntu(Gnome desktop)だと, gnome desktop 側のキーバインド(ウィンドウを移動)とかち合うかもしれません. Ubuntu 側で設定を変えておきましょう(e.g. `Super` に割当など).

## ショートカットを割り当てる

wavefront .obj インポートとか, 毎回メニューで選ぶのだるいですよね.

Blender では, いろいろなメニューアイテムとかに右クリック -> `Assign Shortcut` でショートカットキー割り当てできます.

![Screenshot from 2020-06-08 19-04-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/211ff4e6-60cc-1668-25f1-ca895384f83d.png)

ただ, 既存のショートカットがあると, 既存のほうが優先されてしまいます
(重複チェックは行われない)

## Pie menu を出す

Maya っぽいやつです.

https://blender.stackexchange.com/questions/21044/how-to-get-to-the-pie-menus

Addon で有効にします.
デフォルトでは `shift` + `space` や `ctrl` + 'a' などで出ます.

## Viewport 操作

Industry compatible keymap と仮定します.

`a` でシーン全体
`f` で選択したオブジェクト

に画面をフィットさせることができます.

`ctrl` + `h` で, 選択オブジェクトを hide(非表示)
(Maya と異なり, `shift` + `h` の動作がことなるので注意!)

選択物体を unhide(reveal)するには, `alt` + `h` になります)

## Wireframe 表示

Viewport ペインの左上あたりにある Viewport Overlays -> Wireframe でいけます.

![Screenshot from 2020-06-09 14-33-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/8f32e9d7-2fb0-94c9-7370-fbf25741d293.png)

## 法線表示

面がどちらを向いているかなどの確認用.

![Screenshot from 2020-06-14 17-27-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/8ed52eab-595f-a1fc-4f17-0e6429179251.png)


Edit mode(`1` key)にして, Viewport Overlays で設定できます.

![Screenshot from 2020-06-14 16-50-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/90d33bf8-fa7f-41df-6f0e-0ae3ff47ec0a.png)

Geometry -> Face Orientation にもチェックいれておくと, よりわかりやすくなります.


ただ, Object mode (`4` key)だと, 法線は表示されないようです(orientation の色表示のみ)

### Arrow object

Object -> Arrow ありました.

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Arrow object ありました. ありがとうございます <a href="https://t.co/I5ZR8DSLKl">pic.twitter.com/I5ZR8DSLKl</a></p>&mdash; Syoyo Fujita 🌸 レイトラ 🐯 2 周年 🎉 (@syoyo) <a href="https://twitter.com/syoyo/status/1290551471646208001?ref_src=twsrc%5Etfw">August 4, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## Grouping 

Collection と名前が変わりました.
Parenting とはまた別の概念っぽい.

## Transform

複数オブジェクトを選択して, 複数の物体の transform を設定しようとしてもうまくいきません(e.g. `N` での transform tool pane).
Collection でまとめたりしても, 最初のオブジェクトだけにしか影響がありません.

Is there a way to move multiple objects?
https://devtalk.blender.org/t/is-there-a-way-to-move-multiple-objects/8328/2

`Alt` キーを押しながら設定する必要があります.

## 親子関係の作成

子にするオブジェクトをまず選び(e.g. `Shift` + click で一括選択), 最後に親にしたいオブジェクトを追加で選んで(`Ctrl` + click), Parenting します.

https://docs.blender.org/manual/en/latest/scene_layout/object/editing/parent.html?highlight=parenting

Transform node みたいなのを親として作りたいときは, `Empty` object あたりをつくると良さそうです.

### オブジェクトを移動させると, 親子関係にないオブジェクトも勝手に追随してしまう.

Proportional Editing Object あたりが有効になっています(輪っかみたいなアイコン).
Off になっているのを確認しましょう.

![Screenshot from 2020-08-26 19-03-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/bad207f0-c2ed-b7ac-3f86-46808c6028c1.png)


## Viewport で使うレンダラを切り替える

右のペインでカメラアイコン -> Render Engine で切り替えできます.

![Screenshot from 2020-06-09 14-39-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/ba767ef1-637f-32a5-1138-c71f04e91afb.png)

EEVEE: インタラクティブレンダー用
Cycles: オフライン(バッチレンダー)用だが, インタラクティブレンダーにも使える

でしょうか. Workbench はなんでしょうかね?

## 物体の生成パラメータを変える

Blender では, 最初に Primitive を作るときにしか設定できないようです...
Maya などみたいに履歴が残っていてあとで球の分割数を変える, などはできません.

Add すると, 左下に生成タブが出ます.

![Screenshot from 2020-06-17 20-09-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/dbf49636-1df8-8f39-dcfe-4c0a03d2a46d.png)

`F6` でもいけるっぽい?

## マテリアルを割り当てる

Cycles レンダラになっているのを想定します.

オブジェクトを選択して, チェッカーボード球っぽいアイコンで割り当てます.

<img width="311" alt="blender-mat.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/0ceb7a1b-2b9f-345c-7fcd-172064dbc758.jpeg">

デフォルトは Principled BSDF(Disney BSDF)が割り当てられます.

Maya Arnold の Standard Surface と似たような感じです.

https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf

https://www.shadertoy.com/view/XdyyDd

業界標準で使いやすいっぽい?らしいようですが, 私はどうも使いづらいなぁという感じです(specular color とかを直感的かつ細かく指定できない)

### テクスチャ(画像)を張り付ける

色とかのパラメータの丸ぽちっぽいアイコンをクリックして -> Image Texture を選びます.
`Open` で画像ファイルを指定します.

<img width="226" alt="blender-tex.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/7918bcfd-dc71-3e82-2e0c-9e84fc8bd8d1.jpeg">


## Shader node editor

細かいことをやりたい場合は, shader node editor でシェーダグラフ編集します.

T.B.W.

## 背景の色を変える

標準では Background shader(背景を定数色やテクスチャで埋める)でちょっとグレーなものが設定されています.

右のペインで地球アイコン(World) -> Surface でいけます.

![Screenshot from 2020-06-09 14-39-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/d6f9a58b-79e2-f16b-1bbf-5742d405cc42.png)

### 環境マップを設定する

Blender では, 設定一発で行う方法はなさそうです.

いくらか shader の知識が必要になります.

環境マップは latlong 形式(equiangular 形式)を想定します.
(HDRIhaven https://hdrihaven.com/ にあるようなもの)


Color で Environment Image Texture を選び, テクスチャに HDRI 選択, Vector に  Texture coordiante | Generated を使います.

![Screenshot from 2020-06-09 14-48-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/b7c2aad8-1b3c-706d-6f82-4e7be9cb6974.png)

### 環境マップを回転させたい


https://www.blender3darchitect.com/light-and-rendering/blender-2-8-how-to-control-hdr-rotation/

最初に mapping を作ります.

![Screenshot from 2020-06-09 15-05-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/62097270-aecb-e02b-6327-103b1ab2472d.png)

![blender-envmap.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/10127681-24de-8507-9d9e-415254ae0cc1.gif)

### 背景を消したい

物体への環境マップの効果はほしいが, 背景は消したいなど.
２つほど方法があります.

https://youtu.be/par1v_gD5Z4

primary ray の visibility を off にする

https://blender.stackexchange.com/questions/65137/how-to-hide-hdri-background

Scene -> Film で transparent にする.


### TODO

* Shader editor で background shader をいじりたい
* ロトスコープと, envmap を共存させる方法を探す

## View レイヤー

Blender ウィンドウの上右側にあります.

https://docs.blender.org/manual/en/latest/render/layers/layers.html

Collection と併用するようです.
イマイチ使い方がよくわからないですね.

## VDB ファイルの import

export 機能は 2.83 LTS ではまだありません.

import は Add -> Volume, もしくは .vdb をドラッグアンドドロップでいけます.

![Screenshot from 2020-06-09 14-26-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/00c89464-1b96-fa24-82c0-29690f0e15da.png)

標準でプレビュー表示とかしてくれるはずです.

### VDB のレンダリング

EEVEE ではうまくレンダーできないようです.

https://docs.blender.org/manual/en/dev/render/eevee/limitations.html

Volume 扱うときは Cycles を選びましょう.

![Screenshot from 2020-06-09 15-26-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/9ee98704-71b9-526e-c310-aa766cb90439.png)

サンプル数増やすときは, Scene -> Sampling で増やします.

Volume で CPU だとやはり計算にはかなり時間かかります.

GPU で動くといいですが, 少なくとも Linux + 2080 Ti ではだめでした.
GPU volume render, Windows + OptiX 対応版だといけるかも?

また, .vdb で対応するアトリビュートをシェーダに設定していることが必要です
(Principle Volume では `density` なので, smoke.vdb はうまくレンダーできる)

たとえば bunny.vdb はアトリビュートが `ls_bunny` なので, シェーダ側も `ls_bunny` を設定する必要があります.

.vdb がどのアトリビュート持っているかは, openvdb のツールか, 別ソフトなどで調べる必要があります.
(玄人になると, バイナリダンプツールで .vdb ファイルのヘッダから読み取ることできます :smiley: )

![Screenshot from 2020-06-09 15-38-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/70bada41-facd-9050-74b9-10fa4f7d64d8.png)

## シーンのマージ

.blend と別の .blend を取り込んでマージしたい.

`File` -> Append になります.

シーン全部を取り込むのはできないようで, オブジェクトやマテリアルを選らんで取り込みます.
(名前とかがかぶっていたらどうなるのかな?)

object で読み込むとマテリアル設定は引き継がれるようですが, transform などは反映されませんので注意です.

## リソース管理

別マシンに移行したらテクスチャファイルが切れているなど.

https://blender.stackexchange.com/questions/93136/how-do-i-change-the-file-path-for-all-the-textures-used/145846

File -> External Data -> Find missing files 

で治す.

### Image を .blend に埋め込む

File -> External Data で .blend に埋め込むことできます.

### Image を削除する

Blender で Image 設定していたが、途中でファイル上で画像ファイルを消したりリネームしたため, embed できなくなりクリーンアップしないといけないとき.

Image pane で, shift + "X" button click で unlink し(ファイルリストに `0` が付く), 一旦セーブする. その後 .blend を開き直せば消える

https://blender.stackexchange.com/questions/100/how-do-i-completely-remove-an-image-from-my-blend-file 

![Screenshot from 2020-06-18 20-06-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/5df75160-2e37-a2ec-3a36-b46d11bc1f3d.png)


## オレオレ Python addon へのパス

Preferences -> File Paths -> Scripts 

![Screenshot from 2020-06-08 19-09-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/6cd7ff3f-dae8-f289-2018-8ccf1d1cc60b.png)

で一応設定できますが, ここでは複数パスを設定することができません.

BLENDER_USER_SCRIPTS and multiple paths?
https://devtalk.blender.org/t/blender-user-scripts-and-multiple-paths/10395


Blender 標準のパスに, `scripts/addons` を作って, そこに置く(Linux の場合は symlink でもよい)がよさそうです.

https://docs.blender.org/manual/en/latest/advanced/blender_directory_layout.html

e.g.

```
$HOME/.config/2.83/scripts/addons/rprblender
``` 

## UI 上の操作がどの Python コマンドに対応するか調べる

Python でいろいろ操作したいですよね.
たとえば物体の位置をスクリプトで変えるとか.

しかし Blender のマニュアル探すのはめんどいです.
右クリック -> `Copy DataPath` でもある程度情報わかりますが, いつのまにか(2.83 LTS から?)Info をひらくと, UI 操作などに対応する Python コマンド出してくれるようになりました :tada:

![Screenshot from 2020-06-08 19-30-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/d8e0f1b4-201d-eadb-54d9-a656d84fd6bb.png)

これがこのまま使えるかは不明ですが, 少なくともアタリをつけるのに参考になります.

## Python scripting

### アクティブなオブジェクトを取得する

```
bpy.context.object
```

でいけます.

Viewport で選択しているオブジェクトを取得.

```
> bpy.context.view_layer.objects.active
bpy.data.objects['Sphere.001']
```

### 移動させる

`.location` プロパティをいじります.

example

```
bpy.context.object.location[0] = 100
```

スケーリングは `.scale` 

### 回転させる(オイラー角)

`.rotation_euler` で指定.

回転順は `.rotation_mode = 'XYZ'` のように文字列指定します.

### Quaternion で回転させる(T.B.W.)

`.rotation_quaternion` プロパティ

`.rotation_mode` を `QUATERNION` にします.

T.B.W.

## 問題点

### file explorer でインタラクティブサーチ(?)が使えない

Explorer で, w と打つと w に相当するフォルダやファイルに移るあれです.
Blender file explorer では使えません.

フォルダパスのバーでは, `tab` で補完聞きますが, bash などでのふるまいとちょっと違って戸惑います.


### Windows ではコンソールウィンドウが出る

エラーメッセージ表示用などで必要になります.
うまくやれば消せたような気がします.

### UI がもっさりする

GTX 2080 Ti など利用しても, UI のレスポンスはちょっともっさり(2~3 fps 遅い?)してます.
OpenGL で描画している以上しょうがないですね.
いずれ Vulkan などで書き直されてレスポンスよくなるかもしれません.


### TODO

* GPU 対応 Windows 10 WSL(2021 年予定) で Blender を動かす.
  * python スクリプトとか, Linux 環境で作業できるので, Windows でしか動かないソフト(e.g. 3ds Max 連携とか)はかどりそうです.
* Layer/Collection の使いかたを覚える