news 2026/5/26 6:13:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【光照】UnityURP[光照贴图]GPU instancing在静态动态物体上的应用

静态物体GPU Instancing与光照贴图

‌技术要点‌:

‌静态标记‌:物体需标记为Batching Static,但需禁用静态合批以避免与GPU Instancing冲突。

‌光照贴图绑定‌:通过LightmapIndex和LightmapScaleOffset手动绑定烘焙结果。

‌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)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 5:06:16

Android端AI模型部署:Paddle-Lite Java API实战避坑指南

Android端AI模型部署&#xff1a;Paddle-Lite Java API实战避坑指南 【免费下载链接】Paddle-Lite PaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎&#xff09; 项目地址: https://gitcode.com/GitHub_…

作者头像 李华
网站建设 2026/5/26 1:35:54

贝贝BiliBili:B站视频批量下载的终极指南

贝贝BiliBili&#xff1a;B站视频批量下载的终极指南 【免费下载链接】贝贝BiliBili-B站视频下载 贝贝BiliBili是一款专为B站视频下载设计的PC工具&#xff0c;功能强大且操作简便。它支持批量下载&#xff0c;显著提升下载效率&#xff0c;尤其适合需要大量保存视频的用户。为…

作者头像 李华
网站建设 2026/5/25 18:35:50

五年干货免费送?我为什么把知识库交给PandaWiki

Panda不是猫 引言 从熊猫开始撰写 NAS 相关内容至今&#xff0c;已有五年时间。这五年间&#xff0c;累计撰写字数已突破四百万&#xff0c;其中长文教程更是多达 近 600 篇 。虽然熊猫的内容一直在各大自媒体平台分发&#xff0c;但这些平台更多是作为一个“扩圈”的渠道&…

作者头像 李华
网站建设 2026/5/25 5:48:31

C语言枚举(enum)详解:从基础语法到算法实战

摘要&#xff1a;本文深入讲解C语言中的enum&#xff08;枚举&#xff09;类型&#xff0c;涵盖其定义、使用、内存布局、优势与局限&#xff0c;并通过多个经典算法问题&#xff08;状态机、方向控制、棋盘游戏等&#xff09;展示如何用枚举提升代码可读性、可维护性和健壮性。…

作者头像 李华
网站建设 2026/5/26 5:43:06

嵌入式固件升级框架详解与实战经验

嵌入式固件升级&#xff08;Firmware Update&#xff09;是什么&#xff1f;固件升级是指在设备不拆解、不更换芯片的前提下&#xff0c;为了修复Bug、增加新功能或提升性能&#xff0c;通过软件方式更新嵌入式系统固件。对嵌入式产品而言&#xff0c;固件升级机制可以保持产品…

作者头像 李华
网站建设 2026/5/26 5:38:59

EmotiVoice API鉴权机制实现:保障调用安全

EmotiVoice API鉴权机制实现&#xff1a;保障调用安全 在AI语音技术迅速普及的今天&#xff0c;语音合成已不再是简单的“文字转语音”&#xff0c;而是迈向情感化、个性化和场景化的智能交互核心。EmotiVoice作为一款支持多情感表达与零样本声音克隆的开源TTS引擎&#xff0c;…

作者头像 李华