Unity3D ShaderGraph遮挡剔除

学习参考:b站Up主M_Studio(麦扣老师)的3DRPG系列教程

为游戏创建一个ShaderGraph,实现人物在被树木等遮挡物遮挡时显示遮挡剔除的效果

如下图所示,游戏人物在移动到树木后面的时候被遮挡住了,无法看到玩家的位置。
在这里插入图片描述

1.创建shader graph

鼠标右键创建一个新的shadergraph

基于上面创建的shadergraph右键新建一个材质取名为occlusion

双击occlusion shader打开窗口,在graph inspector中勾选Alpha Clip显示设置透明通道

需要实现的遮挡效果是人物或者敌人在树或者大的遮挡物后面的时候有一个大致的轮廓显示。

2.添加菲涅尔

使用unity自带的菲涅尔效果,新建Node,搜索Fresnel。菲涅尔效果就是是模型有光圈的效果,它可以替换模型现有的shader,是他在遮挡物的后面也可以看到模型的轮廓样式。

创建一个color变量,方便后期它在inspector窗口中进行调整。

选中color在右侧的graph inspector窗口中选择node setting进行参数调整。

将color拖拽出来,将颜色加到菲尼尔现象中,需要color和菲尼尔发生乘法效果。拖拽菲涅尔Out点添加multiply,把它连接到A点,然后拖拽color变量连接到B点。可以看到下面图片左color已经有了可视化的效果。

然后将AB输出的值连接到base color上

3.添加噪点的效果

为菲尼尔现象添加噪点的效果使它看起来更加的实在一些。
添加新节点dither,用x参数的数值来调整模型内部实心填充的效果。

为x创建一个folat类型的参数dither count,在node setting给它一个默认值0.5,然后将这个值连接到透明通道上。

4.设置一个阀值控制alpha

添加一个folat型变量命名为AlphaThreshold,拖拽出来连接到base的阀值上

5.选择save asset保存shader graph

此时材质可以在外部进行更改,通过修改参数来调整材质具体显示的效果。

6.游戏中设置渲染管线

当人物移动到遮挡物后面的时候就应用前面所设置的材质,使它只显示一个轮廓。
在渲染管线设置中进行编辑,找到项目中的pipeline settings,选中UniversalRenderPipelineAsset_Renderer添加渲染功能。添加一个render objects

设置只有当player图层被遮挡物挡住的时候才会应用新添加的材质,未遮挡的情况下保持原有不变。

设置好之后可以发现游戏人物相比较之前发生了变化,人物的各个子物体之间也发生了遮挡剔除的变化

将player移动到树木的后面,剔除的效果产生了。

但目前人物在没有遮挡物的情况下,也产生了提出效果。为了解决这一问题,需要在前景的时候也添加一个render效果,将过滤图层设置为Player,此时人物在前景的时候恢复正常。

实现效果如下图:
在这里插入图片描述
可以观察到player在经过树木的时候会有一个大致的轮廓。

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明天不吃鱼

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值