今回はUnity Cinemachine のCamera OffsetとCinemachine Follow Zoomを使って、対象がカメラに映る位置を調整する方法について記載します。
(無知な私はCinemachineCameraOffsetの存在を今日知りました・・・はずかしい。そしてこれ便利)
“Unity Cinemachine のCamera OffsetとCinemachine Follow Zoomで対象がカメラに映る位置を調整する” の続きを読む
Unityとフォトグラメトリを使ってバーチャルアートミュージアムを作る方法などを記載
今回はUnity Cinemachine のCamera OffsetとCinemachine Follow Zoomを使って、対象がカメラに映る位置を調整する方法について記載します。
(無知な私はCinemachineCameraOffsetの存在を今日知りました・・・はずかしい。そしてこれ便利)
“Unity Cinemachine のCamera OffsetとCinemachine Follow Zoomで対象がカメラに映る位置を調整する” の続きを読む
前回の記事で省略した、
Unity Cinemachine VirtualカメラのTransposer、ComposerのOffsetの値をスクリプトで変更する方法を記載します。
前回の記事はこちら。
Unity CinemachineのBlendを使ってアートをクリックしたらそこにフォーカスして拡大するようにする – Craneのブログ (crane-art.com)
“Unity Cinemachine のTransposer、ComposerのOffsetをスクリプトで制御する” の続きを読む
Unity Cinemachineを使って、アートをクリックしたら、そのアートにフォーカスしてズームしていくカメラワークを作成しました。
“Unity CinemachineのBlendを使ってアートをクリックしたらそこにフォーカスして拡大するようにする” の続きを読む
今回は、Unity CinemachineのVirtual Cameraでズームをマウスホイールでコントロールする方法について記載します。
本来、CinemachineはTimelineを活用するなどして、Scriptを組まずとも映画のようなカメラワークが可能、というのが売りのようなのですが、
Timelineが使いこなせていない私はScriptを活用して色々作ってしまいました。恐らく無駄なことを多くしていると思います。
さて、前回、以下の記事でCinemachineのカメラのAimにPOVを設定して、回転をマウス右クリック時に行うようにするところまで記載しました。
Unity Cinemachine POVカメラで右マウスボタン押下時のみカメラを回転させる – Craneのブログ (crane-art.com)
今回はそれに加え、マウスホイールでズームイン・アウトをできるようにします。
Scriptを作成してみました。
なお、滑らかにズームイン・アウトを行わせるためにDOTweenを使っています。
Unityでのカメラワークを実装するのにあたって、Cinemachineを導入しました。
が、Cinemachineについては参考にできるサイトも少なくなかなか苦労しました。
今回は、CinemachineでPOV利用時に、右マウスボタン押下時のみカメラを回転させる方法について記載します。
※この記事はUnity2019以降を前提に記載しています。
(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上でSpriteを使って皿を配置する方法を記載しました。
Spriteの場合、影が付きません。
そこで、Spriteの代わりに薄いCubeを作成し、新規にStandardシェーダのマテリアルを作成、「アルベド」に皿の画像をセット、「Rendering Mode」を「Cutout」、「アルファカットオフ」の値を適当に設定します。
これで、皿の色のついた部分だけを投影してくれます。
一番上のスクリーンショット取得時には、動作を軽くするために壁などのマテリアルもMobile Bumped Diffuseなどの軽いシェーダにしていたのですが、折角なのでStandardシェーダにして法線マップやMetallicなどを設定し、ライトをベイクした結果、下のスクリーンショットのようになりました。皿はほぼ、平面に近いCubeですが、この角度からなら十分立体に見えます。影が付いており、見栄えがいいですね。
ついでに、同じシーンをハイエンドプラットフォーム向けのHDRPでも作成してみました。
HDRPについては以下サイトをご参照ください。
https://unity.com/ja/srp/High-Definition-Render-Pipeline
先程と同じく、薄いCubeを作成し、マテリアルを作成、シェーダをLit、Alpha Clippingをオン、BaseMapに皿のテクスチャを設定して割り当てます。
美しいですね・・・・
ちなみに、皿をアップで映してUnity標準のビルトインレンダリングパイプラインとHDRPを比べたのが下です。
影の描写も、HDRPでは穴の部分などもしっかり反映されており、形状に忠実になっています。
床などは少しテクスチャも変えていますが、HDRPだと非常に優美な空間が作れますね。ただし、重いですが。
Craneです。
Unity HDRPを使って遊んでいます。
HDRPの標準シェーダである、Litシェーダを使ってフォトグラメトリソフトで作ったモデルをそれっぽくしてみました。
影とか、色々と変ですが・・・質感はなかなかです。
周辺のレースドールは皆、Unlitシェーダなので、比べると違いが明らかですね。
Craneです。
今回は、フォトグラメトリソフトで作ったobjファイルの3DモデルをUnityへインポートする方法を記載します。
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)