読者です 読者をやめる 読者になる 読者になる

Blenderのメモリ問題半端和訳

mpan3の人がメモリについて書いていたのだけれどいつの間にか消えていたので、だいぶ前に放置していた中途半端な和訳を張っておきます。

WindowsにおけるBlenderのメモリ問題について

対象となる環境
  1. Windows 2000,WindowsXP(32bit)もしくはWindowsVista(32bit)
  2. 1GB以上のメモリを使うような複雑なシーンで作業している
  3. 物理メモリが1GB以上あること。1GB以下しかない場合は、先に別の問題に遭遇しているはずです。
  4. Blenderが1.5GB程度のメモリを確保しようとしたときに突然クラッシュする。
対象とならない環境
  1. シーンが相対的にシンプルで、1GB以下のメモリしか使わない時
  2. 物理メモリが1GB以下しかない
  3. 不安定なビデオドライバー、ソフトウェアの競合などの、メモリとは別の要因でBlenderがクラッシュしている。
そもそもの問題点

基本的に、32bitのWindowsではアプリケーションは2GBまでしかメモリを利用できないように設計されています。
実際にはプログラムがクラッシュする前に確保できるメモリの最大量は、およそ1.5GBです。
アプリケーションは通常、メモリ限界値以下のメモリ利用にとどまるため、問題は発生しません。
しかし、Blenderを使用する時、とりわけFluidsのベイキング、コンポジットノードを利用した高解像度のレンダリングなどでは、いとも簡単に1.5GB以上のメモリを利用しようとします。
適切な設定を行わないとBlenderはクラッシュしてしまうのです。

(画像)

先に書いた通り、これはWindowsのソフトウェアデザインに起因する限界です、物理メモリは4GBまで搭載することができ、仮想メモリも4GBまで使えます、ですがBlenderはメモリを1.5GB確保したところでクラッシュしてしまいます。
幸い、この問題は解決することができるのです。

32bit Windowsでの解決法

ここでは、2段階のステップで説明します。

アプリケーションあたりに割り当てことができるメモリの限界量をデフォルトの2GBから3GBに拡大しましょう。
この方法を使えばどんなアプリケーションでも、実質2.5GBのメモリを利用できるようになります(デフォルトでは実質1.5GB)。

ここでは主にWindows 2000/XPの場合について説明します。

注意:boot.iniを編集することでWindowsが起動しなくなってしまう恐れがあります。自信がなければ、そのようなことが起こらないようにしっかり調査をしてから実行しましょう。

ステップ1(Windows 2000/XPの場合)

マイコンピュータを右クリックしてプロパティを選択します。「詳細設定」タブにある「起動と回復」の「設定」を押します。
すると、boot.iniがメモ帳(notepad)で開かれます。
boot.iniの中から次のような行を見つけてください。

multi(0)disk(0)rdisk(0).....="Windows XP" /fastdetect

この行の末尾に次の5文字(スペースを忘れないように!)を入力し、終了、保存します。

" /3GB"

(画像)

この" /3GB"スイッチで、アプリケーションに3GBのメモリを割り当てることができます。
変更を確定するためにコンピュータを再起動します。

ステップ1(Windows Vista 32bitの場合)

32bitのVistaユーザで3GBスイッチを入れるにはこちらの設定が必要です。
(原文では解説サイトへのリンクのみなので、関係ありそうなところだけ抜き出して訳しておきます。ただ、Vistaを持っていないのでよくわかりません)
VistaではBoot.iniがBoot Configuration Data Storeに置き換えられており、BCDEDITというコマンドを用いることになります。
管理者としてコマンドラインウィンドウを開いて以下のコマンドを実行します。

BCDEDIT /export "C:\BCD Backup"

で変更前のバックアップをとり、

BCDEDIT /set increaseuserva 3072

でメモリの設定を変更します。

注意:BCDEDITで何か変更を加える前には必ずバックアップを取っておきましょう。

ステップ2(2000/XP/Vista)

ステップ1を完了したらLAA(Large Address Aware)フラグのついたBlenderを探します。
オフィシャルリリースのBlenderはLAAフラグがついていません。
ですが、ここにあるBlenderはLAAフラグがついたビルドです。
LAAフラグは/3GBフラグがオンになっていないと意味がありません。
/3GBフラグがオフの場合はLAAフラグのないBlenderと同じように動きます。

ステップ3

今までのステップで作業は完了しました。
これでResolutionが500のFluidや3200x2400の静止画をレンダリングできるようになります。
忘れないで欲しいのは、/3GBとLAAを両方オンにする必要があるということです。

FAQ

Q:1GB(あるいはそれ以下)の物理メモリしかありません。この記事を気にするべきでしょうか?

A:端的に言うと、ノーです。
それは1.5GB制限が問題になるようなことがほとんど無いと思われるからです。
OSの起動に多少のメモリを使い、その上Blenderで1.5GBのメモリを使用します。
あなたのコンピュータは十中八九合計で2GB程度のメモリを利用するでしょう。
そしてスワップファイルの利用で動作が非常に重くなり、ほとんどのユーザはコンピュータが停止しリセットボタンを押します。

Q:64bit環境でのBlenderはどうすればいいですか?

A:32bit環境と同じLAAフラグのついたBlenderを64bitのWindowsで使用してください。64bitのWindowsではアプリケーションはそれぞれ4GBまでメモリを確保することができます。
64bit版のBlenderがリリースされたなら、64bitのWindowsで8TB近くまでメモリを確保することができることでしょう。

Q:LinuxやOSXの場合は?

A:知っている限りでは32bit Linuxは2.5GB周辺にメモリの壁(Memory wall)があります。OS Xはわかりません。

Q:これであらゆる問題が解決されますか?

A:いいえ。
Blendernationでのjlhの発言を引用すると、この手法で解決されるのは1.5GBまでしか使えなかったメモリが2.5GBになるだけで、Linuxが2.5GB以上のメモリを利用できるようになるということではありません。
全体として要約すると、32bitのシステムのメモリは限界にどんどん近づいています。
これはLinuxでも同じです。
64bitにアップグレードさえすれば4GB以上のメモリを使うことができるようになります。

Q:" /3GB"スイッチを付けたら、動作がおかしくなった。

A:DirectX9のAPIは3GBフラグで問題があるようです。
滅多にないことですが、古いゲームを3GBフラグを付けた状態でプレイすると問題が起こることがあるようです。