Невозможно прочитать и записать текстуру рендеринга назначения в 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?