MaterialPropertyBlock вызывает спрайты Z-файтинга - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь использовать MaterialPropertyBlock в пользовательском спрайт-шейдере, но, похоже, он вызывает Z-бой каждый раз, когда значение изменяется внутри MaterialPropertyBlock.


.Вы можете увидеть в следующем gif (gif 1) , каждый раз, когда цвет спрайта изменяется, он прыгает вперед и назад, мерцая, как Z-бой.Чтобы было ясно, да, оба спрайта находятся на одном и том же Сортировочном Слое и Порядке.Однако материал спрайта по умолчанию с той же конфигурацией не мерцает и выглядит как gif 2.

alt text

gif 1: при использовании MaterialPropertyBlock изменение значения вызывает мерцание


Я попытался использовать базовый материал с тем же нанесенным шейдером, и у него не было проблем с мерцанием.Таким образом, проблема определенно имеет отношение к MaterialPropertyBlock.

alt text

gif 2: использование основного материала работает отлично (но неэффективно)


Итак, мой вопрос: я неправильно использую MaterialPropertyBlock?Это известный артефакт?Как вы справляетесь с этим?


SpriteRenderer spriteRenderer;
MaterialPropertyBlock mpb;

void OnEnable()
{
    spriteRenderer = GetComponent<SpriteRenderer>();
    mpb = new MaterialPropertyBlock();
    spriteRenderer.GetPropertyBlock(mpb);
}

void Update()
{
    mpb = new MaterialPropertyBlock();
    mpb.SetColor("_OutlineColor", OutlineColor);
    spriteRenderer.SetPropertyBlock(mpb);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...