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

Unity で皿を立体的に「見せかける」(Cubeを使う、影も出す、更にHDRPでよりリアルに表現する)

以前、以下の記事で、Unity上でSpriteを使って皿を配置する方法を記載しました。

バーチャルアートミュージアムを作る(3)作り方 皿のアートを3D空間上に配置する

Spriteの場合、影が付きません。

薄いCubeで皿と影を表現

そこで、Spriteの代わりに薄いCubeを作成し、新規にStandardシェーダのマテリアルを作成、「アルベド」に皿の画像をセット、「Rendering Mode」を「Cutout」、「アルファカットオフ」の値を適当に設定します。

薄いCube
Rendering Modeを「Cutout」に設定

これで、皿の色のついた部分だけを投影してくれます。
一番上のスクリーンショット取得時には、動作を軽くするために壁などのマテリアルもMobile Bumped Diffuseなどの軽いシェーダにしていたのですが、折角なのでStandardシェーダにして法線マップやMetallicなどを設定し、ライトをベイクした結果、下のスクリーンショットのようになりました。皿はほぼ、平面に近いCubeですが、この角度からなら十分立体に見えます。影が付いており、見栄えがいいですね。

 

HDRPで同じシーンを作成してみる

ついでに、同じシーンをハイエンドプラットフォーム向けのHDRPでも作成してみました。
HDRPについては以下サイトをご参照ください。
https://unity.com/ja/srp/High-Definition-Render-Pipeline

先程と同じく、薄いCubeを作成し、マテリアルを作成、シェーダをLit、Alpha Clippingをオン、BaseMapに皿のテクスチャを設定して割り当てます。

 

 

 

 

 

 

 

 

HDRPで同じシーンを作成

美しいですね・・・・

ちなみに、皿をアップで映してUnity標準のビルトインレンダリングパイプラインとHDRPを比べたのが下です。

ビルトインレンダリングパイプライン
HDRP

影の描写も、HDRPでは穴の部分などもしっかり反映されており、形状に忠実になっています。

床などは少しテクスチャも変えていますが、HDRPだと非常に優美な空間が作れますね。ただし、重いですが。

Unity HDRPのLitシェーダでフォトグラメトリのモデルをいい感じにしてみる

Craneです。

Unity HDRPを使って遊んでいます。
HDRPの標準シェーダである、Litシェーダを使ってフォトグラメトリソフトで作ったモデルをそれっぽくしてみました。
影とか、色々と変ですが・・・質感はなかなかです。

周辺のレースドールは皆、Unlitシェーダなので、比べると違いが明らかですね。

“Unity HDRPのLitシェーダでフォトグラメトリのモデルをいい感じにしてみる” の続きを読む

バーチャルアートミュージアムを作る(8)フォトグラメトリ - RealityCaptureによるモデル作成

Craneです。

前回はフォトグラメトリソフト 3DF Zephyrのフリー版でモデルを作りましたが、
今回は有料ソフトであるRealityCaptureを使ってみます。機能が多くて使いこなせていませんが・・・このソフトはクオリティがすごいです。初めて使ったときは精度の高さに感動しました。

(Steam版で月額約4千円です)
https://store.steampowered.com/app/489180/RealityCapture_Steam_Edition/3DF Zephyr – photogrammetry software – 3d models from photos (3dflow.net)

“バーチャルアートミュージアムを作る(8)フォトグラメトリ - RealityCaptureによるモデル作成” の続きを読む