UnityでライトをGPUベイクするときのOpenCL Error

(6/27解消方法について追記あり)

Unity2019.4をメインで使っていたのですが、作っているシーンが大きくなり、更にリッチなマテリアルを使っていたところ
ライティングのGPUベイク時に「OpenCL Error」というのが多発するようになりました。
私はRTX2060を搭載したPCを使っているのですが、こんなメッセージが出ます。

OpenCL Error. Falling back to CPU lightmapper. Error callback from context: CL_MEM_OBJECT_ALLOCATION_FAILURE

特にプロジェクトをHDRP化した後、これが頻発し途方に暮れていました。

色々と調べたところ、Unity公式サイトのマニュアルに以下の記載がありました。
Note: If the baking process uses more than the available GPU memory, the process might fall back to the CPU Lightmapper.」

日本語に翻訳したのがこちら。
「注:ベイク処理で使用可能な GPU メモリを超える量を使用する場合、プロセスは CPU ライトマッパーにフォールバックする可能性があります。」

引用元:The Progressive GPU Lightmapper (preview) – Unity マニュアル (unity3d.com)

つまり、GPUメモリで処理できる量を超えた場合、このエラーが起きてCPUベイクに切り替わるということのようです。単純にメモリ不足、、と。。

ちなみに、Unity2020のマニュアルを見たところ、
「ベイク時間を短縮し、ベイク処理がベイク処理用に指定された GPU で使用できる VRAM を超える状況を回避する方法はいくつかあります。」とのことで以下の記載がありました。

・他の GPU アクセラレーションアプリケーションを閉じる
・CPU ベースのノイズ除去に切り替える
・小さいゲームオブジェクトにはライトプローブを使用する
・レンダリングとベイク処理用に個別の GPU を指定する
・アンチエイリアスサンプルの数を少ない数にする
引用元:The Progressive GPU Lightmapper (preview) – Unity マニュアル (unity3d.com)

とりあえず、手っ取り早いのは、ベイク中は他のソフトを閉じてPCをいじらないということのようです。

また、Unity2020では色々とメモリ処理などが改善されている模様です。実際に、プロジェクトを2020.3にアップグレードしてみたところ、CPUにフォールバックする頻度が大分減りました。
GPUのメモリが不足気味になっても、いきなりフォールバックせず、以下のようにモードを切り替えて、何とかGPUベイクを維持しようとする機能が付いたようです。
(正確にどのバージョンからこうしたものが実装されたかまでは追い切れていませんが・・・)

参考:Unity – Progressive GPU Lightmapper preview – Unity Forum

上記のサイトに、各バージョンでの改善内容の記載があります。
ということで、なるべく新しいバージョンのLTSを選んでいくのが良さそうです。
参考:Unity QA – LTS Releases – Unity (unity3d.com)

(以下、6/27追記)解消方法
今取り組んでいるプロジェクトで Falling back to CPU lightmapper のエラーが頻発していたのですが、プロジェクト設定の、テクスチャ品質を1/2、1/4、・・・・と下げていくとベイク時にGPUメモリを使う量が減り、うまくGPUでベイクできました。ただし、当然のことながらテクスチャの解像度が下がりますのでどちらを優先するか、という問題になります。不要に解像度が高いテクスチャを見直すことなどが望ましいということかと思います。

ほぼUnityに関する記載になりましたが、今回は以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です