赞
踩
学习参考:b站Up主M_Studio(麦扣老师)的3DRPG系列教程
为游戏创建一个ShaderGraph,实现人物在被树木等遮挡物遮挡时显示遮挡剔除的效果
如下图所示,游戏人物在移动到树木后面的时候被遮挡住了,无法看到玩家的位置。
鼠标右键创建一个新的shadergraph
基于上面创建的shadergraph右键新建一个材质取名为occlusion
双击occlusion shader打开窗口,在graph inspector中勾选Alpha Clip显示设置透明通道
需要实现的遮挡效果是人物或者敌人在树或者大的遮挡物后面的时候有一个大致的轮廓显示。
使用unity自带的菲涅尔效果,新建Node,搜索Fresnel
。菲涅尔效果就是是模型有光圈的效果,它可以替换模型现有的shader,是他在遮挡物的后面也可以看到模型的轮廓样式。
创建一个color变量,方便后期它在inspector窗口中进行调整。
选中color在右侧的graph inspector窗口中选择node setting进行参数调整。
将color拖拽出来,将颜色加到菲尼尔现象中,需要color和菲尼尔发生乘法效果。拖拽菲涅尔Out点添加multiply,把它连接到A点,然后拖拽color变量连接到B点。可以看到下面图片左color已经有了可视化的效果。
然后将AB输出的值连接到base color上
为菲尼尔现象添加噪点的效果使它看起来更加的实在一些。
添加新节点dither,用x参数的数值来调整模型内部实心填充的效果。
为x创建一个folat类型的参数dither count,在node setting给它一个默认值0.5,然后将这个值连接到透明通道上。
添加一个folat型变量命名为AlphaThreshold,拖拽出来连接到base的阀值上
此时材质可以在外部进行更改,通过修改参数来调整材质具体显示的效果。
当人物移动到遮挡物后面的时候就应用前面所设置的材质,使它只显示一个轮廓。
在渲染管线设置中进行编辑,找到项目中的pipeline settings,选中UniversalRenderPipelineAsset_Renderer添加渲染功能。添加一个render objects
设置只有当player图层被遮挡物挡住的时候才会应用新添加的材质,未遮挡的情况下保持原有不变。
设置好之后可以发现游戏人物相比较之前发生了变化,人物的各个子物体之间也发生了遮挡剔除的变化
将player移动到树木的后面,剔除的效果产生了。
但目前人物在没有遮挡物的情况下,也产生了提出效果。为了解决这一问题,需要在前景的时候也添加一个render效果,将过滤图层设置为Player,此时人物在前景的时候恢复正常。
实现效果如下图:
可以观察到player在经过树木的时候会有一个大致的轮廓。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。