Как сделать фонарик в юнити

Обновлено: 07.07.2024

LMHPoly на своём сайте опубликовал статью 7 Tips for Better Lightning. Все советы для Unity 5.6 и выше.

1. Используйте Linear Color Space

Перед освещением проекта важно выбрать цветовое пространство. Предпочтительный Color Space для реалистичного рендеринга - Linear. Линейное освещение не поддерживается на ряде мобильных устройств и даже на некоторых игровых консолях. По умолчанию Unity использует Gamma Color Space. Чтобы изменить цветовое пространство, перейдите в Edit > Project Settings > Player. В Other Settings вы увидите Color Space, замените на Linear. Прочитайте подробнее о Gamma и Linear Color Space здесь.

Gamma VS Linear (Без постобработки)

Gamma VS Linear (С постобработкой)

2. Используйте Global Illumination.

Для более реалистичного результата используйте GI. Это система, которая моделирует отскоки света от поверхностей объектов на другие поверхности (Indirect Light), а не ограничивается только светом, который попадает на поверхность непосредственно из источника света. Подробнее о Global Illumination.

Чтобы включить Realtime Global Illumination, перейдите в Window > Lighting > Settings, появится окно Lighting. Откройте вкладку Scene и включите Realtime GI. Вы можете увеличить разрешение, изменив параметр Indirect Resolution.

Как Baked GI, так и Precomputed Realtime GI имеют ограничение: только у статичных объектов может быть indirect освещение, поэтому свет не будет отскакивать от движущихся объектов на статичные и наоборот. Тем не менее, они всё ещё могут отражать свет через Light Probes.

3. Color Harmony

Вы должны понимать каждый цвет, чтобы создать приятное освещение и атмосферу на сцене. Подробнее о цветовых схемах можете прочитать здесь.

Различные цвета могут резко изменить настроение сцены.

4. Используйте Light Colors

Используйте очень светлые цвета, но не используйте перенасыщенные. Светлые цвета намного приятней для глаз, а также выглядят более реалистично. Посмотрите видео Understand Colors ниже, в котором Andrew Price рассказывает про использование разного света, цветовой схемы и так далее.

5. Изменяйте направление света и тени, чтобы получить различные результаты.

6. Используйте Ambient Color для изменения цвета теней.

Вы можете получить неплохой результат, изменяя цвета теней.

Вы можете сделать это, перейдя в Window > Lighting > Settings, появится окно Lighting. В этом окне откройте вкладку Scene и поставьте Environment Lighting Source на Color. Теперь вы можете изменить Ambient Color на любой другой цвет.

7. Используйте пост-обработку изображения

Используя Post-Processing, вы можете мгновенно улучшить освещение сцены в целом. Результат Unity 5.6 представлен ниже. Я использовал бесплатный Post Processing Stack из Asset Store.

Это введение в карты освещения в Unity. Для получения подробностей смотрите in-depth description of lightmapping in Unity.

Unity располагает встроенным инструментом для создания карт освещения: это Beast от Illuminate Labs. Он полностью интегрирован в Unity. Это значит, что Beast запекает карты освещения для вашей сцены, основываясь на том, как ваша сцена настроена в Unity, какие содержит меши, материалы, текстуры и источники света. Это также значит, что карты освещения теперь являются неотъемлемой частью рендеринга — после их создания вам не придётся ничего больше делать, они автоматически применятся к объектам.


Подготовка сцены к запеканию карт освещения

Выбор ____Window__ – Lightmapping__ из меню откроет окно Lightmapping:

  1. Убедитесь, что все меши, которые будут участвовать в создании карт освещения, имеют корректные UV координаты. Проще всего выбрать опцию ____Generate Lightmap UVs____ в настройках импорта меша.
  2. Во вкладке Object, отметьте любой Mesh Renderer, Skinned Mesh Renderer, или Terrain как ____static____ – это скажет Unity, что эти объекты будут неподвижны и не будут изменяться, таким образом к ним смогут применяться карты освещения.
  1. Для управления разрешением карт освещения, перейдите во вкладку ____Bake____, и отрегулируйте значение ____Resolution____ (для лучшего понимания того, как вы тратите тексели в картах освещения, посмотрите на маленькое окно ____Lightmap Display____ в Scene View, и выберите ____Show Resolution____).
  1. Press Bake
  2. В строке состояния Unity в нижнем правом углу появится полоса прогресса.
  3. Когда запекание будет завершено, вы сможете увидеть все готовые карты освещения внизу окна Lightmap Editor.

Scene View и Game View будут обновлены — теперь ваша сцена оснащена картами освещения!

Настройка запекания карт освещения

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

This is a basic scene with a couple of cubes and one point light in the centre. The light is casting hard shadows and the effect is quite dull and artificial.


Selecting the light and opening the Object pane of the Lightmapping window exposes Shadow Radius and Shadow Samples properties. Setting Shadow Radius to 1.2, Shadow Samples to 100 and re-baking produces soft shadows with wide penumbra - our image already looks much better.


В Unity Pro можно сделать ещё один шаг вперёд, активировав Global Illumination (глобальное освещение) и добавив Sky Light (свет от небесного свода). Во вкладке Bake задайте параметру Bounces значение 1, а параметру Sky Light Intensity — значение 0.5. В результате получится намного болеее мягкое освещение с эффектами смешивания — намного красивее, и это всего лишь три куба и один источник света!


Подробности о картах освещения

Для получения подробностей о различных настройках, связанных с картами освещения, смотрите in-depth description of lightmapping in Unity.

Приветствую всех друзья! В прошлой статье мы познакомились с тем, как в Unity представлены вращения и ориентация в пространстве игровых объектов. Сегодня мы обзорно поговорим о камерах и типах источников света в Unity. В будущих статьях мы еще вернемся и более детально рассмотрим каждую тему отдельно.

Свет.

Свет является неотъемлемой частью каждой сцены. В то время как модели и их текстуры определяют форму и внешний вид сцены, свет определяет цвет и настроение вашей среды. Скорее всего, вы будете работать с более чем одним источником света в каждой сцене. Чтобы заставить их работать вместе, требуется немного практики, но результаты могут быть удивительными!

Свет можно добавить к вашей сцене из контекстного меню в верхней части редактора по пути GameObject\Light . В появившемся подменю можно выбрать необходимый формат источника освещения. В Unity существует четыре источника освещения, которые мы можем расставить по сцене и пятое, которое работает на всю сцену в целом. В этой статье я вкратце расскажу, что они собой представляют. Позже я также напишу отдельную статью, которая более углубленно расскажет о каждом из них. Итак, начнем:

1. Point Light – это точечный свет который мы можем настроить по радиусу действия. Например, с помощью такого источника освещения мы можем сделать свет для лампочки или факела.

2. Spot Light – представляет из себя направленный конус света, с помощью него можно сделать свет от фонарика или прожектора.

3. Directional Light – представляет из себя направленный источник освещения и имитирует свет от солнца.

4. Area Light – представляет из себя прямоугольник, который светит впереди себя. С его помощью можно сделать, например, свет от телевизора/монитора.

5. Ambient Light – это рассеянный свет который в отличие от остальных видов освещения – присутствует во всей сцене и не исходит от какого то конкретного объекта. Он предназначен чтобы задавать яркость сцене, или же, например, создать настроение светом для нее. Для его настройки перейдите по пути в контекстном меню Window\Rendering\Lighting Settings . Секция Environment Lighting это и есть рассеянный свет. Поиграйте с её настройками, и поймете, как он воздействует на сцену.

Помимо создания готовых игровых объектов со светом, вы также можете добавить источник освещения (он же компонент Light ), к любому игровому объекту, находящемуся на сцене. Для этого нужно выбрать интересующий вас игровой объект и в контекстном меню выбрать Component\Rendering\Light после чего он добавится к компонентам игрового объекта.

Данный компонент имеет множество настроек, которые вы можете увидеть в окне инспектора.

Инди-разработчик из студии Half Human Games Перси Лежандр опубликовал на Gamasutra текст, в котором рассказал о процессе создания динамической системы освещения для своей игры Dwerve. Он подробно описал каждый шаг, а мы выбрали главное.

В Dwerve разработчики используют стиль игр эпохи SNES, но при этом они решили улучшить графику, чтобы сделать её более современной. Создание динамической системы освещения стало подходящим решением этой задачи.

Основной инструмент для реализации освещения — ассет Smart Lighting 2D. Лежандр подробно расписал все необходимые действия для использования этого ассета в игровых проектах.

Создайте новый проект Unity с помощью шаблона 2D-игры и импортируйте туда Smart Lighting 2D. Создайте новую сцену и добавьте Tilemap, щёлкнув правой кнопкой мыши по окну Hierarchy и выбрав 2D Object — Tilemap. Далее вам понадобится тайлсет для создания подземелья — вы можете собрать его сами или взять сторонний (на itch.io есть множество бесплатных наборов тайлов).

В этом примере автор использовал Pita's Dungeon Tileset, на основе которого разработчики собирали прототип Dwerve

Затем откройте редактор спрайтов и установите размер сетки 16х16 ячеек. Многие спрайты разделены на несколько фрагментов — вам нужно объединить их в один. Убедитесь, что длина и ширина кратны 16. На рисунке ниже красным контуром показаны сгенерированные спрайты, а синим — то, как они должны выглядеть.

Красным обведён сгенерированный спрайт, разделённый на два фрагмента. Этот вариант не подходит. Спрайт, обведённый синим, — правильный пример

Далее вам нужно сгенерировать тайлы из окна Tile Palette. Откройте окно на верхней панели инструментов, выбрав пункт Window — 2D — Tile. Затем создайте новый Tile Palette под названием Dungeon Palette и сохраните его в новой папке Assets — Palettes.

Чтобы автоматически создать тайлы из спрайтов, просто перетащите их из Assets в окно Tile Palette. Когда появится окно Select Folder, создайте новую папку Assets — Tiles и сгенерируйте тайлы в эту папку.

Теперь окно Tile Palette должно выглядеть следующим образом:

Продублируйте свой Tilemap в окне Hierarchy. Переименуйте оригинал в Ground Tilemap, а копию — в Obstacle Tilemap. У Obstacle Tilemap установите параметр Order in Layer равным 10, чтобы этот тайлмап рендерился поверх Ground Tilemap.

Теперь нужно разукрасить тайлмап. Убедитесь, что пол и землю вы разукрашиваете на Ground Tilemap, а стены, колонны и пропсы на Obstacle Tilemap. Факелы нужно будет добавить позже.

Вы можете заметить проблему с этим коллайдером. Он должен находиться только у основания объектов, а не охватывать спрайты полностью. Откройте окно Sprite Editor в Texture Import Settings и отредактируйте фигуры спрайтов, выбрав Sprite Editor — Custom Physics Shape.

Выберите Obstacle Tilemap в Hierarchy. Если коллайдеры не обновились автоматически, отключите и снова включите компонент Tilemap Collider 2D. Теперь коллайдеры должны выглядеть так.

Далее нужно добавить тайлы факелов. Выберите объект Grid и создайте новый тайлмап — щёлкните правой кнопкой мыши и выберите 2D Object — Tilemap. Переименуйте этот тайлмап в Torch Tilemap и установите показатель Order in Layer на 20.

Факелы должны двигаться: Unity 2D Extras включает AnimatedTile.cs, поэтому тайлы можно легко анимировать. Можно просто скачать этот скрипт и поместить его в Assets — Scripts. В окне проекта нажмите правой кнопкой мыши и выберите Create — 2D — Tiles — Animated Tile. Это позволит вам анимировать спрайт. Переименуйте его в Pillar Torch Tile и выберите его.

Перетащите спрайты факела в контейнер. Установите минимальную и максимальную скорость на 10. Разблокируйте Inspector. Повторите эти шаги, чтобы создать тайлы настенного факела. Теперь перетащите тайлы факела в окно Tile Palette.

Теперь нарисуйте пару факелов на Torch Tilemap. Левый факел в синем круге предназначен для колонн, а правый — для стен. Когда вы закончите, войдите в Play Mode, чтобы увидеть анимированные факелы.

Теперь можно приступить к созданию освещения. Создайте Lighting Manager 2D: щёлкните правой кнопкой мыши на Hierarchy и выберите 2D Light — Light Manager. Таким же образом добавьте Light Source и переименуйте объект в Torch Light. Перетащите его в Assets — Prefabs, чтобы создать префаб. Теперь дублируйте свет факела и перетащите его на каждый факел. Поместите его на землю прямо перед колонной или стеной, чтобы сам источник света не находился внутри какого-либо препятствия.

Войдите в Play Mode, чтобы проверить освещение.

Далее факелам можно добавить свечение и частицы. Откройте префаб Torch Light и сделайте пустой объект корневым, а затем переместите компонент Lighting Source 2D в дочерний объект Light Source. Добавьте ещё два объекта Light Glow и Ember Particles.

Источник света расположен на земле, а свечение и частицы должны быть над факелом. Установить положение Light Glow и Ember Particles на (0, 0,5, 0). Затем добавьте компонент SpriteRenderer к игровому объекту Light Glow и выберите светло-жёлтый цвет (например, CD7319 ). Также установите Order in Layer на 20, чтобы он отображался поверх любых препятствий.

Создайте новый материал под названием Additive Particle Material в Assets — Materials и установите для шейдера значение Legacy Shader — Particles — Additive. Поставьте Material, чтобы использовать его в качестве материала. Чтобы он начал мерцать, скачайте SpriteAlphaFlicker.cs и переместите его в Assets — Scripts. Затем добавьте его к объекту Light Glow.

Чтобы сделать частицы, добавьте Particle System к объекту Ember Particles. Автор использовал следующие настройки:

Чтобы проверить динамическое освещение, можно добавить скрипт FollowMouse.cs и добавить его в Assets — Scripts. Продублируйте один из факелов, переименуйте его в Mouse Torch и добавьте компонент Follow Mouse. Отключите свечение и частицы.

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

Когда видишь, как на Unity нужен ассет для того, что в Godot было больше пяти лет из коробки (и настраивается в два клика).

Отлично, вы показали дефолтный пример. А есть что-то, с чем пытались работать лично вы?
Я почему-то уверен, что это можно сделать и без сторонних ассетов, или найти бесплатный, который также позволит всё настроить. Вас никто не заставляет использовать то или иное решение.

Godot хорош, я сам на нём сейчас делаю проект, однако, есть тут свои проблемы, с которыми сейчас приходится бороться.
Вот пример. В то время, когда у Unity есть Cinemachine с кучей настроек из коробки, мне для игры необходимо писать свою систему слежения за игроком с опережением, и чтобы это всё работало плавно. И вот нюанс. Камера дергается даже при равномерном перемещении игрока, и дело тут даже не в опережении или чем-то таком.
Выяснил, что можно камеру заставить обновлять свою позицию в Fixed Process (игрок - физический объект, и также перемещается через Fixed), и вроде бы дерганье исчезло. Но внезапно по какой-то причине встроенное сглаживание перестало работать, как только сцена грузится из сохранённого файла, все перемещения становятся резкими.
К слову, в итоге, от встроенного метода сохранения сцены в файл пришлось отказаться в пользу самописных сохранений, ибо это вызывало у всех созданных файлов _ready метод, который, по сути, должен срабатывать только когда сцена загружена и объект готов к работе. И в целом, логично, что после загрузки сцены из файла все объекты опять вызывают _ready, ибо это по-новой загруженная из файла сцена. Но всё-таки в итоге после загрузки всё ломалось, объекты, находившиеся в середине чего-то останавливались, анимации также не возобновлялись, и всё это заставляет писать костыли.

Я прекрасно понимаю, что часть из проблем вызвана, собственно, моим кодом, и я не говорю, что Godot забагован или что-то вроде этого. Просто когда есть встроенные средства, которые вроде бы работают, но требуют костылей, это не особо круто. В любом случае, движок активно развивается и при этом остаётся свободным и открытым, и это как раз очень круто. Жду 4 версию, но при этом планирую следующий проект написать на Unity, чтобы в итоге иметь полное понимание картины.

Ваши тезисы, кажется, не спорят со мной, а скорее выражают некоторые проблемные стороны, на которые тоже стоит обратить внимание, если что. И это, конечно, верно)

Отдельно буду рад глянуть, что в разработке, кстати!

Это больше похоже на 3д освещение, которое в юнити тоже есть из коробки.

Это чистое 2D, там их много видов, включая поддержку 2D карт нормалей и других ништяков. В этих кадрах нет 3D вовсе. Про самую базовую настройку можно почитать здесь:

Все руководства на эту тему говорят о том, что нужно Ambient Color в Lighting Setting выставить на черный.

Сделал, но освещение все равно осталось (это видно и по комнате без источников освещения, и по фону):

Изображение

Какие еще настройки нужно подкрутить, чтобы была полная темнота в сцене?

P.S. Версия Unity 2019.1

Написано же прямо на скриншоте, Generate Lighting надо нажать.
Ещё: тебе точно нужно и Realtime GI, и Baked GI одновременно?

> Написано же прямо на скриншоте, Generate Lighting надо нажать.

Нажимал, ничего не изменилось

> Ещё: тебе точно нужно и Realtime GI, и Baked GI одновременно?

Это дефолтные настройки сцены. Что мне нужно - убрать все освещение.

Отключи Directional Light.

> Отключи Directional Light.

В сцене отсутствуют источники освещения типа Directional Light, только Point Light

В смысле? Много всяких.

Walk
> В смысле? Много всяких.
Шейдеры какие на материалах?

BooTheJudge
> Шейдеры какие на материалах?
Везде Standart

У вас запеченый свет, нажмите снова Generate Lighting. Изменив настройки, надо запекать по новой..
Или включите автоматически. Потом перед экспортом вернёте обратно, как настроите правильный свет.

Как вариант, можно поставить туман черного цвета с высокой плотностью.
+ на камеру эффект цветокоррекции с повышенной контрастностью.

Salamandr
> Как вариант, можно поставить туман черного цвета с высокой плотностью.
Во-первых, это костыль, во-вторых так не будет видно света от точечных источников, которые ТС планирует добавлять.
Walk
> Это дефолтные настройки сцены.
То, что эти галочки по умолчанию включены - не значит, что они тебе нужны. Попробуй их выключить, и снова перегенерировать свет. Такое чувство, что однородный свет всё же из лайтмап берётся.

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

Снял галочку с Baked Global illumination, затем нажал Generate Lighting (специально пишу так, чтобы понял любой нуб столкнувшийся с аналогичной проблемой) - и заработало, появилась полнейшая темнота.

Читайте также: