2015-01-29 1 views
3

В моей сцене смайлики (Quad с png-изображением) помещаются в Y: 0, а точки (Квадрат с черепицей 3X3) помещаются в Y: -0.25. Шейдер, который я должен использовать для смайликов, является Прозрачным-Диффузным, поскольку я использую круглое изображение png.Прозрачный шейдер позволяет изображать объекты ниже, чтобы показать сверху

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

Скриншот: enter image description here

Если вам нужны какие-либо дополнительные разъяснения, пожалуйста, не стесняйтесь обращаться к нам.

Редактировать: Я добавил данные шейдера как смайлика, так и точки из панели инспектора. ссылка: http://postimg.org/image/cvws1os7d/

Edit 2: Я обнаружил, что этот вопрос должен быть с MainCamera и особенно с расстоянием & «поле зрения». Мне нужно использовать «Перспектива» в качестве проекционного типа и 140 как поле зрения.

Если я изменил тип проекции на ортографию, проблема полностью устранена.

Нижеприведенные скриншоты показывают, как расстояние и поле зрения контролируют появление точек над смайликом.

Скриншот 1: Y положение: 8,48 поля зрения: 30 ссылка: http://postimg.org/image/s31tttrkp/

Скриншот 2: Y положение: 9.7 поля зрения: 30 ссылка: http://postimg.org/image/f71sq0y4b/

Скриншот 3 : Y позиция: 11.41 Поле зрения: 30 link: http://postimg.org/image/3uk4az3d3/

Скриншот 4: Y позиция: 1 Поле зрения: 140 ссылка: http://postimg.org/image/bul9zwg7z/

Может ли это быть ключ?

+0

(шейдер и другие возможно связанные) коды были бы полезны – LearnCocos2D

+0

Hi LearnCocos2D, Я не смог найти код для шейдера. Но я добавил подробные сведения об этом, которые я получил при выборе опции «edit shader». –

+0

Если вы используете стандартный шейдер Unity, источник может быть загружен со своего сайта, можете ли вы опубликовать его здесь, это еще один чайник рыбы. – MickyD

ответ

2

Просто пара информации, о том, как прозрачность обычно реализуется (не только единство).

Между тем непрозрачные объекты могут быть нарисованы в любом порядке (даже если их сортировка в порядке друг от друга может в конечном итоге улучшить некоторые характеристики графического процессора, основанные на раннем z-cull).Какие пиксели видны, можно вывести с использованием значения глубины, сохраненного в z-buffer.

Вы не можете полагаться на z-буфер для прозрачности. Для рендеринга полупрозрачных объектов типичный подход состоит в том, чтобы нарисовать их после всех непрозрачных объектов и отсортировать их в обратном порядке (сначала открываются прозрачные объекты, удаленные от камеры).

Теперь встает вопрос: как вы сортируете объекты? с перспективной камерой и сетками общей формы, the solution is not obvious.

Для четырехъядерных сеток, ориентированных параллельно плоскости отображения орфографической камеры, порядок z является неявным правилом (поэтому он всегда работает для вас). Вы также можете заметить, что положение камеры влияет на порядок рисования, потому что при использовании перспективной камеры порядок рассчитывается как расстояние между позицией объекта и камерой.

Итак, что вы можете сделать с Unity3d, в вашем конкретном сценарии использования? Несколько трюков:

  • Явные установить render queue материал
  • явно установить render order внутри шейдер (аналогичен вышеперечисленным, но равно к каждому объекту с тем же шейдером)
  • подделать глубина использования Offset в шейдер (не так уж полезно в вашем случае, но стоит быть известным)

надеюсь, что это помогает


EDIT

Я не знал этого, camera transparency sorting mode кажется, настраиваемый. Таким образом, это еще одно решение, возможно, лучшее для вашего случая, если вы хотите использовать перспективную камеру.

+0

Прикрепление этого скрипта к MainCamera устраняет проблему. 'code' void Start() {camera.transparencySortMode = TransparencySortMode.Orthographic;} 'code' Спасибо. –

+0

Я не знаю, и на самом деле у меня нет времени проверять, но я бы предположил, что у вас будет больше способов справиться с этим, если у вас есть версия Pro, учитывая, что имидж-эффекты, вероятно, содержат некоторые теневые вещи. –

2

Если вы используете компонент Sprite Renderer для визуализации изображений, вам необходимо изменить порядок рендеринга с помощью параметров Sorting Layer и Order in Layer вместо изменения положения Y.

Сортировка слоев может быть добавлена ​​путем нажатия «по умолчанию» и выбора «Добавить Сортировочный слой ..». Порядок слоев изменяется путем перетаскивания их в другой порядок. С Order in Layer отображаются нижние номера. Это означает, что более высокие числа будут нарисованы поверх нижних.

enter image description here

+1

No maZZZu. Это просто квадраты с текстурами png. Я сомневаюсь, что это камера, изображающая объект позади неправильно. пожалуйста, найдите фотографии, которые я приложил сейчас. спасибо. –