Unity使用Shader Graph实现遮挡剔除

Posted Akuyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity使用Shader Graph实现遮挡剔除相关的知识,希望对你有一定的参考价值。

遮挡剔除

生成材质:

Shader Graph

Project里面右键-->Create-->Shader-->Universal Render Pipeline-->Unlit Shader Graph

选中创建出来的Shader Graph右键新建一个材质Material,双击Shader Graph打开

背景板上右键-->Create Node-->搜索Fresnel Effect

在左侧的blackboard里新建一个Color,命名color

(旧版本可以在blackboard中直接调整参数,新版本要选中变量后在右侧的graph inspector的note settings中去调整参数)

在node settings中调整到你想要显示的轮廓的颜色

将color拖拽出来,从Fresnel Effect右侧的Out拖拽出一个Multiply,然后把color给到B值,color则有一个可视化的效果。

将输出的值(Out)连接到Base Color上,这个时候可以在预览窗口中看到它的样子。

如果想添加一点噪点让现实更真实,可以添加一个Dither,修改X值可以调整它的填充效果。

创建一个Float值,拖拽出来连上X,可以在note settings中给它一个初始值,将这个值输出到Alpha上。

用一个阈值来控制Alpha:创建一个Float变量,拖出来给到Alpha Clip Threshold。

选择右上角的Save Asset可以保存并生成,在右侧的Inspector中可以调整它的各项参数。

让角色移动到遮挡物后面时应用该材质:

选择URP_Renderer-->Add Renderer Feature-->Render Objects

 

把做好的材质赋给Overrides的Material

勾选Depth,选择Depth Test中的Greater,即表示当人物在物体后面时显示出来

添加Layer:给人物添加一个图层,然后在Layer Mask中选择人物的图层,这样只有选中的人物会被遮挡后显示出来

如果给人物添加类的时候选择了“Yes,change children”,由于人物之间的各个部件可能也会发生互相遮挡,再添加一个Render Objects:


图层也添加上即可

 

以上是关于Unity使用Shader Graph实现遮挡剔除的主要内容,如果未能解决你的问题,请参考以下文章

Unity使用Shader Graph实现遮挡剔除

unity overdraw 多少合理

unity 遮挡剔除的实现

unity 遮挡剔除的实现

使用InstantOC实现动态遮挡剔除 + LOD效果

Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)