Unity URP Shader 修改深度让人物不再被地面遮挡

2024-08-24 13:44

本文主要是介绍Unity URP Shader 修改深度让人物不再被地面遮挡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity URP Shader 修改深度让人物不再被地面遮挡

  • 前言
  • 项目
    • 场景布置
    • 代码编写

前言

遇到一个小问题,人物总是被XY平面的地面遮挡,于是在Shader中改一下深度输出,这样地面再也不会挡住人物了。
遮挡示意

项目

场景布置

将人物放到XY平面的后面

人物放到XY平面的后面
配置Shader参数
配置参数

代码编写

Shader "Unlit/DepTest"
{Properties{[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)[MainTexture] _MainTex("Main Texture", 2D) = "white" {}_DepthBias("Depth Bias", Float) = 0.01 // 深度偏移,确保在XY平面之前渲染}SubShader{Tags { "RenderType" = "Transparent" "RenderQueue"="Transparent" "RenderPipeline" = "UniversalPipeline" }Pass{Name "UnlitPass"Tags { "LightMode" = "UniversalForward" }Cull Off  // 双面渲染Blend SrcAlpha OneMinusSrcAlpha // 混合模式,支持透明度ZTest LEqual // 深度测试,确保当前像素深度小于等于之前的像素才渲染// ZTest Always  // 深度测试设置为Always,确保总是渲染ZWrite Off  // 关闭深度写入,防止影响其他物体的深度排序// ZWrite OnColorMask RGBA // 允许写入颜色缓冲区的所有通道 (红、绿、蓝、透明)HLSLPROGRAM#pragma vertex vert // 定义顶点着色器方法名称#pragma fragment frag // 定义片元着色器方法名称#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"struct Attributes{float4 positionOS   : POSITION; // 顶点位置,模型空间坐标float2 uv           : TEXCOORD0; // 顶点纹理坐标};struct Varyings{float4 positionHCS  : SV_POSITION; // 输出到片元着色器的顶点位置,裁剪空间坐标float2 uv           : TEXCOORD0; // 传递给片元着色器的纹理坐标float depth         : TEXCOORD1; // 存储深度值,供片元着色器使用};TEXTURE2D(_MainTex);SAMPLER(sampler_MainTex);CBUFFER_START(UnityPerMaterial)half4 _BaseColor;float4 _MainTex_ST;float _DepthBias; // 深度偏移量CBUFFER_ENDVaryings vert(Attributes IN){Varyings OUT;// 获取对象在世界空间中的位置float4 worldPosition = mul(GetObjectToWorldMatrix(), IN.positionOS);// 将世界空间坐标转换为裁剪空间坐标OUT.positionHCS = TransformWorldToHClip(worldPosition);// 传递纹理坐标OUT.uv = TRANSFORM_TEX(IN.uv, _MainTex);// 计算并存储深度值OUT.depth = OUT.positionHCS.z / OUT.positionHCS.w;return OUT;}struct FragmentOutput{half4 color : SV_Target; // 最终颜色输出float depth : SV_Depth; // 深度输出};FragmentOutput frag(Varyings IN){FragmentOutput OUT;OUT.color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv) * _BaseColor;OUT.depth = IN.depth - _DepthBias; // 深度偏移return OUT;}ENDHLSL}}FallBack "Unlit/Texture"
}

这篇关于Unity URP Shader 修改深度让人物不再被地面遮挡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102648

相关文章

负债不再是障碍?银行信贷“白名单“揭秘

谈及银行信贷产品,常闻有言称存在无需考量负债与查询记录之奇品,此等说法十有八九为中介诱人上钩之辞。轻信之下,恐将步入连环陷阱。除非个人资质出类拔萃,如就职于国央企或事业单位,工龄逾年,五险一金完备,还款能力卓越,或能偶遇线下产品对查询记录稍显宽容,然亦非全然无视。宣称全然不顾者,纯属无稽之谈。 银行非慈善机构,不轻易于困境中援手,更偏爱锦上添花之举。若无坚实资质,即便求助于银行亦难获青睐。反

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

如何在运行时修改serialVersionUID

优质博文:IT-BLOG-CN 问题 我正在使用第三方库连接到外部系统,一切运行正常,但突然出现序列化错误 java.io.InvalidClassException: com.essbase.api.base.EssException; local class incompatible: stream classdesc serialVersionUID = 90314637791991

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

深度优先(DFS)和广度优先(BFS)——算法

深度优先 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端