找回密码
 立即注册
首页 业界区 业界 【光照】Unity[光照贴图]在静态动态物体上的解决方案 ...

【光照】Unity[光照贴图]在静态动态物体上的解决方案

郦湘云 昨天 14:17
【从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)。

示例场景‌:
  1. csharp
  2. // 静态物体Cube烘焙设置
  3. public class StaticBaker : MonoBehaviour {
  4.     void Start() {
  5.         GetComponent<MeshRenderer>().lightmapScaleOffset = new Vector4(1, 1, 0, 0);// 默认UV缩放
  6.         GetComponent<MeshRenderer>().lightmapIndex = 0;// 绑定光照贴图索引
  7.     }
  8. }
复制代码
动态物体解决方案


  • 技术组合‌:

    • Light Probes‌在场景中布置探针组,动态物体通过LightProbeProxyVolume获取周围烘焙光照数据。
    • 混合光照模式‌光源设为Mixed模式,静态阴影烘焙到光照贴图,动态物体接收实时阴影。

  • 示例代码‌:
    1. csharp
    2. // 动态物体Sphere适配光照
    3. public class DynamicLighting : MonoBehaviour {
    4.     void Update() {
    5.         LightProbes.GetInterpolatedProbe(transform.position, GetComponent<Renderer>(), out var probe);
    6.         GetComponent<Renderer>().additionalLightmapSettings.lightProbeVolume = probe;
    7.     }
    8. }
    复制代码
跨场景预制体烘焙

通过PrefabLightmapsData脚本保存光照贴图数据,动态加载时恢复:

  • 预制体根节点挂载脚本,烘焙后自动记录贴图索引和UV偏移。
  • 新场景中实例化预制体时,脚本在Awake阶段重新绑定光照贴图。
性能优化建议


  • 分层控制‌:使用Rendering Layer Mask限制光源影响范围。
  • 分辨率分级‌:远景物体降低Scale In Lightmap值。
  • 分块烘焙‌:大场景分区域烘焙后合并。
<blockquote>
【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册