news 2026/6/17 22:34:16

【URP】Unity[置换贴图]原理与实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【URP】Unity[置换贴图]原理与实践

技术原理与解决的问题

‌功能差异‌:

置换贴图通过灰度值控制顶点位移(白色凸起,黑色凹陷),相比法线贴图能产生真实的轮廓阴影和遮挡效果,解决了低模表现高精度几何细节的难题。

‌性能权衡‌:

需要细分曲面(Tessellation)支持,计算开销大于法线贴图,但视觉效果更真实。

曲面细分参看

历史发展节点

‌早期阶段‌:

传统Shader Model 5.0引入硬件细分曲面,Unity通过自定义Shader实现置换效果。

‌URP集成‌:

URP 7.0+原生支持Decal Projector组件,简化了贴花(含置换效果)的投影流程。

Decal Projector 参看

‌优化演进‌:

结合SRP Batcher减少Draw Call,提升实例化渲染效率。

原理示意图:

置换流程:贴图采样 → 顶点偏移 → 细分曲面 → 像素着色

优化链路:SRP Batcher合并材质 → GPU Instancing处理动态实例

URP实现步骤

‌材质配置‌:

创建URP Lit Shader Graph,添加Tessellation和Displacement节点。

连接置换贴图(R通道)到顶点偏移量,调整细分级。

‌组件绑定‌:

创建Decal Projector GameObject

分配置换材质

设置投影范围(Size/Depth)和剔除层级

‌脚本控制‌(可选):

csharp

// 动态修改置换强度

void Update() {

decalProjector.material.SetFloat("_DisplacementScale", intensity);

}

弹孔效果实现

血迹/弹痕‌:通过Decal Projector动态投射到场景物体,结合碰撞检测确定UV坐标。

‌贴图生成‌:

使用Substance Designer或Photoshop绘制灰度图,白色区域表示弹孔凹陷深度。

‌Shader Graph配置‌:

添加Parallax Occlusion Mapping节点模拟深度偏移。

混合置换与法线贴图增强细节。

‌性能优化‌:

启用GPU Instancing减少相同材质的Draw Call。

使用MaterialPropertyBlock动态修改实例属性。

优化参看

置换贴图生成裂缝、岩石凸起

‌地形细节‌:与Terrain系统配合,在运行时置换顶点生成裂缝或岩石凸起。

通过置换贴图动态修改地形顶点生成裂缝/岩石凸起的完整实现方案,结合Terrain系统与Shader Graph。

核心原理

‌置换贴图作用‌:灰度图控制顶点位移(白色凸起,黑色凹陷),需配合曲面细分(Tessellation)增加几何精度

‌URP适配‌:通过Shader Graph的Tessellation节点和Height节点实现硬件细分与顶点偏移

‌地形融合‌:将置换Shader作为Terrain Layer材质,动态影响局部顶点

完整实现步骤

置换贴图生成

‌工具选择‌:使用Substance Designer或Photoshop绘制灰度图(岩石凸起区域为白色,裂缝为黑色)

‌规范要求‌:

分辨率:2048x2048(匹配地形尺寸)

格式:PNG无损压缩

色彩空间:Linear

Shader Graph配置

[Height Map] → [Sample Texture 2D] → [Remap(0-1 to -1-1)]

[Tessellation]节点设置细分级别(Edge:16, Inside:8)

[Parallax Occlusion]节点增强深度感知

混合法线贴图与置换效果

Terrain系统集成

csharp

// C#脚本动态加载置换材质

void ApplyDisplacementToTerrain() {

TerrainLayer layer = new TerrainLayer();

layer.diffuseTexture = rockAlbedo;

layer.normalMapTexture = rockNormal;

layer.maskMapTexture = displacementMap;// 置换贴图

Terrain.activeTerrain.terrainData.terrainLayers = new TerrainLayer[]{ layer };

}

性能优化

‌动态细分‌:根据摄像机距离调整细分因子(UnityDistanceBasedTess)

‌LOD控制‌:超过50米后禁用置换效果

‌批次合并‌:启用SRP Batcher减少Draw Call

动态裂缝生成

‌运行时修改贴图‌:

csharp

// 通过RenderTexture实时绘制裂缝

void UpdateCrackTexture(Vector3 hitPoint) {

Graphics.Blit(crackBrush, displacementRT, displacementMat);

Shader.SetGlobalTexture("_DynamicDisplacement", displacementRT);

}

‌Shader动态采样‌:

hlsl

float height = tex2Dlod(_DynamicDisplacement, float4(uv,0,0)).r;

v.vertex.y += height * _DisplacementScale;

技术对比

方案 优点 缺点 适用场景

法线贴图 性能开销低 无真实几何变形 小范围表面细节

视差遮蔽映射 中等精度遮挡效果 高频细节失真 砖墙/地板接缝

‌置换贴图‌ 真实几何变形 需硬件细分支持 地形/大规模结构变形

调试建议

‌可视化模式‌:启用URP的Depth Normals Pass检查细分效果

‌参数调优‌:

_TessellationEdgeLength:控制细分密度(建议值8-20)

_DisplacementScale:位移强度(建议值0.1-2.0)

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

约翰·伯格的资产配置理论

约翰伯格的资产配置理论 关键词:约翰伯格、资产配置理论、投资组合、风险分散、长期投资 摘要:本文深入探讨了约翰伯格的资产配置理论。该理论强调通过合理的资产配置实现风险分散和长期稳定的投资回报。文章首先介绍了理论提出的背景,包括目的、预期读者和文档结构等内容。…

作者头像 李华
网站建设 2026/6/16 20:29:37

命越算越薄?一张电器说明书给你讲透唯物主义命理观

【CSDN 独家】命越算越薄?一张电器说明书给你讲透唯物主义命理观扔掉“天机不可泄露”的玄学外衣,用程序员思维解码命运的底层逻辑。关键词:命理、唯物主义、心理学、程序员思维、决策陷阱 预计阅读:6分钟开场:程序员买…

作者头像 李华
网站建设 2026/6/13 13:11:29

【课程设计/毕业设计】基于springboot的人力资源管理系统的设计与实现员工个人信息修改、请假、员工 的薪资管理、考勤管理、社保管理【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/16 4:06:55

Java计算机毕设之基于 SpringBoot 的人事人力资源管理系统设计与实现基于springboot的人力资源管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/13 17:39:16

Spring Cloud Alibaba + Dubbo

在微服务世界里,服务间的调用就像小伙伴之间传纸条。你可以直接跑过去,也可以用 Dubbo——微服务界的“极速传声筒”,帮你瞬间把消息传到对方手里,还保证安全可靠。 本文将从 Dubbo 的原理、配置、使用场景到实战经验进行全面解析…

作者头像 李华
网站建设 2026/6/16 23:46:35

# 使用 Flutter 构建跨平台应用:入门与实战

## 一、什么是 Flutter?**Flutter** 是由 Google 开发的开源 UI 软件开发工具包,用于为移动、Web、桌面和嵌入式设备构建高性能、高保真的应用程序。它使用 **Dart** 编程语言,并允许开发者通过一套代码库同时为 Android 和 iOS 创建原生级体…

作者头像 李华