Unity Cinemachine のCamera OffsetとCinemachine Follow Zoomで対象がカメラに映る位置を調整する

今回はUnity Cinemachine のCamera OffsetとCinemachine Follow Zoomを使って、対象がカメラに映る位置を調整する方法について記載します。
(無知な私はCinemachineCameraOffsetの存在を今日知りました・・・はずかしい。そしてこれ便利)

“Unity Cinemachine のCamera OffsetとCinemachine Follow Zoomで対象がカメラに映る位置を調整する” の続きを読む

Unity Cinemachine のTransposer、ComposerのOffsetをスクリプトで制御する

前回の記事で省略した、
Unity Cinemachine  VirtualカメラのTransposer、ComposerのOffsetの値をスクリプトで変更する方法を記載します。

前回の記事はこちら。
Unity CinemachineのBlendを使ってアートをクリックしたらそこにフォーカスして拡大するようにする – Craneのブログ (crane-art.com)

“Unity Cinemachine のTransposer、ComposerのOffsetをスクリプトで制御する” の続きを読む

Unity Cinemachine Virtualカメラのズームをマウスホイールでコントロールする

今回は、Unity CinemachineのVirtual Cameraでズームをマウスホイールでコントロールする方法について記載します。
本来、CinemachineはTimelineを活用するなどして、Scriptを組まずとも映画のようなカメラワークが可能、というのが売りのようなのですが、
Timelineが使いこなせていない私はScriptを活用して色々作ってしまいました。恐らく無駄なことを多くしていると思います。

さて、前回、以下の記事でCinemachineのカメラのAimにPOVを設定して、回転をマウス右クリック時に行うようにするところまで記載しました。

Unity Cinemachine  POVカメラで右マウスボタン押下時のみカメラを回転させる – Craneのブログ (crane-art.com)

今回はそれに加え、マウスホイールでズームイン・アウトをできるようにします。
Scriptを作成してみました。
なお、滑らかにズームイン・アウトを行わせるためにDOTweenを使っています。

“Unity Cinemachine Virtualカメラのズームをマウスホイールでコントロールする” の続きを読む

Unity Cinemachine  POVカメラで右マウスボタン押下時のみカメラを回転させる

Unityでのカメラワークを実装するのにあたって、Cinemachineを導入しました。
が、Cinemachineについては参考にできるサイトも少なくなかなか苦労しました。

今回は、CinemachineでPOV利用時に、右マウスボタン押下時のみカメラを回転させる方法について記載します。

※この記事はUnity2019以降を前提に記載しています。

“Unity Cinemachine  POVカメラで右マウスボタン押下時のみカメラを回転させる” の続きを読む

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に関する記載になりましたが、今回は以上です。