Unity中URP下的深度图
2024-01-09 16:30:57
前言
在之前的文章中,我们实现了URP下的深度图使用。
在这篇文章中,我们来看一下BRP下深度图怎么单独使用。
一、在Shader中使用
1、在使用深度图前申明
sampler2D _CameraDepthTexture;
2、在片元着色器中
float2 uv = i.positionCS/ _ScreenParams.xy;
float4 cameraDepthTex = tex2D(_CameraDepthTexture,uv);
float depthTex = LinearEyeDepth(cameraDepthTex);
return frac(depthTex);
二、在C#脚本中开启摄像机深度图
Camera.main.depthTextureMode = DepthTextureMode.Depth;
三、最终效果
Shader "MyShader/URP/P4_1"
{
Properties
{
_Color("Color",Color) = (0,0,0,0)
_MainTex("MainTex",2D) = "white"{}
}
SubShader
{
Tags
{
//渲染类型
"RenderType"="Transparent"
//渲染队列
"Queue"="Transparent"
}
//Blend One One
ZWrite Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// Pragmas
#pragma target 2.0
// Includes
#include "UnityCG.cginc"
half4 _Color;
sampler2D _MainTex;float4 _MainTex_ST;
sampler2D _CameraDepthTexture;
struct appdata
{
float3 positionOS : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 positionCS : SV_POSITION;
float2 uv : TEXCOORD0;
float4 screenPos : TEXCOORD1;
};
v2f vert(appdata v)
{
v2f o;
o.positionCS = UnityObjectToClipPos(v.positionOS);
o.uv = TRANSFORM_TEX(v.uv,_MainTex);
o.screenPos = ComputeScreenPos(o.positionCS);
return o;
}
//fixed4 frag(v2f i) : SV_TARGET
//片元着色器
half4 frag(v2f i) : SV_TARGET
{
half4 c;
float4 mainTex = tex2D(_MainTex,i.uv);
//c = _Color * mainTex;
//深度图
//float2 uv = i.screenPos.xy / i.screenPos.w;
float2 uv = i.positionCS/ _ScreenParams.xy;
float4 cameraDepthTex = tex2D(_CameraDepthTexture,uv);
float depthTex = LinearEyeDepth(cameraDepthTex);
return frac(depthTex);
}
ENDCG
}
}
}
文章来源:https://blog.csdn.net/qq_51603875/article/details/135481861
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!