Blenderバッチファイルからレンダリング


アニメーションレンダリングしたら、エラーのあるフレームが不連続で複数あった。
一枚ずつ手動でレンダリングして保存するのは面倒。こんな時にバッチ処理が便利。

●例

set BLD="C:\Program Files\Blender Foundation\Blender\blender.exe"
set FIL="C:\Documents\blender\test test\test_01.blend"
set IMGP="C:\Users\ngroku\Desktop\rnd"
%BLD% -b %FIL% -S Scene -E CYCLES -o %IMGP%\#### -F PNG -f 585
%BLD% -b %FIL% -S Scene -E CYCLES -o %IMGP%\#### -F PNG -f 587
%BLD% -b %FIL% -S Scene -E CYCLES -o %IMGP%\#### -F PNG -f 598
%BLD% -b %FIL% -S Scene -E CYCLES -o %IMGP%\#### -F PNG -f 605
%BLD% -b %FIL% -S Scene -E CYCLES -o %IMGP%\#### -F PNG -f 611
%BLD% -b %FIL% -S Scene -s 616 -e 800 -E CYCLES -o %IMGP%\#### -F PNG -a
pause

※↑の4行目から下から3行目までの意味
バックグラウンド処理、
指定したパスのtest_01という名前のblendファイル、
Sceneというシーン名、Cyclesレンダラー、
デスクトップのrndフォルダに、4桁の連番名で、PNG保存、指定したフレーム。

※下から2行目は、616から800フレームをアニメーションレンダリングという意味。

↓詳細は参考にさせてもらったサイトへ
レンダリングのバッチ処理 – Blender Cycles memo

●バッチファイルが動かない。
コマンドプロンプト上では動くけど、batファイルにすると動かない問題にあたった。
調べてみたら、原因は保存する際の文字コードだった。

“基本的にバッチファイル(というかDOSは)Unicodeでは動作しません。”
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1260531077

UnicodeからANSIに変えて保存したら動くようになった。

●その他の注意点
ファイル名やフォルダ名にスペースがあると動かない。
パスをダブルクォーテーションで囲えば動く。
MAXScriptでも似たようなことあった気がする。

[Blender]Mantaflow


次期のバージョンから、流体機能がMantaflowという、新しいものに置き換わる。
そのMantaflowを、現行のblender(2.79)に組み込んだものを使うことが出来る。

↓ダウンロード
Blender Mantaflow Builds v2.79

Mantaflowは煙と液体を表現する事が出来る。
この記事で説明するのは液体。

続きを読む

[Blender] Pythonメモ。トランスフォーム

Pythonスクリプトのメモ。
位置、回転、スケール。

●Cubeという名前のオブジェクトを、Z方向に1移動する。
import bpy #←これを読み込まないとスクリプトでオブジェクトを操作出来ない。
bpy.data.objects['Cube'].location.z +=1
●選択したひとつのオブジェクトを、Z方向に1移動する。
import bpy
bpy.context.selected_objects[0].location.z += 1
●選択したひとつのオブジェクトを、オブジェクトの中心Z方向を軸にして15度回転させる。
import bpy
import math #←mathを読み込まないとpi(円周率)が使えない。

hako = bpy.context.selected_objects[0]
atai = 2 * math.pi / 360 * 15 #←15度をラジアンに変換
hako.rotation_euler.z += atai

※角度を指定する際、値は度数法ではなく、孤度法。
なので、度数法のつもりで15と入力すると、15ラジアン入力した事になり、
859.35度回転してしまう(57.29×15)

・円を360度で示すのが度数法。
・半径が1の円で、長さ1の弧が作る角度を1ラジアンとするのが孤度法。

  ■■■■■■■■■■■■ 1度は何ラジアンか? ■■■■■■■■■■■■
  円周の長さは直径×円周率。
  円周の長さは孤度法だと2πになる。角度は2πラジアン。

  360度=2πラジアンなので、
  2πラジアンを360分割すれば、度数法の1度になる。

  これはπラジアンを180分割するのと同じ。
  3.14159/180=0.0174532777777778
  1度を孤度法にすると、約0.0174533ラジアン。

  ■■■■■■■■■■■■ 1ラジアンは度数法だと何度か? ■■■■■■■■■■■■
  比率で計算する。
  2πラジアン:360度
  πラジアン:180度
  どんな数も、同じ数字で割れば1になる。
  π÷π:180÷π
  ↓
  1:180÷π
  180÷3.1415=57.29582790879777
  1ラジアンは、約57.29度

●選択したオブジェクトのX位置とY位置を、-1~1の範囲で、ランダムに変える。
import bpy
import random #←randomを読み込まないと乱数が使えない。

hako = bpy.context.selected_objects
for i in hako:
    i.rotation_euler.x += random.uniform(-1,1)
    i.rotation_euler.y += random.uniform(-1,1)
●選択したオブジェクトを、X、Y方向に、-30~30度の範囲で、ランダムに回転させる。
import bpy
import math
import random 

hako = bpy.context.selected_objects
for i in hako:
    atai = 2 * math.pi / 360 * 30 #←30度をラジアンに変換
    i.rotation_euler.x += random.uniform(-atai,atai)
    i.rotation_euler.y += random.uniform(-atai,atai)
●選択したオブジェクトのスケールを2倍にする。
import bpy
hako = bpy.context.selected_objects[0]
hako.scale *= 2
●選択したオブジェクトのスケールを軸ごとに変える。X軸を1、Y軸を1、Z軸を3にする。
import bpy
hako = bpy.context.selected_objects[0]
hako.scale = (1,1,3)

●参考サイト
情報処理 I - 第15回:Python による Blender の制御 和歌山大学
ラジアン(弧度法)の意味と「度」への変換方法 sci-pursuit.com

[Blender]スクリプトを使用し、選択したオブジェクトにモディファイアを追加する

Blender 2.6 Python
選択したオブジェクトに一括でモディファイアを追加したい場合のスクリプト

今回の例では、サブデビジョンサーフェスモディファイアを追加する。
スクリプトを実行する前に、モディファイアを追加したい対象オブジェクトを選択する。

import bpy

sentaku = bpy.context.selected_objects

kazu = len(sentaku)

for i in range(0,kazu):
    bpy.context.scene.objects.active = sentaku[i]
    bpy.ops.object.modifier_add(type="SUBSURF")

使い方や、解説は続きから。

続きを読む

[Blender]別のオブジェクトに、モディファイアをコピーする。

モディファイアをほかのオブジェクトにコピーしたい場合は、Copy Attributes Menuから行う。

コピー先となるオブジェクトを選択する。
(コピー先を最初に選択する。)

コピー元となるモディファイアを保有しているオブジェクトを選択に追加する。
(コピー元を最後に選択する)

Ctlr+Cキーを押す。(メニューが出る)

出てきたメニューからCopy Modifiersを選択する。

コピー完了。
コピー元オブジェクトに追加されているモディファイアが全部コピーされる。

※Ctrl+Cキーを押しても、Copy Attributes Menuが出てこない場合。

User Preferences

Addons

3D View

Copy Attributes Menuにチェックを入れ、有効にする。