LoginSignup
3
2

More than 5 years have passed since last update.

Auto Generate and Generate Lighting 翻訳

Posted at

単一のシーンでもなんでもライトをベイクしている場合、再度シーンを読み込み直すと死ぬので Auto Generate 外して Generate Lighting ボタンを押せば良い。理由は知らん、みたいなあやふやな理解だったのですが、ベストプラクティスに説明が載っていたので翻訳してみました。

元ページ:https://unity3d.com/jp/learn/tutorials/topics/best-practices/auto-generate-and-generate-lighting

突貫なので誤訳とかあると思います。
何か気づいた方は編集リクエストなど送ってもらえると嬉しいです。

以下翻訳です。

Auto Generate

Unity では全てのシーンにおいて Auto Generate が有効になっています。
Auto Generate を無効にするためには、Lighting Settings (メニューの Window > Lighting Settins) ウィンドウを開き、下へとスクロールして Auto Generate のチェックを外します。

Auto Generate を有効にして、シーンで Baked Global Illumination(GI) か Precomputed Realtime GI を使用すると、 Unity はライティングデータをシーン編集に応じて再構築します。これはつまり、シーンにあるベイクデータに影響を及ぼす要素を編集するたびに裏で再構築が行われるということです。例えば、 static 設定のゲームオブジェクトをシーンから削除するとベイクが行われます。

Auto Generate は単一のシーンで特定のライティング環境上で高速に反復作業を行いたい場合にのみ有効にすべきです。その他の場合には Auto Generate は無効にし、ライティングデータを手動で生成すると良いでしょう。

Generate Lighting

Auto Generate を無効にすると、 Generate Lighting ボタンをクリックすることでライティングデータの生成を行うことができます。このボタンは Lighting Settings ウィンドウ内、 Auto Generate チェックボックスの隣に位置しています。

Lighting Data Asset

Generate Lighting ボタンをクリックすると、 Unity は Lighting Data Asset をプロジェクト内に生成します。 Lighting Data Asset はシーンの GI データとシーンのライティング生成に使用する補助データを内包しており、このアセットはシーンと紐づいています。

Auto Generate を使用する場合、 Unity は Lighting Data Asset をプロジェクト内には生成しません。その代わりに GI データおよびシーンのライティング情報をメモリに保存します。これには2つの理由があります。

・ファイルに書き出されたデータよりも、メモリにあるデータの方が素早く編集できます
・Lighting Data Asset を変更すると、そのアセットが紐づいたシーンにダーティフラグが立ちます。これにより、そのシーンが再度シリアライズされます。Auto Generate は高速な反復作業を促進することを意図しているため、実行する度にこれらのリソース集中型の操作を引き起こさないことが重視されます

Auto Generate で生成されたライティングデータを用いたシーンの検証をプレイモードで行う

Lighting Data Asset がディスク上にない場合、プレイモードでシーンの検証を行うと問題を引き起こす可能性があります。簡潔に書くと、自動生成されたライティングデータを持つシーンは次のケースでのみプレイモード時に正しい GI データと共に表示されます。

ケース1:

・編集モード中、単一のシーンを編集するためにシーンを開いている
・編集モード中、そのシーンのみを編集している状態からプレイモードでそのシーンのみを実行する

ケース2:

・編集モードで複数のシーンが開かれている
・編集モードで複数のシーンを編集している状態から、複数シーンをプレイモードで実行する

それ以外のケースでは、自動生成されたライティングデータを持つシーンは明らかにプレイモードでおかしい表示になる原因となります。ダイレクトでリアルタイムなライティング(例:スカイボックスやアンビエントソースデータ)は動作し続けますが、GI 効果は消失します。

自動生成されたライティングデータによるプレイモードでの問題点

プレイモードでのシーンのアンロード

上記のように、単一のシーン又は複数のシーンで自動生成されたライティングデータを伴ってプレイモードで検証を行うと、Unity はシーン用の GI データをシーンがアンロードされた時に失います。

これは自動生成されたライティングデータがある状態でプレイモードを始めた場合、Unity が GI データをシーン内のゲームオブジェクトに直接付加するためです。Unity がシーンをアンロードするとゲームオブジェクトに紐づいた GI データは消去されます。 GI データを再読み込みするための Lighting Data Asset がディスク上にないため、Unity は編集モードに戻すまではこのデータを復旧することはできません。Unity が同じプレイモードセッション中に同じシーンを再度読み込んだ場合、シーンは GI 無しで表示される、ということです。

プレイモードでのシーンの追加ロード

単一のシーンを開き Auto Generate を編集モードで有効にすると、 Unity はそのシーン用の GI データを(可能であれば) GI キャッシュからロードするか、新しい GI データを生成します。この GI データはシーンに必要なその他のライティングデータとともにメモリに存在し、プレイモードに移るとシーンと正しく関連付けされます。

Auto Generate を用いてベイクされたシーンをプレイモード中にスクリプトでロードすると、その GI データはメモリには存在しません。
シーンを additive モード以外でロードすると、明らかに違和感のある結果が表示されます。 additive モードでシーンをロードすると影響はわかりづらくなり、最初は原因がわからないかもしれません。

マルチシーンの編集

Auto Generate が有効な状態でマルチシーンを編集するために開くと、 Unity はこの特定のシーン組み合わせのためのライティングデータをメモリに保存します。

(プレイモードへ移行することで)この特定の組み合わせを検証したい限りは、これらのシーンのライティング上で素早く反復作業を行う方法としてこの方法を活用することができます。これらのシーンを開いた状態でプレイモードに移行すると、 全てのシーン要素は既に GI データを付加されているために Unity はディスクからのロードを行う必要がありません。

しかし、異なるシーンの組み合わせをプレイモードで検証したい場合や、同じシーンを異なる様式で読み込みたい(例えば、シーンAを最初に読み込み、追加でシーンBとシーンCを読み込む)場合、問題が発生するでしょう。プレイモードで最初に開かなかった自動生成されたライティングを持つシーンはいずれかが GI データを持たない状態となります。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2