В настоящее время я пытаюсь создать эффект светлячка в темном лесу. Уровень имеет очень слабое освещение, и игрок является одним из немногих источников света. Чтобы игрок лучше видел уровень, я стараюсь, чтобы светящиеся светлячки появлялись на карте случайным образом. Одним из способов является использование системы частиц. Но я не могу заставить частицы излучать свет вокруг. Есть ли способ сделать это?
22
Ответы:
Светоизлучающие частицы теперь являются встроенной функцией Unity в 5.5.
Просто включите источники света в инспекторе частиц, добавьте ссылку на готовый источник света (работают как точечные, так и точечные источники света) и измените соотношение на 1.
И вуаля, частицы, которые излучают свет:
Оказывается, это довольно оптимизированная установка, работающая со скоростью 1500+ кадров в секунду на моей установке даже при максимальном освещении в сотни.
Редактировать: После некоторого наблюдения, мне кажется, что частицы света переключаются между освещением каждого фрагмента и освещением вершины (предположительно для оптимизации?). Это может привести к небольшому количеству визуальных артефактов, если максимальное освещение установлено слишком высоко.
Edit2: как указывает DMGregory, артефакты являются побочным продуктом оптимизации прямого рендеринга. Отложенное освещение решает проблему. Добавлен лучший подарок
источник
Берегись:
Этот ответ устарел. Unity теперь поддерживает точечные световые частицы. Пожалуйста, смотрите этот ответ для более подробной информации.
Я оставлю сообщение здесь для любого любопытного, или использующего старые версии Unity, или нуждающегося в большем количестве ручного управления, чем предлагает нативный метод - просто отметьте, что нативная поддержка, вероятно, будет гораздо более эффективной и масштабируемой, чем подход, представленный ниже.
Я не уверен, почему так много ответов утверждают, что это сложно или невозможно. Обработка нескольких десятков динамических точечных источников света довольно обычна для современного конвейера отложенного рендеринга, работающего на ПК.
Вот быстрый пример, который я приготовил:
Я использую этот сценарий для динамического появления достаточного количества света для моих максимальных частиц (убедитесь, что вы настроили параметры системы частиц так, чтобы максимальное значение было разумным - значение по умолчанию 1000 не сделает вашу видеокарту очень счастливой), а затем обновляет их, чтобы следовать активным частицы:
Редактировать: вы можете создать префаб , сначала создав игровой объект (в данном случае «Создать» -> «Свет» -> «Точечный свет»), установив в нем нужное имя / параметры / scripts / children, а затем перетащив его из иерархии в Ваш исследователь проекта. Это сохраняет объект в качестве актива, который вы можете повторно использовать в нескольких сценах и сценариях со степенью наследования. Вы можете удалить копию в вашей сцене, и актив останется в папке «Ресурсы», к которому можно будет обращаться при необходимости.
Убедитесь, что lightPrefab имеет относительно небольшой диапазон и не использует теневую трансляцию, чтобы обеспечить максимальный запас производительности для всего, что происходит в вашей сцене. Вам не нужно делать сам LightPrefab зеленым (или цветом ваших светлячков) - он будет подбирать его по цвету частиц.
Тем не менее, вы можете обнаружить, что у вас есть лучший контроль над полетом светлячков, если вы сделаете каждый из них своим собственным GameObject с квадратом с билбордом и источником света, прикрепленным с помощью специального сценария движения / бликинга, поскольку для получения убедительного блуждания требуется больше мастерства системы частиц, чем Я знаю. ;)
источник
Несколько лет назад, до того, как динамические источники света стали доступны по цене, мы просто использовали эффект частиц с двумерным билбордом с аддитивным смешиванием. Это осветлит сцену в сторону белого. Рисуя его с правильной глубиной светлячка, вы получаете почти правильную сортировку. Аддитивная альфа не нуждается в сортировке при перерисовке по сравнению с альфа смешиванием. Он не осветит ВСЕ сцены, но осветит область, окружающую светлячка. Затем вы можете взять динамический свет и выбирать одну из светлячков каждые несколько секунд, чтобы фактически осветить сцену, если вам это нужно.
Уже есть вопрос и ответ об эффектах свечения. Как добиться такого освещения в Unity для 2D-игр?
источник
К сожалению, у меня не было большого опыта работы с Unity в его нынешнем виде (я играл с ним много лет назад), поэтому я не знаю точно, с какими наборами функций вы должны работать в движке.
В любом случае, независимо от того, с каким двигателем вы работаете, динамические фары - это то, чего вы всегда должны избегать. Они очень дороги в вычислительном отношении и, как правило, добавляют сложность сцены очень экспоненциальным образом. Однако, как правило, для большинства 3D-рендеринга существует множество способов достижения аналогичных эффектов путем обмана;
Возможный способ добиться аналогичного эффекта - сопоставить предварительно созданную текстуру свечения с рельефом ниже ваших светлячков (при условии, что система координат Y = вверх / вниз) с позициями X и Z, контролирующими местоположение свечения на местности и смещение Y от местности, контролирующей альфа текстуры (ярче = ближе к местности)
Конечно, у этого метода есть несколько недостатков. Вы не будете отбрасывать тени, поскольку свет не используется, и вы не будете влиять на любую другую геометрию в мире (реквизит, листва и т. Д.)
источник
Используйте
Light
в начале огня и поиграйте с его размером в сценарии, чтобы получить эффект горения. И используйте свою систему частиц :)источник