Постановка задачи

У вас есть спрайт, состоящий из нескольких узлов Sprite или AnimatedSprite. Вы хотите нарисовать контур вокруг всего спрайта, то есть всех спрайтов.

Что не работает

Присоединение шейдера контура к материалу шейдера родительского элемента управления, а затем настройка всех дочерних элементов для наследования материала шейдера родителя («Использовать родительский материал»). Этот контур будет применяться вокруг каждого субспрайта.

Использование BackBufferCopy также не работает. Не хватает документации о том, как правильно использовать этот узел. Но BackBufferCopy приведет к буферизации всего экрана во встроенный SCREEN_TEXTURE. Вы потеряете различие между передним планом и фоном. (Я предполагаю, что ваша установка использует прозрачность вокруг вашего спрайта.)

Что работает

Окна просмотра. Создайте это дерево узлов:

ViewportContainer
∟ Viewport
  ∟ Sprite
  ∟ Animated Sprite
  ∟ ...

На узле Viewport установите «Прозрачный фон». Затем примените контурный шейдер к файлу ViewportContainer.

Недостатком видовых экранов является то, что вы не можете перемещаться по дочерним узлам через визуальный редактор в Godot. Вы должны отредактировать положение и другие свойства в Инспекторе (правая панель). По этой причине я не фанат дочерних видовых экранов, но увы.

Альтернативы

Этот пользователь на форумах Godot предложил скопировать метод шейдера toon. Вы можете создать две копии вашего сложного спрайта. Наложите их. Примените наивный контурный шейдер (из Что не работает) к нижнему сложному спрайту. Этот метод является хакерским, поскольку вам нужно будет применить любые шейдеры манипуляции с прозрачностью к ОБОИМ экземплярам. Я решил не использовать этот метод, так как мои спрайты исчезают (с помощью шейдера дизеринга).

В любом случае, я надеюсь, что это сэкономит вам немного времени. Удачи в геймдеве.