文章目录
最终效果
我这做的比较粗糙,大家做个参考就行了
一、使用Blender创建地裂模型
这里我提供两种方法,大家任选其一:
二、unity操作
1、导入模型到unity
纹理贴图这里我们就不提取出来了,这里对我们没有用
2、Stencil Buffer模板缓冲区
Stencil Buffer是一个每像素的掩码缓冲区,用于控制哪些像素应该被渲染或丢弃,这里我们主要是为了在模板缓冲区禁用深度写入ZWrite。Stencil Buffer(模板缓冲区)是Unity渲染管线中的一个重要组成部分,它与Depth Buffer(深度缓冲区)和Color Buffer(颜色缓冲区)一起构成了现代图形渲染的基础。
Stencil Buffer(模板缓冲区)—— 就像"剪纸模具"
想象你要在墙上喷绘一个星星图案,你会怎么做?聪明的方法是:
- 先拿硬纸板剪出一个星星形状的洞(这就是Stencil Buffer)
- 把这个带洞的纸板贴在墙上
- 喷漆时,颜料只会通过星星形状的洞留在墙上
在Unity中:
- Stencil Buffer就是那个"带洞的纸板"
- 它决定了哪些像素可以"通过"被画出来
- 你可以设置不同规则:“只有画过1次的地方能通过”、"比2大的数字不能通过"等等
常见用途:
- 制作角色轮廓发光效果
- 实现镜子反射(只在一定区域内显示反射)
- 创建UI遮罩效果
ZWrite(深度写入)—— 就像"记下谁在前面"
想象几个人排队拍照:
- 摄影师(Unity)需要记住谁站前面谁站后面(这就是ZWrite)
- 默认情况下,Unity会记录每个物体的前后关系(ZWrite On)
- 当开启ZWrite,前面的人会挡住后面的人
- 当关闭ZWrite,就像所有人都站在同一排,后画的会盖住先画的
为什么有时要关闭ZWrite?
- 做半透明效果时(比如玻璃),需要让后面的物体也能显示
- 制作特殊效果时(比如地裂效果),不想影响其他物体的遮挡关系
两者的配合使用
用现实例子比喻: 假设你要在一面破墙上做艺术创作:
- 先用模板(Stencil)标出裂缝区域:“只有这里可以作画”
- 关闭深度记录(ZWrite Off):“裂缝效果不应该影响其他物体的前后关系”
- 在标记区域内绘制立体裂缝效果
这样就能实现:
- 裂缝只出现在指定区域(Stencil控制)
- 裂缝看起来有立体感但不会错误遮挡其他物体(ZWrite Off)
如果你还是不懂什么是Stencil Buffer和ZWrite
,建议自行上网查找相关资料深入理解。
2.1 新建两个图层
LayerMask和SeeThrough
地面设置成SeeThrough层,这里我新建一个Plane作为地面
裂缝顶部设置成
2.2 修改URP配置
不透明遮罩取消两个图层的勾选
开启Stencil模板
记得关闭屏幕空间环境光,不然后面模型接缝处会穿帮
下面新增两个Render Objects,按我的配置就行,但是注意unity有bug,设置一次可能并不会生效,记得反复检查一下,配置不对就重新再配置一次就可以了
3、新增shader关闭ZWrite
这shader很简单,这个裂缝不透明,因此无法渲染背后的内容,我们无法看到穿透,因为ZWrite是打开的,但在这个新的Shadert中,我们设置禁用了它
Shader "Custom/DisablezWriteTUT"
{
SubShader{
Tags{
"RenderType"="Opaque"
}
Pass{
ZWrite Off
}
}
}
将这个shader创建一个材质,赋值给顶部,现在我们就有一个漂亮的裂缝效果了
4、创建新无光照shaderGraph
连线图很简单
5、添加裂缝材质
给这个ShaderGraph添加材质,添加给裂缝,配置如下
效果
6、添加底部材质
复制一个材质,放在底部控制亮度,设置如下,底部我们就不需要阴影了,将阴影范围设置成0
效果
7、泛光后处理
后处理知识可以查看:【unity游戏开发入门到精通——通用篇】Post Processing 后处理插件Post-process Volume 和 Volume最全基础使用说明
添加泛光后处理让效果更好
参考
https://www.youtube.com/watch?v=qiAiVa0HtyE&t=194s
专栏推荐
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!