Перевёрнутая картинка постэффектов.

Шейдеры и все-все-все.

Перевёрнутая картинка постэффектов.

Сообщение kripto289 21 июл 2016, 23:05

Юзаю render target. Есть типичная беда, которую я давно не могу исправить.
Если добавить постэффект = перевернутая картинка.
Если добавить АА = обычная
В случае АА + постэффект = обычная.

Знаю о разнице openGL и directx и перевёрнутой картинки.
Везде советуют юзать это
#if SHADER_API_D3D9
if (_MainTex_TexelSize.y < 0)
v.texcoord.y = 1.0 - v.texcoord.y;
#endif
Что на самом странно. directx 11 и 12 пролетает.
Во вторых, я юзаю

sampler2D _GrabTextureMobile;
float4 _GrabTextureMobile_TexelSize;

Но в texelSize никогда не бывает негативного значения.

Ещё в шейдерах встречал такую конструкцию

#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
Тоже нифига не работает. Только корректно определяет версию directX/openGL, но ни когда висит постэффект.

Что делать?

ps Проблема на dx9/dx 11 с любым постэффектом без АА и с любым рендер модом. На мобилках с постэффектом и без - всё корректно.
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт

Re: Перевёрнутая картинка постэффектов.

Сообщение kripto289 22 июл 2016, 00:41

kripto289 писал(а):Юзаю render target. Есть типичная беда, которую я давно не могу исправить.
Если добавить постэффект = перевернутая картинка.
Если добавить АА = обычная
В случае АА + постэффект = обычная.

Знаю о разнице openGL и directx и перевёрнутой картинки.
Везде советуют юзать это
#if SHADER_API_D3D9
if (_MainTex_TexelSize.y < 0)
v.texcoord.y = 1.0 - v.texcoord.y;
#endif
Что на самом странно. directx 11 и 12 пролетает.
Во вторых, я юзаю

sampler2D _GrabTextureMobile;
float4 _GrabTextureMobile_TexelSize;

Но в texelSize никогда не бывает негативного значения.

Ещё в шейдерах встречал такую конструкцию

#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
Тоже нифига не работает. Только корректно определяет версию directX/openGL, но ни когда висит постэффект.

Что делать?

ps Проблема на dx9/dx 11 с любым постэффектом без АА и с любым рендер модом. На мобилках с постэффектом и без - всё корректно.


Нашёл ответ.

uv.y *= _ProjectionParams.x;
When rendering in texture coordinate (UV) space for special effects or tools, you might need to adjust your shaders so that the rendering is consistent between D3D-like and OpenGL-like systems, and between rendering into the screen vs. rendering into a texture. The built-in variable _ProjectionParams.x contains a +1 or –1 value which indicates whether projection has been flipped upside down or not. You can check this value in your shaders if you need to do different things based on this.
Аватара пользователя
kripto289
UNIверсал
 
Сообщения: 476
Зарегистрирован: 30 сен 2013, 03:30
Откуда: Екатеринбург
  • Сайт


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: Jarico и гости: 4