Godot: Tilemap / draw_rect zufälliges Flackern mit Nvidia-Treibern

Erstellt am 27. Juli 2017  ·  191Kommentare  ·  Quelle: godotengine/godot

Betriebssystem oder Gerät - Godot-Version:
Windows 10, godot3.0alpha1

Fehlerbeschreibung:
Ich habe einen kinematischen Körper2D und eine Tilemap erstellt. Das Bewegen des kinematischen Körpers funktionierte wie gewohnt, aber gelegentlich verschwand eine der Kacheln auf der Tilemap schneller, als jede Bildschirmaufzeichnungssoftware sie erfassen konnte. manchmal verschwanden 2, sie wurden jedoch neu gezeichnet

Schritte zum Reproduzieren:
Machen Sie eine Tilemap, laden Sie einige Kacheln hinein, machen Sie einen kinematischen Körper
Bewegen Sie den Körper im Spiel, halten Sie die Augen offen, blinken Sie nicht, beobachten Sie, wie einige Kacheln vom Rendern verschwinden und schnell zurückkehren

bug confirmed high priority rendering

Hilfreichster Kommentar

Dies kann durchaus daran liegen, dass Vertex-Puffer derzeit mehrmals pro Frame wiederverwendet werden (was wahrscheinlich auch zu Leistungsproblemen führt). Das heißt, der Scheitelpunktpuffer wird zum Zeichnen eines Objekts verwendet und auf halbem Weg geändert, um mit dem Zeichnen des nächsten zu beginnen. Ich untersuche.

Ich vermute, dass eine ordnungsgemäße 2D-Stapelverarbeitung dieses und 2D-Leistungsprobleme lösen wird.

Alle 191 Kommentare

Kann bestätigen, dass dies immer noch mit Godot 3.0 Custom Build https://github.com/godotengine/godot/commit/29db531fc8360b1e6d5e23008b208517b6d8c627 geschieht

Es passiert auch im Editor:

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

Es sollte alles Gras sein.

BEARBEITEN: Wenn die Quadrantengröße auf 1 gesetzt ist, verschwindet das Problem

EDIT 2: Die Kacheln verschwinden nicht, sondern werden verschoben (ein Transformationsproblem?)

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

EDIT 3: Ein Video von geringer Qualität. https://streamable.com/6a07b Ich habe eine Weile gebraucht, um das Problem auszulösen (der Editor ist so eingestellt, dass er immer aktualisiert wird).

Dieses Problem tritt immer noch im neuesten Master 1f4685375f2d2e36a2e19e67ac9f614b8c99ea28 auf

Es scheint, dass das Problem nicht nur mit einer Tilemap zusammenhängt. Ich habe die gleichen Probleme mit einem großen Text in einem Etikett gefunden. Ich habe das Gefühl, dass es nur passiert, wenn Sie percent_visible und das Etikett verschieben. Diesmal konnte ich es nur bemerken, während das Spiel lief, aber ich würde nicht das gleiche Ereignis im Editor verwerfen. Ich konnte kein Bild oder Video davon aufnehmen, aber einige Zeichen beginnen zu flackern und bewegen sich mit einer anderen Transformation an eine andere Position (Sie können einen Buchstabenblock aus der Schrifttextur sehen).

Update: Dieses Problem ist ein Kernproblem. Es passiert auch dem Editor selbst. Ich konnte keinen Screenshot machen, da der Editor wahrscheinlich aktualisiert wurde und das Problem behoben ist, als ich es bemerke und einen Screenshot machen möchte. Ich habe das Problem in zwei Abschnitten des Editors bemerkt. Es ist nicht so, dass es in diesen beiden Abschnitten passiert, sondern in den Abschnitten, in denen ich das Problem bemerkt habe: Im Ausgabeinhalt flackerten einige Buchstaben und eine der Registerkartenbeschriftungen am unteren Bildschirmrand, wo Die Bezeichnungen Output, Debugger, Audio, ... sind. Das D vom Debugger-Label begann zu flackern. Es ist nicht einfach auszulösen, aber es ist das gleiche Problem.

Ich habe das Etikettenproblem im Video (das Flackern beginnt ungefähr bei der Hälfte des Videos). Https://streamable.com/e31xp Wenn Sie genau auf das Ende der 4. Zeile schauen, werden Sie einige flackernde Buchstaben sehen

Entschuldigung, ich glaube nicht, dass die Bearbeitung Benachrichtigungen sendet, und ich denke, dass dies ein wichtiges Problem ist

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

Ich habe das gleiche Problem ... (gegen 0:04 sehen Sie ein Fliesenflimmern)
Ich benutze nur ein Sprite und mein eigenes Bewegungsskript

Nach vielen Tests bin ich zuversichtlich, dass mein Problem (Nr. 15113) mit diesem identisch ist. Was seltsam ist, sind ein paar Dinge:

  1. Ich sah ursprünglich genau das gleiche Problem, das @Remixful mit flackernden ganzen Quadraten sah, aber dann
  2. Wenn ich die Szene nur im Leerlauf laufen lasse, sehe ich keine seltsamen Artefakte oder Flackern, aber sobald ich anfange, meinen Charakter zu bewegen (oder vielleicht von der Kamera, die sich bewegt?), Beginne ich, Flackern in irgendeiner Form zu sehen.
  3. Ich bin in der Lage, das flackernde Quadrat auf dem Video leicht zu erfassen, aber wenn ich versuche, das Flackern der Linie aufzuzeichnen, obwohl es definitiv während des Filmens auftritt, ist das Flackern im Video nirgends zu finden.

Auch FWIW, dies trat in 2.1 mit genau demselben Projekt überhaupt nicht auf.

Es wäre schön, ein Beispielprojekt zu haben, das das Problem reproduziert (ich weiß, dass es einfach sein sollte, basierend auf den angegebenen Schritten zu reproduzieren, aber die Entwicklungszeit der Engine ist eine knappe Ressource :)).

@ akien-mga
flickertest.zip

Möglicherweise müssen Sie das Projekt einige Male ausführen, bevor Sie es sehen können. Sobald es gestartet ist, lassen Sie es einfach sitzen und Sie sollten es schließlich sehen.

Ich habe mehrere Dinge versucht, um festzustellen, ob es in verschiedenen Szenarien passiert ist. Ich konnte es nur reproduzieren, wenn eine Camera2D ein Kind eines YSort war. Das könnte ein Hinweis sein.

Ich habe das gestern in der Demo kinematic_char gesehen: \

Was ich über dieses Problem gefunden habe, ist Folgendes:

  • Es ist schwer zu reproduzieren und in Videos aufzunehmen. Manchmal wird es die ganze Zeit angezeigt, und wenn Sie versuchen, es mit OBS oder einer Bildschirmaufzeichnungssoftware aufzunehmen, tritt das Problem nicht auf. Andererseits passiert es manchmal sogar während der Aufnahme, also weiß ich es nicht 😅
  • Dies kann jederzeit und überall geschehen (auch im Editor selbst, nicht nur in der zu bearbeitenden Szene).
  • Scheint nur bei TileMap s mit einer Zellenquadrantengröße> 1 und manchmal Text vorzukommen. Ich sage nicht, dass es bei anderen Dingen nicht passiert, aber ich habe es nur gesehen, wenn ich diese beiden Dinge benutzt habe.
  • Und ich kann nichts falsch mit dem Code sehen. Zugegeben, ich bin kein Experte oder so. Das einzige, woran ich denken kann, ist, dass eine Transformation nicht zufällig zufällig richtig eingestellt wird ... weiß nicht wirklich 😓

In # 16277 finden Sie ein weiteres Beispielprojekt, das das Problem reproduzieren soll.

Siehe 16280 für ein weiteres Problem in diesem Zusammenhang.

Hallo, um das zu ergänzen und nur um zu verdeutlichen, ich habe überhaupt nichts mit Godot gemacht und ich habe dieses Projekt nur speziell ausprobiert, da ich neugierig war:
image

Das Flackern tritt bei einem Testspiel auf, nicht jedoch beim Editor. Interessanterweise passiert das Gegenteil, wenn ich die 2D Kinematic Character Demo versuche, bei der die Editor-Kacheln flackern, aber nicht im Testspiel.

Zumindest nach meiner Erfahrung scheint dies im stabilen Godot gelöst zu sein
3.0 Release.

Am Sonntag, 4. Februar 2018, 02:56 Uhr schrieb Archeia [email protected] :

Hallo, um das zu ergänzen und nur um zu verdeutlichen, ich habe überhaupt nichts getan
mit Godot und ich habe dieses Projekt gerade speziell ausprobiert, seit ich es war
neugierig:
[Bild: Bild]
https://user-images.githubusercontent.com/6222499/35776735-0b413ce2-09dd-11e8-81cc-be7a097d61cd.png

Interessanterweise bekomme ich dieses Problem mit dem 2D Kinematic Character nicht
Demo

- -
Sie erhalten dies, weil Sie kommentiert haben.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/godotengine/godot/issues/9913#issuecomment-362898191 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ABW9yzPGCmyxZONEuNXLFKU_PtY3ADsvks5tRYzmgaJpZM4OlRVq
.

@ Jonbonazza Ich habe den neuesten stabilen Godot3 verwendet und es passiert immer noch. Mein Bild zeigt es auch in der oberen rechten Ecke. T_T)

Es scheint, dass dieser Fehler bei Nvidia-Grafikkarten auftritt, die über GTX 970M liegen.

GeForce GTX 970 hier.

Hier sind einige meiner Ergebnisse und ein einfaches Projekt, um dieses Problem zu reproduzieren. (Eine Tilemap mit 2 verschiedenen Sprites, das Godot-Symbol und das Godot-Symbol mit invertierten Farben, mit Beschriftungen über der Tilemap, eine Szene, die in ein Kachelset konvertiert wurde, ist enthalten.)

Flicker.zip

  • Auch bei Beschriftungen in dieser Szene bewegen sich einzelne Zeichen zufällig (sogar drehen), genau wie die Kachelkarten
  • Wenn Sie sich im Editor befinden und Ihre Maus im Raster bewegen, während eine Kachel ausgewählt ist, wird dieses Problem manchmal eingefroren angezeigt, bis Sie die Maus in einen anderen Rasterbereich bewegen
  • Die Reihenfolge der Knoten im Szenenbaum ändert die Häufigkeit (wenn die Tilemap der letzte Knoten ist, passiert dies häufiger mit der Tilemap und wenn die Tilemap der erste Knoten ist, passiert dies häufiger mit den Beschriftungen).

Bearbeiten: Hier ist ein Screenshot des Problems. Sie können 2 E der ersten Zeile sehen, die sich seltsamerweise über einen Kachelabschnitt der Kachelkarte erstrecken. (rot)

bug

Die Beschriftungen hören auf zu flackern, sobald die Kachelkarte aus der Szene entfernt wurde.

Ich hoffe, dies wird zur Lösung dieses Problems beitragen.

45ab9cdfb55eed4eef59feee225248ccc20a6235
exportiert (Release) unter Linux nach Windows (32 und 64 Bit)
Flackert unter Win 10 mit Nvidia GTX 750 Ti (kein Zugriff auf diesen Computer zum Debuggen)

Konnte auf Nvidia GTX 760 mit Debian oder Win7 nicht reproduziert werden.

Flackern ist für mich mit einer GTX 1060 auf Win7 vorhanden. Ich hoffe wirklich, dass dies sehr bald behoben wird, da TileMap derzeit einfach nicht für die Produktion verwendet werden kann. :(

Gleiches Problem mit flackernden Linien zwischen den Kacheln hier. Schau dir das an
platformer tut.zip
Sehr nerviger und unangenehmer Fehler = ((()

@podmentor- Linien zwischen Kacheln sind normal und haben nichts mit diesem Problem zu http://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html?highlight=tilemap#offset -and-scaling-artefs

Ich habe dieses Problem auch mit meinem Spiel. Aber nur wenn ich die dGPU (Nvidia) einschalte. Ich habe es mit der integrierten Intel-GPU noch nicht bemerkt.

Ein Hinweis, der helfen kann. Ich habe dieses Problem mit win10 und nvidia gtx 1070. Aber das Einschalten von ysort auf der Tilemap schien den Fehler zu stoppen.

Beachten Sie, dass Ysort ~~ (Zelle) ~ Quadrantengröße = 1 erzwingt.

@securas Wow, das hat tatsächlich funktioniert! Dank dafür. :) :)
@ bojidar-bg Vielleicht verstehe ich falsch, was du meinst, aber ich habe eine Kachelkarte mit einer Zellengröße von (16, 16) und die Aktivierung von Ysort hat daran nichts geändert ...

@securas Entschuldigung, dass Sie diese neue Frage gestellt haben, aber wo finde ich ysort?

@Archeia Sie finden es unter "Zelle", wenn Sie die Tilemap überprüfen.

Bearbeiten: In meinem Beispiel von oben flackern die Beschriftungen auch bei aktivierter Y-Sortierung noch, aber die Tilemap flackert noch nicht.

Edit2: Ich habe gerade ein Kacheln mit Y-Sort gesehen. Das scheint dieses Problem nicht zu beheben. Es scheint jedoch viel seltener vorzukommen.

Vielen Dank! Das hat es für mich behoben.

Danke @ bojidar-bg. Ich hatte den Eindruck, dass die Zellgröße etwas anderes ist als die Größe der Zellen ... Was meinten Sie mit Zellgröße?

@securas oh, mein schlechtes, ich meinte Quadrantengröße. Ich bin mir nicht sicher, warum ich das falsch verstanden habe ...

Entschuldigung, wenn dies nicht viel zur Konversation beiträgt, aber ich bemerke dieses Flackern mit der Kinematic Collision-Demo sowohl im Editor als auch als exportierte ausführbare Datei. Windows 10 64 Bit. GTX 1080 Ti. 2 Monitore bei 1440p. Ich verwende eine selbst kompilierte Version von Godot 3.0.2 Stable. Ich habe dies in debug, release und release_debug versucht und das Flackern ist in allen Fällen vorhanden.

Bearbeiten: Auf den ersten Blick scheint es, dass das Aktivieren von ysort für die Tilemap das Flackern verschwinden lässt.

Ich frage mich, ob dies kein Treiberproblem ist. Es scheint, dass jeder, der das Problem hat, eine NVIDIA-Karte verwendet, und es scheint, als wären die meisten Leute unter Windows 10.

Gettnig das auch und ich bin auf Manjaro, GTX970 hier

Ich kann dies wiederholen und auch bestätigen, dass das Aktivieren von Y Sort das Problem behebt. Ich verwende Windows 8.1 mit einer GeForce GTX 1060.

EDIT: Eigentlich denke ich, dass das Flackern mit der Quadrantengröße zusammenhängt, wie @ bojidar-bg vorschlägt. Wenn die Y-Sortierung deaktiviert ist, flackere ich unterschiedlich stark, wenn ich die Quadrantengröße verändere. Ich habe noch kein Flackern bei den Quadrantengrößen 1, 2, 64 oder 128 beobachtet. Ich sehe viel im Bereich von 16 bis 32.

@ecdavis Bist du sicher, dass es nicht mehr vollständig flackert? Ich benutze auch eine GTX 1060 und habe immer noch das Flackern mit eingeschalteter Y-Sortierung bemerkt, nur viel seltener.

Ich bin wirklich neugierig, was dazu führen kann, dass die Etikettenbuchstaben manchmal in Tilemap-Kacheln platziert werden.

Viele Dinge scheinen einen Einfluss auf die Häufigkeit des Flackerns zu haben, wie die Knotenreihenfolge. Ich glaube nicht, dass dies sehr eng mit der Quadrantengröße zusammenhängt.

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

Wenn die Quadrantengröße auf irgendetwas eingestellt ist! 1, tritt das Problem der Kachelverschiebung ständig auf.

Wenn die Quadrantengröße auf 1 gesetzt ist, wurden keine verschobenen Kacheln angezeigt, es wurde jedoch nur einmal für ein paar Frames ein Rissfehler festgestellt. Wahrscheinlich nicht verwandt.

Das Flackern wurde für mich behoben, indem Pixel Snap in den Projekteinstellungen aktiviert wurde (Rendern -> Qualität -> 2d). Und ich hatte ein Problem mit dem Zerreißen, das für mich behoben wurde, indem ich mit den Einstellungen der Kacheln und Kachelkarten, die ich importierte, herumgespielt habe. Nämlich "Filter" und "Mipmaps". Ich habe ihm gerade gesagt, dass er die 2D-Pixel-Voreinstellung verwenden und diese als Standard für Texturen festlegen soll.

@rosshadden Versucht es zu Hause und aktualisiert die Ergebnisse. Danke für das Teilen!

Der Pixel-Snap war aktiviert, als ich dies tat, und es löste das Problem nicht.
Ich habe tatsächlich eine Lösung gefunden.
Wenn Sie die Y-Sortierung für die Zellengröße aktivieren UND die Quadrantengröße entsprechend der Zellengröße erhöhen (in meinem Fall 128), scheint das Problem zumindest für mich vollständig beseitigt zu sein

@irresistiblejelly Wie @ bojidar-bg

Es müssen umfassende Tests durchgeführt werden, um das genaue Problem zu ermitteln.

Ich habe gerade @rosshaddens Vorschlag einzuschalten , der es anscheinend für mich behoben hat.

Es passiert immer noch unter iOS und MacOS, nicht unter Android.
Ich habe Rendering -> Qualität -> 2D -> Pixel-Snap aktiviert, wodurch die Frequenz reduziert wurde, aber es passiert immer noch.
captura de tela 2018-05-02 as 15 00 15
captura de tela 2018-05-02 as 15 00 11

@ByTheQuietLake Haben Sie dieses Problem bereits gesehen

Dies kann dann durchaus ein Problem mit dem NVIDIA-Treiber sein.

Getestet unter Windows 10 mit Godot 3.0.2:

  • Nvidia 1070 GTX (Treiber 397.64): Problem tritt auf.
  • Intel HD 4600: Problem tritt NICHT auf.

Dies ist ein definitives Problem, das zumindest bei Benutzern mit Nvidia gpus auftritt. Ich stelle fest, dass die Kacheln im Bearbeitungsmodus zufällig um die Szene gezogen werden, während sich der Mauszeiger entlang der Szenen- und Seitenregisterkarten bewegt. Es tritt auch beim Ausführen des Spiels auf. Die Intensität scheint verringert zu sein, wenn die Quadrantengröße auf 1 gesetzt wird (Y Sort setzt sie auf 1), tritt jedoch weiterhin auf, und dies nimmt die Optimierung auf großen Karten weg, was zu starken Bildratensenkungen führt.

Ich habe auch Abstürze erlebt, als ich versucht habe, die Quadrantengröße auf 1 zurückzusetzen (oder die Y-Sortierung zu überprüfen), nachdem ich die Einstellung auf einer großen Karte geändert habe (ich habe das Problem mit # 19617 geöffnet). Dies scheint darauf hinzudeuten, dass eine zu starke Verarbeitung erforderlich ist (oder ein Speicherverlust möglicherweise?) Und möglicherweise mit dem Gesamtproblem in Bezug auf die Art und Weise zusammenhängt, wie TileMaps zum Rendern codiert werden, wodurch die Kacheln unregelmäßig gezeichnet werden. Ich vermute, das Problem liegt in tile_map.cpp und möglicherweise in VS oder einem anderen Code, der das Rendern von Kacheln behandelt.

Ich habe das Problem mit den oben falsch gezeichneten Schriftarten noch nicht erlebt, aber ich habe möglicherweise auch nicht genug mit Schriftarten herumgespielt, um das Problem zu beheben. Ich fürchte, ich sehe das auch, wenn die Dinge nicht untersucht und repariert werden.

Dies muss wirklich geprüft und geklärt werden, da viele Benutzer Nvidia-Karten haben und das Veröffentlichen auf dem Desktop bedeutet, dass viele Leute mit Nvidia-Karten das Spiel spielen und diese Probleme bemerken.

Es scheint, dass das Problem möglicherweise mit dem "PowerMizer" zusammenhängt. Wenn der bevorzugte Modus auf "Adaptiv" eingestellt ist, sinken die Leistungsstufen auf Null (nach 35 bis 40 Sekunden) und dann beginnt das Flimmern, aber wenn ich "Bevorzugen" einstelle Maximale Leistung ", das Flimmern verschwindet.

Ich habe mit Linux (Treiber 390.59 und 396.24) und Windows (Treiber 388.71 und 398.11) getestet.
~ Unter Windows scheint das Problem nach dem Upgrade meines Treibers auf 398.11 aufgehört zu haben ~
captura de tela de 2018-06-18 14-06-54

Das von mir aufgenommene Video zeigt den Fehler: https://youtu.be/R6TLpDX71RQ?t=32s
Wenn jemand testen möchte, wird hier das Projekt verwendet: Flicker.zip

Aktualisieren:
In meinem Beispiel verwende ich TileMap nicht. Es sind nur einfache Zeichenfunktionen (draw_line und draw_rect), um dieses Raster zu erstellen.

@guilhermefelipecgs Ich denke wirklich nicht, dass das eine echte Lösung ist. Ich gehe davon aus, dass Nvidia X Server ein Linux-Betriebssystemprogramm ist, das der Nvidia-Systemsteuerung mit Windows 10 ähnelt. Ich habe die Energieverwaltungseinstellung auf "Maximale Leistung bevorzugen" eingestellt und es scheint, dass die Verschiebungskacheln reduziert werden, aber ich habe immer noch gesehen, dass sie danach auftreten Ändern der Einstellung. Dieser Fehler ist insofern seltsam, als er bei Verwendung des Programms nicht immer angezeigt wird, aber dennoch auftritt. Vielleicht sollten Sie dies mit einer tatsächlichen TileMap versuchen.

Auch wenn diese Einstellung funktioniert hat. WARUM würde es funktionieren? Würde das Einstellen des Power Managers auf maximale Leistung nicht bedeuten, dass der Code den Prozessor stark belastet? Es schien einen Unterschied für mich zu machen, löste das Problem jedoch nicht vollständig. Ich kann immer noch Fliesen fangen, die nicht am richtigen Ort sind.

@ jamesaddy789 Ich sage nicht, dass dies eine Lösung ist, sondern versuche nur, eine Ahnung zu haben, was das verursachen könnte. Ich war fasziniert, denn wenn ich meine Intel-GPU verwende, funktioniert sie einwandfrei, passiert nur mit NVIDIA und ich habe festgestellt, dass das Flackern auftritt, wenn die GPU-Uhr abfällt, aber dies könnte nur ein Zufall sein, weiß ich nicht. Ich habe es auch mit TileMap versucht und zumindest für mich ist es der gleiche Gedanke.

Es ist seltsam, dass du nicht die gleiche Erfahrung gemacht hast wie ich. Was ist aus Neugier Ihre NVIDIA-Treiberversion?

@guilhermefelipecgs Es ist Version 398.11. Es scheint, dass PowerMizer eine Laptop-App ist, während ich einen Desktop-PC verwende, sodass ich dieses Programm nicht habe. Ich habe gerade die Einstellung Energieverwaltung geändert, um "maximale Leistung bevorzugen" in der Nvidia-Systemsteuerung. Es schien die Anzahl der versetzten Kacheln zu reduzieren, aber als ich das Spiel ausführte, bemerkte ich es immer noch. Ähnlich wie beim Festlegen der Quadrantengröße auf 1 wurde die Häufigkeit verringert, das Problem jedoch nicht vollständig behoben. Ich habe auch immer noch das Problem, dass der Editor abstürzt, wenn ich die Quadrantengröße auf einer großen Karte auf 1 ändere. Dies ist auch weniger häufig, nachdem die Einstellung auf maximale Leistung geändert wurde, aber ich habe es gerade getestet und es ist abgestürzt.

Hinweis Meine GPU ist Nvidia Gtx 1060 6 GB mit dem oben genannten Treiber. Mein Betriebssystem ist Windows 10 Professional.

Ich benutze hier auch einen PC. In Windows ist das Bedienfeld in der Tat etwas anders. Die Option, die Sie geändert haben, ist dieselbe Option, die ich hier getestet habe. Keine Ahnung, was zu tun ist. Dieser Fehler ist sehr langweilig. :(

Es ist ein Problem, das im Rendering-Code enthalten sein muss. Ich habe nicht genug Erfahrung mit dem Motorcode, um ihn zu testen und selbst zu erarbeiten. Es ist interessant, dass Sie (@guilhermefelipecgs) das Problem beim manuellen Zeichnen des Rasters bemerkt haben. Ich dachte, das Problem liege ausschließlich im TileMap-Quellcode.

Wenn die Rechtecke überall gezeichnet werden, auch wenn der TileMap-Knoten nicht verwendet wird, muss ich davon ausgehen, dass der Fehler auch in der Funktion draw_rect () aktiv ist (im Quellcode unter https://github.com/godotengine/godot/). Blob / Master / Szene / Ressourcen / Textur.cpp in Zeile 47).

Zeichnen TileMaps verwendet VS in den meisten seiner Funktionen (in https://github.com/godotengine/godot/blob/master/scene/2d/tile_map.cpp) und die Funktion draw_rect () verwendet VisualServer (ich vermute, dies sind das gleiche).

Warum sollte dies Nvidia gpus betreffen? Ich sehe diese Art von Problem nicht in anderen Programmen (anderen Spiele-Engines), daher kann ich nur darauf abzielen, dass es sich um ein Problem im Quellcode handelt, das aus irgendeinem Grund die Nvidia-Grafikprozessoren beeinflusst (zumindest deutlicher beeinflusst).

@guilhermefelipecgs Das Problem tritt nach dem Ändern der Energieverwaltungseinstellung VIEL seltener auf, und dies kann der Grund sein, warum Sie es nicht bemerken. Es hat tatsächlich ein bisschen gedauert, bis ich das Spiel wieder gesehen habe. Ich ging einige Minuten mit einem KinematicBody2D durch das Spiel, bevor ich bemerkte, dass die Kacheln verlegt wurden. Ich habe genug gesehen, um zu wissen, dass das Problem immer noch besteht.

Ich bin mir zu 98% sicher, dass dies ein Treiberproblem ist. Das Setzen des NVIDIA-Treibers Power management mode auf Prefer maximum performance scheint das Problem zu lösen.

In den folgenden Tests wird das Flimmerprojekt @guilhermefelipecgs verwendet und auf die Grundlagen

Ich habe ungefähr 4 Stunden lang versucht, eine GPU-Ablaufverfolgung mit RenderDoc zu erstellen, um den Low-Process-Modus im Spiel zu aktivieren (also im Grunde 1 Bild pro Sekunde), aber obwohl ich glaube, dass ich einige problematische Bilder erfassen konnte, konnte ich sie nicht sehen Fehler in den opengl-Befehlen oder im rekonstruierten Frame von RenderDoc. Wieder denke ich, ich habe einige problematische Frames ... es ist ein bisschen schwierig, sie zu bekommen, wenn sie zufällig sind.

Ich habe auch die Rects protokolliert, die an den Shader gesendet werden, um jeden Rect in eine Datei zu zeichnen, und nach einem Rect außerhalb von x <60 oder x> 420 oder y <60 oder y> 420 oder mit einer Breite oder Höhe von 20 und gesucht Ich habe nichts gefunden und bin mir zu 100% sicher, dass es schlechte Ergebnisse geben sollte, da ich sie beim Ausführen und Protokollieren des Projekts gesehen habe. Hier sind die Protokolle godot_tilemap_issue_logs.zip, wenn ihr Lust habt, sie dst_rect von hier https: / /github.com/godotengine/godot/blob/master/drivers/gles3/rasterizer_canvas_gles3.cpp#L687 -L701

Hier ist der Windows-Build plus modifiziertes Flimmern , mit dem ich die Rects protokolliert habe. Wenn Sie es protokollieren möchten, verwenden Sie so etwas wie godot.windows.opt.tools.64.exe > log.txt in einem cmd (keine Powershell, da es eine andere Codierung verwendet und es schmerzhaft ist).

Als Referenz habe ich sowohl den Flickertest von @guilhermefelipecgs (Linux x86_64) als auch die modifizierte Version von ausprobiert und konnte auf dem folgenden System kein Flackern reproduzieren:

  • Mageia 6 x86_64
  • X11 1.19.5, Plasma / KWin 5.12.2 (getestet mit Compositing ON und OFF)
  • Optimus-Laptop mit Nvidia GTX 670MX über Nvidia PRIME (Treiber 390.59)
  • Getestet mit Godot vsync ON und OFF sowie Treiber vsync ON und OFF

Es kann sein, dass der Treiberfehler nur Desktop- oder aktuelle GPUs betrifft.

Dies ist auch meine Annahme, da 7 Tage Probleme mit Karten der Serie 10 haben
in einem viel größeren Maßstab. Ich bekomme ohne Grund zufällige fps-Tropfen von 160 auf 10
bei minimalen Einstellungen mit einer Nvidia GeForce 6 GB GTX 1060. Desktop-PC

Am Dienstag, 19. Juni 2018, 09:04 Uhr Rémi Verschelde, [email protected]
schrieb:

Als Referenz habe ich beide @guilhermefelipecgs ausprobiert
https://github.com/guilhermefelipecgs 'Flickertest (Linux x86_64) und
@mrcdk https://github.com/mrcdk's modifizierte Version (Wine) und konnte nicht
Reproduzieren Sie jegliches Flackern auf dem folgenden System:

  • Mageia 6 x86_64
  • X11 1.19.5, Plasma / KWin 5.12.2 (getestet mit Compositing ON und OFF)
  • Optimus-Laptop mit Nvidia GTX 670MX über Nvidia PRIME (Treiber)
    390,59)
  • Getestet mit Godot vsync ON und OFF sowie Treiber vsync ON und
    AUS

Es kann sein, dass der Treiberfehler nur Desktop- oder aktuelle GPUs betrifft.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/godotengine/godot/issues/9913#issuecomment-398311432 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/AS-y9jLkTsEpQyBdu204PCK63wHgD1dxks5t-LCXgaJpZM4OlRVq
.

@ akien-mga ändert sich die Grafikuhr während des Tests, wie @guilhermefelipecgs in ihrem Video zeigt?

Ändert sich die @guilhermefelipecgs in ihrem Video zeigt?

Es ändert sich nicht, wenn ich Godot starte, bewegt es sich auf den höchsten Taktwert und bleibt dort. Das erklärt, warum ich kein Flackern sehen würde. Laut @guilhermefelipecgs 'Video geschieht dies nur beim Heruntertakten (ich denke, meine Karte ist nicht leistungsfähig genug, um beim Ausführen eines einfachen Godot-Projekts heruntertakten zu wollen).

screenshot_20180619_191134

Wenn Sie denken, dass dies nicht seltsamer werden kann ...

Ich habe ein neues Projekt gemacht und 2 seltsame Verhaltensweisen bemerkt.

1) Ich weiß "genau", wo das Flimmern sein wird.
2) Control 3 niemals "flackern".

Ich werde versuchen zu erklären, was passiert:
1) Ich habe der Szene 4 Steuerelemente hinzugefügt:
captura de tela de 2018-06-19 15-45-25
Alle Steuerelemente verwenden denselben Basiscode. Control 1 ist der einzige Knoten mit Flimmern.

2) Nach einiger Zeit (20 ~ 50 Sekunden) repariert Node.gd die Knoten wie folgt:
captura de tela de 2018-06-19 15-50-18
Und dann springt das Flimmern von Control1 auf Control 2 , dh nur das erste Kind hat Flimmern.
Hinweis 1: Ich denke, dies geschieht wahrscheinlich, weil die Zeichenfunktionen in der Reihenfolge der Knoten in die Warteschlange gestellt werden.
Hinweis 2: Control 2 verwendet draw_texture , diese Methode hat auch Flimmern.

3) Wenn Control 3 das erste Kind wird, verschwindet das Flackern auf magische Weise und der Grund ist diese Flagge:
captura de tela de 2018-06-19 15-45-52
Das Flag Invert weist den Code an, die Zeichenfunktionen zu invertieren, sodass mein Code zuerst draw_line und danach draw_rect , sodass sich die roten Rechtecke vor dem Raster befinden.

4) Und schließlich kommt das Flimmern in Control 4 , hier nenne ich nur draw_rect .

Ich habe vergessen vorher zu sagen, dass ich eine GTX970 habe.

Unter Windows habe ich ein Programm verwendet, um zu sehen, wie sich meine GPU-Uhr ändert:
whatsapp image 2018-06-19 at 14 13 41
* Das Problem betrifft auch Windows mit dem neuesten Treiber (398.11), jedoch seltener, und ich muss etwas länger warten. Ignorieren Sie die Laufwerksversion in diesem Screenshot. Ich habe gerade ein Downgrade meines Laufwerks durchgeführt, um festzustellen, ob es einen Unterschied gibt.

Neues Projekt: Flicker_2.zip
Video 1: https://youtu.be/01LWVQqp5yg
Video 2: https://youtu.be/XTKTe9aZAuU?t=50s

Ich muss es 5 bis 8 Mal versuchen, bis ich ein intensiveres Flimmern bekomme. Je mehr ich spiele, desto intensiver scheint der Effekt zu sein.

Video 2 ist dasselbe wie Video 1, aber das Leistungsniveau steigt im letzten Teil des Videos aus irgendeinem Grund an. In diesem Fall können Sie feststellen, dass das Flimmern verschwindet.

Die Videos werden unter Linux (weil der Fehler unter Linux intensiver ist) mit 60 fps aufgenommen.

Ich bin mir zu 98% sicher, dass dies ein Treiberproblem ist.

Ich stimme zu, ich habe im Code (Godot) nachgesehen und kann nichts Seltsames finden.

Okay, ich konnte das Projekt mit apitrace starten und bin mir jetzt zu 99,9998% sicher, dass dies ein Treiberproblem im Zusammenhang mit der Datei Power management mode Hier ist die Datei flicker_trace.zip , damit ihr sie auch auf eurer Seite

Und hier ist ein Video, das ich aufgenommen habe: https://streamable.com/yk1qq Die Qualität ist ein bisschen schlecht, also hier das Original (was nicht viel besser ist 😅)

In den ersten 20 Sekunden wird das Projekt ausgeführt und protokolliert. Ich habe vergessen, OBS zu minimieren, als ich Apitrace zum ersten Mal verwendete, und meine GPU-Uhr war auf das Maximum gesperrt (es ist die Grafik in der oberen rechten Ecke) und das Flackern war nicht da. Springe zu ungefähr. 3:15 wo ich OBS minimiert habe und der Fehler beim Wiedergeben des Trace angezeigt wurde. Ich habe dann die Option Show thumbnails , um ein Miniaturbild für jeden Frame zu erstellen. Ich habe dann die Thumbnails durchsucht, bis ich einen Frame gefunden habe, der den Fehler hatte. Ich habe die lookup state , um den offenen Zustand dieses konkreten Rahmens zu erhalten, und nachdem er fertig war, habe ich den Framebuffer ohne den Fehler gezeigt.

Wenn dieses Problem von godot verursacht wurde, sollte es nicht nur jedes Mal in der Ablaufverfolgung angezeigt werden (es ist nicht das erste Mal, wenn ich es ausführe, während ich OBS geöffnet habe), und das Miniaturbild und der Framebuffer für den Suchstatus sollten gleich aussehen (welche) sie haben es eindeutig nicht getan).

Was können wir hier also tun? Ich denke nicht, dass wir (als Community) unbedingt die Macht haben, Veränderungen von NVIDIA selbst auszulösen. Oder wir?

Was können wir hier also tun? Ich denke nicht, dass wir (als Community) unbedingt die Macht haben, Veränderungen von NVIDIA selbst auszulösen. Oder wir?

IMO, es ist einen Versuch wert :) Im schlimmsten Fall bekommen wir keine Antwort, aber es wäre gut, einen Thread darüber im Nvidia-Entwicklerforum zu eröffnen.

Hallo Leute,

Ich frage mich, tritt das Problem immer noch auf, wenn Sie Nvidia Inspector verwenden und CUDA - Force P2 State deaktivieren? Dies war ein Problem, das bei einigen anderen Projekten (wie OBS) zu Flackern führte. Ich würde gerne wissen, ob es sich auch um ein Stromproblem handelt, da ich ein ähnliches Problem in einem anderen Spiel (ohne Godot) sehe und auch anfange, ein Treiberproblem zu vermuten. GTX750 hier.

Ich bekomme immer noch das gleiche Problem auch in Godot v3.0.6 und das Herunterladen der neuesten Nvidia-Treiber hilft bei diesem Problem überhaupt nicht. Ich verwende eine Nvidia GTX 750 TI-Grafikkarte. Gibt es überhaupt eine Möglichkeit, dieses Problem zu beheben? Auch wenn ich mein Spiel in einem Webbrowser starte, tritt das blinkende Problem überhaupt nicht auf?

Hat sich schon jemand an nvidia gewandt?

Habe dieses Problem mit
Ich bin auf GTX 950. Ich habe die Quadrantengröße && ysort ausprobiert, aber kein Glück.

Ich bin mir nicht sicher, was ich tun soll. Ich wollte eine neue Ausgabe machen, dachte aber, ich würde stattdessen hier posten. Ich bin auch auf Godot v3.0.6

Hat es jemand mit Version 3.1 Alpha mit aktiviertem GLES2.0 versucht? Vielleicht handelt es sich um ein OpenGL3 x nvidia-Treiberproblem?

Ich denke, ich muss ändern, wie Rects gezeichnet werden. Dies zeigt, wie schlecht die Situation mit der Unterstützung von OpenGL-Treibern ist und warum ein Umzug nach Vulkan bald erforderlich ist.

Hat es auch jemand mit dem GLES2-Renderre getestet?

@reduz Es tut mir leid, dass es so lange
Ja, ich kann bestätigen, dass das Flackern im GLES2-Renderer immer noch auftritt

Ich habe einige Tests damit durchgeführt, und ich kann kein Flackern von schwarzen Kacheln auf einem Kachelsatz mit einer Größe von 128 x 128
Ich bin mir nicht sicher, ob das hilft, aber ich denke, es ist etwas
e: Übrigens, wenn jemand möchte, dass ich C ++ - Code bearbeite und neu kompiliere, um Dinge zu testen, nur lmk
e2: nvm es ist gerade zurückgekommen. Ja, es ist jedoch viel seltener

Ich habe eine vorübergehende Lösung gefunden, die eigentlich ganz gut funktioniert. (wenn jemand bald sein Spiel veröffentlicht)

- gekachelt :

  • Erstellen Sie eine neue gekachelte Karte und legen Sie die Anzahl der Kacheln auf 40 x 40 fest
  • Wählen Sie Ihren Boden tileset
  • Klicken Sie dann auf das Eimerfüllwerkzeug in der oberen Kopfleiste (Taste f ) und klicken Sie auf eine beliebige Stelle im Kachelraster
  • Gehen Sie nun zu Datei -> Als Bild exportieren, deaktivieren Sie die Kachel _draw und ziehen Sie die Hintergrundfarbe_ ein. Klicken Sie auf Exportieren.
  • Gehen Sie zu tinypng.org, komprimieren Sie es (ich habe 71% der Dateigröße gespeichert).

- in godot:

  • Fügen Sie Ihrer Tilemap-Ebene einen Sprite-Knoten hinzu.
  • Stellen Sie die Textur des Sprites auf das aus Kacheln exportierte Bild ein.
  • Stellen Sie die Rasterschrittoptionen so ein, dass sie Ihrer Zellengröße entsprechen (in meinem Fall 48x48).

image

Jetzt können Sie einfach Strg + D auf dem Sprite ausführen und es herumschnappen. Kein Flackern und Leistung ist großartig (Godot macht intern nur das, was auf Leinwand ist)

e: hoffe das hilft. Es ist ein bisschen komisch, aber es ist eine Lösung (nicht die beste, aber es ist etwas)
e: Sie können die anderen Tilemap-Ebenen weiterhin für Objekte und so weiter verwenden. Dies dient nur dazu, dass der Boden das Flackern stoppt und gleichzeitig eine gute Leistung beibehält (wenn ysort auf einer Boden-Tilemap-Ebene fps schlecht abfällt)

@ ByTheQuietLake np, mein Vergnügen! Ich habe NVIDIA GTX 950 und ich kann seine Funktion bestätigen. Ich habe seit über 20 Stunden keine schwarzen Fliesen mehr flackern sehen. im Editor oder im Spiel. Das einzige, was mir aufgefallen ist, ist, dass die Ladezeit um etwa 20 ms erhöht wird (was eigentlich kaum etwas ist), aber das liegt nur daran, dass das Bild riesig ist. Wenn Sie sich jedoch mit Ihrem Charakter über die Karte bewegen, fühlt es sich genauso glatt an, als wäre es eine Tilemap.

Ich bin mir nicht sicher über Flexibilität. Kurz gesagt, erstellen Sie einfach Ihre Bodenkacheln in Kacheln, exportieren Sie sie als Bild und verwenden Sie sie als Sprite als Kind in Ihrer Kachelkarte. Sobald reduz / nvidia devs / etc eine Lösung gefunden hat, löschen Sie einfach Ihre alten Sprites und verwenden Sie die Tilemap wie gewohnt. Es sollte ein einfacher Übergang sein.

Lösung hat funktioniert oder nicht, wenn Sie keine NVIDIA GPU haben :(

e: Dieser Fehler tritt nur bei nvidia gpus bythequietlake auf

Dies ist mein erster Beitrag auf Github, und ich entschuldige mich, wenn dies am falschen Ort ist (habe diesen Thread von Google gefunden).

Ich habe kürzlich das gleiche Problem festgestellt, nachdem ich ein Spiel von 2.1 konvertiert habe. Girngs Lösung funktioniert bei mir, aber sie scheint ein bisschen hackig zu sein. Ich habe auch festgestellt, dass es beim Verschieben (unter Verwendung seiner Lösung) einen leichten Versatz zwischen einer Sprite-Knotentextur und den Tilemap-Zelltexturen gibt. Dies war bei Verwendung einer Bodenkachelkarte nicht ersichtlich.

Ich bin auf einer GTX 960. Ich kann unter Windows 10 keine PowerMizer-Einstellungen finden (aus dem obigen Beitrag von guilhermefelipecg). Das könnte daran liegen, dass ich unter Windows bin, und es könnte eine Linux-Sache sein. Ich habe auch oben gelesen, dass selbst das es nicht behoben hat.

Dies mag etwas vom Thema abweichen, aber sollte ich auf 2.1 bleiben, bis dies behoben ist, oder müsste ich eine "benutzerdefinierte Version" von Godot kompilieren?

Mit freundlichen Grüßen,

- Aaron

Gleiche Frage hier wie Aaron, haben wir andere Möglichkeiten? Dies ist ein sehr unangenehmes Problem und macht Godot nicht für die Produktion geeignet. Bitte geben Sie ihm eine höhere Priorität.

Eine Sache, die für mich funktioniert hat, war das Deaktivieren von HDR in den Projekteinstellungen.

Eine Sache, die für mich funktioniert hat, war das Deaktivieren von HDR in den Projekteinstellungen.

Nicht für mich war die einzige, die funktionierte, das Aktivieren von Ysort, aber es ist keine praktikable Option (setzt die Quadrantengröße auf 1)

Ich bin auch darauf gestoßen ... und konnte mich jedes Mal, wenn ich die Szene lief, konsistent reproduzieren.
Hat jemand versucht, die Einstellungen für die Renderqualität zu ändern? Speziell Framebuffer Allocation auf 2D setzen?

Bisher sieht es so aus, als würde es funktionieren ... oder es zumindest viel seltener passieren lassen (ich habe das Flackern noch nicht wieder gesehen ..._)

@ByTheQuietLake Bisher sieht es so aus, als ob überhaupt keine Fälle von Flimmern auftreten.

@XNargaHuntress wirklich? Was haben Sie für die Framebuffer-Zuordnung festgelegt? das könnte eine gute temporäre Lösung sein
edit: nvm habe das falsch gelesen und werde es auf 2d framebuffer testen

@XNargaHuntress Das Flackern tritt bei mir immer noch auf, wenn die Framebuffer-Zuordnung auf 2D eingestellt ist. Ich habe das Gefühl, dass es jetzt noch öfter passiert, aber das könnte ein Zufall sein.
Ich verwende eine Nvidia GTX 750 Ti unter Windows 7 x64, Godot 3.0.6 stabil.

Bearbeiten: Ich habe gerade versucht, die Framebuffer-Zuordnung auf "2D ohne Abtastung" zu setzen. Flackert immer noch.

Edit 2: Flackern tritt auch bei Godot 3.1 alpha mit dem GLES3-Renderer auf. Bei Verwendung des GLES2-Renderers habe ich jedoch überhaupt kein Flackern bemerkt.

Vielleicht kann ich mich irren, aber nach dem letzten nvidia-Treiber-Update konnte ich bis jetzt kein Flackern sehen. Wird heute zu Hause vollständig getestet.

GTX 1050TI, Windows 10, Godot 3.1 Alpha

EDIT: Nach vielen Tests zeigte es sich wieder ... aber nur sehr wenige ... aber immer noch da

Nach einem früheren Treiber-Update habe ich das Problem schon eine Weile nicht mehr gesehen. Ich bin mir nicht sicher, welches Update das Problem behoben hat und wird wahrscheinlich von der jeweiligen GPU abhängen, aber ja ...

Denken Sie daran, dass der GLES2-Treiber dieses Problem auf dem Master nicht aufweist.

Das Zurücksetzen des Kamera-Zooms auf (1,1) hat das Problem möglicherweise für mich behoben. Zuvor habe ich es auf (0,5, 0,5) eingestellt und ein Flimmern festgestellt. Bisher sehe ich kein Flackern. Kann jemand anderes bestätigen?

Solange die Option ysort deaktiviert ist, flackere ich immer.

Am Montag, 19. November 2018 um 14:10 Uhr schrieb mikeleeman [email protected] :

Das Zurücksetzen des Kamera-Zooms auf (1,1) hat das Problem möglicherweise für mich behoben.
zuvor habe ich es auf (0,5, 0,5) eingestellt und ich habe Flackern gesehen. Bisher bin ich nicht
Flackern sehen. Kann jemand anderes bestätigen?

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/godotengine/godot/issues/9913#issuecomment-439773424 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ACv4240No-elY7BK16HKAmxhHrFRaOj4ks5uwj1UgaJpZM4OlRVq
.

@mikeleeman Immer noch auf GLES3 mit einer GTX 960. Versucht 2D-Framebuffer-Modus, Kamera-Spielereien usw. An diesem Punkt denke ich, dass Vulkan unsere einzige Hoffnung ist.

NVIDIA hat das Problem mit der Sperrung der Shader-Festplatten-Cache immer noch nicht behoben. Es ist traurig, weil Leute, die Windows mit NVIDIA-Karten verwenden, nicht das volle Potenzial von Godot nutzen.

Die meisten Anbieter geben in letzter Zeit keinen Flaum über OpenGL, und es ist ziemlich kompliziert, dies zu umgehen.
Die beste Problemumgehung in Godot 3.1 ist derzeit die Umstellung auf OpenGL2, wo es einwandfrei funktioniert.
Schließlich wird GLES3 später für Vulkan veraltet sein, wo dies hoffentlich nicht mehr passieren sollte.

Kommt immer noch in 3.1alpha mit GLES2 vor (wie in der oberen rechten Ecke dieses Gifs gezeigt):
sssaturday5

Eine vorübergehende Lösung, die sich für mich bewährt hat und die uns bis Vulkan aufhalten sollte:

  • Verwenden Sie Sprite-Knoten für jede einzelne Bodenplatte. Aktivieren Sie das Einrasten beim Bearbeiten, damit Sie das gleiche Grundlayout leichter nachahmen können. Dieser Weg ist eigentlich kein Problem in Bezug auf die Leistung, das ich gefunden habe. Es ist nur zeitaufwändig und etwas seltsam zu tun. Es ist offensichtlich nicht ideal, aber es macht den Trick für jetzt.

Ich kann auch bestätigen, dass dies auch auf GLES2 geschieht: / (letzter Build b47d4e1ba5d72bac5c2e671d9e4c0ae037a248c0)

Das kommt einer gültigen Umgehung nicht einmal nahe. Sie verlieren buchstäblich jeden Grund, überhaupt Kachelkarten zu verwenden.

Das kommt einer gültigen Umgehung nicht einmal nahe. Sie verlieren buchstäblich jeden Grund, überhaupt Kachelkarten zu verwenden.

Ja, aber ich meine, es stoppt das Flackern und es ist nur für die Bodenschicht. Und dein Spiel sieht genauso aus. Aber ich stimme Ihnen zu, es nutzt die Tilemap-Funktionen nicht aus, aber ich denke, es ist ein fairer Kompromiss, bis ein Fix eingeht

Ich sehe kein Flackern mehr, was seltsam ist, weil ich definitiv schon lange zufällige Flackern gesehen habe.

Das letzte Mal habe ich auch versucht, Kacheln auf einem canvasItem mit draw_rect-Funktionen zu zeichnen, eine Tilemap zu emulieren und update () nur einmal auf dem canvasItem aufzurufen, sodass es zu Beginn des Programms nur einmal gezeichnet wird. Überraschenderweise hat das canvasItem auch ähnliche zufällige Flackern (vielleicht weniger häufig?), Aber nur, wenn die Kamera vergrößert ist (0,5,0,5), aber nicht, wenn die Kamera auf (1,1) steht. Ich weiß, es klingt komisch, vielleicht habe ich etwas falsch verstanden.

Jetzt tritt das Flackern nicht mehr auf, sowohl für Benutzer mit benutzerdefiniertem canvasItem-Zeichnen als auch für Benutzer mit Godots Standard-TileMap. Ich vermute ein Treiber-Update? Meine Karte ist Nvdia GeForce GTX 970 unter Windows. Randnotiz kann jemand seine aktuell installierte openGl-Version überprüfen? Ich habe gehört, dass es unter Linux einfacher ist.

edit: Die Unsicherheit ist nicht gut, denke ich, brauche Vulkan, um sicherzustellen, dass es keine Probleme gibt.

Ich habe geändert, wie diese im OpenGL ES 2.0-Renderer gezeichnet werden, daher sollte es dort definitiv gut funktionieren. Unter OpenGL ES 3.0 wird jede Problemumgehung, die ich mir vorstellen kann, höchstwahrscheinlich die Leistung beeinträchtigen. Daher wird die Priorität darauf gelegt, Vulkan so schnell wie möglich nach Veröffentlichung von 3.1 zum Laufen zu bringen.

Bitte bestätigen Sie, wenn Sie können, dass dies im OpenGL ES 2.0-Renderer nicht mehr fehlschlägt.

@reduz Ich habe hier ein paar Minuten getestet und es ist nicht passiert. Danke, dass du das behoben hast! :) :)
Hinweis:
Ich weiß nicht, ob es damit zusammenhängt, aber ich kann immer noch einige horizontale weiße Linien zwischen den Kacheln sehen, wenn die Kamera wackelt.

danke reduz für das OpenGL ES 2.0 Update!

an @mikeleeman und andere:
Hier sind die letzten 3 Patchnotizen seit dem 20. November für NVIDIA GeForce-Karten:
20. November , 3. Dezember und 12. Dezember . Die Liste der behobenen Probleme finden Sie auf Seite 15 .

Das einzige Problem, das ich als relevant empfand (nicht sicher), war am 12. Dezember:

  • [Hitman 2 Silent Assassin]: Es gibt flackernde Texturkorruption im Spiel.
    [200472315]

Mir ist auch aufgefallen, dass einige mit meiner Tilemap schief gelaufen sind:
capture3

Ich bin nicht sicher, ob ich mehr dafür tun kann als das aktuelle Update. Nachdem 3.1 veröffentlicht wurde, wird dieser Fehler höchstwahrscheinlich nicht auf Vulkan vorhanden sein und sollte jetzt aus dem ES2-Renderer entfernt werden.

Beim Testen von Alpha 4 habe ich dies mit GLES2 und GLES3 gesehen. Keine Shader, nichts Besonderes. Nur Tilemaps.
test

@securas Verwenden Sie eine Kamera mit Zoom?

Nein

Am Samstag, 29. Dezember 2018, um 00:35 Uhr Guilherme Felipe de CG da Silva <
[email protected]> schrieb:

@securas https://github.com/securas Verwenden Sie eine Kamera mit Zoom?

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/godotengine/godot/issues/9913#issuecomment-450378016 ,
oder schalten Sie den Thread stumm
https://github.com/notifications/unsubscribe-auth/ACv425NmiZKRUJHDzxg0NPB-PszWJaa2ks5u9jpGgaJpZM4OlRVq
.

@securas Das sieht nach einem anderen Problem aus, es ist eher ein Problem mit der

@ akien-mga Fair genug ... Es scheint nur den Tilemaps zu passieren, also dachte ich, dass es hierher gehört.

@ gcardozo123 sieht für mich wie # 24642 ​​aus, PR kommt bald

Verschiebt dies auf 3.2, da vorerst nichts anderes getan werden kann. Ich hoffe auch, dass nvidia dies endgültig behebt. Ich habe sie direkt kontaktiert, um sicherzustellen, dass dies auch von ihrer Seite behoben wird. Mit dem Vulkan-Rewrite wird dies hoffentlich nicht mehr passieren, aber in der Zwischenzeit verwenden Sie bitte GLES2.

Entschuldigung, wollte nicht schließen

Gibt es andere Open-Source-Spiele-Engines, die GLES3 verwenden und eine Tilemap-Klasse oder ein Rendering haben, das betrachtet werden könnte? Ich habe mir nur die Daten angesehen und es ist über 530 Tage her und es wird noch länger zurückgesetzt: /

Ich habe mich aus Zwietracht an einen Godot-Entwickler gewandt (@ bojidar-bg) und reichlich Hilfe erhalten. Ich habe versucht, das Problem zu zeigen, konnte aber die schwarzen Kacheln während der Aufnahme in OBS nicht anzeigen. Er empfiehlt mir dann, einige Einstellungen in der NVIDIA-Systemsteuerung zu ändern.

info: fa7329f6485058fde30b8e2bfe26291dfbfc4434, GLES3, W10-64bit, GTX950

  • Gehen Sie zu NVIDIA Control Panel
  • Klicken Sie auf Manage 3D settings
  • Scrollen Sie zum Energiesparmodus wechseln sie von einer optimalen Leistung eine maximale Leistung bevorzugen
    image
  • Klicken Sie auf Übernehmen

Ich habe noch keinen schwarzen Titel gesehen (Spiel über 20 Mal neu geladen und werde weiter testen, bis die Kühe nach Hause kommen). So weit, ist es gut! Ich hoffe, das hilft und ein großes Dankeschön an Bojidar!

girng: Ich habe das gleiche Phänomen beim Export gesehen. Hier liegt mir am meisten die Sorge. Wir sollten unsere Endbenutzer nicht bitten müssen, ihre GPU-Einstellungen zu ändern, damit die Kacheln nicht zeitweise verschwinden. Haben Sie nicht die neueste 3.1 Beta mit dem NVIDIA Tile Hack ausprobiert?

  • Scroll down to Power - Modus, ändern Sie es von _optimal Power_ maximale Leistung bevorzugen

Bedeutet dies nicht einen Treiberfehler? Ich bin mir nicht sicher, wie ein Motor jeden potenziellen Treiberfehler umgehen kann.

@ OvermindDL1 Ja, Reduz gab an, dass er die NVIDIA-Entwickler direkt kontaktiert hat, was sehr geschätzt wird! Ich bin mit der Lösung für den Energieverwaltungsmodus

@agameraaron Ich

Nach dem, was ich gerade mit Vertretern von nv besprochen habe, sagen sie, dass sie dieses Problem nicht mehr beobachten können. Könnt ihr es mit den neuesten Treiberversionen versuchen und, falls dies fehlschlägt, ein bisschen mehr Informationen über eure Hardware melden? (GPU-Modell, Treiber installiert, Energieverwaltungseinstellungen)?

@reduz getestet auf dem neuesten Treiber ( 419.17 ). Das Flackern von Kacheln tritt jetzt in den folgenden Leistungsmodi auf: Bevorzugen Sie maximale Leistung , optimale und adaptive .

GTX 950, W10, GLES3

  • Wenn OBS Studio geöffnet wird, verschwindet das Flackern

@reduz @girng @xsellier
GTX 1070, GLES2, W10
Letzter Treiber 419.35
Kein Flackern unabhängig vom verwendeten Energiemodus 👍

GLES3 scheint auch zu funktionieren. Auch dieses Problem wurde beim Stapelüberlauf festgestellt:
gles2 Bildschirm flackert

GTX 1060, W10
Mit demselben Treiber wie oben (419,35) tritt das Flackern sowohl in GLES2 als auch in GLES2 immer noch auf.
Sie müssen nur in der Benutzeroberfläche herumklicken und den Mauszeiger über Steuerelemente bewegen, da die Standardeinstellung für das Neuzeichnen jetzt "Bei Änderungen" lautet. Diese Einstellung kann durch Klicken auf den Kreis in der oberen rechten Ecke geändert werden.

Bei Verwendung des alten Projekts, das ich unter https://github.com/godotengine/godot/issues/9913#issuecomment -364707061 gepostet habe, geschieht immer noch alles - Etikett und Tilemap flackern und die Buchstaben werden auf seltsame Weise über einige Kacheln gespannt.

Screenshot_20190322_021011

Versuchen Sie diese Option.

Mir ist diese Option bekannt, die nur in GLES2 funktioniert

@reduz @girng @xsellier
GTX 1070, GLES2, W10
Letzter Treiber 419.35
Kein Flackern unabhängig vom verwendeten Energiemodus 👍

GLES3 scheint auch zu funktionieren. Auch dieses Problem wurde beim Stapelüberlauf festgestellt:
gles2 Bildschirm flackert

Der obige Kommentar deutete nur darauf hin, dass das Problem nicht mehr vorhanden war.

@MennoMax Sie haben Recht, das Flackern passiert immer noch. Aber die Problemumgehung für GLES2 funktioniert, ich hoffe, die Vulkan-Unterstützung wird bald kommen 🙏

@ gavriil07 Problem ist, gles2 Workaround bedeutet, dass Sie keine GPU-Partikel verwenden können: /
Außerdem wurde das Flackern auf gles3 behoben, als ich am 11. Februar postete (wobei der Power-Modus so eingestellt war, dass maximale Leistung bevorzugt wurde). Jetzt ist das Flackern zurückgekehrt und tritt bei allen drei Optionen für den Energiemodus mit den neuen aktualisierten Treibern auf. macht keinen Sinn, eine ihrer Treiberversionen hat das Flackern behoben, um maximale Leistung zu bevorzugen, jetzt haben die neuen Treiber es nicht behoben.

@girng was hat das mit gpu partikeln zu tun?
@reduz hast du eine ETA für einen vorläufigen Vulkan Renderer?

@ gavriil07 Wenn ein Spiel GLES3 (mit GPU-Partikeln) verwendet, ist es für sie keine wirkliche Problemumgehung, gles2 zu verwenden. Denn dann werden GPU-Partikel nicht unterstützt

@girng CPUParticles können jedoch weiterhin in GLES2 verwendet werden. Sie reichen für viele Anwendungsfälle aus (was insbesondere bei einfacheren 2D-Spielen der Fall ist). Bitte halten Sie die Diskussion zum Thema: leicht_smiling_face:

CPUParticles können jedoch weiterhin in GLES2 verwendet werden. Sie reichen für viele Anwendungsfälle aus (was insbesondere bei einfacheren 2D-Spielen der Fall ist). Bitte halten Sie die Diskussion zum Thema

Ich spreche von GPU-Partikeln, nicht von CPU

Unter https://www.reddit.com/r/godot/comments/9ljor3/psa_tilemap_flickering_possible_fix/ wurde vor Monaten ein Beitrag mit dem Titel "Versuchen Sie, HDR in den Projekteinstellungen zu deaktivieren" geschrieben. (Rendern -> Qualität -> Tiefe -> HDR)

Ich habe das bei einem GLES3-Projekt versucht und es scheint bisher für mich zu funktionieren (Nvidia 970 Version 415.27, Linux Mint). Entschuldigung, wenn dies eine Wiederholungsnachricht ist.

Ich kann sagen, dass dieser Fehler für den GLES2-Treiber auf meinem Nvidia gtx760 (Windows 10 x64) besteht. Video unten:

https://www.youtube.com/watch?v=TM1BN4uwMfA
Die erste Instanz im Video ist um 0:36 Uhr und erfolgt erneut innerhalb von ca. 5 Sekunden.

Das GLES2-Update schien das Problem für mich zu lindern.

Das Deaktivieren von HDR in der Projekteinstellung hat bei mir funktioniert. Vielen Dank!

Windows 10 Pro 64bit
nVidia-Treiber 430.39

Godot 3.1.1 stabil
OpenGL ES 2.0-Renderer: GeForce GTX 1080 / PCIe / SSE2

Flackern passiert.

Durch das Ausschalten von HDR wird das Flackern größtenteils beseitigt, aber in einigen Situationen kann ich nicht weiter eingrenzen.

Windows 10 Home
Godot 3.1 stabil
GTX 1070, Treiber 430.86
GLES 3.0 mit eingeschaltetem HDR, Flackern und Ausschalten behebt das Problem.

Habe dies mit einem benutzerdefinierten Raster getestet (Node2D mit Sprites als Kinder)

Godot 3.1.1 stabil
Windows 10
GTX1080-Treiber 430.86
GLES 3.0 bei ausgeschaltetem HDR setzt sich das Flimmern fort. Wenn Sie "Maximale Leistung bevorzugen" aktivieren, sieht es so aus, als würde es verschwinden (danke dev für die Teillösung). Ich bin froh zu sehen, dass Entwickler sich dessen bewusst sind. Es sieht so aus, als wäre es eher ein NVIDIA-Problem als Godot. Irgendwelche 1 mit AMD-Karten mit diesem Problem?

GLES 3.0 bei ausgeschaltetem HDR setzt sich das Flimmern fort. Wenn Sie "Maximale Leistung bevorzugen" aktivieren, sieht es so aus, als würde es verschwinden (danke dev für die Teillösung). Ich bin froh zu sehen, dass Entwickler sich dessen bewusst sind. Es sieht so aus, als wäre es eher ein NVIDIA-Problem als Godot. Irgendwelche 1 mit AMD-Karten mit diesem Problem?

Bei AMD-Karten tritt kein Problem auf (Titel sagt übrigens bei NVIDIA-Treibern)

Dieses Problem in Godot 3.1.1 auf OpenGL ES 3.0 Renderer: GeForce GTX 1060 6GB/PCIe/SSE2 .
Ich habe keine Tilemap, nur ein paar benutzerdefinierte draw_texture() . Ich bekomme zufällige Flackerpunkte, aber manchmal ist es eine fast Vollbildstörung.

An diesem Punkt denke ich, dass Vulkan die Lösung für dieses Problem ein für alle Mal sein wird.

Ich bekam auch in meinem Projekt ein seltsames Flackern, die Einstellung Gles 2 Use Nvidia Rect Flicker Workaround es jedoch behoben.

Screen record from 2019-08-01 19 18 43

Kann auf Build 3.1.1 mit einer GTX 980 stabil reproduzieren.
Das Deaktivieren von HDR behebt das Problem für mich.

Nur ein Update, bei dem immer noch Kacheln herausspringen und ich habe alles versucht,

Ich war in letzter Zeit sehr positiv, aber dieser Fehler zermürbt mich sehr und wirkt sich sehr nachteilig auf meinen Workflow aus (ich habe alles versucht). Bis zu dem Punkt, an dem ich Angst habe, F5 zu drücken, weil die schwarzen Kacheln unvermeidlich flackern. Ich kann Flackern einmal in einem blauen Mond oder so tolerieren, aber das Flackern ist jetzt eine konstante Sache. Ich liebe Godot, es gibt jetzt kein Zurück mehr, aber es wird extrem frustrierend.

Ich mag es nicht, solche Beiträge zu schreiben, weil es nicht hilfreich ist und weinerlich wirkt, aber ich weiß nicht, was ich sonst noch sagen / tun soll. Gleichzeitig möchte ich, dass Kernentwickler wissen, wie sich dieser Fehler auf die Godot-Erfahrung auswirkt. 😭 Bitte @reduz / Core-Entwickler, wenn Sie den Status dieses Fehlers und die mögliche Lösung (Vulkan?)

Windows 10 Home
Geforce GTX 1060 Treiberversion 440.97
Godot 3.1.1 stabil mit GLES3
Ich habe einige der hier aufgeführten Vorschläge ausprobiert (Deaktivieren von HDR, Klicken auf die Option "Gles2 verwenden nvidia rect flicker Workaround" und Problem mit meinen Leistungseinstellungen) und keiner schien das Problem zu beheben

Gleiches hier, flackernd. Lassen Sie 3 Tilemaps, 1 für den Wasserstand und 1 für den Boden, 1 für Wolken mit aktivierter Y-Sortierung.

Windows 10 Home
Geforce GTX 1060 neuester Treiber
Godot 3.2 Beta wurde letzte Woche mit GLES3 kompiliert
gdscript, HDR ausgeschaltet haben

Sehen Sie, wie die Wasserfliesen zeitweise auftauchen oder flackern.

Aktualisiert:

Sieht so aus, als müsste ich GLES2 verwenden und auf das Ding 'NVIDIA Flicker Fix' klicken, damit das Flimmern verschwindet. Könnte dieses Update zufällig an GLES3 angepasst werden?

Ich habe gerade ein neues ASUS RTX2060 gekauft, das das Problem beheben würde, aber leider sollte es nicht sein. Das Blinken geht weiter. Versuchen Sie einen Build mit den Zweigen 3.2 und VULKAN.

Windows 10
RTX 2060 Neuester Treiber
Godot 3.1.1

OH GOTT
Ich versuche alles, aber es ist immer noch da, meine Spielarbeit mit GLES2, auch wenn ich "2d / gles2_use_nvidia_rect_flicker_workaround" aktiviere, flackere aber immer noch.
Ich liebe Godot sogar ich liebe Godot neue Version 3.1 mehr, aber bitte lösen Sie dieses Problem.

Eine gute Nachricht ist, dass VULKAN Build dieses Problem behebt. Ich weiß also nicht, ob dies jemals im 3.X-Zweig korrigiert wird.

Also, wenn der Godot mit VULKAN gebaut ankommt?

Soweit ich aus den obigen Kommentaren weiß, wird dies in Godot 3.x nicht behoben, wodurch ein auf Tilemap basierendes Projekt mit GLES 3 verhindert wird. Die Entwickler geben an, dass dies ein NVIDIA-Problem ist, sodass sie nicht viel dagegen tun können . Sie können entweder mit Vulkan auf 4.0 warten (nicht weniger als 6 bis 8 Monate), was eine Weile dauern wird, oder mit 3.x beginnen und auf ein einfaches Upgrade auf 4.0 hoffen. Ich bezweifle, dass das Upgrade einfach sein wird, insbesondere wenn Sie GLES 3-Funktionen wie ausgefallene Shader und GPU-Partikel verwenden.
Meine Problemumgehung bestand darin, die Tilemap-Optionen mit y-Sortierung zu sortieren. Dies schien die Häufigkeit des Problems verringert zu haben. Trotzdem hatten ich immer noch Spieler, die sich beschwerten, dass gelegentlich Teile der Spielwelt verschwinden würden.

Wenn es sich um ein NVIDIA-Problem handelt, warum passiert es dann nicht beispielsweise bei Unity? (Ich wundere mich nur)

Kommerzielle Bibliotheken gegen Open Source-Bibliotheken, denke ich. Überprüfen Sie vorher
Beiträge von Entwicklern.

Am Sonntag, 12. Januar 2020, 21:33 Uhr Sergey Kospanov [email protected]
schrieb:

Wenn es sich um ein NVIDIA-Problem handelt, warum passiert es dann nicht beispielsweise bei Unity? (Gerade
frage mich)

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/godotengine/godot/issues/9913?email_source=notifications&email_token=AAV7RW2ZZLY7ZYQ46RUK7KDQ5ME3HA5CNFSM4DUVCVVKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIWY4MQ#issuecomment-573410866 ,
oder abbestellen
https://github.com/notifications/unsubscribe-auth/AAV7RWYIXVBYAYGZ3VLSPF3Q5ME3HANCNFSM4DUVCVVA
.

@securas Das stimmt nicht, da viele andere Open Source-Frameworks nicht unter diesem Problem leiden (selbst wenn sie OpenGL zum Rendern verwenden).

Dies ist nur ein Fehler, der sehr schwer zu diagnostizieren ist, und derzeit ist niemand bereit, sich die Zeit dafür zu nehmen.

Dies ist nur ein Fehler, der sehr schwer zu diagnostizieren ist, und derzeit ist niemand bereit, sich die Zeit dafür zu nehmen.

Derzeit wird davon ausgegangen, dass wir einen Nvidia-Treiberfehler haben. Es wird durch die Art und Weise ausgelöst, wie wir die OpenGL-API verwenden. Wenn andere Projekte nicht auf dasselbe Problem stoßen, liegt dies daran, dass sie OpenGL wahrscheinlich anders verwenden oder verstanden haben, was den Fehler auslöst, und Problemumgehungen geschrieben haben, um dies zu verhindern (wie wir es mit einem getan haben) Option für GLES2 auf Kosten der Leistung).

Die Art und Weise, wie wir die API verwenden, ist nach unserem Verständnis gemäß der OpenGL-Spezifikation völlig angemessen. Treiberfehler führen jedoch dazu, dass selbst eine legale Verwendung der API zu problematischen Ergebnissen führen kann.

Mein Fehler. Das tut mir leid. Ich habe sehr wenig Verständnis für die
Implementierungsdetails.

Am Sonntag, 12. Januar 2020, 22:46 Uhr Rémi Verschelde [email protected]
schrieb:

Dies ist nur ein Fehler, der sehr schwer zu diagnostizieren ist, und nein
man ist derzeit bereit, sich die Zeit dafür zu nehmen.

Derzeit wird verstanden, dass wir einen Nvidia-Treiber treffen
Fehler. Es wird durch die Art und Weise ausgelöst, wie wir die OpenGL-API verwenden, und durch andere Projekte
stoßen Sie nicht auf dasselbe Problem, es liegt daran, dass sie wahrscheinlich OpenGL verwenden
anders oder verstanden, was den Fehler auslöst, und Problemumgehungen geschrieben
Verhindern Sie dies (wie wir es mit einer Option für GLES2 getan haben, auf Kosten von
Performance).

Die Art und Weise, wie wir die API verwenden, ist nach unserem Verständnis völlig angemessen
gemäß der OpenGL-Spezifikation. Aber Treiberfehler bedeuten sogar eine legale Verwendung
der API kann zu problematischen Ergebnissen führen.

- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/godotengine/godot/issues/9913?email_source=notifications&email_token=AAV7RW2U4Q6NE3R62ME75GDQ5MNJVA5CNFSM4DUVCVVKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIW2LOI#issuecomment-573416889 ,
oder abbestellen
https://github.com/notifications/unsubscribe-auth/AAV7RW4WGXFM7MQZKAQJ4X3Q5MNJVANCNFSM4DUVCVVA
.

Dies kann durchaus daran liegen, dass Vertex-Puffer derzeit mehrmals pro Frame wiederverwendet werden (was wahrscheinlich auch zu Leistungsproblemen führt). Das heißt, der Scheitelpunktpuffer wird zum Zeichnen eines Objekts verwendet und auf halbem Weg geändert, um mit dem Zeichnen des nächsten zu beginnen. Ich untersuche.

Ich vermute, dass eine ordnungsgemäße 2D-Stapelverarbeitung dieses und 2D-Leistungsprobleme lösen wird.

Es scheint kein Nvidia-Problem zu sein. Es passiert auch mir und einem Freund (AMD bzw. Intel), und ironischerweise passiert es nicht meinem anderen Freund, der Nvidia verwendet. Alles, was in diesem Thread angegeben ist, passiert mir und meinem Intel-Freund.

Ich habe dieses Problem auf einem integrierten Intel HD Graphics 620 auf meinem Laptop. Der Wechsel zu GLES2 behebt das Problem für mich. Eine andere Sache für mich ist, dass es nur mit eingeschalteten 2D-Lichtern aufzutreten schien

interessant - ich muss überprüfen, ob ich auch Beleuchtung habe

Es tut mir leid zu berichten, dass ich dies in meiner Szene hatte, aber das Entfernen hatte keine Auswirkung. Mir scheint es mehr wegen der Anzahl der Kacheln auf der Kachelkarte - wer weiß

Ich habe gestern ein interessantes Experiment durchgeführt - ich habe dieselbe Karte mit TILED erstellt und sie mit dem TILED-Importer von VNEN importiert, und es gibt kein Flackern. Dies lässt mich denken, dass es sich um etwas anderes in der Szene handelt oder um die Art und Weise, wie ich sie einrichte die tilemap - also mache ich noch etwas recherchierung und werde darüber berichten

FWIW, ich habe immer nur Tiled verwendet und ich habe immer noch das Problem.

@jonbonazza Es tut mir leid, das zu hören - ich habe das Gefühl, dass es keine Hoffnung gibt, bis 4.0 eintrifft - oder ich verwende GLES2, das ich lieber nicht verwenden würde

Ich bin auch auf dieses Problem gestoßen. Bleibt es weiterhin bestehen, wenn das Programm kompiliert und als ausführbare Datei und nicht im Editor ausgeführt wird?

Bleibt es weiterhin bestehen, wenn das Programm kompiliert und als ausführbare Datei und nicht im Editor ausgeführt wird?

Ja, da das Rendern von Code zwischen dem Editor und einer Release-Exportvorlage identisch ist.

Ich habe einen Computer: i3 2120, gt630.
Auf diesem Computer funktioniert alles perfekt. Auf meinem anderen Computer: Ryzen 1600, GTX1060. Die Kacheln blinken wie verrückt ... Beide mit Windows 10 Pro x64.

Fahrername: GLES2
Gles 2 Verwenden Sie Nvidia Rect Flicker Workaround: On
Mein 1060 läuft durchschnittlich 30 ~ 50 Fps
Warten auf den Vulkan ...

Jeder, der dies in GLES2 hat, möchte vielleicht die Testbuilds ausprobieren, die wir auf # 37349 erstellen. Es ist möglich, dass dies hilfreich ist, da eine andere Methode zum Zeichnen von Rekten verwendet wird.

Das gleiche Problem haben. GTX 1060 6 GB und Ryzen 7 1700X. Das Aktivieren von cell_y_sort behebt das Problem für mich, verursacht jedoch große Leistungsprobleme (fps sinkt). Gleiches gilt für das Setzen von cell_quadrant_size auf 1.

Nur um noch einmal zu fragen, kann jemand die Beta-Version 3.2.2 ausprobieren, bei der use_batching aktiviert ist? Setzen Sie auch dieses Mal use_nvidia_workaround auf on.

Leider hat es seit meinem früheren Kommentar niemand mit dem Flimmerproblem getestet: enttäuscht: (ungezogene Tester), und seitdem gibt es jetzt einen Sicherungspfad für einzelne Rechtecke, wobei die alte Methode verwendet wird, die das Problem möglicherweise wieder einführt

Wenn es jedoch mit Batching UND der NVIDIA-Problemumgehung ausgehärtet wird, wird bestätigt, dass die einheitliche Zeichenmethode die Ursache für die Flimmerprobleme ist, und es kann entfernt werden, wodurch das Problem endgültig behoben wird.

Also habe ich gerade die 3.2.2 heruntergeladen. Beta 1 und die Verwendung von Driver Name: GLES2 mit Use Batching und Gles 2 use Nvidia Rect Filcker Workaround scheint das Problem zu beheben. Obwohl ich es noch sehr lange nicht getestet habe (da das Flackern auf 3.2.1 erst nach ein paar Minuten auftritt, zumindest für mich).

Also habe ich gerade die 3.2.2 heruntergeladen. Beta 1 und die Verwendung von Driver Name: GLES2 mit Use Batching und Gles 2 use Nvidia Rect Filcker Workaround scheint das Problem zu beheben. Obwohl ich es noch sehr lange nicht getestet habe (da das Flackern auf 3.2.1 erst nach ein paar Minuten auftritt, zumindest für mich).

Ah das ist großartig. Ich vermutete es würde. Durch die Verwendung der Problemumgehung für einzelne Rechtecke wissen wir, dass dies funktioniert und kein Flimmern verursacht. Aber der Rest der Sprites wird mit dem Stapelcode gezeichnet, der mit indizierten Grundelementen gezeichnet wird, und ich vermutete, dass dies das Problem lösen könnte, und dies scheint zu sein. : +1:

Ich werde nachsehen, ob wir die alte einheitliche Methode vollständig aus dem Batch-Renderer entfernen können, um das Problem endgültig zu lösen. In der Zwischenzeit ist die Kombination aus Batched und NVIDIA-Problemumgehung, die Sie wahrscheinlich finden, ohnehin schneller als der alte Renderer und flackert nicht.

Ja, es ist definitiv schneller. Mit Godot 3.2.1 Stable mit dem GLES2-Treiber habe ich nur 20 fps erreicht, während ich mit Godot 3.2.2 Beta 1 leicht 60 fps erreicht habe. Aber ich bin neugierig:

Ich werde nachsehen, ob wir die alte einheitliche Methode vollständig aus dem Batch-Renderer entfernen können, um das Problem endgültig zu lösen

Bedeutet das, dass es eine Lösung für GLES3 geben wird?

Ja, es ist definitiv schneller. Mit Godot 3.2.1 Stable mit dem GLES2-Treiber habe ich nur 20 fps erreicht, während ich mit Godot 3.2.2 Beta 1 leicht 60 fps erreicht habe. Aber ich bin neugierig:

Ah das ist gut! : grinsend:

Bedeutet das, dass es eine Lösung für GLES3 geben wird?

GLES3 Ich habe bisher noch nichts gemacht. Wir könnten möglicherweise eine stark vereinfachte und reduzierte Version des Batchings machen, um die GLES3-Leute bis zur Veröffentlichung von 4.x zu überraschen (aber ich kann derzeit keine Versprechungen machen, da steht viel auf der Roadmap). Das sollte das Problem auch auf GLES3 lösen, wenn es dort auftritt.

Wir könnten möglicherweise eine stark vereinfachte und reduzierte Version des Batchings machen, um die GLES3-Leute bis zur Veröffentlichung von 4.x zu überraschen

Bitte (wie ist die Zeitspanne bis 4.x, um es in die richtige Perspektive zu rücken? Ich vermute mehrere Monate, wenn nicht ein halbes Jahr)

Ich denke, eine Lösung wäre erforderlich, wenn Hunderte von Menschen dieses Problem melden würden. Ich glaube nicht, dass wir das haben. Zumindest schlägt dieser Thread dies nicht vor.

Das heißt, wenn es einige kommerzielle Veröffentlichungen gibt, die darunter leiden, könnte es gut sein, ihnen zu helfen. Wenn ich mehr Erfahrung hätte, würde ich in mich selbst eintauchen, aber ich würde nicht wissen, wo ich anfangen soll. Ich habe gerade angefangen, den Godot-Code zu erforschen, der übrigens sehr gut geschrieben ist.

Hier wäre es schön, ein Abstimmungssystem für wichtige Fehler zu haben, die behoben werden müssen.

Meine Stimme ist, auf 4.x zu warten und die Ressourcen darauf zu konzentrieren. Wir wissen, dass Vulkan dieses Problem bereits löst.

Hier wäre es schön, ein Abstimmungssystem für wichtige Fehler zu haben, die behoben werden müssen.

Nach meiner Erfahrung führt die Abstimmung im Allgemeinen nicht dazu, dass Fehler schneller behoben werden. Dies gilt für von der Community entwickelte Projekte, aber auch kommerzielle proprietäre Software hat das gleiche Problem (siehe Discords Feature-Tracker).

Wahr. Ich schlage nicht vor, dass es helfen würde, es zu reparieren. Es wäre eher ein Maßstab dafür, wie weit das Problem verbreitet ist. Ich nehme an, die Anzahl der an dieser Diskussion beteiligten Personen könnte ein Maßstab sein. Auf jeden Fall bin ich mit diesem Thread ziemlich fertig und werde geduldig auf 4.x warten

Ich stehe auch vor dem Problem. Ich habe es nie gesehen, wenn ich normal autotilte. Wenn ich die Karte von Hand gezeichnet habe (was ich in einem anderen Projekt mit denselben Tilemaps getan habe), bin ich nie auf dieses Problem gestoßen. Aber als ich mit tilemap.set_cellv (...) einen prozedural generierten Dungeon renderte, stieß ich auf das Problem. Ich habe alle Vorschläge gemacht, und der einzige, der funktioniert hat, war die Verwendung von GLES2 mit der Problemumgehung. Dies ist jedoch ein ziemlich ernstes Problem! Die meisten grundlegenden Tilemap-Renderings schlagen fehl. Warum gibt es übrigens keine Problemumgehung für GLES3? Ich kenne OpenGL, ich habe eine grundlegende Spiel-Engine geschrieben, die Texturen mit Shadern rendert, aber nichts weiter. Kann jemand genau erklären, was das verursacht? Hoffentlich kann ich verstehen. <3

Ich stehe auch vor dem Problem. Ich habe es nie gesehen, wenn ich normal autotilte. Wenn ich die Karte von Hand gezeichnet habe (was ich in einem anderen Projekt mit denselben Tilemaps getan habe), bin ich nie auf dieses Problem gestoßen. Aber als ich mit tilemap.set_cellv (...) einen prozedural generierten Dungeon renderte, stieß ich auf das Problem. Ich habe alle Vorschläge gemacht, und der einzige, der funktioniert hat, war die Verwendung von GLES2 mit der Problemumgehung. Dies ist jedoch ein ziemlich ernstes Problem! Die meisten grundlegenden Tilemap-Renderings schlagen fehl. Warum gibt es übrigens keine Problemumgehung für GLES3? Ich kenne OpenGL, ich habe eine grundlegende Spiel-Engine geschrieben, die Texturen mit Shadern rendert, aber nichts weiter. Kann jemand genau erklären, was das verursacht? Hoffentlich kann ich verstehen. <3

Zu diesem Thread gibt es bereits einige Erklärungen. Ich nehme an, dass es zu diesem Zeitpunkt bis zur Veröffentlichung von 4.0 (Vulkan) keine neuen Problemumgehungen oder Korrekturen für dieses Problem gibt, es sei denn, die Community hat sich etwas ausgedacht. Meiner Meinung nach haben die Betreuer Recht, wenn sie sich jetzt, da 4.0 am Horizont steht, keine Sorgen um eine möglicherweise komplexe Lösung machen.

Warum gibt es übrigens keine Problemumgehung für GLES3?

Ich hatte das eigentlich nicht bemerkt, ich könnte versuchen, den Workaround-Code morgen auf GLES3 zu portieren. Es wird allerdings langsam sein, wenn wir es zum Laufen bringen können.

Ich habe jetzt eine WIP-PR (siehe oben) für die Problemumgehung für GLES3. Ich habe auch einige Ideen zum Korrigieren der einheitlichen Zeichenmethode, da der Shader für das, was benötigt wird, zu kompliziert erscheint. Ich brauche möglicherweise Hilfe beim Testen, wenn ich eine Korrektur durchführe, da ich das Flackern auf meinem Computer nicht wiederholen kann.

Ich denke, ich kann dabei helfen. Ich sollte in der Lage sein, ein benutzerdefiniertes Windows-Build auf Ihrer PR zu erstellen.

Ich arbeite jetzt daran, den Fast Path Shader neu zu schreiben, um ein Flimmern zu verhindern. Ich habe jetzt einen Prototyp zum Ausprobieren in # 38628. Ich würde mich sehr freuen, wenn jemand es ausprobieren könnte, der Hardware hat, die Flimmern zeigt. Anweisungen finden Sie in der PR.

Nun Update:

  • es scheint, dass die GLES3-Problemumgehung gut funktioniert: partying_face: (_es sollte in der nächsten Beta_ sein),
  • Die Experimente mit dem Fast-Path-Shader haben jedoch nicht geholfen: enttäuscht: und nach diesem Test scheint es, dass der Shader wahrscheinlich als Ursache ausgeschlossen werden kann.

Momentan denke ich also daran, dass es eine seltsame Situation ist, wenn die Bindung auf unserer Seite nur auf nvidia fehlschlägt oder wenn ein Treiberfehler auftritt (vielleicht ist diese Methode des Zeichnens nicht in Betracht gezogen oder nicht getestet?).

Die gute Nachricht ist jedenfalls, dass

  • Mit GLES2 mit Batching sollten Sie nicht einmal das Bedürfnis haben, die Fallback-Methode in 99% der Spiele zu verwenden, damit Sie nicht flackern
  • Und mit GLES3 wird bestätigt, dass der NVIDIA-Fallback funktioniert, um Flimmern zu verhindern, wenn auch zu Leistungskosten.

Zu diesem Zeitpunkt würde ich meine Zeit produktiver damit verbringen, einige Chargen in GLES3 zum Laufen zu bringen, was den Leistungsunterschied zunichte machen würde. : +1:

@lawnjelly Es ist ein Treiberfehler und wie es mit Power diesem Kommentar finden Sie meine Ergebnisse.

@lawnjelly Es ist ein Treiberfehler und wie es mit Power diesem Kommentar finden Sie meine Ergebnisse.

Ahha! :Grinsen:

Eines der Probleme ist, dass dieser Thread jetzt so lang geworden ist! Tatsächlich ist der API-Trace eine sehr gute Methode, um dies festzustellen, wenn Sie das Flimmern auf Ihrer Hardware bemerken, und ich bin damit einverstanden, wenn Sie jedes Mal, wenn Sie den Trace wiederholen, der auf einen Treiberfehler hinweist, unterschiedliche Ergebnisse erhalten. : +1:

@securas Hast du jemals bestätigt, dass das Problem in dem von dir geposteten Video durch diesen Flimmerfehler verursacht wurde?

Ich sehe in meinem eigenen Projekt ähnliche Einzelbilder mit schwarzem Hintergrund und horizontalen weißen Linien, sowohl mit der integrierten Kamera-Drag-Funktion als auch mit einem benutzerdefinierten Kameraskript und keiner der genannten Problemumgehungen (GLES2, NVIDIA Flicker Fix, HDR deaktivieren, verschiedene) verschiedene Arten der Zuweisung von Ansichtsfenstern) verhindern dies:

tile-glitch

Dies ist auf 3.2.1 stabil, Windows 10, GTX 1080.

Die Szene verfügt über vier übereinander gestapelte 1400 x 800-Tilemaps für den schwarzen Hintergrund, den Zickzack-Hintergrund, den Vordergrund und die Kamerakollision.

Ich wäre sehr dankbar, wenn jemand einen Einblick gewähren könnte - das Schreiben einer soliden Problemumgehung wird einen beträchtlichen Teil der Projektzeit bedeuten, auf die ich mich lieber nicht festlegen würde, wenn dies vermieden werden kann.

Wenn ich mich richtig erinnere, lag es daran, dass das Einrasten von 2D-Pixeln ausgeschaltet war.

@Shfty Das sieht tatsächlich so aus, als wäre es ein anderes Problem. Dies scheint bestätigt zu sein, wenn die nvidia-Problemumgehungen dies nicht beheben. Könnten Sie eine neue Ausgabe mit Hardwaredetails und einem Min-Reproduktionsprojekt eröffnen?

@lawnjelly Das klingt ungefähr richtig. Ich habe # 39720 mit einem minimalen Reproduktionsprojekt eröffnet, das auf der Szene im obigen GIF basiert.

Ich habe es geschafft, das Problem zu beheben, indem ich die betroffene Szene in einem eigenen Ansichtsfenster-Knoten verschachtelt habe. Daher habe ich auch ein Beispiel-Setup dafür in das Projekt aufgenommen.

Dieses GIF sieht für mich in gewisser Weise wie vertikale Synchronisation / Bildschirmriss aus.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen