当前位置: 首页 > news >正文

【光照】UnityURP[光照贴图]GPU instancing在静态动态物体上的应用

【从UnityURP开始探索游戏渲染】专栏-直达

静态物体GPU Instancing与光照贴图

技术要点‌:

  • 静态标记‌:物体需标记为Batching Static,但需禁用静态合批以避免与GPU Instancing冲突。
  • 光照贴图绑定‌:通过LightmapIndexLightmapScaleOffset手动绑定烘焙结果。
  • Shader适配‌:需在着色器中添加实例化支持与光照贴图采样逻辑。

示例代码‌:

  • StaticInstancingExample.cs

    using UnityEngine;[ExecuteAlways]
    public class StaticInstancingExample : MonoBehaviour {public Mesh mesh;public Material material;public int instanceCount = 100;private Matrix4x4[] matrices;private Vector4[] lightmapOffsets;void Start() {// 生成实例变换矩阵matrices = new Matrix4x4[instanceCount];lightmapOffsets = new Vector4[instanceCount];for (int i = 0; i < instanceCount; i++) {Vector3 pos = Random.insideUnitSphere * 10f;matrices[i] = Matrix4x4.TRS(pos, Quaternion.identity, Vector3.one);// 模拟不同光照贴图偏移(需与烘焙数据匹配)lightmapOffsets[i] = new Vector4(1, 1, i % 2 * 0.5f, i / 2 * 0.5f);}}void Update() {MaterialPropertyBlock props = new MaterialPropertyBlock();props.SetVectorArray("_LightmapST", lightmapOffsets); // 传递光照贴图UV偏移Graphics.DrawMeshInstanced(mesh, 0, material, matrices, instanceCount, props);}
    }
    

实现说明‌:

  • 使用MaterialPropertyBlock传递每实例的光照贴图UV偏移参数。
  • 着色器中需声明UNITY_LIGHTMAP_ON宏并采样unity_Lightmap纹理。

动态物体GPU Instancing与光照探针

技术要点‌:

  • 光照探针替代‌:动态物体依赖Light Probes获取间接光照。
  • 混合光源支持‌:光源设为Mixed模式,静态阴影烘焙到光照贴图,动态物体接收实时阴影。
  • 实例化属性扩展‌:通过MaterialPropertyBlock传递探针数据。

示例代码‌:

  • DynamicInstancingExample.cs

    using UnityEngine;public class DynamicInstancingExample : MonoBehaviour {public Mesh mesh;public Material material;public int instanceCount = 100;private Matrix4x4[] matrices;void Start() {matrices = new Matrix4x4[instanceCount];for (int i = 0; i < instanceCount; i++) {Vector3 pos = Random.insideUnitSphere * 10f;matrices[i] = Matrix4x4.TRS(pos, Quaternion.identity, Vector3.one);}}void Update() {MaterialPropertyBlock props = new MaterialPropertyBlock();// 为每个实例设置光照探针数据LightProbes.GetInterpolatedProbe(transform.position, null, out var probe);props.AddVector("_LightProbeData", new Vector4(probe.occlusion, 0, 0, 0));Graphics.DrawMeshInstanced(mesh, 0, material, matrices, instanceCount, props);}
    }
    

实现说明‌:

  • 通过LightProbes.GetInterpolatedProbe获取动态物体的光照探针数据。
  • 着色器中需使用SHADERGRAPH_BAKED_LIGHT_PROBES宏处理探针数据。

Shader适配关键代码(URP Shader Graph)

  • 静态光照贴图采样‌:在Shader Graph中添加Lightmap节点,并通过Custom Function节点接入实例化的UV偏移参数。
  • 动态探针支持‌:添加Baked Light Probes节点,并与实例化属性_LightProbeData关联。

优先级注意‌:若同时启用SRP Batcher,需确保材质兼容性(禁用MaterialPropertyBlock


【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

http://www.hskmm.com/?act=detail&tid=27854

相关文章:

  • 2025 年电缆桥架厂家最新推荐排行榜:涵盖不锈钢 / 铝合金 / 热镀锌等多类型,助力用户精准选购优质桥架托盘式/防火/喷塑/防火喷塑/大跨距电缆桥架厂家推荐
  • 国家社科基金立项清单和申请书范本(直接领)
  • AOP编程有三大场景:控制器切面,内部切面,外部切面,你get到了吗?
  • Gitee本土化战略:如何构建中国开发者的代码托管新生态?
  • Vue3路由传递复杂参数(比如一个对象)
  • 2025 年国内一体板厂家最新推荐排行榜:装配式 / 珍珠岩 / 免拆 / 外墙保温品类优质企业权威精选
  • 系统提示词优化模板-通用优化-带输出格式要求
  • CRMEB标准版PHP订单列表源码解析:自定义字段与导出功能
  • odoo18安装环境
  • 系统提示词优化模板-通用模板
  • aardio编程中的常量
  • CF2145E Predicting Popularity
  • 偏微分方程数值解法
  • 2025 年 英国 / 澳洲 / 香港 / 美国 / 加拿大 / 留学机构推荐:金矢留学服务解析,从院校资源到全程规划的优质之选
  • 基于MATLAB的二阶同步挤压小波变换(WSST2)实现
  • 2025 年聚丙烯酰胺厂商最新推荐排行榜:聚焦优质企业,助力企业精准选购环保水处理耗材PAM/沉淀剂/脱泥药剂/阴离子/阳离子聚丙烯酰胺厂商推荐
  • 半导体行业文件摆渡系统:守护核心数据安全,赋能高效协同!
  • 电商-数据库分库分表方案 - 努力-
  • VMware 17.6 虚拟机 永久免费版安装包下载及安装教程!
  • 使用perf进行性能分析-入门级别
  • PySimpleGUI 如何像VB那样精确布局?
  • 并查集
  • 2025 年干燥机厂家最新推荐排行榜:聚焦实验室 / 工业用优质设备,精选实力企业权威指南喷雾/造粒/工业喷雾/陶瓷喷雾/制粒/奶粉喷雾干燥机厂家推荐
  • aardio fsys.file创建文件,写入文件报错的替代解决办法
  • Mac OS npm报错
  • npm install 遇到的灵异问题
  • Minix3-操作系统学习
  • 有限差分法
  • 电商-订单查询优化方案 - 努力-
  • 2025 年折弯机厂家最新推荐排行榜:数控 / 电液伺服 / 液压机型权威测评,领先企业深度解析