如何在Unity中的MRT着色器中制作自定义的类似GrabPass的sampler2D?

我只知道编写着色器的基础知识,所以我不知道如何才能做出与Unity的Grabpass类似的function,因为当前只能写入的RenderTexture可以更改为只读,并在着色器中用于sampler2D。

我为我的相机设置了两个渲染目标,在一个着色器中写入两个目标,但在另一个着色器中,我只写入一个,但需要从另一个着色器读取。 我尝试设置我需要从材质属性读取的rendertexture,但即使第二个着色器当前没有触及rendertexture,我相信rendertexture仍然是只写,因为从它读取什么都不返回。

我最初使用GrabPass,但它不适用于不同的相机视口reflection,以及虽然它工作,但对我来说没有多大意义,因为我不仅写作rendertextures而不是“屏幕”(GrabPass是应该让一个屏幕区域的采样器即将被绘制,即使我没有直接写在屏幕上),但我使用了2个rendertextures作为目标,但它只能从一个,第一个我必须改变rendertextures的顺序,以便GrabPass采样器从正确的第一个rendertexture抓取。 此外,如果可能的话,我想避免GrabPass的假设成本,因为我不认为我需要做一个新的纹理,只是暂时使一个rendertextures只读,并使用它在sampler2d,但我知道几乎没有关于这一点。

1)我使用rendertextures

new RenderTexture(Screen.width,Screen.height, 24); 

2)

 public Material lighting; 

 Camera.SetTargetBuffers ( new RenderBuffer[2] { shadedTexture.colorBuffer, worldTexture.colorBuffer, }, shadedTexture.depthBuffer ); lighting.SetTexture("_World", worldTexture);" 

3)

 _World ("World", 2D) = "white" {} sampler2D _World; tex2D(_World, screenUV); 

在其他着色器中,这是碎片返回结构

 struct PixelOutput { fixed4 shaded : SV_Target0; fixed4 world : SV_Target1; };