Как я могу показать изменения текстуры SetPixels () без необходимости увеличения моей орфографической камеры? - PullRequest
0 голосов
/ 26 декабря 2018

Это мой первый вопрос здесь!Я надеюсь, что вы будете терпеть меня.:)

Я работаю над заливкой заливки в Unity, и, хотя я уже могу заполнять фигуры на своей Texture2D, я могу видеть изменения только при увеличении с помощью своей орфографической камеры.Когда я уменьшаю масштаб, он возвращается к исходному изображению.Что также странно, так это то, что это происходит как в моем редакторе, так и в моей игровой сцене, а также когда я создаю его на Android.

Что может быть причиной этого?Что я могу сделать, чтобы предотвратить это?Я что-то упустил?

Я пытался использовать изображения разных размеров, но он все еще ведет себя одинаково.

Вот как это выглядит после заполнения формы, используя SetPixels(), когдаувеличено. Красный круг изначально белый.Обратите внимание, что редактор не показывает изменения.Размер изображения составляет 1920x1080:

Вот так оно выглядит при небольшом уменьшении.Игровая сцена теперь также не показывает изменений.Я также включил свойства текстуры на скриншоте:

Я также заметил, что это может быть даже не масштаб камеры, поскольку измененные пиксели также появляются, еслиЯ увеличиваю изображение в инспекторе, даже если не увеличиваю так сильно:

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы не предоставили никакого кода, поэтому трудно сказать, что на самом деле происходит.Только из описания это звучит как проблема с мипмапами, которые не были обновлены.Мип-карты используются для обеспечения разных разрешений одного и того же изображения, поэтому можно использовать версию соответствующего размера в зависимости от размера, на котором фактически отображается текстура.

При использовании Texture2D.SetPixels() вы всегда изменяетеодин конкретный уровень mipmap, то есть одна версия изображения определенного размера.По умолчанию это уровень 0, базовый уровень mipmap, который содержит полноразмерную версию.

Из описания это звучит как после изменения базового уровня mipmap, вы назвали Texture2D.Apply() саргумент updateMipmaps установлен в false, как показано в примере, показанном в Texture2D.SetPixels ().Это предотвращает обновление других уровней текстуры текстуры, поэтому изменения вносятся только в полноразмерную версию, а остальные - нет.Когда текстура теперь визуализируется в меньшем масштабе (т. Е. По текущему уровню масштабирования, уменьшению или уменьшению), изменение не отображается, так как соответствующий меньший mipmap никогда не обновлялся.

Документация вTexture2D.Apply() немного вводит в заблуждение:

Если updateMipmaps имеет значение true, уровни mipmap также пересчитываются, используя базовый уровень в качестве источника.Обычно вы хотите использовать true во всех случаях, кроме случаев, когда вы сами изменили уровни mip, используя SetPixels.

Это означает, что вы не хотите updateMipmaps, если вы использовали SetPixels, но на самом деле это означает только то, что вы не хотите этого, если вы изменили все отдельные уровни mipmap, используя SetPixels (как это делает пример в SetPixels).Если вы изменили только базовый уровень, то вы действительно хотите использовать updateMipmaps = true, чтобы другие уровни mipmap обновлялись автоматически с измененной базы.

0 голосов
/ 26 декабря 2018

Вы устанавливаете пиксели только для определенного значения mipmap (по умолчанию уровень 0), но вам необходимо расширить изменения до уровня mipmap, который просматривает камера в данный момент.

Вы можете сделать это, вызвав Texture2D.Apply() с updateMipMaps, установленным в true (по умолчанию) после того, как вы установите пиксели для уровня mipmap 0 (что, вероятно, уже делается).

...