[程式] 如何读取Rendertexture的深度资讯

楼主: Ninja5566 (苦味)   2017-10-14 00:36:21
最近因为这东西卡好几天了, 希望有经验的前辈能够帮忙看一下
想请问有没有办法能够在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
希望我的解释够清楚 感谢回答
作者: cjcat2266 (CJ Cat)   2017-10-14 01:49:00
官方doc说可以用_LastCameraDepthTexture 抓上一个camera输出的depth buffer,不知道是不是你想要的这页 http://bit.ly/2hF7GGN
楼主: Ninja5566 (苦味)   2017-10-14 04:24:00
这我刚刚也试过了, 似乎是不行看来暴力解是直接再用个camera抓depth..很蠢但是至少有用...
作者: adarkair (路人)   2017-10-14 09:11:00
试了一下,_LastCameraDepthTexture确实可以抓到Depth原po有确定Camera.depthTextureMode设为Depth吗?
楼主: Ninja5566 (苦味)   2017-10-14 20:42:00
我发现我不能用这方法的可能原因是因为我有改过shader, 有时候会丢掉一些pixel, 晚点再试试看好了

Links booklink

Contact Us: admin [ a t ] ucptt.com