Bakery完全に理解した

2021/12/18に公開

はじめに

この記事は「完全に理解したTalk Advent Calendar 2021」の18日目の記事です。
UnityのアセットのBakeryを完全に理解をしましたので記事を作成しました。
この記事を見てBakeryが気になった方は是非購入・使用してみてください。

Bakeryとは

正式名称は「Bakery - GPU Lightmapper」です。
通常のUnityはCPUでしかライトマップを使用することが出来ません。
(一応GPUライトマッパーは用意されていますがプレビュー版です)
しかしこのBakeryを使うとGPUでライトマップをベイクすることができます!凄いですね!

注意事項
AMDのグラフィックボードは未サポート
Macには未対応

今回やったこと

3Dモデルを作成してプロジェクトにインポート後、Bakeryでベイクしました。
当初Substance 3D Painter完全に理解したの記事かBakery完全に理解したどちらの記事を書こうか悩み、最初にSubstance 3D Painterに手を付けたのですが和解できなかったのでBakeryを選びました。
Substance 3D Painterとは一生和解できる気がしません。

前準備(3Dモデルの作成)

ライトマップベイク用の3Dモデルが必要なので準備します。
ちゃぶ台が置いてある部屋を作成しました。
作成が終わったらfbxでエクスポートしましょう。
world_001

プロジェクトの作成

まずUnityのプロジェクトを作成します。
もしかしたらVRChatにワールドをアップロードしたくなるかもしれないので2019.4.31f1で作成しましょう。
※現在VRChatがサポートしているUnityのバージョンはこちらから確認できます

  • Unity Hubを起動して右上の「新規作成」横の▽をクリック。
  • 2019.4.31f1を選択してクリック。
    ※2019.4.31f1をインストールしていない場合は先にインストールしておく
  • テンプレートで「3D」が選択されていることを確認。
  • プロジェクト名に任意のプロジェクト名を入れ、保存先を選択して「作成」をクリック。

create_project_001

Bakeryのインポート

作成完了後はBakeryをインポートします。

  • メニューの「Window」をクリック後、「Package Manager」をクリック
  • 左上の「Unity Registry」をクリックして「My Assets」に変更
  • 右上の検索窓から「Bakery」を入力
  • アセットを選択して「Import」をクリック
    ※まだ一度もアセットをダウンロードしていない場合は先に「Download」をクリック

import_bakery_001

3Dモデルのインポート

はじめに作成した3Dモデルをプロジェクトにインポートします。

  • モデリングソフトからエクスポートしたfbxをUnityのProjectウィンドウにドラッグ&ドロップ
  • インポートが完了したらProjectウィンドウに表示されたfbxをHierarchyウィンドウにドラッグ&ドロップ

import_model_001

これでBakeryを使う準備ができました。

Bakeryを使ってみる

前の項で準備が完了しましたのでBakeryを使ってみましょう。
こちらはBakeryのドキュメントのクイックスタートに則って実施してますので、詳細はAssets/Bakery/docsフォルダ内に存在するBakery_manual.pdfを確認した方が良いです。

(任意)Generating Lightmap UVsを設定

ライトマップのためにはライトマップ専用のUVが必要になります。
今回のモデルはテクスチャすらないのでライトマップ用のUVをUnityに生成してもらいます。
UVチャンネルが1つしかない場合も同様に設定が必要です。
しかし、モデル作成時に既にUV2チャンネルを作成している場合は逆にUVが破壊されるのでチェックしないでください。

  • インポートしたfbxをクリックしてInspectorウィンドウのModelタブを表示
  • Generating Lightmap UVsのチェックをオン
  • Applyをクリック
    generate_lightmap_uv_001
    )

ベイクするオブジェクトにstaticを設定

ライトマップをベイクするオブジェクトには必ずstaticにする必要があります。
ベイクしたいオブジェクトをクリックした後Inspectorウィンドウでstaticにチェックを入れておきましょう。
![check_static_001](https://storage.googleapis.com/zenn-user-upload/fc54e5aac095-20211217.png

Directional Lightに「Bakery Direct Light」スクリプトを付与

  • HierarchyウィンドウのDirectional Lightをクリック
  • InspectorウィンドウでDirectional Lightに対して「Bakery Direct Light」スクリプトを付与

ここまで実施した後、最後に1つ作業が必要になります。
Directional LightとBakery Direct Lightのカラーを一致させる必要があります。
Bakery Direct Lightスクリプト項目内の「Match lightmapped to real-time」をクリックして一致させましょう。
match_lightmap_001

環境光を追加

環境光を追加するためにライトを追加します。

  • メニューの「Bakery」をクリック後、「Create」、「Skylight」を選択してクリック
  • 追加したSkylightをクリックしてInspectorウィンドウからcolorを青みがかった色に設定
  • 「Match scene skybox to this light」をクリックしてスカイボックスの色を先程選択したcolorの色と同期
    match_skybox_001

ベイク

いよいよベイクです。

  • メニューの「Bakery」をクリックして「Render lightmap」をクリック
  • 表示されたウィンドウの「Render」をクリック
    bake_001

後はベイクが完了するまで待機しましょう。

ベイクが完了後に再度Sceneウィンドウを見てみましょう。
何だかライティングが豪華になってますね!
(最初デフォルトそのままだと全然変わらなかったのでGlobal IlluminationのSamplesのみ数値を上げました)
bake_002

比較のために左右に並べてみました。
左がベイク前、右がベイク後です
右の方が明らかに影や反射光が細かいことがわかります。凄いですね!
bake_003

便利なBakery Real-Time Previewの紹介

もしこの記事を見て「Bakeryを使ってみたい!」と思った方に合わせておすすめのアセットを紹介します。
こちらのBakery Real-Time Previewは、通常ベイク後にしか表示することができないライトマップのベイク結果をリアルタイムで表示させることが可能です。
Bakeryを購入するなら是非一緒に購入して使用することをお勧めします。

最後に

ライトマップを活用することにより更にクオリティを上げることができます。
是非Bakeryを活用してみてください。

Discussion