レンダリングをしている間はパソコンで他の作業ができなかったりして何かと不便なこともあると思う。
ということでパソコンでレンダリングする方法以外の方法をググってみたらクラウド通じてレンダリングする方法があるらしい。むしろそっちが主流だったりするのかな。3DCGモデリングソフトのヘビーユーザーさん方は。
で、クラウド上の物はたいてい有料でうーんって感じなので、ほかに方法ないか探した。
そんな経緯で見つけたのがgoogle colaboratory(以下colab)ていうサービスでレンダリングをする方法。
colabは本当は機械学習とかの計算用にGPU、CPU資源を提供しているサービスらしく(仮想通貨マイニングは禁止)pythonを記述して動かすとか。
Blenderもpythonで動いているソフトらしく、そのおかげでcolabでレンダリングさせることができるってこと。Mayaでcolab使ってレンダリングしてる記事見当たらないことから、本当にBlednerの特権ともいえそう。
前置きはここら辺にして。
google colaboratoryでレンダリングする方法
colaboratoryをgoogleドライブに追加
googleドライブに入って、左上赤枠の新規をクリック。
それからその他>アプリを追加で
上部検索窓でcolaboratoryを検索。追加でオッケー。
colabにpythonコードを入力
まずレンダリングするときにGPUが使えるようにするよう設定をする。
ランタイム>ランタイムのタイプを変更をクリックしてGPUが使えるようにすることができます。
ここでGPUを選択。ちなみにTPUは機械学習に特化したやつ。
#@title Setup
#@markdown Please configure your setup
blender_version = 'blender2.80' #@param ["blender2.83","blender2.82", "blender2.81", "blender2.80"] {allow-input: false}
path_to_blend = 'Blender/input/Donut5.blend' #@param {type: "string"}
output_path = 'Blender/output/output.png' #@param {type: "string"}
gpu_enabled = True #@param {type:"boolean"}
cpu_enabled = True #@param {type:"boolean"}
#@markdown ---
+コードをクリックしてから、追加されたブロックに上記コードをコピペ。
blender2.83の人はblnder2.82に選択してもレンダリングできる。上から2番目の項目はレンダリング対象のファイルのパス。上から3番目は出力先で、出力する際のファイル名も指定しないとダメっぽいので注意。
チェックボックスはgpuにだけチェックしたほうが速いかも。チェック全部つけてみたりcpuだけにチェックしてみたりして実験してみよう。
あとは同じ要領で、+コードでブロック追加、コピペの繰り返し。
if blender_version == "blender2.80":
download_path="https://ftp.halifax.rwth-aachen.de/blender/release/Blender2.80/blender-2.80-linux-glibc217-x86_64.tar.bz2"
elif blender_version == "blender2.81":
download_path="https://ftp.halifax.rwth-aachen.de/blender/release/Blender2.81/blender-2.81-linux-glibc217-x86_64.tar.bz2"
elif blender_version == "blender2.82":
download_path="https://ftp.halifax.rwth-aachen.de/blender/release/Blender2.82/blender-2.82-linux64.tar.xz"
!mkdir $blender_version
if blender_version == "blender2.82":
!wget -O '{blender_version}.tar.xz' -nc $download_path
!tar xf '{blender_version}.tar.xz' -C ./$blender_version --strip-components=1
else:
!wget -O '{blender_version}.tar.bz2' -nc $download_path
!tar -xf '{blender_version}.tar.bz2' -C ./$blender_version --strip-components=1
import os
os.environ["LD_PRELOAD"] = ""
!apt update
!apt remove libtcmalloc-minimal4
!apt install libtcmalloc-minimal4
os.environ["LD_PRELOAD"] = "/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.3.0"
!echo $LD_PRELOAD
!apt install libboost-all-dev
!apt install libgl1-mesa-dev
!apt install libglu1-mesa libsm-dev
data = "import re\n"+\
"import bpy\n"+\
"scene = bpy.context.scene\n"+\
"scene.cycles.device = 'GPU'\n"+\
"prefs = bpy.context.preferences\n"+\
"prefs.addons['cycles'].preferences.get_devices()\n"+\
"cprefs = prefs.addons['cycles'].preferences\n"+\
"print(cprefs)\n"+\
"# Attempt to set GPU device types if available\n"+\
"for compute_device_type in ('CUDA', 'OPENCL', 'NONE'):\n"+\
" try:\n"+\
" cprefs.compute_device_type = compute_device_type\n"+\
" print('Device found',compute_device_type)\n"+\
" break\n"+\
" except TypeError:\n"+\
" pass\n"+\
"#for scene in bpy.data.scenes:\n"+\
"# scene.render.tile_x = 64\n"+\
"# scene.render.tile_y = 64\n"+\
"# Enable all CPU and GPU devices\n"+\
"for device in cprefs.devices:\n"+\
" if not re.match('intel', device.name, re.I):\n"+\
" print('Activating',device)\n"+\
" device.use = "+str(gpu_enabled)+"\n"+\
" else:\n"+\
" device.use = "+str(cpu_enabled)+"\n"
with open('setgpu.py', 'w') as f:
f.write(data)
from google.colab import drive
drive.mount('/gdrive')
!sudo ./$blender_version/blender -P 'setgpu.py' -b '/gdrive/My Drive/{path_to_blend}' -P 'setgpu.py' -o '/gdrive/My Drive/{output_path}' -f 1
画像をレンダリングするなら↑のコードをコピペ。動画をレンダリングするなら↓をコピペ。
!sudo ./$blender_version/blender -P './setgpu.py' -b '/gdrive/My Drive/{path_to_blend}' -E CYCLES -o '/gdrive/My Drive/{output_path}' -a
実際に動かしてみる
再生ボタンを一個ずつ押していく。
URLが表示されたらクリックして、認証キーを取得。
枠内に認証キーを入力してEnterキーを押す。
最後のブロックを実行するとレンダリングが開始されます。
これでパソコンフル稼働させずにレンダリングできるのでめちゃ助かる。でもブラウザ閉じたりcolabのタブ閉じたりするとやり直しになるので注意。
レンダリングの速さの体感としてはノートパソコン(serface book)でレンダリングするより速い。
僕のデスクトップPC(ryzen5 3600/gtx1660ti)と互角かなぁって感じ。
たぶん自分は、パソコンの電源つけっぱなしにするのがもったいないという思考に走って、ラズパイでブラウザずっとつけたままにして、google colaboratoryやっちゃうパターンになりそう。
最後に、Google colaboratoryでBlenderレンダリング出力した画像↓