当前位置: 首页 > 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.gsyq.cn/news/18022.html

相关文章:

  • Vue3路由传递复杂参数(比如一个对象)
  • 系统提示词优化模板-通用优化-带输出格式要求
  • CRMEB标准版PHP订单列表源码解析:自定义字段与导出功能
  • 系统提示词优化模板-通用模板
  • 开源 C# 快速开发(三)复杂控件 - 教程
  • CF2145E Predicting Popularity
  • 深入解析:从Android到iOS:启动监控实现的跨平台技术对比
  • 百度开源 Qianfan-VL: 领域增强的通用视觉语言模型 - 详解
  • 2025 年聚丙烯酰胺厂商最新推荐排行榜:聚焦优质企业,助力企业精准选购环保水处理耗材PAM/沉淀剂/脱泥药剂/阴离子/阳离子聚丙烯酰胺厂商推荐
  • VMware 17.6 虚拟机 永久免费版安装包下载及安装教程!
  • Tmux中向上翻屏查找命令输出(KIMI)
  • CAD 多个dwg文件合成一张图(无需插件)
  • 鸿蒙应用开发从入门到实战(十八):组件编程思想之代码复用
  • arm环境vg损坏mysql数据库恢复---惜分飞
  • 2025 年国内连接器厂商最新推荐排行榜:聚焦 Type-C / 板对板等核心品类,精选优质企业助力下游选型针座/板对板/卡座/FPC/排针连接器厂家推荐
  • Elasticsearch 备份:方案篇
  • 【Android】解决安卓在隐藏强大的系统栏后usb鼠标被隐藏的疑问
  • 2025 最新推荐!溴化锂回收公司精选榜单:含制冷机 / 溶液 / 机组回收服务商权威测评及选择指南
  • 质量检验知识专题讲座之七:来料检验
  • 决斗(模拟赛题目T3)分析
  • gitlen中,已经提交了内容,如何回退到修改前?
  • HCIP-IoT/H52-111 真题详解(章节C),接入实用的技术和网络设计 /Part1
  • MySQL 8.0 my.cnf 配置详解
  • dremio sql server uniqueidentifier 数据类型问题
  • Why cant developing countries become developed?
  • 22 LCA模拟赛2T1 奶龙与贝利亚 题解
  • 微软拼音输入法自定义短语批量导入导出工具(支持Windows 10/11)
  • 01-Vue3阶段必会的前置知识-01变量和常量
  • 这是我的第一个个人博客
  • BLDC中的Q15