【问题标题】:unity shader concatenation textureunity shader 拼接纹理
【发布时间】:2016-09-09 15:20:44
【问题描述】:

我正在尝试将纹理连接/添加到更大的纹理中,但无法保留更大纹理的结果。

我有一个着色器,它接受一些变量,例如较小纹理在较大纹理中的位置、较小纹理本身,当然还有较大纹理。

基本上,我的着色器工作正常(我认为),结果我在正确的位置看到较大的纹理中较小的纹理。但是我更大的纹理永远不会被保存,所以所有的先行通道都被忽略了。

如何保存结果以将其再次发送到着色器以将所有小纹理连接到其中?

我试试这个:Graphics.Blit(_RTConcat, _RTConcat, _concat);

RTConcat 是我更大的纹理,它是RenderTexture,我尝试在编辑器或脚本中创建它,但结果相同,_concat 是使用着色器的材质。

PS:我用的是unity 4.5.3,无法升级,是专业版。

编辑/更新:

我“成功”地做出了我想要的东西,但我不明白它为什么会起作用。

在我的主脚本中,我初始化了一个生成的 renderTexture 并将其设置为一个垫子,然后将其应用到一个平面上

_radarVision = new RenderTexture(_radarTextureWidth, _renderHeight, 24); _renderHeight, 24); _radarScreen.SetTexture("_MainTex", _radarVision);

_radarVision和_radarScreen在我的脚本中再也不会被编辑了。

Graphics.Blit 现在在一个新脚本中,附加在相机上创建仅用于运行单个脚本:

`void OnRenderImage(RenderTexture 源,RenderTexture 目标) {

Graphics.Blit(save, save, _concat);

rttmp = RenderTexture.GetTemporary(camera.targetTexture.width,  camera.targetTexture.height);

save = rttmp;

camera.targetTexture = save;
RenderTexture.ReleaseTemporary(rttmp);

}`

没有别的东西,它让我的东西正常工作,但我仍然感到困惑,因为它不应该工作......不是吗?

【问题讨论】:

    标签: unity3d textures concatenation shader


    【解决方案1】:

    我发现的最佳解决方案是:

    Graphics.Blit(save, save1, _concat);
    Graphics.Blit(save1, save, _concat);

    我不明白为什么单个 Graphics.Blit 不起作用,但双重工作“完美”,它只会让我感到困扰,因为它需要调用两次相同的着色器(使用非常大的纹理,如 16384*4092 ) 但是在我的最后一个解决方案中,我可以将最后一个着色器应用于我的纹理而不会破坏一切。

    GetTemporary 的使用在将第二个着色器应用于纹理时会导致问题 `save,我猜是有缓冲区的故事。

    我总是乐于接受有关更好方法的建议,但现在我的解决方案完全解决了我的问题,尽管它让我得了癌症

    【讨论】:

      【解决方案2】:

      使用 RenderTexture、Blit 和 Material 组合并不是最好的解决方案。这里开销太大。你必须调用 Blit 两次,因为我猜你不能一次读取和渲染到相同的渲染纹理。我认为直接和最佳的解决方案是:

      subTex = ... ;// Initialize the sub tex
      subTex.Apply();  // Upload elementTex to the Gpu
      Graphics.CopyTexture(subTex, offset, size, globalTex, offset, size); // the subTex will be copied to globalTex in both GPU, and CPU. This is a GPU->GPU and a CPU ->CPU copy so it's very quick without any additional drawcall at all.
      

      【讨论】:

        猜你喜欢
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多