2016-02-02 3 views
1

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

Как это выглядит, когда оказывается непосредственно на экран: Correct

Как это выглядит, когда оказывается в текстуру, а затем отображается на квадроцикле в сцене: Incorrect

Обратите внимание, как второе изображение имеет кучу прозрачных «линий» между спрайтами, где их не должно быть.

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

Настройки текстуры рендеринга: Ширина: Ширина экрана: Высота экрана: Screen.height Формат: RenderTextureFormat.ARGBFloat;

Unity Версия: 5.2.3f1 - IOS платформа

Примечание: Причина, я делаю это так, что я могу применить эффект изображения «Blur» в текстуру, и сделать толпу на переднем плане, по всей видимости быть не в фокусе. Любые альтернативные предложения о том, как это сделать, также приветствуются.

ответ

0

Я не совсем уверен - но это почти похоже на то, что у вас линия ореола. Вы можете дать этому прочитанный и дайте мне знать, если это то, что вы имеете дело с или нет:


Причина этого связана с тем, как был автором текстура изображения, в сочетании с фильтрацией, что большинство 3d двигатели используют, когда текстуры отображаются на разных размерах на экране.

Ваше изображение может иметь цветные области, которые являются полностью непрозрачными, цветными областями, которые являются частично прозрачными, и областями, которые полностью прозрачны. Тем не менее, области, где ваш альфа-канал полностью прозрачен (0% непрозрачность), на самом деле все еще имеют значение цвета. В PNG (или, по крайней мере, то, как Photoshop экспортирует PNG), по умолчанию используется белый цвет для полностью прозрачных пикселей. В других форматах или редакторах это может быть черным. Оба одинаково нежелательны, когда дело доходит до использования в 3d-двигателе.

Вы можете подумать: «Почему белый цвет является проблемой, если он полностью прозрачен?». Проблема возникает из-за того, что когда ваша текстура появляется на экране, она обычно либо масштабируется, либо масштабируется в зависимости от того, появляются ли пиксели в изображении текстуры больше или меньше фактического размера. При уменьшении размеров во время импорта создается серия уменьшенных версий. Эти уменьшенные версии используются, когда текстура отображается меньшими размерами или более крутыми углами по отношению к виду и предназначена для улучшения качества изображения и ускорения рендеринга. Этот процесс называется «mip-mapping» - подробнее читайте здесь о mip-mapping. Для масштабирования обычно используется простая билинейная интерполяция.

Масштабированные версии обычно создаются с использованием простой билинейной интерполяции, что означает, что прозрачные пиксели смешиваются с соседними видимыми пикселями.С mipmaps для каждого меньшего уровня проблема с невидимым смешиванием с видимыми цветами пикселей увеличивается (в результате ваши неприятные белые края становятся более заметными на дальнейших расстояниях).

Решение состоит в том, чтобы гарантировать, что эти полностью прозрачные пиксели имеют значение цвета, соответствующее их соседним видимым пикселям, так что, когда происходит интерполяция, цвет «истекает» из невидимых пикселей имеет соответствующий цвет.

Чтобы решить эту проблему (в Photoshop) Я всегда использую свободный «затвердевать» инструмент из пакета Flaming Pear Free Plugins, как это:

Скачать и установить Flaming Pear «Free Plugins» пакет (в нижней части этот список) Откройте свой PNG в фотошопе. Перейдите к пункту выбора -> Загрузить и нажмите OK. Перейти к выберите -> Сохранить выбор и нажмите OK. Это создаст новый альфа-канал. Теперь Отмените выбор всех (Ctrl-D или Cmd-D) Выберите Фильтр -> Пламенная груша -> Затвердеть B Теперь ваше изображение будет целиком сделанным из сплошного цвета без прозрачных областей, однако теперь ваша информация о прозрачности сохраняется в явном альфа-канале, который вы можете просмотреть и отредактировать, выбрав его в палитре каналов.

Теперь заново сохраните свое изображение, и вы должны найти, что ваши белые пушистики исчезли! Источник: http://answers.unity3d.com/questions/10302/messy-alpha-problem-white-around-edges.html

+0

Я рассмотрю это. Надеюсь, это просто. – ProjektSpartan

+0

Это действительно преследовало меня с другим проектом, над которым я работал. У меня были спрайты, сделанные из 3DS Max как PNG, и у них было неприятное ореоление. В итоге мне пришлось рисовать PNG как пирамидальный, а затем гало/призрак ушел. Однако это решение должно работать. – ketchupisred

0

Оказывается, что шейдер я использовал для моей сцены использовал «Смешать SrcAlpha OneMinusSrcAlpha» по какой-то причине, когда он должен был с помощью «Смешать One OneMinusSrcAlpha». Это вызывало объекты с альфа меньшей, чем 1, чтобы объекты под ними стали полупрозрачными, а также отображали прозрачный цветной фон камеры.

Смежные вопросы