Godot отладочная клавиатура не настроена ни в настройках редактора ни в предустановках

Обновлено: 03.05.2024

Давненько от меня не было слышно никаких новостей, тем более и повод соответствующий, наконец-таки поделится своими наработками по Godot, и уже аж версии 3!

В этом вводном материале мы рассмотрим сам редактор, базовые элементы и немного затронем скрипты.

Я буду использовать версию из Steam, так как она позволяет одновременно работать как с версией 3, так и запускать версию 2.1. Забегая вперёд скажу, что в третьей версии очень многое поменялось, некоторая логика, вызовы в скриптах и т.д. Но обо всём по порядку.

После запуска Godot, вы увидите окошко со списком доступных проектов. Их можно как запустить сразу, нажав кнопку «Запустить», так и открыть в редакторе, соответственно кнопка «Редактировать».

Примеры проектов можно скачать с сайта Godot. Однако сразу обращу ваше внимание, что проекты, написанные под Godot 2.1 с большей долей вероятности не заработают из отличия в скриптах. Поэтому, при скачивании, обратите внимание на версию.

После того как вы скачали и распаковали архив в какую-нибудь папку на диске, её нужно подключить к редактору. Нажимаем кнопку «Импорт», указываем путь, и нажимаем «Импортировать и Редактировать», после чего наши демо-проекты появятся в списке доступных.

Так же демо-проекты можно посмотреть, выбрав вкладку «Шаблоны». Выбираем заинтересовавший нас проект, например, «2D Particles Demo». Нажимаем на название, и во вновь открывшемся окне устанавливаем (кнопка «Установить»).

По сути можно сразу посмотреть проект в действии, кнопкой «Запустить». Однако может быть ситуация, как с «2D Particles Demo», когда для просмотра нужно его сначала всё-так открыть в редакторе для импорта некоторых компонентов.

Думаю, с демо-примерами вы разберётесь самостоятельно, а мы создадим новый проект, нажав соответствующую кнопку. В вновь открывшемся окне у нас спросят название проекта и где мы хотим его разместить (пустая папка).

Несмотря на то, что редактор Godot русифицирован, я всё же рекомендую задавать имена файлов латинскими буквами, дабы избежать проблем в будущем и не ломать голову почему у меня вылетают непонятные ошибки или вовсе не грузится, например, картинка.

После создания проекта, у нас откроется сам редактор. Он состоит из нескольких блоков: Блок «Файловая система» — здесь располагаются блок навигации (дерево папок) и собственно все файлы нашего проекта; Блок «Сцена» — это структура (дерево) всех наших элементов на текущей сцене; Блок «Инспектор» — позволяет редактировать свойства и параметры выбранного элемента в дереве блока «Сцена».

Ещё есть блоки «Импорт» и «Узел», но мы пока рассматривать их не будем.

По центру расположен сам редактор, в зависимости от того что мы хотим редактировать он может отображать 2D-сцену, 3D-сцену, редактор скриптов, а также список доступных модулей (плагинов для самого Godot) — «AssetLib». Переключаются разделы нажатием на соответствующие надписи в верхней части.

В нижней части редактора есть ещё один блок, который по умолчанию скрыт, и открывается только при возникновении каких-либо ошибок или отладке. Он состоит из четырёх вкладок: «Вывод» — различная информация самого редактора, в том числе ошибки; «Отладчик» — используется для отладки скриптов; «Аудио» и «Анимация» мы пока рассматривать не будем.

Для того, чтобы скрыть это блок опять, достаточно нажать ещё раз на название раздела («Вывод», «Отладчик», «Аудио» или «Анимация»).

Но вернёмся к редактору, по своей сути все элементы Godot это сцены, их можно сохранять, изменять тип, встраивать в другие сцены и т.д. Мы будем работать с 2D-сценами и использовать соответствующие для них типы элементов.

Сначала создадим простой компонент, который будет у нас в будущем игроком. Для этого в блоке «Сцена» нажимаем плюс и во вновь открывшемся окошке ищем тип «KinematicBody2D» с иконкой в виде человечка. Его можно сразу найти задав фильтр в строке поиска или найти открыв дерево со списком компонентов: Node → CanvasItem → Node2D → CollisionObject2D → PhysicsBody2D → KinematicBody2D. После чего нажимаем кнопку «Создать».

По своей сути мы могли бы выбрать и обычный элемент «Node2D», но у «KinematicBody2D» есть ряд свойств, которые нам понадобятся в будущем.

После добавления элемента на сцену, рядом с названием появится желтый восклицательный знак, нажав на пиктограмму которого мы получим предупреждение:

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

Для начала переименуем наш компонент «KinematicBody2D» в «player». В последствии это имя будет использовано при отображении элементов на игровой сцене. (Для этого достаточно кликнуть на названии и откроется поле для ввода нового имени).

Теперь необходимо добавить компонент, отвечающий за область взаимодействия или если быть точнее область обнаружения столкновений (Collision). Если у нас простой элемент или мы не хотим заморачиваться с высокой точностью, то подойдёт «CollisionShape2D». Если же у вас сложный, многогранный объект, то можно выбрать «CollisionPolygon2D».

Я не буду усложнять материал, поэтому просто добавим компонент «CollisionShape2D». Выбираем наш элемент «player», нажимаем плюс и выбираем: Node → CanvasItem → Node2D → CollisionShape2D.

И вновь получаем предупреждение с желтым восклицательным знаком:

Дело в том, что компонент мы добавили, а сама область так и не задана. Но прежде чем мы её добавим, нам понадобится ещё один элемент — Sprite. Это будет внешний вид нашего персонажа.

Выбираем узел «player», нажимаем плюс и добавляем: Node → CanvasItem → Node2D → Sprite:

Как видите, в разделе «Недавние», появились наши ранее добавленные элементы. Гораздо быстрее, нежели искать однотипные элементы каждый раз.

Теперь переключимся в блок «Файловая система», и нажав правую кнопку мыши на «res://» выберем пункт «Новая папка». В открывшемся окне введём название «images», здесь будут изображения, которые мы будет использовать в дальнейшем:

Откроем эту папку в проводнике (правая кнопка мыши на «images» и пункт «Просмотреть в проводнике». Теперь сюда нужно скопировать картинку для нашего игрока в формате PNG.

Хочу обратить ваше внимание, что PhotoShop очень любит «пихать» в файлы системную информацию, и в частности задавать не совсем корректный «Color profile». Из-за чего Godot начнёт ругаться на некорректный формат «sRGB profile»:

На вкладке действия нажимаем «Добавить действие» → Изображение → Удаление метаданных. Отмечаем все чекбоксы (галочки) и нажимаем преобразовать:

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

Но вернёмся в наш редактор и убедимся, что изображение нашего игрока находится на месте. Теперь это изображение нужно добавить к компоненту Sprite. Для этого выберем этот элемент в разделе «Сцена», и переключим своё внимание на раздел «Инспектор». В данный момент нас интересует свойство «Texture». Изначально там указано значение . Нас интересует «Новый ImageTexture». Можно выбрать его из меню, а можно сразу перетащить нашу картинку из блока «Файловая система» и отпустить над свойством «Texture»:

После чего увидим, что в главном окне редактора у нашего «player» появилась форма в виде нашей картинки:

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

Для этого, в блоке «Инспектор», выбираем нашу текстуру, и в открывшемся меню выбираем пункт «Редактировать»:

В разделе «Flags» снимаем все чекбоксы (галочки) и убеждаемся, что грани нашего кубика больше не сглаживаются.

Для того, чтобы не повторять эту процедуру каждый раз, откроем блок «Импорт», снимем чекбокс (галочку) напротив «Flags». Затем нажимаем на «Предустановка..» и выбираем «Установить по умолчанию для ‘Texture’»:

Теперь при импорте новых картинок редактор не будет выставлять флаги.

Вернёмся к блоку «Сцена» и добавим наконец область взаимодействия. Для этого выберем наш компонент «CollisionShape2D» и блоке «Инспектор» зададим свойство «Shape» в виде «Новый RectangleShape2D»:

Просто квадратная область. Поскольку изображение нашего игрока всего 32 на 32 точки, то область задать будет несколько проблематично:

Но можно с помощью колеса мыши приблизить изображение и выставить область таким образом, чтобы она покрывала весь спрайт персонажа:

Можно пойти несколько другим способом и не мучатся, тягая мышкой точки. Открываем в блоке «Инспектор» раздел «Transform» и задаём свойство Scale:

Честно сказу в редакторе Godot очень много непонятных моментов, например, почему свойство именно scale (масштаб), а ни, например, просто дать возможность указать точный размер области. Или глобальная область первичного объекта (в данном случае «player») она равна 64 на 64 точки и изменить её нельзя, даже если у нас спрайт размером меньше. Честно скажу это весьма неудобно в некоторых случаях. А на англоязычных форумах предлагают модифицировать основные классы прямо внутри Godot и задавать там размер. К сожалению, с ходу у меня это не получилось сделать.

Но вернёмся к нашему игроку. По сути базовые настройки завершены, и мы можем сохранить нашу сцену уже как компонент «player». Для этого в блоке «Файловая система» создадим ещё одну папку и назовём её «elements». Теперь в главном меню редактора выберем «Сцена» → «Сохранить сцену как…» и выбрав нашу папку «elements» сохраним файл «player.tscn»:

Теперь нам нужно создать главную игровую сцену. Для этого в том же главном меню «Сцена» выбираем пункт «Новая сцена». В блоке «Сцена» нажимаем плюс и выбираем компоненту «Node»:

По сути это базовый компонент, прародитель всех остальных и нам от него ничего не потребуется (пока). Единственное, что переименуем его в «gamescene». Теперь нам на игровую сцену нам нужно добавить нашего игрока. Для этого кликнем на «gamescene» и затем нажмём на пиктограмму в виде звена цепи (рядом с плюсом) и во вновь открывшемся окне выберем: «elements → player.tscn».

Как не трудно догадаться звено цепи прикрепляет к сцене элемент в виде нашего игрока. Причём если мы потом захотим что-либо изменить в «player», то этим изменения так же отобразятся на игровой сцене. Это очень удобно, так как таких элементов может быть очень много на сцене и отдельно редактировать каждый из компонентов очень утомительно.

Компонент «player» можно спокойно перемещать мышкой в нужное место, но мы пойдём немного дальше и включим сетку и сделаем перемещение дискретное. Для этого в основном блоке редактора нажмём обзор и включим «Показать сетку». По сути её можно в любой момент включать/отключать с помощь горячих клавиш — G:

Теперь настроим размер ячеек кратное нашему игроку. Для этого нажмём на пиктограмму в виде трёх вертикальных точек и выберем пункт «Настроить привязку…»:

И укажем размер ячеек 32 на 32:

Теперь надо активировать привязку нажав на пиктограмму в виде магнита:

Так же можно переключать это режим с помощью горячей клавиши — S.

Как мы видим на скриншоте выше наш игрок попадает на пересечение ячеек и это не есть совсем хорошо:

Для того что бы наш персонаж был чётко посредине ячейки, откроем его на редактирование нажав на пиктограмму в виде «Хлопушки-нумератора»:

Теперь изменим свойства позиционирования в блоке «Инспектор», сначала для Srpite:

В подразделе «Offset» снимаем чекбокс (галочку) рядом со свойством «Centered».

Затем у элемента «CollisionShape2D» в подразделе «Position» задаём смещение (16, 16) на половину размера нашего спрайта:

Сохраняем сцену (Ctrl+S) с «player.tscn» и переключаемся на нашу игровую сцену:

Проверяем, что наш персонаж точно по середине ячейки, хоть и общий контур больше (64x64) и сохраним игровую сцену. Создадим ещё одну папку «scenes» в «res://» и сохраним туда «gamescene.tscn».

Теперь самое время проверить всю нашу конструкцию в действии. Для этого выберем в верхнем меню справа нажмём кнопку «play» или горячую клавишу — «F5».

Редактор сообщит, что не выбрана главная сцена и предложит её указать. Нажимаем «Выделение» и выбираем «gamescene.tscn»:

После чего откроется окно с игрой, и мы увидим наш квадратик с персонажем.

Теперь попробуем задать управление с помощью клавиатуры и рассмотрим базовые элементы скриптов. Сначала нам нужно задать сами клавиши.

Для этого откроем в главном меню: «Проект» → «Параметры проекта». Во вновь открывшемся окне на закладке «Список действий» мы увидим большой список. Можно использовать уже готовые элементы списка, но мы создадим четыре своих: «player_up», «player_down», «player_left», «player_right». Вставляем поочерёдно названия и нажимаем кнопку «Добавить»:

Это будут четыре события, по каждой стороне перемещения. Теперь надо задать условия, при котором будет происходить сработка события. Нажимаем плюс и выбираем «кнопка», после чего откроется окошко и нам предложат нажать кнопку на клавиатуре. По такому же принципу можно задать кнопку у геймпада или мыши:

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

Теперь создадим ещё одну папку в разделе «res://» для скриптов — «scripts». После чего открываем на редактирование нашу сцену «player.tscn». Выбираем главный узел «player» и нажимаем пиктограмму в виде свитка с зелёным плюсиком или же можно нажать правую кнопку на узле «player» и выбрать «Прикрепить скрипт»:

Во вновь открывшемся окне оставляем все настройки по умолчанию, и изменим лишь наш путь к расположению скрипта, дабы не делать в будущем свалку:

После нажатия кнопки «Создать» откроется редактор с нашим скриптом, с шаблоном по умолчанию. Несколько слов о самом редакторе:

  • В области 1 находятся открытые скрипты проекта, в данный момент он один — player.gd;
  • В области 2 находится список функций данного скрипта. На этапе создания она тоже одна это _ready();
  • В области 3 (начало скрипта) указан класс на базе которого основан данный скрипт. В данном примере это KinematicBody2D. У каждого класса свой функционал и надо быть внимательным.
  • В области 4 перечисляются локальные переменные доступные внутри этого скрипта. Несмотря на то, что тип переменной не указан явно (var), они типизированы и для того, чтобы склеить строку и число, придётся привести к одному типу. Например “lives: “ + String(10);
  • Далее в области 5 и 6 следуют функции. У зарезервированных функций имена начинаются со знака подчёркивания. В выше указанном примере функция _ready() вызывается 1 раз когда элемент добавляется на сцену, или проще говоря инициализируется. Если функция пустая, для того чтобы не было ошибки вставляется «заглушка» в виде вызова pass. Функция _process вызывается каждый фрейм (кадр), но только если предварительно была разрешена командой set_process(true) в функции _ready(). Причём при каждом вызове функции _process в переменной delta будет некое число (прирост) с момента предыдущего вызова. Это значение можно использовать как таймер для каких-либо действий в будущем;

Проведём небольшой эксперимент. Разрешим вызов set_process(true), а в функции _process добавим вывод в консоль отладки значение delta в консоль:

Теперь после запуска проекта (F5) мы получим кучу быстро сменяющихся цифр:

Ура! Всё работает! Но нам нужно добавить управление нашим кубиком. Сразу скажу, что приведённый метод не очень хорош, но как базовая демонстрация вполне сгодится. В моих проектах используется более корректный опрос, но он несколько сложен, а мне бы не хотелось перегружать и так достаточно большую статью. Итак, для того, чтобы сработал наш опрос кнопок необходимо на этапе инициализации добавить несколько переменных:

  • direction — это двумерный вектор направления в какую сторону будет двигаться наш персонаж: (-1,0) влево, (1,0) вправо, (0,-1) вверх, (0,1) вниз. Возможны комбинации, например, для движения по горизонтали вверх и влево (-1,-1);
  • speed — текущая скорость перемещения нашего персонажа, изначально равно 0 (он стоит);
  • MAX_SPEED — константа, максимальная скорость с которой будет двигаться персонаж;
  • velocity — ещё одни двумерный вектор, в нём хранится текущее направление движения с учётом скорости;

Теперь опишем функционал в _process:

Инициализируем(сбрасываем) направление движения (0,0):

Теперь опрашиваем события для кнопок влево/вправо:

Если одна из них нажата задаём горизонтальное направление.

Повторяем эту же процедуру для вертикального движения:

Если вектор движения задан (не равен 0,0), то выставляем максимальную скорость движения, в противном случае она равна нулю:

Теперь рассчитываем движение с учётом направления и скорости:

Ну и далее собственно заставляем двигаться сам объект:

В результате чего у нас должна получится вот такая картинка:

А после запуска наш квадратик гоняется по экрану с помощью клавиш курсора.

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

Godot Engine

Часто задаваемые вопросы

Godot Engine

Вопрос: как удалить объект (ноду) из скрипта?
Ответ: object.queue_free()

Вопрос: как изъять объект (ноду) из дерева нод, но при этом не удалять сам объект из памяти?
Ответ: node1.remove_child(node2)

Godot Engine

Вопрос: как объявить и вызвать функцию?
Ответ:

Godot Engine

Вопрос: как написать класс и создать его экземпляр?
Ответ:

Godot Engine

Вопрос: как произвести наследование одного скрипта от другого?
Ответ:

Godot Engine

Вопрос: как произвести наследование одного класса от другого?
Ответ:

Godot Engine

Вопрос: скрипт это класс?
Ответ: да. (унаследованных от того, что вы написали в extends)

Godot Engine

Вопрос: На какие платформы поддерживается экспорт?
Ответ: на почти все возможные платформы, которые поддерживают GLES 2/3 (в Godot 3.0). Количество платформ возможно расширить за счёт модулей. Дополнительные платформы: PlayStation (4, Pro, Vita, 3), XBOX (360, ONE, S), Nintendo (Switch, Wii U) и так далее.

Не работает клавиатура в GTA Trilogy Definitive Edition

После установки игры возникают проблемы с работой клавиатуры, в игру невозможно играть. GTA III, Vice City, San Andreas

Проблемы с игрой GTA Trilogy не запускается, вылетает, зависает и т.п.

Не работает клавиатура в GTA: The Trilogy - The Definitive Edition.

Изображение

Тоже была проблема с клавиатурой. Решить её смог следующим образом.
Открываем папку: C:\Users\имя-пользователя\Documents\Rockstar Games там увидите папки типа GTA III Definitive Edition, GTA San Andreas Definitive Edition, GTA Vice City Definitive Edition. В каждой папке есть такой файл - KeyboardMappings.cfg , это файл настройки клавиатуры. У него были права на "только чтение" в свойствах снял галочку и все заработало после переназначения клавиш. У меня в GTA клавиатура тоже не работала. Я забыл про геймпад которым играл в колду, после отключения все заработало. Возможно у вас тоже подключено несколько устройств ввода и из-за этого клавиатура не работает. Попробуйте отключить геймпад и оставить только клавиатура + мышь.

У всех работает, а у меня нет. Поставил другую таблетку от “whiteee” и все заработало. Раньше стояла таблетка “ManiacKnight”. Поставьте другую таблетку.

Тоже самое. Ни в одной из игр трилогии не работает клавиатура, за исключением кнопки esc. Мышь работает. Пытался переназначить кнопки - бесполезно, можно только на мышь. Tvoi GG писал(а): Тоже самое. Ни в одной из игр трилогии не работает клавиатура, за исключением кнопки esc. Мышь работает. Пытался переназначить кнопки - бесполезно, можно только на мышь.

It is 100% *** problem, the launc.dll file from the cracks has unsupported and lacking libraries for Win 7, it contains Win NT 6.3 (Windows 8.1) exclusive dll libraries that are unusable on Win 7 (I have checked this via Dependency Walker).

Solution: Either someone makes a crack that completely disables the whole launcher procedure and re-enable the keyboard input + use windows 7 compatible libs (maybe compile with visual studio 2015?), or downgrade to Windows 8.1 or 10. (Downgrade, because on these systems you get alot of bloatware from m$ sadly. Which makes win 7 the best and most stable system ever).

Это 100 % проблема ***, launc.dll файл из *** имеет неподдерживаемые и отсутствующие библиотеки для Win 7, он содержит эксклюзивные библиотеки DLL Win NT 6.3 (Windows 8.1), которые непригодны для использования в Win 7 (проверили это с помощью Dependency Walker).

Решение: Либо кто-то делает ошибку, которая полностью отключает всю процедуру запуска и повторно включает ввод с клавиатуры + использует библиотеки, совместимые с Windows 7 (возможно, компилируется с visual studio 2015?), Либо переходит на Windows 8.1 или 10. (Понижение, потому что в этих системах вы получаете много вредоносного ПО от m$, к сожалению. Что делает win 7 лучшей и самой стабильной системой из когда-либо существовавших).

Godot 3 provides a redesigned Environment resource, as well as a new post-processing system with many available effects right out of the box.

Окружение¶

The Environment resource stores all the information required for controlling rendering environment. This includes sky, ambient lighting, tone mapping, effects, and adjustments. By itself it does nothing, but it becomes enabled once used in one of the following locations in order of priority:

Camera node¶

An Environment can be set to a camera. It will have priority over any other setting.

../../_images/environment_camera.jpg

This is mostly useful when wanting to override an existing environment, but in general it's a better idea to use the option below.

WorldEnvironment node¶

The WorldEnvironment node can be added to any scene, but only one can exist per active scene tree. Adding more than one will result in a warning.

../../_images/environment_world.jpg

Any Environment added has higher priority than the default Environment (explained below). This means it can be overridden on a per-scene basis, which makes it quite useful.

Окружение по умолчанию¶

A default environment can be set, which acts as a fallback when no Environment was set to a Camera or WorldEnvironment. Just head to Project Settings -> Rendering -> Environment:

../../_images/environment_default.jpg

New projects created from the Project Manager come with a default environment ( default_env.tres ). If one needs to be created, save it to disk before referencing it here.

Environment options¶

Following is a detailed description of all environment options and how they are intended to be used.

The Background section contains settings on how to fill the background (parts of the screen where objects were not drawn). In Godot 3.0, the background not only serves the purpose of displaying an image or color, it can also change how objects are affected by ambient and reflected light.

../../_images/environment_background1.jpg

There are many ways to set the background:

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

Custom Color is like Clear Color, but with a custom color value.

Sky lets you define a panorama sky (a 360 degree sphere texture) or a procedural sky (a simple sky featuring a gradient and an optional sun). Objects will reflect it and absorb ambient light from it.

Цвет + Небо позволяет определить небо (как указано выше), но использует постоянное значение цвета для рисования фона. Небо будет использоваться только для отражения и рассеянного света.

Ambient Light¶

Ambient (as defined here) is a type of light that affects every piece of geometry with the same intensity. It is global and independent of lights that might be added to the scene.

There are two types of ambient light: the Ambient Color (which is a constant color multiplied by the material albedo) and then one obtained from the Sky (as described before, but a sky needs to be set as background for this to be enabled).

../../_images/environment_ambient.jpg

When a Sky is set as background, it's possible to blend between ambient color and sky using the Sky Contribution setting (this value is 1.0 by default for convenience, so only the sky affects objects).

Here is a comparison of how different ambient light affects a scene:

../../_images/environment_ambient2.jpg

Finally, there is an Energy setting, which is a multiplier. It's useful when working with HDR.

In general, ambient light should only be used for simple scenes, large exteriors, or for performance reasons (ambient light is cheap), as it does not provide the best lighting quality. It's better to generate ambient light from ReflectionProbe or GIProbe, which will more faithfully simulate how indirect light propagates. Below is a comparison, in terms of quality, between using a flat ambient color and a GIProbe:

../../_images/environment_ambient_comparison.jpg

Using one of the methods described above, objects get constant ambient lighting replaced by ambient light from the probes.

Туман¶

Fog, as in real life, makes distant objects fade away into an uniform color. The physical effect is actually pretty complex, but Godot provides a good approximation. There are two kinds of fog in Godot:

Depth Fog: This one is applied based on the distance from the camera.

Height Fog: This one is applied to any objects below (or above) a certain height, regardless of the distance from the camera.

Both of these fog types can have their curve tweaked, making their transition more or less sharp.

Two properties can be tweaked to make the fog effect more interesting:

The first is Sun Amount, which makes use of the Sun Color property of the fog. When looking towards a directional light (usually a sun), the color of the fog will be changed, simulating the sunlight passing through the fog.

The second is Transmit Enabled which simulates more realistic light transmittance. In practice, it makes light stand out more across the fog.

../../_images/environment_fog_transmission.jpg

Tonemap¶

Эта функция доступна только при использовании бэкенда GLES3

Mode: Tone mapping mode, which can be Linear, Reindhart, Filmic, or Aces.

White: Tone mapping white, which simulates where in the scale white is located (by default 1.0).

Auto Exposure (HDR)¶

Эта функция доступна только при использовании бэкенда GLES3

Even though, in most cases, lighting and texturing are heavily artist controlled, Godot supports a simple high dynamic range implementation with the auto exposure mechanism. This is generally used for the sake of realism when combining interior areas with low light and outdoors. Auto exposure simulates the camera (or eye) in an effort to adapt between light and dark locations and their different amounts of light.

The simplest way to use auto exposure is to make sure outdoor lights (or other strong lights) have energy beyond 1.0. This is done by tweaking their Energy multiplier (on the Light itself). To make it consistent, the Sky usually needs to use the energy multiplier too, to match with the directional light. Normally, values between 3.0 and 6.0 are enough to simulate indoor-outdoor conditions.

By combining Auto Exposure with Glow post processing (more on that below), pixels that go over the tonemap White will bleed to the glow buffer, creating the typical bloom effect in photography.

../../_images/environment_hdr_bloom.jpg

The user-controllable values in the Auto Exposure section come with sensible defaults, but you can still tweak them:

Scale: Value to scale the lighting. Brighter values produce brighter images, smaller ones produce darker ones.

Min Luma: Minimum luminance that auto exposure will aim to adjust for. Luminance is the average of the light in all the pixels of the screen.

Max Luma: Maximum luminance that auto exposure will aim to adjust for.

Speed: Speed at which luminance corrects itself. The higher the value, the faster correction happens.

Mid- and post-processing effects¶

A large amount of widely-used mid- and post-processing effects are supported in the Environment.

Screen-Space Reflections (SSR)¶

Эта функция доступна только при использовании бэкенда GLES3

While Godot supports three sources of reflection data (Sky, ReflectionProbe, and GIProbe), they may not provide enough detail for all situations. Scenarios where Screen Space Reflections make the most sense are when objects are in contact with each other (object over floor, over a table, floating on water, etc).

../../_images/environment_ssr.jpg

The other advantage (even if only enabled to a minimum), is that it works in real-time (while the other types of reflections are pre-computed). This can be used to make characters, cars, etc. reflect on surrounding surfaces when moving around.

A few user-controlled parameters are available to better tweak the technique:

Max Steps determines the length of the reflection. The bigger this number, the more costly it is to compute.

Исчезание позволяет регулировать кривую нарастания, что полезно для смягчения площади контакта.

Fade Out allows adjusting the fade-out curve, so the step limit fades out softly.

Depth Tolerance can be used for screen-space-ray hit tolerance to gaps. The bigger the value, the more gaps will be ignored.

Roughness will apply a screen-space blur to approximate roughness in objects with this material characteristic.

Keep in mind that screen-space-reflections only work for reflecting opaque geometry. Transparent objects can't be reflected.

Screen-Space Ambient Occlusion (SSAO)¶

Эта функция доступна только при использовании бэкенда GLES3

As mentioned in the Ambient section, areas where light from light nodes does not reach (either because it's outside the radius or shadowed) are lit with ambient light. Godot can simulate this using GIProbe, ReflectionProbe, the Sky, or a constant ambient color. The problem, however, is that all the methods proposed previously act more on a larger scale (large regions) than at the smaller geometry level.

Constant ambient color and Sky are the same everywhere, while GI and Reflection probes have more local detail, but not enough to simulate situations where light is not able to fill inside hollow or concave features.

This can be simulated with Screen Space Ambient Occlusion. As you can see in the image below, its purpose is to make sure concave areas are darker, simulating a narrower path for the light to enter:

../../_images/environment_ssao.jpg

It is a common mistake to enable this effect, turn on a light, and not be able to appreciate it. This is because SSAO only acts on ambient light, not direct light.

This is why, in the image above, the effect is less noticeable under the direct light (on the left). If you want to force SSAO to work with direct light too, use the Light Affect parameter (even though this is not correct, some artists like how it looks).

SSAO looks best when combined with a real source of indirect light, like GIProbe:

../../_images/environment_ssao2.jpg

Tweaking SSAO is possible with several parameters:

Radius/Intensity: To control the radius or intensity of the occlusion, these two parameters are available. Radius is in world (Metric) units.

Radius2/Intensity2: A Secondary radius/intensity can be used. Combining a large and a small radius AO generally works well.

Bias: This can be tweaked to solve self occlusion, though the default generally works well enough.

Light Affect: SSAO only affects ambient light, but increasing this slider can make it also affect direct light. Some artists prefer this effect.

Ao Channel Affect: If a value of zero is used, only the material's AO texture will be used for ambient occlusion; SSAO will not be applied. Values greater than 0 multiply the AO texture by the SSAO effect to varying degrees. This does not affect materials without an AO texture.

Quality: Depending on quality, SSAO will take more samples over a sphere for every pixel. High quality only works well on modern GPUs.

Blur: Type of blur kernel used. The 1x1 kernel is a simple blur that preserves local detail better, but is not as efficient (generally works better with the high quality setting above), while 3x3 will soften the image better (with a bit of dithering-like effect), but does not preserve local detail as well.

Edge Sharpness: This can be used to preserve the sharpness of edges (avoids areas without AO on creases).

Depth of Field / Far Blur¶

This effect simulates focal distance on high end cameras. It blurs objects behind a given range. It has an initial Distance with a Transition region (in world units):

../../_images/environment_dof_far.jpg

The Amount parameter controls the amount of blur. For larger blurs, tweaking the Quality may be needed in order to avoid artifacts.

Depth of Field / Near Blur¶

This effect simulates focal distance on high end cameras. It blurs objects close to the camera (acts in the opposite direction as far blur). It has an initial Distance with a Transition region (in world units):

../../_images/environment_dof_near.jpg

The Amount parameter controls the amount of blur. For larger blurs, tweaking the Quality may be needed in order to avoid artifacts.

It is common to use both blurs together to focus the viewer's attention on a given object:

../../_images/environment_mixed_blur.jpg

In photography and film, when light amount exceeds the maximum supported by the media (be it analog or digital), it generally bleeds outwards to darker regions of the image. This is simulated in Godot with the Glow effect.

../../_images/environment_glow1.jpg

By default, even if the effect is enabled, it will be weak or invisible. One of two conditions need to happen for it to actually show:

The light in a pixel surpasses the HDR Threshold (where 0 is all light surpasses it, and 1.0 is light over the tonemapper White value). Normally, this value is expected to be at 1.0, but it can be lowered to allow more light to bleed. There is also an extra parameter, HDR Scale, that allows scaling (making brighter or darker) the light surpassing the threshold.

The Bloom effect has a value set greater than 0. As it increases, it sends the whole screen to the glow processor at higher amounts.

Both will cause the light to start bleeding out of the brighter areas.

Once glow is visible, it can be controlled with a few extra parameters:

Intensity is an overall scale for the effect, it can be made stronger or weaker (0.0 removes it).

Strength is how strong the gaussian filter kernel is processed. Greater values make the filter saturate and expand outwards. In general, changing this is not needed, as the size can be more efficiently adjusted with the Levels.

The Blend Mode of the effect can also be changed:

Additive is the strongest one, as it only adds the glow effect over the image with no blending involved. In general, it's too strong to be used, but can look good with low intensity Bloom (produces a dream-like effect).

Screen ensures glow never brightens more than itself and it works great as an all around.

Softlight is the default and weakest one, producing only a subtle color disturbance around the objects. This mode works best on dark scenes.

Replace can be used to blur the whole screen or debug the effect. It only shows the glow effect without the image below.

To change the glow effect size and shape, Godot provides Levels. Smaller levels are strong glows that appear around objects, while large levels are hazy glows covering the whole screen:

../../_images/environment_glow_layers.jpg

The real strength of this system, though, is to combine levels to create more interesting glow patterns:

../../_images/environment_glow_layers2.jpg

Finally, as the highest layers are created by stretching small blurred images, it is possible that some blockiness may be visible. Enabling Bicubic Upscaling gets rids of it, at a minimal performance cost. Note that this is effective only when using the GLES3 backend.

../../_images/environment_glow_bicubic.jpg

Adjustments¶

At the end of processing, Godot offers the possibility to do some standard image adjustments.

../../_images/environment_adjustments.jpg

The first one is being able to change the typical Brightness, Contrast, and Saturation:

../../_images/environment_adjustments_bcs.jpg

The second is by supplying a color correction gradient. A regular black to white gradient like the following one will produce no effect:

../../_images/environment_adjusments_default_gradient.jpg

But creating custom ones will allow to map each channel to a different color:

../../_images/environment_adjusments_custom_gradient.jpg

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