Невозможно прочитать и записать текстуру рендеринга назначения в Unity 2017.4

У меня есть пост-эффект, который будет читать и записывать в одну и ту же RenderTexture в Unity 5.6, но мне нужна промежуточная текстура в 2017.4, добавляя накладные расходы. Есть ли способ преодолеть это и действовать более эффективно?

-

У меня есть эффект многопроходного рендеринга теней, который прервал переход с Unity 5.6 на 2017.4, который работал так:

  • Визуализация квадрата с изображением туманности в RT_background rendertexture
  • Визуализация объектов в RT_final_shadows rendertextures и процесс для создания теней
  • Объедините их, рисуя RT_final_shadows поверх RT_background
  • Рендеринг игры поверх этого фона

В 2017.4 фон был сделан черным.

Я наконец-то определил проблему как проблему с чтением + записью в одну и ту же структуру рендеринга. После успешного рендеринга фона и теней код компоновки завершается следующим образом:

        // Composition shader pass _0_BLEND_SHADOWS
        sampler2D _MainTex;
        sampler2D _BackgroundTex;
        sampler2D _FinalShadowTex;
        float _ShadowIntensity;

        fixed4 frag (v2f i) : SV_Target{
            fixed4 output = tex2D(_MainTex, i.uv);
            fixed4 secondary = tex2D(_FinalShadowTex, i.uv);
            output *= 1-(secondary.a*_ShadowIntensity);
            return output;
        }

  // Main code
  Graphics.Blit(RT_final_shadows, RT_background, compositionMaterial, (int)COMPOSITION_PASS._0_BLEND_SHADOWS);

Фон в этом случае рисуется черным в 2017 году, будь то образец _MainTex (фон передан как источник) или _BackgroundTex.

Тем не менее, если я вывести на другой RT, а затем скопировать это в фоновом режиме, это работает...

        // Composition shader pass _0_BLEND_SHADOWS
        sampler2D _BackgroundTex;
        sampler2D _FinalShadowTex;
        float _ShadowIntensity;

        fixed4 frag (v2f i) : SV_Target{
            fixed4 output = tex2D(_BackgroundTex, i.uv);
            fixed4 secondary = tex2D(_FinalShadowTex, i.uv);
            output *= 1-(secondary.a*_ShadowIntensity);
            return output;
        }

  // Main code
  Graphics.Blit(RT_final_shadows, RT_shadowII, compositionMaterial, (int)COMPOSITION_PASS._0_BLEND_SHADOWS);
  Graphics.Blit(RT_shadowII, RT_background);

Так что, где в Unity 5.6 я мог передать свою текстуру рендеринга в Graphics.Blit и рисовать на ней напрямую, в 2017 году мне нужна промежуточная текстура. Это, очевидно, добавляет немного накладных расходов, что является последним, что нужно в мобильной игре.

Кто-нибудь знает какой-нибудь обходной путь для этого, чтобы иметь возможность читать и записывать одну и ту же текстуру рендеринга в Graphics.Blit?

0 ответов

Другие вопросы по тегам