在URP中,深度图的渲染有三种方式:CopyDepth Pass、DepthPrepass和DepthNormalsPrepass。 CopyDepth Pass CopyDepth Pass在渲染完不透明物体和天空盒后进行,将深度渲染到_CameraDepthTexture中。 CopyDepthPass 打开CopyDepth Pass的方法是勾选RP Asset的Depth Texture。 RP Asset DepthTexture DepthPrepass DepthPrepass...
然后在我们片段着色器里使用屏幕坐标采样_CameraDepthTexture,然后转到线性深度 计算与我们当前水平面的深度差距,作为水的深度属性 最后将深度映射到0-1区间内,用于后续颜色映射使用 float depth = SAMPLE_TEXTURE2D(_CameraDepthTexture,sampler_CameraDepthTexture, i.screenPos.xy / i.screenPos.w); float depthValue...
我们可以使用FX copy后的Pass来完成此操作,但是此步骤特定于相机渲染器,因此我们将为其创建专用的CameraRenderer着色器。它的开始与PostFX着色器相同,但只有一个Copy Pass,并且包括自己的HLSL文件。 新的CameraRendererPasses HLSL文件具有与PostFXStackPasses相同的Varyings结构和DefaultPassVertex函数。它还具有_SourceTex...
在C#中设置Camera.main.depthTextureMode = DepthTextureMode.Depth; 在Shader中声明_CameraDepthTexture 原理:Unity在背后利用Shader Replacement将RenderType为Opaque、渲染队列小于等于2500并且有ShadowCaster Pass的物体的深度值渲染到深度图中。所以drawcall翻倍 深度图获取优化 使用接口m_Camera.SetTargetBuffers设置depthbuf...
这两个对应的是深度贴图和颜色贴图。在urp里面必须开启才行。 引擎内置的纹理获取文件在 里面的代码也很简单 DeclareDepthTexture #ifndef UNITY_DECLARE_DEPTH_TEXTURE_INCLUDED #define UNITY_DECLARE_DEPTH_TEXTURE_INCLUDED #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" ...
(当然还有二班的情况,先不展开)是实体渲染完,会有一个CopyDepth的动作(延迟渲染在G-Buffer中自然包含深度信息),这里就是把ZBuffer的数据Copy到一张叫做_CameraDepthTexture的渲染纹理上,供Shader访问,所以这之后,在Shader中就可以通过_CameraDepthTexture访问深度图了,所以我们可以把它的信息提取出来,显示在屏幕上,...
在URP设置中,开启深度图 申明 纹理 和 采样器 TEXTURE2D(_CameraDepthTexture);SAMPLER(sampler_CameraDepthTexture); 在片元着色器,得到观察空间下的深度图Z值 float4 depthVS = 1; float2 screenUV = i.positionCS.xy / _ScreenParams.xy; half depthTex = SAMPLE_TEXTURE2D(_CameraDepthTexture,sampler_Came...
Unity在URP(SRP)中主要是在RenderPipeline里面的DepthTexture复选框开启,也可以在摄像机里覆盖RenderPipeline的设置。开启后可在shader中使用_CameraDepthTexture获得。 sampler2D _CameraDepthTexture; float depth = tex2D(_CameraDepthTexture, i.uv).r;
float2 sobel =0;//获得深度floatoriginDepth = tex2D(_CameraDepthTexture, i.uv);//转化为线性0-1深度,这样0.5就表示处于相机到farPlane一半的位置了originDepth= Linear01Depth(originDepth);//找到该像素离相机的真实距离,_ProjectionParams.z表示_Camera_FarPlane的距离。https://docs.unity.cn/Packages/com...
TEXTURE2D_X_FLOAT(_CameraDepthTexture); SAMPLER(sampler_CameraDepthTexture); TEXTURE2D(_CameraOpaqueTexture); SAMPLER(sampler_CameraOpaqueTexture); TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex);float_Intensity; v2f vert (appdata v) { v2f o; ...