В этой статье главный программист Alt Shift Кристоф Савер объясняет, как он осветил космический мир в игре Crying Suns и даст советы по рендерингу и ресурсам, которые вы можете применить в своем собственном проекте.
В Crying Suns вы проводите большую часть времени в командном центре, как показано выше. Но помимо реальных персонажей, основу нашей игры составляет космос: глубокий, коварный космос. Если что-то в Crying Suns должно выглядеть жутко, это именно он. Поэтому мы потратили так много времени на настройку рендера наших различных окружений до тех пор, пока мы полностью не удовлетворились нашей многоплатформенной игрой.
Оглавление
Художественно-ориентированный рендеринг
Не удивительно, что изображение космоса в Crying Suns не является физически точным. Crying Suns имеет очень уникальное и отличительное художественное направление и, как 2D игра, некоторые очень конкретные ограничения вокруг окружения — того, что игрок способен воспринимать на экране.
Звездные поля обычно представлены как белые точки, наложенные на черный фон. Это не случайно, что большинство космических кораблей — как в вымышленных историях, так и в реальности — светлые. Во-первых, вы можете их видеть на экране и в целом создает более качественные эффекты. Во-вторых, это помогает отражать свет, которое в противном случае возникло бы от черных материалов.
Однако мы хотели создать более мрачный и темный мир в Crying Suns.
Слои космоса
Несмотря на то, что наше художественное видение было ясным с самого начала, процесс его достижения был очень долгим и проходил через несколько итераций. Сам рендер занимает несколько проходов с очень разными целями.
Во-первых, мы в основном рендерим непрозрачные объекты, как здесь, с большой станцией (слева) и кубом Neo-N (справа).
Во-вторых, мы добавляем в фон skybox. Мы могли бы сделать это наоборот, но так работает Unity.
После этого мы вводим прозрачную очередь рендеринга, и особенно звезды и планеты.
На этом этапе «обычная» часть рендера закончена. Все, что осталось сделать, это пост-обработка эффектов, таких как Bloom.
Обычно на этом моменте наш продюсер и сценарист Жюльен Котре говорит: «Bloom? Ты с ума сошел? Ты хочешь, чтобы я умер? Тебе нужно выбирать. Это либо Bloom, либо я!» Но кто нуждается в продюсере, когда у тебя есть Bloom в игре, верно? 🙂
В любом случае, мы еще не дошли до конца. Игра выглядит здорово, но хотя вы можете отлично видеть форму куба Neo-N справа, станция слева теряется во тьме космоса. Общая атмосфера чего-то не хватает.
Добавляем иллюзию
Чтобы улучшить эту сцену, нам нужен был способ, чтобы станция выделялась — что-то, что могло бы подчеркнуть тот факт, что станция ближе к нам, чем звезды за ней. Что-то, что будет физически неточным, но все еще будет выглядеть как космос. Это то, что мы называем «космическим туманом».
В основном мы разработали тип свечения, который создает эффект тумана из-за рассеивания света при столкновении с микрочастицами. Насколько мне известно, космический туман не является реальным явлением, но в нашей игре это выглядит круто и очень помогает с композицией изображения. Он также добавляет глубины станции.
Вот тот же эффект с более дальней точки.
Создание тумана (космической) войны
Итак, как мы создали космический туман? Как следует из заголовка, эффект работает как экранное пространственное затемнение, с некоторыми изменениями: чем дальше на экране вы находитесь от относительного центра звезды, тем меньше тумана вы видите.
Это решение пришло поздно в разработке. Сначала мы использовали большие спрайты, прикрепленные к основным звездам, чтобы имитировать свечение, но это было не так эффективно и не имело эффекта на саму звездную систему.
Приведенное выше изображение показывает сияние вокруг звезды, которое окрашивает фоновый бокс за ней, но корабль и станция не получают реального освещения от него. Они краснее на поверхностях, которые обращены к звезде, но другие неосвещенные поверхности остаются в основном черными.
С другой стороны, на иллюстрации ниже можно увидеть влияние эффекта «космической дымки» как на фон, так и на объекты.
Конечно, из-за различных типов локаций, которые мы имеем в игре (около солнца, далеко от звезды, в боях, во время боссовых битв и т. д.), нам пришлось иметь дело с разными настройками для каждой из них и плавно интерполировать между ними, когда игрок перемещается из одной локации в другую.
Практические шаги для создания эффектов
Чтобы воссоздать подобные эффекты в своих собственных проектах, вам понадобятся две вещи: текстура глубины и пост-обработка. Я расскажу о процессе для Universal Render Pipeline (URP) и Built-in Render Pipeline.
Built-in Render Pipeline
- Создайте MonoBehaviour с методом OnRenderImage, использующим ваш собственный шейдер для эффекта и присоедините этот скрипт к вашей камере.
- В методе Start вашего скрипта измените depthTextureMode вашей камеры на DepthTextureMode.Depth.
- Адаптируйте ближнюю и дальнюю плоскости отсечения вашей камеры, так как текстура глубины будет вычисляться на основе этих значений.
- Напишите шейдер.
Файлы на GitHub — https://gist.github.com/cs-altshift/7214d8732ceb03924de3b42d16cf7f13
URP
- Выберите свой URP-ассет и проверьте, что Depth Texture включен в настройках рендеринга.
- Создайте C#-скрипт, содержащий renderer feature и render pass, и присоедините его в качестве новой функции рендерера к вашему файлу данных Universal Renderer.
- Адаптируйте ближнюю и дальнюю плоскости отсечения вашей камеры, так как текстура глубины будет вычисляться на основе этих значений.
- Напишите соответствующий шейдер.
- Создайте материал на основе этого шейдера и назначьте его renderer feature.
- Выберите цвет тумана в renderer feature.
Готово!
Источник — https://blog.unity.com/games/designing-a-deeper-space-visual-effects-in-alt-shifts-crying-suns