18Jun
雨ですね。ようやく露の季節ですね。
Arnoldが新しくなってから、実務でも使い始めている中で、とあるエラーを発見してしまいました。
そのエラーとはメモリーリークです。
モーションブラーと、あるシェーダーを併用すると必ずメモリーリークが発生してしまい、メモリー使用量がうなぎのぼりになってしまいます。
まずこちら、aiStandardSurfaceシェーダーを与えた1000個の球体を回転させ、レンダー設定でモーションブラーをONにします。
aiStandardSurfaceシェーダーの設定はデフォルトのままです。
その状態でレンダリングすると、レンダリング中はメモリーの使用量は一定で推移しています。
しかし、aiStandardSurfaceシェーダーのカラーに、プロシージャルシェーダーの中からCraterをアサインしてレンダリングすると、
このように、シンプルなシーンでもレンダー中のメモリー使用量が激増してしまいます。
では、モーションブラーをOFFにした状態ではどうでしょうか?
モーションブラーをOFFの状態ではメモリー使用量は一定のままです。
他のシェーダーでも検証してみました。
Checkerシェーダー メモリー使用量は一定です。
Rampシェーダー こちらもメモリー使用量は一定です。
Marbleシェーダー メモリー使用量が激増しています。
Rockシェーダー なんどもメモリーリークを繰り返してレンダリングしているので、メモリー使用量が限界に達してしまいそうです。
これでお分かりになるように、モーションブラーと一部のプロシージャルシェーダーの組み合わせはメモリーリークを引き起こし、連続フレームのレンダリングなどではメモリー開放ができず、PCがダウンしてしまう原因になります。
X印を付けたシェーダーがメモリーリークを引き起こしています。
Arnold Core 5.0.0.3ではいくつかのメモリーリークを解消しているとアナウンスされていますので、実務で使用されている場合は次期アップデートを待ったほうが賢明です。