【实现100个unity特效之29】实现Unity3D视差地裂效果

最终效果

我这做的比较粗糙,大家做个参考就行了
在这里插入图片描述

一、使用Blender创建地裂模型

这里我提供两种方法,大家任选其一:

二、unity操作

1、导入模型到unity

纹理贴图这里我们就不提取出来了,这里对我们没有用
在这里插入图片描述

2、Stencil Buffer模板缓冲区

Stencil Buffer是一个每像素的掩码缓冲区,用于控制哪些像素应该被渲染或丢弃,这里我们主要是为了在模板缓冲区禁用深度写入ZWrite。Stencil Buffer(模板缓冲区)是Unity渲染管线中的一个重要组成部分,它与Depth Buffer(深度缓冲区)和Color Buffer(颜色缓冲区)一起构成了现代图形渲染的基础。

Stencil Buffer(模板缓冲区)—— 就像"剪纸模具"

想象你要在墙上喷绘一个星星图案,你会怎么做?聪明的方法是:

  1. 先拿硬纸板剪出一个星星形状的洞(这就是Stencil Buffer)
  2. 把这个带洞的纸板贴在墙上
  3. 喷漆时,颜料只会通过星星形状的洞留在墙上

在Unity中:

  • Stencil Buffer就是那个"带洞的纸板"
  • 它决定了哪些像素可以"通过"被画出来
  • 你可以设置不同规则:“只有画过1次的地方能通过”、"比2大的数字不能通过"等等

常见用途:

  • 制作角色轮廓发光效果
  • 实现镜子反射(只在一定区域内显示反射)
  • 创建UI遮罩效果

ZWrite(深度写入)—— 就像"记下谁在前面"

想象几个人排队拍照:

  • 摄影师(Unity)需要记住谁站前面谁站后面(这就是ZWrite)
  • 默认情况下,Unity会记录每个物体的前后关系(ZWrite On)
  • 当开启ZWrite,前面的人会挡住后面的人
  • 当关闭ZWrite,就像所有人都站在同一排,后画的会盖住先画的

为什么有时要关闭ZWrite?

  • 做半透明效果时(比如玻璃),需要让后面的物体也能显示
  • 制作特殊效果时(比如地裂效果),不想影响其他物体的遮挡关系

两者的配合使用

用现实例子比喻: 假设你要在一面破墙上做艺术创作:

  1. 先用模板(Stencil)标出裂缝区域:“只有这里可以作画”
  2. 关闭深度记录(ZWrite Off):“裂缝效果不应该影响其他物体的前后关系”
  3. 在标记区域内绘制立体裂缝效果

这样就能实现:

  • 裂缝只出现在指定区域(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


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】
【unity游戏开发——编辑器扩展】
【unity游戏开发——热更新】
【unity游戏开发——网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向宇it

创作不易,感谢你的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值