【光照】UnityURP[光照贴图]GPU instancing在静态动态物体上的应用
2025年10月10日 10:30
静态物体GPU Instancing与光照贴图 技术要点: 静态标记:物体需标记为Batching Static,但需禁用静态合批以避免与GPU Instancing冲突。 光照贴图绑定:
【从UnityURP开始探索游戏渲染】专栏-直达
Unity URP 光照贴图技术通过预计算静态物体的光照信息并存储为纹理,实现高效的光照效果渲染。
核心步骤:
Contribute GI
,并启用Lightmap Static
标识。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;// 绑定光照贴图索引
}
}
技术组合:
LightProbeProxyVolume
获取周围烘焙光照数据。Mixed
模式,静态阴影烘焙到光照贴图,动态物体接收实时阴影。示例代码:
csharp
// 动态物体Sphere适配光照
public class DynamicLighting : MonoBehaviour {
void Update() {
LightProbes.GetInterpolatedProbe(transform.position, GetComponent<Renderer>(), out var probe);
GetComponent<Renderer>().additionalLightmapSettings.lightProbeVolume = probe;
}
}
通过PrefabLightmapsData
脚本保存光照贴图数据,动态加载时恢复:
Awake
阶段重新绑定光照贴图。Rendering Layer Mask
限制光源影响范围。Scale In Lightmap
值。【从UnityURP开始探索游戏渲染】专栏-直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)