2014-12-16 5 views
0

Я импортировал файл .pod, созданный из Blender, и синий фон отображается через сетки ресниц и бровь. Кто-нибудь знает, почему я сталкиваюсь с этим?Cocos3D - фон, показанный через сетки

БЕЗ ДОПОЛНИТЕЛЬНОГО МАТЕРИАЛА (нормальный внешний вид, кроме корня волос). enter image description here

С нового зеленого материала, добавленного в левое плечо, брови и ресницы начали показывать фон enter image description here

+0

Если вы посмотрите достаточно близко, бровь и ресницы все еще существуют. С технической точки зрения, это файлы .png с прозрачным фоном, поэтому отображение текстуры за текстурой за ней правильное. Но в этом случае текстура за бровью/ресниц - это кожа, а не синий фон. –

+0

Очень странно. Если вы хотите создать ZIP-проект Xcode, который показывает эту проблему, поместите его куда-нибудь, как Dropbox, а затем отправьте ссылку на файл ZIP на [email protected], я посмотрю на него. –

+0

BTW ... Вы получаете тот же эффект при запуске этого на реальном устройстве? В симуляторе часто отображаются артефакты, которые не отображаются на устройствах. –

ответ

0

Эта проблема вызвана порядком, в котором узлы визуализируется в вашей сцене.

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

Это использование буфера глубины является ключевым для всего 3D-рендеринга. Это то, как движок знает, чтобы не отображать пиксели, которые визуально закрыты другим объектом, в противном случае все, что мы когда-либо видели, было последним объектом, который нужно визуализировать. Однако при рендеринге перекрывающихся объектов, содержащих прозрачность, важно получить порядок визуализации правильно, чтобы сначала отображались более удаленные объекты, которые находятся за более прозрачными объектами.

В Cocos3D, есть несколько инструментов для вас заказать прозрачные объекты для визуализации:

  1. Первый и основной инструмент, является drawingSequencer, который управляется CC3Scene. Вы можете настроить несколько различных типов секвенсеров рисования. По умолчанию секвенсор достаточно умен, чтобы сначала отображать все непрозрачные объекты, а затем визуализировать объекты, которые содержат прозрачность, в порядке убывания расстояния от камеры (сначала отбрасывая объекты). Это лучше всего подходит для большинства сцен, и в частности, когда объекты перемещаются и могут непредсказуемо перемещаться друг против друга. К сожалению, в вашем пользовательском CC3Scene код инициализации (который вы отправили мне на вопрос), вы заменили стандартный секвенсор рисования на тот, который не выполняет последовательность прозрачных объектов на основе расстояния. Если вы удалите это изменение, все будет работать правильно.

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

  3. CC3Node также имеет zOrder свойство, которое позволяет изменить порядок рендеринга в явном виде, так что объекты с большими zOrder значений оказываются перед теми, с меньшими zOrder значений. Это полезно, если у вас есть статическая модель, чьи компоненты не могут быть добавлены в порядке отображения, или временно переопределить порядок рендеринга двух прозрачных объектов, которые могут проходить друг перед другом. Использование свойства zOrder зависит от использования drawingSequencer, который использует его (по умолчанию используется секвенсор рисования).

  4. Наконец, вы можете временно отключить проверку глубины или маскирование при визуализации конкретных узлов, установив shouldDisableDepthTest и shouldDisableDepthMask свойства YES на этих узлах.

+0

Спасибо Билл за проницательное решение. Я не совсем понимаю все ваши пункты, но я не знаком с Cocos3D и займу еще некоторое время, чтобы полностью понять ваше решение. Тем временем мне удалось решить проблему, используя ваше предложение выше. Еще раз, я очень ценю вашу помощь. –