【光照】Unity[光照貼圖]在靜態動態物體上的解決方案
【從UnityURP開始探索游戲渲染】專欄-直達
Unity URP 光照貼圖技術通過預計算靜態物體的光照信息并存儲為紋理,實現高效的光照效果渲染。
光照貼圖技術演進
- ?早期階段?Unity 5.x之前采用Enlighten光照系統,僅支持靜態物體烘焙,動態物體需依賴Light Probe間接光照。
- ?URP引入?URP整合了輕量級烘焙管線,支持混合光照模式(Mixed Lighting),允許靜態物體烘焙陰影與動態物體實時交互。
- ?HDRP協同發展?HDRP引入更高精度的光照貼圖UV生成和分辨率控制,URP隨后適配簡化版流程,如自動生成Lightmap UVs功能。
靜態物體解決方案
?核心步驟?:
- ?標記靜態屬性?在Mesh Renderer中勾選
Contribute GI,并啟用Lightmap Static標識。 - ?UV準備?模型導入時勾選
Generate Lightmap UVs(Project視圖 > Model選項卡)。 - ?參數調整?
Scale In Lightmap:控制分辨率(值越大細節越精細)。Lightmap Resolution:全局設置(建議30-100 texels/unit)。
?示例場景?:
csharp
// 靜態物體Cube烘焙設置
public class StaticBaker : MonoBehaviour {
void Start() {
GetComponent<MeshRenderer>().lightmapScaleOffset = new Vector4(1, 1, 0, 0);// 默認UV縮放
GetComponent<MeshRenderer>().lightmapIndex = 0;// 綁定光照貼圖索引
}
}
動態物體解決方案
-
?技術組合?:
- ?Light Probes?在場景中布置探針組,動態物體通過
LightProbeProxyVolume獲取周圍烘焙光照數據。 - ?混合光照模式?光源設為
Mixed模式,靜態陰影烘焙到光照貼圖,動態物體接收實時陰影。
- ?Light Probes?在場景中布置探針組,動態物體通過
-
?示例代碼?:
csharp // 動態物體Sphere適配光照 public class DynamicLighting : MonoBehaviour { void Update() { LightProbes.GetInterpolatedProbe(transform.position, GetComponent<Renderer>(), out var probe); GetComponent<Renderer>().additionalLightmapSettings.lightProbeVolume = probe; } }
跨場景預制體烘焙
通過PrefabLightmapsData腳本保存光照貼圖數據,動態加載時恢復:
- 預制體根節點掛載腳本,烘焙后自動記錄貼圖索引和UV偏移。
- 新場景中實例化預制體時,腳本在
Awake階段重新綁定光照貼圖。
性能優化建議
- ?分層控制?:使用
Rendering Layer Mask限制光源影響范圍。 - ?分辨率分級?:遠景物體降低
Scale In Lightmap值。 - ?分塊烘焙?:大場景分區域烘焙后合并。
【從UnityURP開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)

本文介紹了Unity URP中光照貼圖技術的演進與應用,詳細講解了靜態和動態物體的光照解決方案。針對靜態物體,文章闡述了標記屬性、UV準備和參數調整等核心步驟;對于動態物體,則推薦使用LightProbes與混合光照模式相結合的方法。此外還提供了跨場景預制體烘焙的實現方案,并給出分層控制、分辨率分級等性能優化建議。該技術通過預計算靜態光照信息實現高效渲染,適合游戲開發中的光照處理需求。
浙公網安備 33010602011771號