Есть ли способ гарантировать, что объект всегда отображается поверх другого без наложений?

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

Изображение 1

Большинство предполагает, что я просто стягиваю штаны с тела в программном обеспечении для моделирования, и это хорошо, пока не будет совмещено с другими предметами одежды.

Изображение 2

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

Было бы лучше попытаться применить какую-то систему наслоения.

Может ли кто-нибудь посоветовать мне, как я могу достичь такой системы или как я могу достичь результатов, к которым я стремлюсь?

Я уже пытался сделать это с помощью шейдеров, но мне не повезло в достижении результата, который я пытаюсь получить (но, по общему признанию, я не эксперт по Shaderlab/CG)

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

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

1 ответ

Если вы действительно хотите использовать слои, вы можете использовать слои рендеринга Unity, которые действительно созданы для этого.

  1. Перейти к слоям -> Редактировать слои

  2. Добавьте нужные вам слои (порядок не имеет значения)

  3. Назначьте слои для объектов, которые вы хотите визуализировать с помощью кератиновой камеры.

    В качестве примера я добавил trousers cube со слоем trousers, pillover cube со слоем pullover и OnTop cube со слоем OnTop

  4. Создайте новый пустой GameObject и назовите его, например, CameraParent, Это будет содержать все ваши камеры, и вы должны переместить эту камеру вместо камеры, которую вы продвинули до сих пор.

    В случае, если это приложение VR/AR, вам может понадобиться Camera компонент для этого родительского объекта, сделать его основной камерой, но не делать ничего

  5. Создайте, например, 4 дочерних объекта и дайте им Camera составная часть. Также убедитесь, что только одна камера помечена как MainCamera и только один имеет AudioListener в вашей сцене. Я использовал 4 камеры в качестве примера, чтобы иметь TrousersCamera PulloverCamera OnTopCamera и BackgroundCamera,

  6. Теперь настройка для рендеринга

    • BackgroundCamera
      Здесь вы делаете что-то еще, как вы делали раньше

      • ClearFlags например SkyBox
      • Culling Mask: выберите все слои, кроме trousers, pullover а также OnTop
      • Depth: -1
    • TrousersCamera
      Для рендеринга брюк (поверх всего остального)

      • ClearFlags: Только глубина
      • Culling Mask: выберите только trousers
      • Depth: 0 (вы видите большее значение отображается поверх более низкого значения)
    • PulloverCamera
      Для рендеринга пуловера поверх брюк

      • ClearFlags: Только глубина
      • Culling Mask: выберите только pullover
      • Depth: 1
    • OnTopCamera
      Для рендеринга чего-то еще поверх всего

      • ClearFlags: Только глубина
      • Culling Mask: выберите только OnTop
      • Depth: 2

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

Другие вопросы по тегам