Unity URP 获取深度图
抓手
可能大家知道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 获取深度图相关推荐
- unity urp 获取屏幕深度法向颜色纹理以及从深度纹理重构世界空间坐标
之前写过如何从屏幕空间获取uv,但是讲的不完善,https://blog.csdn.net/qq_30100043/article/details/125883016 而且还没有说如何使用深度重新构建 ...
- Unity Shader - 在 URP 获取 Ambient(环境光) 颜色
之前在 Unity Built-in 管线中,我们在自定义 shader 中,可以使用一下代码来获取 Ambient 环境光的颜色: fixed3 ambient = UNITY_LIGHTMODEL ...
- [Unity/URP学习]风格化水体渲染(一)
风格化水体的实现内容 文章目录 风格化水体的实现内容 风格化水体实现过程 1.水体颜色 1.1风格化水体颜色渐变 1.2水体深浅区域 1.2.1开启深度纹理 1.2.2深度纹理采样 1.3水体透明度 ...
- Unity URP 曲面细分
Unity URP 曲面细分 我终于变得不像我 文章目录 Unity URP 曲面细分 1 曲面细分与镶嵌 1.1 外壳着色器 Hull Shader 1.2 镶嵌器阶段 Tessellator 1. ...
- 不能直接获取?聊聊如何在Shader Graph中获取深度图
0x00 前言 在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代表性的几个问题,总结在这里和大家进行分享.主要涵盖了** StreamingAssets.Profil ...
- Kinect获取深度图和深度数据
做关于深度信息处理的,正好实验室配备了kinect2代,就想着先用kinect获取深度信息来处理,之后换其他设备只要有深度信息就直接往后推进就行,不过网上教程虽然多,但是第一次总会栽进坑中,记录一波, ...
- 【Unity URP】Rendering Debugger和可视化MipMap方案
写在前面 最近开始学习Unity性能优化,是结合了<Unity游戏优化>这本书和教程<Unity性能优化>第叁节--静态资源优化(3)--纹理的基础概念一起学习.在学习纹理优化 ...
- pythonrgbd图片像素对齐_利用pyrealsense获取深度图,并进行像素对齐
系统:Ubuntu16.04 python版本:python2.7 内核版本:4.13.0 realsense SDK:librealsense1.12.1 python wrapper:pyreal ...
- system volume information是什么文件_如何扩展Unity URP的后处理Volume组件
Unity在更新到Unity2019.4之后,大家或许已经发现,在使用URP(通用渲染管线)的情况下,Unity原来的Post Processing插件好像不起效了.原来Unity在Unity2019 ...
最新文章
- 培养组学对已分离人类细菌和古菌物种库的贡献
- APUS 朱辉:移动应用出海的大数据建设挑战
- Java学完可以应用在什么领域?这8大领域你要知道
- 缓存系统中的三座大山
- linux中如何运行html文件路径问题,Linux中如何查询运行文件的全路径的方法
- Java中introduce方法_Java基础—继承
- Resources$NotFoundException
- mysql engine 外键_Mysql 外键设置
- 动态组合sql语句详解
- The essentiality for Close-Out The Project
- VBA word 文件类型html,Word VBA SaveAs错误:不兼容的文件类型和文件扩展名
- 支付宝当面付(统一收单线下交易预创建,二维码扫码支付)
- os.path -- 常用路径操作
- 从网页浏览器跳转到微信打开公众号关注界面的解决方案
- 硕士毕业论文讨论部分怎么写啊?
- [Matlab]篇----回归分析Matlab命令(regress篇)
- 数据库、MySQL基本知识
- 高博RGBD SLAM
- 平面几何----用梅涅劳斯定理证明笛沙格定理
- shell编程实例练习
热门文章
- java map 自动排序_java Map排序问题
- html 画廊代码,HTML5实践-使用css装饰图片画廊的代码分享(二)
- 三星s9刷android原生6,三星Galaxy S9 ROM V6.0 更新所有GOODLOCK组件 自带ROOT权限 稳定流畅省电...
- 新年就要正当红,OPPO R9s新年特别版成众明星新宠
- RocketMQ 常见面试问题
- 可爱极了,用 CSS 实现一个超可爱的猫咪!
- Java (POI) 解析不同版本的word(doc、docx)
- Android Studio卡在loading devices
- 【MGT】代码解读之model-MGT
- html小Demo: js调用java后端提供的接口