抓手

可能大家知道build-in管线的深度图如何获取了,但是URP管线下因为api不同了,所以需要移植一下。

下面给出bulid-in和urp管线的获取深度图的对比,

然后提供两个实例来说明获取深度图后怎么使用,

最后提供源码demo下载。

两种管线获取深度图的对比

build-in获取深度图的值的方法:

1、先在代码中调用

GetComponent<Camera>().depthTextureMode = DepthTextureMode.Depth;

启用camera获取深度图。

2、接着,在shader里声明一下深度图:

sampler2D  _CameraDepthTexture;

紧接着,vert方法里,获取屏幕坐标:

o.scrPos = ComputeScreenPos(o.vertex);

3、再接着在frag方法里

float depth = UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.scrPos)));
float depthValue = Linear01Depth(depth);

即可获得深度图的值。

urp管线获取深度图的方法:

1、先在assert pipeline或Camera里启用Depth Texture。

与build-in 不同的地方:无需再在代码里设置camera的depthTextureMode 啦!

2、接着在shader中,

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

声明深度图,这里和build-in的不一样。

TEXTURE2D_X_FLOAT(_CameraDepthTexture);
SAMPLER(sampler_CameraDepthTexture);

获取屏幕坐标,这个和build-in管线的一致。

 o.scrPos = ComputeScreenPos(vertexInput.positionCS);

采样深度图,这里的api和build-in的不同。

float2 screenPos= v.scrPos .xy / v.scrPos .w;
float depth = SAMPLE_TEXTURE2D_X(_CameraDepthTexture, sampler_CameraDepthTexture, screenPos).r;
float depthValue = Linear01Depth(depth, _ZBufferParams);

注意:

1、build-in管线和urp管线中,哪些物体会写入深度图:

build-in管线是shader中,必须有ShadowCaster这个pass,而且该物体用的必须是renderQueue小于2500的材质球。

urp管线是只需renderQueue小于2500的材质球的物体都会写入深度图,shader无需添加ShadowCaster这个pass。

2、urp管线中,不透明材质球渲染完后才会写入深度图,所以renderQueue小于2500的材质球无法使用深度图。

实例

1、使用深度的值,可以打印景深图。

例如,创建一个和摄像机垂直的plane或者quad,充满整个屏幕。将深度图的Linear01Depth值作为颜色输出出来。

return float4(depthValue,depthValue,depthValue,1);

效果如下:

2、扫光效果

float4 screenColor106 = tex2D(_CameraOpaqueTexture, screenPos.xy);
float curVal = frac(_Time.y*_Speed);
float showCol = saturate(abs(curVal - depthValue) / _DepthWidth/2);
float3 finalColor = lerp(_Color.rgb, screenColor106.rgb, showCol);
return float4(finalColor, 1);

源码demo下载

链接:https://pan.baidu.com/s/1iQw5vVy2DcB3Xr4yWpoYhg 
提取码:1553

参考

https://www.jianshu.com/p/80a932d1f11e?utm_campaign=haruki

https://zhuanlan.zhihu.com/p/147168957

Unity URP 获取深度图相关推荐

  1. unity urp 获取屏幕深度法向颜色纹理以及从深度纹理重构世界空间坐标

    之前写过如何从屏幕空间获取uv,但是讲的不完善,https://blog.csdn.net/qq_30100043/article/details/125883016 而且还没有说如何使用深度重新构建 ...

  2. Unity Shader - 在 URP 获取 Ambient(环境光) 颜色

    之前在 Unity Built-in 管线中,我们在自定义 shader 中,可以使用一下代码来获取 Ambient 环境光的颜色: fixed3 ambient = UNITY_LIGHTMODEL ...

  3. [Unity/URP学习]风格化水体渲染(一)

    风格化水体的实现内容 文章目录 风格化水体的实现内容 风格化水体实现过程 1.水体颜色 1.1风格化水体颜色渐变 1.2水体深浅区域 1.2.1开启深度纹理 1.2.2深度纹理采样 1.3水体透明度 ...

  4. Unity URP 曲面细分

    Unity URP 曲面细分 我终于变得不像我 文章目录 Unity URP 曲面细分 1 曲面细分与镶嵌 1.1 外壳着色器 Hull Shader 1.2 镶嵌器阶段 Tessellator 1. ...

  5. 不能直接获取?聊聊如何在Shader Graph中获取深度图

    0x00 前言 在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享.主要涵盖了** StreamingAssets.Profil ...

  6. Kinect获取深度图和深度数据

    做关于深度信息处理的,正好实验室配备了kinect2代,就想着先用kinect获取深度信息来处理,之后换其他设备只要有深度信息就直接往后推进就行,不过网上教程虽然多,但是第一次总会栽进坑中,记录一波, ...

  7. 【Unity URP】Rendering Debugger和可视化MipMap方案

    写在前面 最近开始学习Unity性能优化,是结合了<Unity游戏优化>这本书和教程<Unity性能优化>第叁节--静态资源优化(3)--纹理的基础概念一起学习.在学习纹理优化 ...

  8. pythonrgbd图片像素对齐_利用pyrealsense获取深度图,并进行像素对齐

    系统:Ubuntu16.04 python版本:python2.7 内核版本:4.13.0 realsense SDK:librealsense1.12.1 python wrapper:pyreal ...

  9. system volume information是什么文件_如何扩展Unity URP的后处理Volume组件

    Unity在更新到Unity2019.4之后,大家或许已经发现,在使用URP(通用渲染管线)的情况下,Unity原来的Post Processing插件好像不起效了.原来Unity在Unity2019 ...

最新文章

  1. 培养组学对已分离人类细菌和古菌物种库的贡献
  2. APUS 朱辉:移动应用出海的大数据建设挑战
  3. Java学完可以应用在什么领域?这8大领域你要知道
  4. 缓存系统中的三座大山
  5. linux中如何运行html文件路径问题,Linux中如何查询运行文件的全路径的方法
  6. Java中introduce方法_Java基础—继承
  7. Resources$NotFoundException
  8. mysql engine 外键_Mysql 外键设置
  9. 动态组合sql语句详解
  10. The essentiality for Close-Out The Project
  11. VBA word 文件类型html,Word VBA SaveAs错误:不兼容的文件类型和文件扩展名
  12. 支付宝当面付(统一收单线下交易预创建,二维码扫码支付)
  13. os.path -- 常用路径操作
  14. 从网页浏览器跳转到微信打开公众号关注界面的解决方案
  15. 硕士毕业论文讨论部分怎么写啊?
  16. [Matlab]篇----回归分析Matlab命令(regress篇)
  17. 数据库、MySQL基本知识
  18. 高博RGBD SLAM
  19. 平面几何----用梅涅劳斯定理证明笛沙格定理
  20. shell编程实例练习

热门文章

  1. java map 自动排序_java Map排序问题
  2. html 画廊代码,HTML5实践-使用css装饰图片画廊的代码分享(二)
  3. 三星s9刷android原生6,三星Galaxy S9 ROM V6.0 更新所有GOODLOCK组件 自带ROOT权限 稳定流畅省电...
  4. 新年就要正当红,OPPO R9s新年特别版成众明星新宠
  5. RocketMQ 常见面试问题
  6. 可爱极了,用 CSS 实现一个超可爱的猫咪!
  7. Java (POI) 解析不同版本的word(doc、docx)
  8. Android Studio卡在loading devices
  9. 【MGT】代码解读之model-MGT
  10. html小Demo: js调用java后端提供的接口