作者Ninja5566 (苦味)
看板GameDesign
标题[程式] 如何读取Rendertexture的深度资讯
时间Sat Oct 14 00:36:21 2017
最近因为这东西卡好几天了, 希望有经验的前辈能够帮忙看一下
想请问有没有办法能够在shader中使用render texture的depth buffer
也就是说, 我有一个camera 是render到render texture
有一个效果我需要读取render texture中的depth 资讯
但是问题来了, 在render texture中我唯一找得到跟depth有关系的东西是
rendertexture.depthBuffer, 但是这东西没有办法丢进material 中
的setTexture 参数, 我也查不到有甚麽办法能够把render buffer转成
texture的方式
虽然的确是有办法可以绕过这个限制, 例如说可以建立两个render texture
一个是color, 一个是depth, 然後再用
_sceneCamera.SetTargetBuffers(_renderTexture.colorBuffer,
_depthTexture.depthBuffer);
这方法来抓depth value
但是这方法不适用於当我想使用post processing的时候, 当我想要用PP时
我唯一能让该camera成功有PP的方式就是 _sceneCamera.targetTexture =
_renderTexture;
但这方法又会没办法让我读取depth texture
後来我又尝试把 depbuffer转成textture2D
_renderTexture = new RenderTexture(Screen.width, Screen.height, 24,
RenderTextureFormat.Default);
_renderTexture.Create();
_textDepth = Texture2D.CreateExternalTexture(_renderTexture.width,
_renderTexture.height, TextureFormat.RGB24, false, false,
_renderTexture.GetNativeDepthBufferPtr());
但是unity直接crash
希望我的解释够清楚 感谢回答
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 24.210.62.187
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1507912584.A.430.html
※ 编辑: Ninja5566 (24.210.62.187), 10/14/2017 01:11:54
1F:推 cjcat2266: 官方doc说可以用_LastCameraDepthTexture 抓上一个 10/14 01:49
2F:→ cjcat2266: camera输出的depth buffer,不知道是不是你想要的 10/14 01:49
4F:→ Ninja5566: 这我刚刚也试过了, 似乎是不行 10/14 04:24
5F:→ Ninja5566: 看来暴力解是直接再用个camera抓depth..很蠢但是至少 10/14 04:41
6F:→ Ninja5566: 有用... 10/14 04:41
7F:→ adarkair: 试了一下,_LastCameraDepthTexture确实可以抓到Depth 10/14 09:11
8F:→ adarkair: 原po有确定Camera.depthTextureMode设为Depth吗? 10/14 09:12
9F:→ Ninja5566: 我发现我不能用这方法的可能原因是因为我有改过 10/14 20:42
10F:→ Ninja5566: shader, 有时候会丢掉一些pixel, 晚点再试试看好了 10/14 20:43