Godot: Tilemap / draw_rect случайное мерцание с драйверами Nvidia

Созданный на 27 июл. 2017  ·  191Комментарии  ·  Источник: godotengine/godot

Операционная система или устройство - версия Годо:
Windows 10, годот3.0альфа1

Описание проблемы:
Я сделал kinematicbody2D и тайловую карту, перемещение кинематического тела работало как обычно, однако иногда одна из тайлов в тайловой карте исчезла быстрее, чем могла бы зафиксировать любое программное обеспечение для записи экрана. иногда 2 исчезали, но их перерисовывали

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

bug confirmed high priority rendering

Самый полезный комментарий

Это вполне может быть связано с тем, что буферы вершин в настоящее время повторно используются несколько раз за кадр (что также, вероятно, вызывает проблемы с производительностью). Т.е. буфер вершин используется для рисования одного объекта, изменен в середине, чтобы начать рисование следующего. Я расследую.

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

Все 191 Комментарий

Можно подтвердить, что это все еще происходит, используя кастомную сборку Godot 3.0 https://github.com/godotengine/godot/commit/29db531fc8360b1e6d5e23008b208517b6d8c627

Так же бывает в редакторе:

https://i.imgur.com/3dv3fih.png
https://i.imgur.com/KTAyyqm.png

Это должна быть вся трава.

РЕДАКТИРОВАТЬ: Похоже, что если размер квадранта установлен на 1, проблема исчезает

РЕДАКТИРОВАТЬ 2: плитки не исчезают, а перемещаются (проблема с преобразованием?)

https://i.imgur.com/T0GBaFv.png

РЕДАКТИРОВАТЬ 3: видео низкого качества. https://streamable.com/6a07b Мне потребовалось время, чтобы вызвать проблему (редактор настроен на постоянное обновление)

Эта проблема все еще возникает в последнем мастере 1f4685375f2d2e36a2e19e67ac9f614b8c99ea28

Кажется, проблема не только в тайловой карте. Я обнаружил те же проблемы с большим текстом внутри метки. У меня такое ощущение, что это происходит только после использования percent_visible и / или перемещения метки. На этот раз я мог заметить это только во время работы игры, но я бы не стал отказываться от того же самого в редакторе. Мне не удалось сделать снимок или видео, но некоторые персонажи начинают мерцать и переходят в другую позицию с другим преобразованием (вы можете увидеть кусок букв из текстуры шрифта)

Обновление: эта проблема является основной. То же самое происходит и с самим редактором. Я не мог сделать снимок экрана, потому что к тому времени, когда я заметил это и захотел сделать снимок экрана, редактор, вероятно, обновился, и проблема исчезла. Я заметил проблему в двух разделах редактора, дело не в том, что это происходит в этих двух разделах, а в разделах, в которых я заметил проблему: в содержимом вывода мерцали некоторые буквы и одна из меток вкладок в нижней части экрана, где метки Output, Debugger, Audio, ... есть. Буква D на этикетке Debugger начала мигать. Сработать непросто, но проблема та же.

У меня проблема с ярлыком на видео (мерцание начинается примерно с половины видео) https://streamable.com/e31xp внимательно посмотрите на конец 4-й строки, и вы увидите, что некоторые буквы мигают

Извините, я не думаю, что при редактировании будут отправляться уведомления, и я думаю, что это важная проблема

https://i.gyazo.com/1ccc584f1746d0fc342f6de6609d33f0.mp4

У меня такая же проблема ... (около 0:04 вы видите мерцание плитки)
Я просто использую Sprite и свой собственный сценарий движения, хотя

После долгих испытаний я уверен, что моя проблема (№ 15113) такая же, как и эта. Что странно, так это пара вещей:

  1. Первоначально я видел ту же проблему, что и @Remixful, с мерцающими целыми квадратами, но затем она исчезла, ничего не меняя, и вместо этого я увидел эти странные мерцающие линии. Потом они исчезли из ниоткуда, и вернулись прежние мерцающие квадраты ... Оо
  2. Если я просто позволю сцене бездействовать, я не вижу никаких странных артефактов или мерцания, но как только я начинаю перемещать своего персонажа (или, может быть, это происходит от камеры?), Я начинаю видеть мерцание в той или иной форме.
  3. Я могу легко запечатлеть мерцание полностью в квадрате на видео, но когда я пытаюсь записать мерцание линии, несмотря на то, что это определенно происходит во время съемки, мерцания нигде не видно на видео.

Кроме того, FWIW, этого вообще не происходило в 2.1 с тем же самым проектом.

Было бы неплохо иметь пример проекта, который воспроизводит проблему (я знаю, что это должно быть легко сделать на основе данных шагов для воспроизведения, но время разработки движка - дефицитный ресурс :)).

@ akien-mga
flickertest.zip

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

Я пробовал несколько вещей, чтобы увидеть, происходит ли это в разных сценариях. Я мог воспроизвести его только тогда, когда Camera2D был дочерним элементом YSort. Это может быть ключом к разгадке.

Я видел это вчера в демонстрации kinematic_char: \

Что я обнаружил об этой проблеме, так это то, что:

  • Сложно воспроизвести и запечатлеть на видео. Иногда вы будете видеть это все время, и при попытке записать его с помощью OBS или любого программного обеспечения для записи экрана проблемы не возникнет. Опять же, иногда это происходит даже во время записи, поэтому я не знаю 😅
  • Это может произойти в любое время и в любом месте (даже в самом редакторе, а не только в редактируемой сцене)
  • Кажется, это происходит только с TileMap s с размером квадранта ячейки> 1 и, иногда, с текстом. Я не говорю, что этого не происходит с другими вещами, но я видел это только при использовании этих двух вещей.
  • И я не вижу ничего плохого в коде. Конечно, я не эксперт в этом или что-то в этом роде. Единственное, что я могу придумать, это некоторая некорректная настройка произвольного преобразования ... не знаю, правда 😓

См. №16277 для другого примера проекта, который должен воспроизвести проблему.

См. 16280 для получения дополнительной информации по этому поводу.

Здравствуйте, чтобы добавить к этому и просто уточнить, я вообще ничего не делал с Годо, и я просто опробовал этот проект специально, потому что мне было любопытно:
image

Мерцание происходит при тестовом воспроизведении, но не в редакторе. Интересно, что обратное происходит, если я пробую 2D Kinematic Character Demo, где плитки редактора мерцают, но не в тестовой игре.

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

Вс, 4 февраля 2018 г., 2:56 AM Archeia [email protected] написала:

Здравствуйте, чтобы добавить к этому и просто уточнить, я вообще ничего не делал
с Годо, и я только что опробовал этот проект с тех пор, как
любопытно:
[image: image]
https://user-images.githubusercontent.com/6222499/35776735-0b413ce2-09dd-11e8-81cc-be7a097d61cd.png

Интересно, что у меня нет этой проблемы с 2D кинематическим персонажем.
Демо

-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-362898191 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ABW9yzPGCmyxZONEuNXLFKU_PtY3ADsvks5tRYzmgaJpZM4OlRVq
.

@jonbonazza Я использовал последнюю стабильную версию godot3, и это все еще происходит. На моем изображении это тоже видно в правом верхнем углу T_T)

Кажется, эта ошибка возникает на видеокартах Nvidia, которые старше GTX 970M?

GeForce GTX 970 здесь.

Вот некоторые из моих выводов и простой проект по воспроизведению этой проблемы. (тайловая карта с 2 разными спрайтами, иконка Годо и иконка Годо с инвертированными цветами, с метками над тайловой картой, сцена, которая была преобразована в тайлсет, включена)

Flicker.zip

  • также происходит с метками в этой сцене, отдельные персонажи перемещаются случайным образом (даже вращаются), как и плитки тайловой карты
  • если вы находитесь внутри редактора и перемещаете указатель мыши по сетке при выделенной плитке, вы можете иногда видеть эту проблему в замороженном состоянии, пока не переместите указатель мыши в другой раздел сетки
  • порядок узлов в дереве сцены изменяет частоту этого (если тайловая карта является последним узлом, это происходит чаще с тайловой картой, а если тайловая карта является первым узлом, это чаще происходит с метками)

Изменить: вот скриншот проблемы. Вы можете увидеть две буквы E первой линии, которые странным образом растянуты на одном участке тайловой карты. (красный)

bug

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

Я надеюсь, что это поможет решить эту проблему.

45ab9cdfb55eed4eef59feee225248ccc20a6235
экспортирован (выпуск) из Linux в windows (32 и 64 бит)
Мерцает на Win 10 с Nvidia GTX 750 Ti (нет доступа к этой машине для отладки)

Невозможно воспроизвести на Nvidia GTX 760 с Debian или Win7.

У меня мерцание присутствует с GTX 1060 на Win7. Я действительно надеюсь, что это будет исправлено очень скоро, потому что в настоящее время TileMap просто не может использоваться в производственной среде. :(

Та же проблема с мерцающими линиями между плитками здесь. Проверь это
платформер tut.zip
Очень надоедает и неприятный глюк = (((

@podmentor линии между плитками - это нормально и не связано с этой проблемой. Здесь есть несколько способов решить вашу проблему: http://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html?highlight=tilemap#offset -and-scaling-artifacts

У меня такая же проблема с моей игрой. Но только когда включаю dGPU (Nvidia). Я еще не заметил этого со встроенным графическим процессором Intel.

Примечание, которое может помочь. У меня эта проблема с win10 и nvidia gtx 1070. Но включение ysort на тайловой карте, похоже, остановило глюк.

Обратите внимание, что Ysort заставляет ~~ (Cell) ~ Quadrant Size = 1.

@securas Вау, это действительно сработало! Спасибо за это. :)
@ bojidar-bg Может быть, я неправильно понимаю, что вы имеете в виду, но у меня есть тайловая карта с размером ячейки (16, 16), и включение Ysort ничего не изменило в этом ...

@securas, извините, что задаю этот новенький вопрос, но где я могу найти ysort?

@Archeia Вы можете найти его в разделе «Ячейка» при просмотре тайловой карты.

Изменить: в моем примере сверху метки все еще мерцают даже при включенной Y-сортировке, но я еще не видел мерцания карты тайлов.

Edit2: только что увидел мерцание плитки с включенной Y-сортировкой. Похоже, это не решает эту проблему. Однако, похоже, это случается гораздо реже.

Благодаря! Это исправило для меня.

Спасибо @ bojidar-bg. У меня сложилось впечатление, что размер ячейки был чем-то вроде размера ячеек ... Что вы имели в виду под размером ячейки?

@securas о, мой плохой, я имел в виду размер квадранта. Не знаю, почему я это ошибочно ...

Приносим извинения, если это не добавляет особого к разговору, но я замечаю это мерцание с демонстрацией Kinematic Collision как в редакторе, так и в виде экспортированного исполняемого файла. 64-разрядная версия Windows 10. GTX 1080 Ti. 2 монитора @ 1440p. Я использую самокомпилированную версию godot 3.0.2 stable. Я пробовал это в debug, release и release_debug, и мерцание присутствует во всех случаях.

Изменить: на первый взгляд кажется, что включение ysort для тайловой карты устраняет мерцание.

Я начинаю задаваться вопросом, не проблема ли это в драйвере. Кажется, что каждый, кто сталкивается с этой проблемой, использует карту nvidia, и похоже, что большинство людей используют Windows 10.

Gettnig это тоже, и я на Manjaro, GTX970 здесь

Я могу повторить это, а также могу подтвердить, что включение Y-сортировки исправляет это. Я использую Windows 8.1 с GeForce GTX 1060.

РЕДАКТИРОВАТЬ: На самом деле я думаю, что мерцание может быть связано с размером квадранта, как предлагает @ bojidar-bg. При отключенной сортировке по оси Y я вижу разные уровни мерцания при изменении размера квадранта. Мне еще предстоит наблюдать мерцание в квадрантах размером 1, 2, 64 или 128. Я вижу много в диапазоне 16-32.

@ecdavis Вы уверены, что он полностью перестал

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

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

Archlinux - Nvidia GTX 970 - Godot v3.0.2.stable.custom_build

Если для размера квадранта установлено любое значение! 1, проблема смещения плитки происходит постоянно.

Если для размера квадранта установлено значение 1, не было ни одной смещенной плитки, но возникла ошибка разрыва для нескольких кадров, только один раз. Наверное, не связаны.

Мерцание у меня было исправлено включением Pixel Snap в настройках проекта (Рендеринг -> Качество -> 2d). И у меня была проблема разрыва, которая была исправлена ​​для меня, когда я возился с настройками изображений листов и карт, которые я импортировал. А именно «фильтр» и «мипмапы». Я просто сказал ему использовать предустановку 2d Pixel и установил ее по умолчанию для текстур.

@rosshadden Попробую, когда дома, и

Когда я это сделал, пиксельная привязка была включена, и это не решило проблему.
Я действительно нашел решение.
Если вы включите Y-сортировку по размеру ячейки И увеличите размер квадранта, чтобы он соответствовал размеру ячейки (в моем случае 128), это, похоже, полностью устранит проблему, по крайней мере, для меня.

@irresistiblejelly Как

Необходимо провести исчерпывающее тестирование, чтобы точно определить проблему.

Я только что попробовал включить Pixel Snap, предложенный устранил это для меня.

Это все еще происходит в iOS и macOS, а не на Android.
Я активировал Rendering -> Quality -> 2d -> Pixel Snap, что помогло снизить частоту, но это все еще происходит.
captura de tela 2018-05-02 as 15 00 15
captura de tela 2018-05-02 as 15 00 11

@ByTheQuietLake , вы видели эту проблему раньше? Я считаю, что вы первый, кто столкнулся с картой не от NVIDIA.

Тогда это вполне может быть проблемой с драйвером nvidia.

Проверял на Windows 10 с помощью Godot 3.0.2:

  • Nvidia 1070 GTX (драйвер 397.64): Возникла проблема.
  • Intel HD 4600: проблемы НЕ возникает.

Это определенная проблема, которая возникает, по крайней мере, с пользователями с графическим процессором Nvidia. Я заметил, что плитки случайным образом рисуются вокруг сцены в режиме редактирования, когда курсор мыши перемещается по сцене и боковым вкладкам. Также это происходит при запуске игры. Интенсивность действительно уменьшается при установке размера квадранта на 1 (Сортировка Y устанавливает его на 1), но это все равно происходит, и это отменяет оптимизацию на больших картах, вызывая сильное снижение частоты кадров.

У меня также возникали сбои при попытке установить размер квадранта обратно на 1 (или при попытке проверить сортировку по Y) после изменения настройки на большой карте (я открыл проблему с # 19617). Похоже, это показывает, что задействована чрезмерно тяжелая обработка (или, возможно, утечка памяти?), И может быть связана с общей проблемой, связанной с тем, как кодируются TileMaps для визуализации, из-за чего плитки рисуются нерегулярно. Я подозреваю, что проблема в tile_map.cpp и, возможно, в VS или другом коде, обрабатывающем отрисовку плиток.

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

Это действительно нужно изучить и разобраться, так как у многих пользователей есть карты Nvidia, а публикация на рабочем столе означает, что многие люди с картами Nvidia будут играть в игру и замечать эти проблемы.

Кажется, что проблема может быть связана с «PowerMizer», когда предпочтительный режим установлен на «Адаптивный», уровни производительности уменьшаются до нуля (через 35 ~ 40 секунд), а затем начинается мерцание, но если я установил «Предпочитать Максимальная производительность », мерцание исчезает.

Я тестировал Linux (драйвер 390.59 и 396.24) и Windows (драйвер 388.71 и 398.11).
~ В Windows после обновления моего драйвера до 398.11 кажется, что проблема исчезла ~
captura de tela de 2018-06-18 14-06-54

Видео, которое я записал, показывает ошибку: https://youtu.be/R6TLpDX71RQ?t=32s
Если кто-то хочет протестировать, вот используемый проект: Flicker.zip

Обновить:
В моем примере я не использую TileMap, это просто простые функции рисования (draw_line и draw_rect) для создания этой сетки.

@guilhermefelipecgs Я действительно не думаю, что это верное решение. Я предполагаю, что Nvidia X Server - это программа для ОС Linux, аналогичная Панели управления Nvidia с Windows 10. Я установил для параметра управления питанием значение «предпочитать максимальную производительность» внутри и, кажется, уменьшает количество перемещаемых плиток, но я все еще видел, как это происходило после изменение настройки. Эта ошибка необычна тем, что не всегда проявляется при использовании программы, но все же возникает. Может быть, вам стоит попробовать это с настоящим TileMap.

Даже если эта настройка сработает. ПОЧЕМУ это сработает? Разве установка диспетчера питания на максимальную производительность не означает, что код сильно нагружает процессор? Мне показалось, что это имело значение, но полностью не решило проблему. Я все еще могу ловить рисунок плитки неуместно.

@ jamesaddy789 Я не говорю, что это решение, просто пытаюсь понять, что могло его вызвать. Я был заинтригован, потому что, когда я использую свой Intel GPU, он работает нормально, происходит только с nvidia, и я заметил, что когда часы gpu падают, появляется мерцание, но это может быть просто совпадение, я не знаю. Я также пробовал с TileMap, и, по крайней мере, я думаю так же.

Странно, что у вас не было такого опыта, как у меня. Просто для любопытства, какая у вас версия драйвера nvidia?

@guilhermefelipecgs Это версия 398.11. Кажется, PowerMizer - это приложение для ноутбука, тогда как я использую настольный компьютер, поэтому у меня нет этой программы. Я просто изменил настройку управления питанием на «предпочитать максимальную производительность» в Панели управления Nvidia. Это действительно уменьшило количество перемещенных плиток, но при запуске игры я все еще заметил это. Подобно установке размера квадранта на 1, это уменьшило частоту, но полностью не решило проблему. У меня все еще есть проблема, что если я изменю размер квадранта на 1 на большой карте, редактор выйдет из строя. Это также реже после изменения настройки на максимальную производительность, но я тестировал это только сейчас, и он разбился.

Примечание. Мой графический процессор - Nvidia Gtx 1060 6 ГБ с вышеупомянутым драйвером. Моя ОС - Windows 10 Professional.

Я тоже использую здесь ПК. В WIndows панель управления действительно немного отличается, вариант, который вы изменили, это тот же вариант, который я тестировал здесь. Не знаю, что делать. Эта ошибка очень утомительна. :(

Проблема должна быть в коде рендеринга. У меня недостаточно опыта работы с кодом движка, чтобы проверить и разобраться самостоятельно. Интересно, что вы (@guilhermefelipecgs) заметили проблему при рисовании сетки вручную. Я думал, что проблема заключалась исключительно в исходном коде TileMap.

Если прямоугольники нарисованы повсюду, даже когда не используется узел TileMap, я должен предположить, что ошибка также активна в функции draw_rect () (в исходном коде на https://github.com/godotengine/godot/ blob / master / scene / resources / texture.cpp в строке 47).

Drawing TileMaps использует VS в большинстве своих функций (в https://github.com/godotengine/godot/blob/master/scene/2d/tile_map.cpp), а функция draw_rect () использует VisualServer (я предполагаю, что это тоже самое).

Почему это повлияет на видеокарты Nvidia? Я не вижу проблем этого типа в других программах (других игровых движках), поэтому я могу стремиться только к тому, чтобы это была проблема в исходном коде, которая по какой-то причине влияет (по крайней мере, более заметно влияет) на графические процессоры Nvidia.

@guilhermefelipecgs После изменения настроек управления

Я на 98% уверен, что это проблема с драйверами. Установка драйвера nvidia Power management mode на Prefer maximum performance похоже, решает проблему.

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

Я пытался получить трассировку графического процессора с помощью RenderDoc около 4 часов, включая режим низкого процесса в игре (то есть 1 кадр в секунду в основном), но, хотя я думаю, что смог захватить некоторые проблемные кадры, я не мог видеть любая ошибка в командах opengl или реконструированный кадр из RenderDoc. Опять же, я ДУМАЮ, что у меня есть несколько проблемных кадров ... их довольно сложно получить, когда они случайные.

Я также зарегистрировал прямоугольники, которые отправляются шейдеру для рисования каждого прямоугольника в файл, и искал любой прямоугольник за пределами x <60 или x> 420 или y <60 или y> 420 или с шириной или высотой, отличной от 20 и Я ничего не нашел и на 100% уверен, что там должны быть плохие участки, потому что я видел их во время запуска проекта и его регистрации. Вот журналы godot_tilemap_issue_logs.zip, если вы, ребята, чувствуете, что хотите их просмотреть (145 - это элемент, избавленный, затем куча прямоугольников, затем снова 145, затем снова прямоугольники ...) В журнал записывается dst_rect отсюда https: / /github.com/godotengine/godot/blob/master/drivers/gles3/rasterizer_canvas_gles3.cpp#L687 -L701

Вот сборка Windows и модифицированное мерцание, которое я использовал для регистрации изменений. Если вы хотите зарегистрировать его, используйте что-то вроде godot.windows.opt.tools.64.exe > log.txt в cmd (не PowerShell, потому что он использует другую кодировку, и это боль)

Для справки, я пробовал как тест Flicker @mrcdk (Wine), и не смог воспроизвести мерцание в следующей системе:

  • Mageia 6 x86_64
  • X11 1.19.5, Plasma / KWin 5.12.2 (протестировано с включением и выключением композитинга)
  • Ноутбук Optimus, использующий Nvidia GTX 670MX через Nvidia PRIME (драйверы 390.59)
  • Протестировано с включением и выключением Godot vsync, а также с включенными и выключенными драйверами vsync

Возможно, ошибка драйверов затрагивает только настольные ПК или новейшие графические процессоры.

Это мое предположение, так как 7 дней возникают проблемы с картами серии 10.
в гораздо большем масштабе. Я получаю случайное падение частоты кадров со 160 до 10 без причины
на минимальных настройках с Nvidia GeForce 6Gb gtx 1060. Настольный ПК

Вт, 19 июня 2018 г., 09:04 Реми Вершельде, [email protected]
написал:

Для справки я пробовал оба @guilhermefelipecgs
https://github.com/guilhermefelipecgs Flicker test (Linux x86_64) и
@mrcdk https://github.com/mrcdk модифицированная версия (Wine) и не могла
воспроизвести любое мерцание на следующей системе:

  • Mageia 6 x86_64
  • X11 1.19.5, Plasma / KWin 5.12.2 (протестировано с включением и выключением композитинга)
  • Ноутбук Optimus, использующий Nvidia GTX 670MX через Nvidia PRIME (драйверы
    390,59)
  • Протестировано с включением и выключением Godot vsync, а также с драйверами vsync ON и
    ВЫКЛ.

Возможно, ошибка драйверов затрагивает только настольные ПК или новейшие графические процессоры.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-398311432 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AS-y9jLkTsEpQyBdu204PCK63wHgD1dxks5t-LCXgaJpZM4OlRVq
.

@ akien-mga меняет ли частота графики во время выполнения теста, как @guilhermefelipecgs показывает в их видео?

изменяется ли частота графики во время выполнения теста, как показывает @guilhermefelipecgs в своем видео?

Это не меняется, когда я запускаю Godot, он переходит на максимальное значение часов и остается там. Это объясняет, почему я не вижу мерцания, согласно видео @guilhermefelipecgs , это происходит только при понижении частоты (я думаю, моя карта недостаточно мощна, чтобы хотеть

screenshot_20180619_191134

Когда вы думаете, что это не может быть более странным ...

Я создал новый проект и заметил 2 странных поведения.

1) Я «точно» знаю, где будет мерцание.
2) Control 3 никогда не "мерцает".

Попробую объяснить, что происходит:
1) Я добавил 4 элемента управления на сцену вот так:
captura de tela de 2018-06-19 15-45-25
Все элементы управления используют один и тот же базовый код. Control 1 будет единственным узлом с мерцанием.

2) Через некоторое время (20 ~ 50 секунд) Node.gd переродит узлы, например:
captura de tela de 2018-06-19 15-50-18
Затем мерцание переместится с Control1 на Control 2 , то есть мерцание будет только у первого дочернего элемента.
Примечание 1: я думаю, что это, вероятно, происходит потому, что функции рисования будут поставлены в очередь в порядке узлов.
Примечание 2: Control 2 использует draw_texture , этот метод также имеет мерцание.

3) Когда Control 3 становится первым потомком, мерцание волшебным образом исчезает, и причина в этом флаге:
captura de tela de 2018-06-19 15-45-52
Флаг Invert указывает коду инвертировать функции рисования, поэтому мой код будет вызывать сначала draw_line а затем draw_rect , поэтому красные прямоугольники будут перед сеткой.

4) И, наконец, мерцание возвращается в Control 4 , здесь я вызываю только draw_rect .

Я забыл сказать раньше, что у меня GTX970.

В Windows я использовал программу, чтобы увидеть, как меняются часы моего графического процессора:
whatsapp image 2018-06-19 at 14 13 41
* Проблема также затрагивает Windows с последней версией драйвера (398.11), но реже, и мне нужно подождать еще немного. Не обращайте внимания на версию диска на этом снимке экрана, я просто понижаю версию своего диска, чтобы посмотреть, есть ли в нем какие-либо различия.

Новый проект: Flicker_2.zip
Видео 1: https://youtu.be/01LWVQqp5yg
Видео 2: https://youtu.be/XTKTe9aZAuU?t=50s

Я должен попробовать 5-8 раз, пока не получу более интенсивное мерцание. Кажется, что чем больше играю, тем интенсивнее эффект.

Видео 2 - это то же самое, что и видео 1, но по какой-то причине уровень производительности увеличивается в последней части видео, и когда это происходит, вы можете заметить, что мерцание исчезает.

Видео записываются в Linux (поскольку в Linux ошибка более выражена) с частотой 60 кадров в секунду.

Я на 98% уверен, что это проблема с драйверами.

Согласен, посмотрел код (годот) и ничего странного не нашел.

Хорошо, я смог запустить проект с apitrace, и теперь я на 99,9998% уверен, что это проблема с драйвером, связанная с Power management mode Вот файл flicker_trace.zip, так что вы, ребята, тоже можете запустить его на своей

А вот видео, которое я записал: https://streamable.com/yk1qq Качество довольно плохое, поэтому вот оригинал (который не намного лучше 😅)

Первые 20 секунд - это запуск проекта и ведение журнала. Я забыл свернуть OBS в первый раз, когда использовал apitrace, и мои часы gpu были заблокированы на максимум (это график в правом верхнем углу), и мерцания не было. Перейти к ок. 3:15, где я свернул OBS и обнаружил ошибку при воспроизведении трассировки. Затем я использовал параметр Show thumbnails чтобы создать эскиз для каждого кадра. Затем я просмотрел эскизы, пока не нашел кадр с ошибкой. Я запустил lookup state чтобы получить состояние opengl этого конкретного фрейма, и после его завершения показал фреймбуфер без ошибки.

Итак, если эта проблема была вызвана Годо, не только трассировка должна показывать ее каждый раз (это не первый раз, когда я запускаю ее, когда я оставляю OBS открытым), а эскиз и фреймбуфер состояния поиска должны выглядеть одинаково (что они явно не сделали).

Итак, что мы можем здесь сделать? Я не думаю, что у нас (как сообщества) обязательно есть влияние, чтобы инициировать изменения со стороны самой NVIDIA. Или мы?

Итак, что мы можем здесь сделать? Я не думаю, что у нас (как сообщества) обязательно есть влияние, чтобы инициировать изменения со стороны самой NVIDIA. Или мы?

ИМО, попробовать стоит :) В худшем случае мы не получаем ответа, но было бы неплохо открыть ветку об этом на форуме разработчиков Nvidia.

Привет, ребята,

Мне интересно, возникает ли проблема, когда вы используете Nvidia Inspector и отключаете CUDA - Force P2 State? Это была проблема, которая вызвала мерцание в некоторых других проектах (например, OBS). Я хотел бы знать, является ли это проблемой с питанием, поскольку я вижу аналогичную проблему в другой (не годовой) игре и начинаю подозревать проблему с драйвером. GTX750 здесь.

У меня все еще такая же проблема с Godot v3.0.6, и загрузка последних версий драйверов Nvidia вообще не помогает с этой проблемой. Я использую видеокарту Nvidia GTX 750 TI. Есть ли способ исправить эту проблему? Кроме того, когда я запускаю игру в веб-браузере, проблема с миганием вообще не появляется?

Кто-нибудь уже обращался к nvidia по этому поводу?

есть эта проблема ty @guilhermefelipecgs для этого видео, именно то, что происходит со мной.
Я использую gtx 950. Я пробовал использовать размер квадранта && ysort, но безуспешно.

Я не уверен что делать. собирался сделать новую проблему, но решил, что вместо этого опубликую ее. Я тоже использую Godot v3.0.6

Кто-нибудь пробовал с версией 3.1 альфа с активированным GLES2.0? Может быть, это проблема с драйвером OpenGL3 x nvidia?

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

Кроме того, кто-нибудь тестировал это с помощью рендера GLES2?

@reduz извини, что это заняло так много времени. наконец получил 3.1 для компиляции
да, я могу подтвердить, что мерцание все еще происходит на рендерере GLES2

Я провел некоторое тестирование с этим, и я не могу вызвать мерцание черной плитки на наборе тайлов размером 128x128 ячеек (квадрант 16).
Я не уверен, что это поможет, но я думаю, что это что-то
e: кстати, если кто-то хочет, чтобы я отредактировал какой-нибудь код на С ++ и перекомпилировал его для тестирования, просто lmk
e2: nvm он только что вернулся. да, это гораздо реже

Я нашел временное решение, которое на самом деле работает довольно хорошо. (если кто-то скоро выпустит свою игру)

- в плиточном :

  • создайте новую мозаичную карту и установите количество плиток 40x40
  • выберите свой набор плиток земли
  • затем щелкните инструмент заливки ведра на верхней панели заголовка (клавиша f ), щелкните в любом месте сетки плитки
  • теперь перейдите в файл -> экспортировать как изображение, снимите флажок _draw tile и включите цвет фона_, нажмите экспорт.
  • перейдите на tinypng.org, сожмите его (я сохранил 71% размера файла).

- в годо:

  • добавьте узел спрайта к слою карты листов.
  • установить текстуру спрайта на изображение, экспортированное из плитки.
  • установите параметры шага сетки, чтобы они соответствовали размеру вашей ячейки (в моем случае это было 48x48)

image

теперь вы можете просто нажать ctrl + d на спрайте и привязать его. нет мерцания, и производительность отличная (Godot внутренне отображает только то, что находится на холсте)

e: надеюсь, это поможет. это немного странно, но это решение (не лучшее, но кое-что)
e: вы все еще можете использовать другие слои тайловой карты для объектов и прочего. это только для земли, чтобы остановить мерцание, сохраняя при этом хорошую производительность (включение ysort на слое тайловой карты земли плохо снижает fps)

@ByTheQuietLake np, с удовольствием! У меня nvidia gtx 950, и я могу подтвердить его работу. не видел мерцания черной плитки более 20 часов . в редакторе или в игре. единственное, что я заметил, это то, что время загрузки увеличилось примерно на 20 мс (что на самом деле почти ничего), но это просто потому, что изображение огромно. однако при перемещении по карте с вашим персонажем он кажется таким же плавным, как если бы он был тайловой картой.

не уверен в гибкости. Короче говоря, просто создайте плитки земли в плитке, экспортируйте как изображение и используйте их как спрайт в качестве дочерних элементов в вашей карте плиток. затем, как только reduz / nvidia devs / etc найдет исправление, просто удалите свои старые спрайты и используйте тайловую карту, как обычно. это должен быть легкий переход.

решение сработало или нет, если у вас нет nvidia gpu :(

e: эта ошибка возникает только с nvidia gpus bythequietlake

Это мой первый пост на github, и я прошу прощения, если он не в том месте (нашел эту ветку в google).

Я недавно столкнулся с этой же проблемой после преобразования игры из 2.1. Решение Girng действительно работает для меня, но кажется немного взломанным. Я также заметил небольшое смещение между текстурой узла Sprite и текстурами ячеек тайловой карты при перемещении (используя его решение). Это не было очевидно при использовании тайловой карты пола.

Я использую GTX 960. Я не могу найти никаких настроек PowerMizer в Windows 10 (из сообщения guilhermefelipecg выше). Это может быть из-за того, что я использую Windows, а может, это связано с Linux. Я также читал выше, что даже это не помогло.

Это может быть немного не по теме, но следует ли мне оставаться на версии 2.1, пока это не будет исправлено, или мне нужно будет скомпилировать «специальную версию» Godot?

С уважением,

--Аарон

Тот же вопрос, что и Аарон, есть ли у нас другие варианты? Это очень неприятная проблема, из-за которой Godot не подходит для производства, пожалуйста, уделите ей более высокий приоритет.

Я обнаружил, что у меня сработало отключение HDR в настройках проекта.

Я обнаружил, что у меня сработало отключение HDR в настройках проекта.

Не для меня, единственное, что сработало, - это включить Ysort, но это не совсем жизнеспособный вариант (устанавливает размер квадранта на 1)

Я тоже сталкивался с этим ... и мог последовательно воспроизводить каждый раз, когда запускал сцену.
Кто-нибудь пробовал возиться с настройками качества рендеринга? В частности, установка Framebuffer Allocation в 2D?

Пока похоже, что это может работать ... или, по крайней мере, заставляет это происходить гораздо реже (я не видел, чтобы мерцание повторялось снова ..._ пока_)

@ByTheQuietLake пока что не похоже на мерцание вообще.

@XNargaHuntress правда? Что вы установили для выделения фреймбуфера? это могло бы быть хорошим временным исправлением
изменить: nvm прочитал это неправильно, собираюсь проверить это для 2d фреймбуфера

@XNargaHuntress У меня все еще происходит мерцание, когда для параметра Framebuffer Allocation установлено значение 2D. Я чувствую, что сейчас это происходит еще чаще, но это могло быть совпадением.
Я использую Nvidia GTX 750 Ti на Windows 7 x64, стабильную версию Godot 3.0.6.

Изменить: я просто попытался установить для выделения фреймбуфера значение «2D без выборки». По-прежнему мерцает.

Изменить 2: Мерцание также происходит с Godot 3.1 alpha с использованием средства визуализации GLES3. Но при использовании рендерера GLES2 я вообще не заметил мерцания.

Возможно, я могу ошибаться, но после последнего обновления драйвера nvidia я не видел никакого мерцания до сих пор. Полностью протестирую, когда буду дома сегодня.

GTX 1050TI, Windows 10, Godot 3.1 альфа

РЕДАКТИРОВАТЬ: После большого количества тестов он снова показал ... но очень мало ... но все еще там

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

Помните, что драйвер GLES2 не показывает эту проблему на Мастере.

Установка масштаба камеры обратно на (1,1) могла бы решить проблему для меня, ранее я установил его на (0,5, 0,5), и я видел мерцание. Пока мерцания не вижу. Кто-нибудь еще может подтвердить?

Пока опция ysort выключена, я всегда мерцаю.

В понедельник, 19 ноября 2018 г., в 14:10 mikeleeman [email protected] написал:

Установка масштаба камеры обратно на (1,1) могла бы решить проблему для меня,
ранее я устанавливал его на (0,5, 0,5), и я видел мерцание. Пока я не
видя любое мерцание. Кто-нибудь еще может подтвердить?

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-439773424 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ACv4240No-elY7BK16HKAmxhHrFRaOj4ks5uwj1UgaJpZM4OlRVq
.

@mikeleeman Все еще происходит на GLES3 с GTX 960. Пробовал режим 2D-буфера кадра, манипуляции с камерой и т.д. На данный момент я думаю, что Vulkan - наша единственная надежда.

NVIDIA до сих пор не исправила проблему блокировки кеш-памяти шейдерного диска. Это печально, потому что люди, использующие Windows с картами NVIDIA, не раскрывают весь потенциал Godot.

Большинство поставщиков в последнее время не рассказывают об OpenGL, и работать с этим довольно сложно.
На данный момент лучший обходной путь в Godot 3.1 - переход на OpenGL2, где он работает нормально.
В конце концов, GLES3 станет устаревшим для Vulkan, и мы надеемся, что этого больше не будет.

Все еще происходит в 3.1alpha с GLES2 (как показано в правом верхнем углу этой гифки):
sssaturday5

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

  • Используйте узлы Sprite для каждой отдельной плитки земли. Включите привязку при редактировании, чтобы было легче имитировать тот же макет земли. На самом деле это не проблема производительности, которую я обнаружил. Это отнимает много времени и немного странно делать. Это явно не идеально, но на данный момент помогает.

Я также могу подтвердить, что это происходит и на GLES2: / (последняя сборка b47d4e1ba5d72bac5c2e671d9e4c0ae037a248c0)

Это даже близко не к действительной работе. Вы теряете буквально все причины для использования тайловых карт.

Это даже близко не к действительной работе. Вы теряете буквально все причины для использования тайловых карт.

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

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

В прошлый раз я также пробовал рисовать тайлы на canvasItem с помощью функций draw_rect, эмулировать тайловую карту и вызывать update () в canvasItem только один раз, поэтому он рисует только один раз в начале программы. Удивительно, но у canvasItem тоже есть похожие случайные мерцания (может быть, реже?), Но только при увеличении масштаба камеры (0,5,0,5), но не когда камера находится в положении (1,1). Я знаю, это звучит странно, может я что-то неправильно понял.

Теперь мерцания больше не происходит, как для тех, которые используют настраиваемый отрисовку canvasItem, так и для тех, которые используют TileMap по умолчанию Godot. Я подозреваю обновление драйвера? Моя карта - Nvdia GeForce GTX 970, на Windows. Боковое примечание: может ли кто-нибудь проверить установленную на данный момент версию openGl? Я слышал, что на linux это проще сделать.

edit: Я думаю, что неопределенность нехороша, нужен Vulkan, чтобы убедиться, что нет проблем.

Я изменил способ их отрисовки в рендерере OpenGL ES 2.0, поэтому он определенно должен работать нормально. В OpenGL ES 3.0 любой обходной путь, который я могу придумать, скорее всего, снизит производительность, поэтому приоритет будет отдаваться максимальному значению, чтобы заставить Vulkan работать как можно скорее после выхода версии 3.1.

Пожалуйста, подтвердите, если вы можете, что это больше не дает сбоев в рендерере OpenGL ES 2.0.

@reduz Я тестировал здесь несколько минут, но этого не произошло. Спасибо, что исправили это! :)
Заметка:
Я не знаю, связано ли это, но я все еще вижу некоторые горизонтальные белые линии между плитками, когда камера трясется.

спасибо reduz за исправление OpenGL ES 2.0!

@mikeleeman и другим:
вот последние 3 примечания к патчу с 20 ноября для карт NVIDIA GeForce:
20 ноября , 3 декабря и 12 декабря . список исправленных проблем находится на странице 15 .

единственная проблема, которую я обнаружил, которая может быть актуальной (не уверен), - 12 декабря:

  • [Hitman 2 Silent assassin]: в игре присутствует мерцающее искажение текстуры.
    [200472315]

Я также заметил, что кое-что пошло не так с моей тайловой картой:
capture3

Я не уверен, что могу сделать для этого больше, чем текущее исправление. После выхода версии 3.1 эта ошибка, скорее всего, не будет присутствовать в Vulkan, и теперь она должна исчезнуть из модуля рендеринга ES2.

Тестируя альфа 4, я видел это с помощью GLES2 и GLES3. Никаких шейдеров, ничего особенного. Просто тайловые карты.
test

@securas Вы используете камеру с зумом?

нет

Сб, 29 декабря 2018 г. в 00:35 Guilherme Felipe de CG da Silva <
[email protected]> написал:

@securas https://github.com/securas Вы используете камеру с зумом?

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-450378016 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ACv425NmiZKRUJHDzxg0NPB-PszWJaa2ks5u9jpGgaJpZM4OlRVq
.

@securas Это похоже на другую проблему, это скорее проблема с правильностью пикселей, чем с мерцанием плитки.

@ akien-mga Достаточно честно ... Такое случается только с тайловыми картами, так что я решил, что это здесь.

@ gcardozo123 мне кажется # 24642, скоро будет пиар

Переместим это на 3.2, так как на данный момент ничего другого сделать нельзя. Также надеюсь, что nvidia исправит это навсегда, я связался с ними напрямую, чтобы убедиться, что это тоже исправлено с их стороны. Надеемся, что с переписыванием Vulkan этого больше не будет, но пока используйте GLES2.

извините, не хотел закрывать

есть ли другие игровые движки с открытым исходным кодом, использующие GLES3, у которых есть класс тайловой карты или какой-либо рендеринг, на который можно было бы посмотреть? Я просто смотрел на даты, прошло уже более 530 дней, и они будут отложены еще дольше: /

Я обратился к Godot Dev по Discord (@ bojidar-bg) и получил обширную помощь. Я пытался показать проблему, но не мог отобразить черные плитки во время записи в OBS. Затем он порекомендует мне изменить некоторые настройки в панели управления NVIDIA.

информация: fa7329f6485058fde30b8e2bfe26291dfbfc4434, GLES3, W10-64bit, GTX950

  • Перейти к NVIDIA Control Panel
  • Нажмите на Manage 3D settings
  • Прокрутите вниз до режима управления питанием , измените его с оптимальной мощности на максимальную производительность.
    image
  • Нажмите Применить

я еще не видел ни одного черного названия (игра перезагружала примерно 20+ раз, и буду продолжать тестировать, пока коровы не вернутся домой). Все идет нормально! надеюсь, что это поможет, и большое спасибо Bojidar!

girng: Я видел такое же явление в экспорте. Вот где меня больше всего беспокоит. Нам не нужно просить наших конечных пользователей изменить настройки графического процессора, чтобы плитки не исчезали периодически. Вы не пробовали последнюю бета-версию 3.1 с хаком nvidia tile?

  • Прокрутите вниз до режима управления питанием , измените его с _оптимальной мощности_ на максимальную производительность.

Разве это не означает ошибку драйвера, я не уверен, как двигатель может обойти каждую потенциальную ошибку драйвера.

@ OvermindDL1: Да, Редуз заявил, что связался напрямую с разработчиками nvidia, за что очень признателен! я доволен решением режима управления питанием для разработки . Я думаю, это должно задержать нас, пока сами nvidia не исправят это.

@agameraaron Я использую только gles3 (игра связана с частицами графического процессора). извините, не могу комментировать плиточный взлом. но я слышал, что это работает

Из того, что я только что обсудил с представителями NV, они говорят, что больше не могут наблюдать за этой проблемой. Ребята, можете ли вы попробовать с последними версиями драйверов и, если это не поможет, сообщить немного больше информации о вашем оборудовании? (Модель графического процессора, установленный драйвер, настройки управления питанием)?

@reduz протестирован на последней версии драйвера ( 419.17 ). мерцание плитки теперь происходит в следующих режимах питания: предпочтение максимальной производительности , оптимальное и адаптивное .

GTX 950, W10, GLES3

  • при открытии OBS studio мерцание исчезает

@reduz @girng @xsellier
GTX 1070, GLES2, W10
Последний драйвер 419.35
Нет мерцания независимо от используемого режима питания 👍

GLES3, похоже, тоже работает .. также обнаружил эту проблему при переполнении стека:
мерцание экрана gles2

GTX 1060, W10
С тем же драйвером, что и выше (419.35), мерцание все еще происходит как в GLES2, так и в 3.
Вам просто нужно щелкнуть в пользовательском интерфейсе и навести указатель мыши на элементы управления, так как настройка перерисовки по умолчанию теперь «при изменении», которую можно изменить, щелкнув кружок в правом верхнем углу.

Использовал старый проект, который я опубликовал в https://github.com/godotengine/godot/issues/9913#issuecomment -364707061, все еще происходит - метка и карта плитки мерцают, а буквы странным образом растягиваются на некоторых плитках.

Screenshot_20190322_021011

попробуй этот вариант.

Я знаю об этой опции, которая работает только в GLES2.

@reduz @girng @xsellier
GTX 1070, GLES2, W10
Последний драйвер 419.35
Нет мерцания независимо от используемого режима питания 👍

GLES3, похоже, тоже работает .. также обнаружил эту проблему при переполнении стека:
мерцание экрана gles2

Комментарий выше просто предполагает, что проблема больше не существует.

@MennoMax, вы правы, мерцание все еще происходит .. но обходной путь для GLES2 работает, надеюсь, поддержка Vulkan скоро появится 🙏

@ gavriil07 проблема в том, что обходной путь gles2 означает, что вы не можете использовать частицы графического процессора: /
Кроме того, мерцание было исправлено на gles3, когда я писал 11 февраля (с режимом мощности, установленным для предпочтения максимальной производительности). теперь мерцание вернулось и происходит во всех трех вариантах режима питания с новыми обновленными драйверами. не имеет смысла, в одной из их версий драйверов исправлено мерцание при выборе максимальной производительности, теперь в новых драйверах это не исправлено.

@girng, какое отношение это имеет к частицам
@reduz у вас есть прибытия для предварительного рендерера Vulkan?

@ gavriil07, если в игре используется GLES3 (с частицами графического процессора), на самом деле это не обходной путь для использования gles2. Потому что тогда частицы графического процессора не поддерживаются

@girng CPUParticles все еще можно использовать в GLES2; их достаточно для многих случаев использования (что особенно актуально в более простых 2D-играх). Пожалуйста, продолжайте обсуждение по теме: слегка_smiling_face:

Хотя CPUParticles все еще можно использовать в GLES2; их достаточно для многих случаев использования (что особенно актуально в более простых 2D-играх). Пожалуйста, продолжайте обсуждение по теме

я говорю о частицах графического процессора, а не о процессоре

Видел сообщение на https://www.reddit.com/r/godot/comments/9ljor3/psa_tilemap_flickering_possible_fix/, написанное несколько месяцев назад, в котором говорится: «Попробуйте отключить HDR в настройках проекта». (Рендеринг -> Качество -> Глубина -> HDR)

Я пробовал это в проекте GLES3, и, похоже, у меня это работает (Nvidia 970 версии 415.27, Linux Mint). Извините, если это повторное сообщение.

Я могу сказать, что эта ошибка существует для драйвера GLES2 на моем Nvidia gtx760 (Windows 10 x64). Видео ниже:

https://www.youtube.com/watch?v=TM1BN4uwMfA
Первый случай, когда это происходит в видео, происходит в 0:36 и повторяется снова примерно через 5 секунд.

Исправление GLES2, похоже, решило проблему для меня.

У меня сработало отключение HDR в настройках проекта. Благодаря!

Windows 10 Pro, 64-разрядная.
драйвер nVidia 430.39

Годо 3.1.1 стабильный
Модуль визуализации OpenGL ES 2.0: GeForce GTX 1080 / PCIe / SSE2

Мерцание случается.

Отключение HDR в основном устраняет мерцание, но в некоторых ситуациях оно возвращается, и я не мог сузить его.

Windows 10 Домашняя
Годо 3.1 стабильный
GTX 1070, драйвер 430.86
GLES 3.0 при включенном HDR мерцание, выключение исправляет.

Протестировали это с помощью настраиваемой сетки (Node2D со спрайтами в качестве дочерних элементов)

Годо 3.1.1 стабильный
Windows 10
Драйвер GTX1080 430.86
GLES 3.0 с выключенным HDR мерцание продолжается, при включении «предпочитаю максимальную производительность» похоже, что оно исчезает (спасибо разработчику за частичное решение). Рад видеть, что разработчики знают об этом, похоже, это больше проблема nvidia, чем Godot. У любого 1 с картами AMD есть эта проблема?

GLES 3.0 с выключенным HDR мерцание продолжается, при включении «предпочитаю максимальную производительность» похоже, что оно исчезает (спасибо разработчику за частичное решение). Рад видеть, что разработчики знают об этом, похоже, это больше проблема nvidia, чем Godot. У любого 1 с картами AMD есть эта проблема?

Проблема не возникает с картами AMD (кстати, название говорит о драйверах nvidia)

Эта проблема возникает в Godot 3.1.1 на OpenGL ES 3.0 Renderer: GeForce GTX 1060 6GB/PCIe/SSE2 .
У меня нет тайловой карты, только куча нестандартных draw_texture() . Я получаю случайные точки мерцания, но иногда это глюк почти во весь экран.

На данный момент я думаю, что Vulkan будет решением этой проблемы раз и навсегда.

У меня тоже появилось странное мерцание в моем проекте, хотя настройка Gles 2 Use Nvidia Rect Flicker Workaround исправила это.

Screen record from 2019-08-01 19 18 43

Может воспроизводиться на стабильной сборке 3.1.1 с GTX 980.
Отключение HDR решает проблему для меня.

Просто обновление, что я все еще вижу всплывающие плитки, и я пробовал все, что здесь упоминалось. Я могу только надеяться, что Vulkan сможет это исправить, но было бы неплохо, если бы они смогли это исправить и для 3.2.

В последнее время я был очень позитивным, но эта ошибка действительно утомляет меня и становится очень вредной для моего рабочего процесса (я перепробовал все). До такой степени, что я боюсь нажать F5 из-за неизбежного мерцания черной плитки. Я могу терпеть мерцание один раз в синюю луну или что-то в этом роде, но теперь мерцание - постоянное явление. Я люблю Годо, пути назад нет, но это очень расстраивает.

Я не люблю писать подобные посты, потому что это бесполезно и выглядит плаксивым, но я не знаю, что еще сказать / сделать. В то же время я хочу, чтобы основные разработчики знали, как эта ошибка влияет на работу Godot. 😭 Пожалуйста, @reduz / core разработчиков, если вы можете пролить свет на статус этой ошибки и какое возможное решение (Vulkan?), Было бы здорово!

Windows 10 Домашняя
Драйвер Geforce GTX 1060 версии 440.97
Godot 3.1.1 стабильная с использованием GLES3
Я попробовал несколько предложений, перечисленных здесь (отключение HDR, выбор опции «Gles2 использует обходной путь nvidia rect flicker» и изменение моих настроек производительности), и ни один из них не помог решить проблему.

То же самое здесь, мерцание. Имейте 3 тайловых карты, 1 для уровня воды и 1 для уровня земли, 1 для облаков с включенной Y-сортировкой.

Windows 10 Домашняя
Последний драйвер Geforce GTX 1060
Бета-версия Godot 3.2, собранная на прошлой неделе с использованием GLES3
gdscript, отключите HDR

Смотрите, как водяные плитки периодически всплывают или мерцают.

Обновлено:

Похоже, мне нужно использовать GLES2 и щелкнуть штуку «NVIDIA flicker fix», чтобы мерцание исчезло. Может ли это исправление быть случайно адаптировано к GLES3?

Я только что купил новый ASUS RTX2060, надеясь, что это решит проблему, но, увы, этого не произошло. Мигание продолжается. Собираюсь попробовать сборку с ветками 3.2 и VULKAN.

Windows 10
RTX 2060 Последний драйвер
Годо 3.1.1

О БОЖЕ
Все пробую, но все еще есть, у меня игра работает с GLES2 даже активирую "2d / gles2_use_nvidia_rect_flicker_workaround", но все равно мерцает.
Я люблю Godot даже больше люблю Godot новой версии 3.1, но, пожалуйста, решите эту проблему.

Хорошая новость в том, что сборка VULKAN устраняет эту проблему. Поэтому я не знаю, будет ли это когда-либо исправлено в ветке 3.X.

Итак, когда появятся Годо со встроенным VULKAN?

Насколько я знаю из комментариев выше, это не будет исправлено в Godot 3.x, что предотвращает любой проект на основе тайловых карт с GLES 3. Разработчики заявляют, что это проблема NVIDIA, поэтому они мало что могут с этим поделать. . Вы можете либо дождаться версии 4.0 с Vulkan (не менее 6-8 месяцев), что займет некоторое время, либо начать с 3.x и надеяться на легкое обновление до 4.0. Я сомневаюсь, что обновление будет простым, особенно если вы используете функции GLES 3, такие как модные шейдеры и частицы графического процессора.
Мое обходное решение - использовать y-сортировку для параметров тайловой карты. Похоже, это уменьшило частоту возникновения проблемы. Тем не менее, у меня все еще были игроки, которые жаловались, что иногда части игрового мира исчезают.

Если это проблема NVIDIA, почему этого не происходит, скажем, с Unity? (Просто интересуюсь)

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

Вск, 12.01.2020, 21:33 Сергей Коспанов [email protected]
написал:

Если это проблема NVIDIA, почему этого не происходит, скажем, с Unity? (Просто
интересно)

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/godotengine/godot/issues/9913?email_source=notifications&email_token=AAV7RW2ZZLY7ZYQ46RUK7KDQ5ME3HA5CNFSM4DUVCVVKYY3PNVWWK3TUL52HSG63JMVRE345CNFSM4DUVCVVKYY3PNVWWK3TUL52HS4DFVREXXWBXWMXW2XWMXWWBWMXX4DFWWB6DWWBX4DFWMXX5XWWMXWMX5XWMXWWB
или отписаться
https://github.com/notifications/unsubscribe-auth/AAV7RWYIXVBYAYGZ3VLSPF3Q5ME3HANCNFSM4DUVCVVA
.

@securas Это неправда, поскольку многие другие фреймворки с открытым исходным кодом не страдают от этой проблемы (даже если они используют OpenGL для рендеринга).

Это просто ошибка, которую очень сложно диагностировать, и в настоящее время никто не хочет тратить на нее время.

Это просто ошибка, которую очень сложно диагностировать, и в настоящее время никто не хочет тратить на нее время.

Чтобы уточнить, текущее понимание заключается в том, что мы сталкиваемся с ошибкой драйверов Nvidia. Это вызвано тем, как мы используем OpenGL API, и если другие проекты не сталкиваются с той же проблемой, это потому, что они, вероятно, используют OpenGL по-другому, или поняли, что вызывает ошибку, и написали обходные пути для ее предотвращения (как мы сделали с вариант для GLES2, ценой производительности).

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

Виноват. Прости за это. Я очень плохо понимаю
детали реализации.

В воскресенье, 12 января 2020 г., 22:46 Реми Вершельде [email protected]
написал:

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

Чтобы уточнить, текущее понимание таково, что мы поражаем драйверы Nvidia
ошибка. Это вызвано тем, как мы используем OpenGL API, и если другие проекты
не сталкивайтесь с той же проблемой, потому что они, вероятно, используют OpenGL
отличается, или понял, что вызывает ошибку, и написал обходные пути для
предотвратить это (как мы сделали с опцией для GLES2, за счет
спектакль).

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

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/godotengine/godot/issues/9913?email_source=notifications&email_token=AAV7RW2U4Q6NE3R62ME75GDQ5MNJVA5CNFSM4DUVCVVKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIW2LOI#issuecomment-573416889 ,
или отписаться
https://github.com/notifications/unsubscribe-auth/AAV7RW4WGXFM7MQZKAQJ4X3Q5MNJVANCNFSM4DUVCVVA
.

Это вполне может быть связано с тем, что буферы вершин в настоящее время повторно используются несколько раз за кадр (что также, вероятно, вызывает проблемы с производительностью). Т.е. буфер вершин используется для рисования одного объекта, изменен в середине, чтобы начать рисование следующего. Я расследую.

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

Это не похоже на проблему Nvidia. Это также случается со мной и моим другом (AMD и Intel соответственно), и, по иронии судьбы, этого не происходит с другим моим другом, который использует Nvidia. Все, что указано в этой теме, происходит со мной и моим другом Intel.

У меня эта проблема связана с интегрированной графикой Intel HD Graphics 620 на моем ноутбуке. Переход на GLES2 решает эту проблему. Другое дело, что это происходило только при включенном 2D-свете.

интересно - мне нужно будет проверить, есть ли у меня освещение

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

Вчера я провел интересный эксперимент - я создал ту же карту, используя TILED, и импортировал ее с помощью импортера TILED от VNEN, и НИКАКОГО МЕРЦАНИЯ НЕ МЕРЦАЕТ - так что это наводит меня на мысль, что это что-то еще в сцене или в том, как я настраиваю карта тайлов - так что я провожу дополнительное исследование и сообщу

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

@jonbonazza, мне жаль это слышать - я чувствую, что на это нет никакой надежды, пока не выйдет 4.0 - или я использую GLES2, который я бы предпочел не использовать

Также я столкнулся с этой проблемой. Сохраняется ли он, когда программа компилируется и запускается как исполняемый файл, а не в редакторе?

Сохраняется ли он, когда программа компилируется и запускается как исполняемый файл, а не в редакторе?

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

Имею комп: i3 2120, gt630.
На этом компьютере все работает отлично. На другом моем компьютере: ryzen 1600, gtx1060. Плитки вспыхивают как сумасшедшие ... И то, и другое с windows 10 pro x64.

Имя драйвера: GLES2
Gles 2 Используйте Nvidia Rect Flicker Обходной путь: Вкл.
Мой 1060 работает в среднем на 30 ~ 50 кадров в секунду
В ожидании Вулкана ...

Любой, у кого это есть в GLES2, может захотеть попробовать тестовые сборки, которые мы делаем на # 37349. Возможно, это может помочь, поскольку для рисования прямоугольников используется другой метод.

Имея ту же проблему. GTX 1060 6 ГБ и Ryzen 7 1700X. Включение cell_y_sort исправляет это для меня, но вызывает огромные проблемы с производительностью (падение fps). То же самое для установки cell_quadrant_size в 1.

Еще раз хочу спросить, может ли кто-нибудь попробовать бета-версию 3.2.2 с включенной use_batching ? Также на этот раз включите use_nvidia_workaround .

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

Однако, если он будет вылечен с помощью пакетной обработки И обходного пути nvidia, он подтвердит, что метод однородного рисования является причиной проблем с мерцанием, и его можно удалить, тем самым решив проблему навсегда.

Поэтому я только что скачал версию 3.2.2. beta 1 и использование Driver Name: GLES2 с Use Batching и Gles 2 use Nvidia Rect Filcker Workaround похоже, решает проблему. Хотя я еще очень долго не тестировал (так как мерцание на 3.2.1 происходит только через пару минут, по крайней мере для меня).

Поэтому я только что скачал версию 3.2.2. beta 1 и использование Driver Name: GLES2 с Use Batching и Gles 2 use Nvidia Rect Filcker Workaround похоже, решает проблему. Хотя я еще очень долго не тестировал (так как мерцание на 3.2.1 происходит только через пару минут, по крайней мере для меня).

Ах, это здорово. Я подозревал, что так и будет. Используя обходной путь для одиночных прямоугольников, мы знаем, что это работает и не вызывает мерцания. Но остальные спрайты будут нарисованы с использованием пакетного кода, который рисует с использованием индексированных примитивов, и я подозревал, что это может решить проблему, и это действительно так. : +1:

Я посмотрю, сможем ли мы полностью удалить старый однородный метод из пакетного рендеринга, что должно решить проблему навсегда. Между тем, комбинация пакетного решения + nvidia, которую вы, вероятно, найдете, в любом случае быстрее, чем старый модуль рендеринга, и не мерцает.

Да, это определенно быстрее. Используя godot 3.2.1 stable с драйвером GLES2, я показал только 20 кадров в секунду, а при использовании Godot 3.2.2 beta 1 я легко достиг 60 кадров в секунду. Но мне любопытно:

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

Значит ли это, что для GLES3 будет исправление?

Да, это определенно быстрее. Используя godot 3.2.1 stable с драйвером GLES2, я показал только 20 кадров в секунду, а при использовании Godot 3.2.2 beta 1 я легко достиг 60 кадров в секунду. Но мне любопытно:

Ах это хорошо! : ухмыляясь:

Значит ли это, что для GLES3 будет исправление?

GLES3 Пока ничего не делал. Мы могли бы в конечном итоге сделать значительно упрощенную и урезанную версию пакетной обработки просто для того, чтобы дать ребятам из GLES3 возможность закончить, пока не будет выпущена 4.x (но я не могу давать обещаний на данном этапе, в дорожной карте много всего). Это должно решить проблему и на GLES3, если она там возникнет.

Мы могли бы в конечном итоге сделать значительно упрощенную и урезанную версию пакетной обработки просто для того, чтобы продвинуть ребят из GLES3 до выхода 4.x

Pleeease (каковы временные рамки до 4.x, для сравнения? Я подозреваю, что несколько месяцев, если не полгода)

Я думаю, что исправление потребовалось бы, если бы сотни людей сообщали об этой проблеме. Не думаю, что у нас это есть. По крайней мере, эта ветка не предлагает этого.

Тем не менее, если есть какие-то коммерческие релизы, которые страдают от этого, было бы полезно им помочь. Если бы у меня было больше опыта, я бы нырнул в себя, но не знал бы, с чего начать. Я только начал изучать код Godot, который, кстати, очень хорошо написан.

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

Мой голос - дождаться версии 4.x и сосредоточить на этом ресурсы. Мы знаем, что Vulkan уже решает эту проблему.

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

По моему опыту, голосование обычно не способствует более быстрому исправлению ошибок. Это верно для проектов, разрабатываемых сообществом, но даже коммерческое проприетарное программное обеспечение сталкивается с той же проблемой (см. Трекер функций Discord).

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

Я тоже столкнулся с проблемой. Ни разу не сталкивался с этим при штатном автозапуске. Если я рисовал карту вручную (что я делал в другом проекте, используя те же тайловые карты), я никогда не сталкивался с этой проблемой. Но когда я пришел к визуализации процедурно сгенерированного подземелья с помощью tilemap.set_cellv (...), я постоянно сталкивался с проблемой. Я все предложения, и единственное, что сработало, - это использование GLES2 с обходным путем. Но это довольно серьезная проблема! Самая простая визуализация тайловой карты дает сбой. Кстати, почему для GLES3 нет обходного пути? Я немного знаком с OpenGL, я написал базовый игровой движок, который отображает текстуры с помощью шейдеров, но не более того. Может кто-нибудь объяснить, что именно вызывает это? Надеюсь, я смогу понять. <3

Я тоже столкнулся с проблемой. Ни разу не сталкивался с этим при штатном автозапуске. Если я рисовал карту вручную (что я делал в другом проекте, используя те же тайловые карты), я никогда не сталкивался с этой проблемой. Но когда я пришел к визуализации процедурно сгенерированного подземелья с помощью tilemap.set_cellv (...), я постоянно сталкивался с проблемой. Я все предложения, и единственное, что сработало, - это использование GLES2 с обходным путем. Но это довольно серьезная проблема! Самая простая визуализация тайловой карты дает сбой. Кстати, почему для GLES3 нет обходного пути? Я немного знаком с OpenGL, я написал базовый игровой движок, который отображает текстуры с помощью шейдеров, но не более того. Может кто-нибудь объяснить, что именно вызывает это? Надеюсь, я смогу понять. <3

В этой ветке уже есть некоторые объяснения. Я полагаю, что на данный момент не будет новых обходных путей или исправлений для этой проблемы до выпуска 4.0 (vulkan), если сообщество что-то не придумает. ИМХО, сопровождающие правы, не беспокоясь о потенциально сложном исправлении сейчас, когда 4.0 уже не за горами.

Кстати, почему для GLES3 нет обходного пути?

На самом деле я этого не заметил, возможно, завтра я попробую перенести код обхода на GLES3. Это будет медленным, если мы сможем заставить его работать.

Теперь у меня есть WIP PR (см. Выше) для обходного пути для GLES3. У меня также есть несколько идей по исправлению единого метода рисования, так как шейдер кажется слишком сложным для того, что нужно. Мне может потребоваться помощь в тестировании, если я исправлю это, поскольку я не могу повторить мерцание на моем компьютере.

Думаю, я могу помочь с этим. Я смогу сделать кастомную сборку Windows по вашему PR.

Сейчас я работаю над переписыванием шейдера быстрого пути, чтобы предотвратить мерцание. Теперь у меня есть прототип, который можно попробовать в # 38628. Я был бы очень признателен, если бы кто-то мог попробовать это, у кого есть оборудование, которое показывает мерцание, инструкции есть в PR.

Хорошо обновить:

  • похоже, обходной путь GLES3 работает нормально: party_face: (_ он должен быть в следующей бета-версии_),
  • однако эксперименты с шейдером быстрого пути не помогли: разочаровано:, и после этого тестирования кажется, что шейдер, вероятно, можно исключить как причину.

Итак, в настоящее время я думаю о том, что это какая-то странная ситуация с точки зрения сбоя привязки с нашей стороны только на nvidia или ошибка драйвера (возможно, не предусматриваю этот метод рисования или не тестирую?).

В любом случае хорошая новость в том, что

  • с GLES2 с пакетной обработкой вы даже не почувствуете необходимости использовать резервный метод в 99% игр, поэтому вы не получите мерцания
  • А с GLES3 резервный вариант nvidia, как подтверждено, работает для предотвращения мерцания, хотя и за счет снижения производительности.

На данном этапе, я думаю, что мое время было бы более продуктивно провело получать некоторое пакетирование работы в GLES3, что позволит сделать разницу в производительности спорное. : +1:

@lawnjelly Это ошибка драйвера и то, как она справляется с управлением питанием. В этом комментарии вы можете найти мои выводы.

@lawnjelly Это ошибка драйвера и то, как она справляется с управлением питанием. В этом комментарии вы можете найти мои выводы.

Ахха! : ухмылка:

Одна из проблем - эта ветка стала такой длинной! На самом деле трассировка API - очень хороший способ определить это, если у вас мерцание на вашем оборудовании, и я согласен, если вы получаете разные результаты каждый раз, когда воспроизводите трассировку, которая действительно указывает на ошибку драйвера. : +1:

@securas Подтверждали ли вы, что проблема в опубликованном вами видео была вызвана этой мерцанием?

Я вижу похожие одиночные кадры черного фона + горизонтальные белые линии в моем собственном проекте как со встроенной функцией перетаскивания камеры, так и с настраиваемым сценарием камеры, и ни один из упомянутых обходных путей (GLES2, исправление мерцания NVIDIA, отключение HDR, различные различные виды выделения области просмотра) предотвращают это:

tile-glitch

Это стабильная версия 3.2.1, Windows 10, GTX 1080.

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

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

Если я правильно помню, это было из-за выключенной привязки 2d пикселей.

@Shfty Похоже, это может быть другая проблема. Казалось бы, это подтвердится, если обходные пути nvidia не исправят это. Сможете ли вы открыть новый выпуск с подробностями об оборудовании и минимальным проектом воспроизведения?

@lawnjelly Звучит правильно. Я открыл # 39720 с проектом минимального воспроизведения, основанным на сцене из приведенной выше гифки.

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

Эта гифка мне кажется похожей на вертикальную синхронизацию / разрыв экрана.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги