bake-lighting について
bake-lightingは、エンジンのシーンで静的ライティングをベイクし、静的ジオメトリの毎フレームの照明・シャドウ処理を減らすスキルです。Lightmapperの設定、メッシュとライトの構成、UV要件、オフラインベイクの使いどころを説明します。
主な機能
- 01Lightmapperの設定とベイク制御
- 02ライトマップモードとアンビエントオクルージョン
- 03第2 UVセットの要件
- 04ランタイムとオフラインの選択指針
- 05動的オブジェクトのシャドウに関する注意
活用シーン
- 01静的シーンジオメトリのライティングをベイク
- 02インポートしたメッシュのライトマップUVを確認
- 03ランタイムまたはオフラインのベイクを選択
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ playcanvas/ skills --skill bake-lightingインストール後、Claude Code で/bake-lightingを入力して読み込まれたか確認します。
詳細
静的ライティングをベイクする
ライトマップを使うと、静的なジオメトリに対する静的ライトのシャドウとライティングにかかるフレームごとのコストをなくせます。
ApplicationはLightmapperを登録します。手動でAppOptionsを初期化する場合は、lightmapper = Lightmapperを設定します。- ライトで
bake = trueを設定します。照らすすべてのメッシュがライトマップ化されたら、affectDynamic = falseを設定します。 - 各メッシュで
render.lightmapped = trueを設定します。設定しないと、affectDynamicをオフにしたときに ライティングされなくなります。lightmapSizeMultiplierでサイズを調整します。castShadowsLightmapを使うと、メッシュ同士でシャドウを落とせます。 scene.lightmapModeでモードを設定します。フラットなディフューズにはBAKE_COLORを、法線マップまたはスペキュラマップを使用したマテリアルに方向情報を追加するにはデフォルトのBAKE_COLORDIRを指定します。- ライトなしで AO をベイクするには、
scene.ambientBake、ambientBakeNumSamples、ambientBakeOcclusionBrightness、ambientBakeOcclusionContrastを設定します。 - Engine は最初にフレームをレンダリングするときに一度ベイクします。後から追加したノードや再ベイクする場合にのみ、
app.lightmapper.bake(null, mode)を呼び出します。
2つ目の UV セットが必要です
すべてのメッシュインスタンスが SEMANTIC_TEXCOORD1 を持つ場合にのみ、ノードはベイクされます。そうでない場合はスキップされ、デバッグビルドでログが出るだけで、動的ライティングのままになります。プリミティブにはこのセットがありますが、インポートした GLB にはないことがよくあります。確認してから、UV 展開するか再エクスポートしてください。
デバイス上で行うか、オフラインで行うか
対象デバイスで bake() の所要時間を計測してください。起動時の予算を超える場合、またはランタイムライトマッパーでは生成できないディテールが必要な場合にのみ、テクスチャのみを配布するオフラインベイクに切り替え、追加のダウンロードサイズを明記してください。
ベイク済みのライトの中を移動する動的オブジェクトには、近似的な遮蔽とコンタクトシャドウが必要です。そうしないと、貼り付けたように見えます。ベイク済みシャドウの中と外で verify-pixels のキャプチャを比較してください。
コメント
Markdown 対応