Не корректная работа шейдера на android устройствах

Всем привет, возникла проблема с билдом на андроид.

Суть механики: есть custom render texture(см. картинка 1) которую я изменяю в зависимости от положения игрока на меше с помощью шейдера (см. картинка 2) в который передаю позицию игрока из скрипта(см. картинка 3). Затем эту custom render texture я использую в качестве карты высот для вертексного шейдера материала земли(см. картинка 4,5), грубо говоря я имитирую раскопку земли в зависимости от позиции игрока.

Теперь суть проблемы. В эдиторе все работает нормально текстура высот меняется, вертексы прогибаются. Но вот при билде на андроид происходит какая то магия. На некоторых устройства НЕ изменяется текстура высот(custom render texture), то есть значения позиции, где надо отрисовать цвет в шейдер передаются, но как будто просто не выполняется frag функция. Но самое странное это то, что независимо ни от чего эта проблема может сама по себе исправится после перезахода в игру или при новом билде(при этом в проекте я ничего не меняю), на некоторых устройствах эта проблема не исправляется, а на других вообще земля становится черной и плоской, то есть уже шейдер земли отказывается работать.

Что я пробовал делать:

  1. Я в качестве теста писал вместо return min(...) -> return float4(1,1,1,1) * cos(Time.x), то есть цвет параболически должен меняться от 0 до 1 тем самым делая волну на песке вне зависимости от того что мы передали в шейдер, и дополнительно на экран вывел отдельно текстуру. По итогу при первом заходе в игру песок как и должен менял высоту, но после перезахода отказывался менять текстуру, то есть просто не отрабатывала frag функция.
  2. Было предположение, что custom render texture не обновляется, поэтому я сменил тип апдейта с real time на onDemand и вызывал в fixed update вручную, но результата это не дало.
  3. Изнчально билд был на версии юнити 2021.1.25f1, потом я поставил 2022.1.13f1 и сделал билд на нем. На моем телефоне (Xiaomi MI 10 Lite) проблема больше не появлялась (но до этого бывало такое, что она сама фиксилась, но потом опять вылезала, так что может сейчас такой же случай), но на других телефонах: Redmi note 7 песок так и остался либо черным,либо нормальным, но текстура высот не меняется, а на Honor 10i и Redmi 9 как все работало изначально так и работает.
  4. Есть предположение, что возможно проблема в тесселяции, так как она требует OpenGL ES 3.1+, но на телефонах, где не работает песок стоит OpenGL ES 3.2, так что видимо проблема не в этом. Смотрел логи на Xiaomi MI 10 Lite, когда custom render texture ещё не менялась и в них было абсолютно пусто

Дополнительно прикладываю настройки рендера в билде(см. картинка 6).

картинка 1

картинка 2

картинка 3

картинка 4

картинка 5

картинка 6


Ответы (0 шт):