Godot: Nvidia驱动程序的Tilemap / draw_rect随机闪烁

创建于 2017-07-27  ·  191评论  ·  资料来源: godotengine/godot

操作系统或设备-Godot版本:
Windows 10,godot3.0alpha1

问题说明:
我制作了一个kinematicbody2D和一个tilemap,将运动体按正常方式移动,但是有时候tilemap上的一个tile消失的速度比任何屏幕录制软件都可以捕获的快。 有时2会消失,但是它们会被重画

重现步骤:
制作图块图,加载一些图块,制作运动体
在游戏中移动身体,睁开眼睛,不要眨眼,看着一些瓷砖从渲染中消失并迅速回来

bug confirmed high priority rendering

最有用的评论

这很可能是由于当前每帧多次重复使用顶点缓冲区(这也可能导致性能问题)。 也就是说,顶点缓冲区用于绘制一个对象,在途中进行了更改以开始绘制下一个对象。 正在调查。

我怀疑正确的2d批处理将解决此问题和2d性能问题。

所有191条评论

可以证实这一点使用戈多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花了我一段时间来触发问题(编辑器设置为始终更新)

最新的master 1f4685375f2d2e36a2e19e67ac9f614b8c99ea28中仍会发生此问题

看来问题不仅仅与tilemap有关。 我在标签内的大文本中发现了相同的问题。 我感觉只有在使用percent_visible和/或移动标签后才会发生。 这次我只能在游戏运行时注意到它,但是我不会抛弃编辑器中发生的同样情况。 我无法为其拍照或录像,但是有些字符开始闪烁并以不同的变换移动到其他位置(您可以从字体纹理中看到很多字母)

更新:此问题是核心问题。 编辑器本身也正在发生这种情况。 我无法截屏,因为到我注意到它并想要截屏时,编辑器可能已更新,问题就消失了。 我在编辑器的两个部分中注意到了这个问题,这不是在这两个部分中都发生了,而是我注意到了这个部分:在“输出”内容中,一些字母闪烁,并且屏幕底部的选项卡标签之一输出,调试器,音频...标签是。 调试器标签上的D开始闪烁。 触发起来并不容易,但这是同样的问题。

我在视频上遇到标签问题(闪烁开始于视频的一半左右) https://streamable.com/e31xp靠近第四行的结尾,您会看到一些字母闪烁

抱歉,我认为编辑不会发送通知,这是一个重要问题

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或任何屏幕录制软件进行录制时,不会出现此问题。 再说一遍,有时即使在录制时它也会发生,所以我不知道😅
  • 它可以随时随地发生(甚至在编辑器本身中,不仅在正在编辑的场景中)
  • 似乎仅在像元大小大于1的TileMap s中发生,有时甚至是文本。 我并不是说其他​​东西不会发生这种情况,但是我只看到在同时使用这两种东西时发生。
  • 而且我看不到代码有什么问题。 当然,我不是这方面的专家。 我唯一能想到的是某些转换未正确正确地设置... dunno真的😓

请参见#16277,以获得另一个可以重现此问题的示例项目。

有关此问题,请参阅16280

您好,要补充一点,只是为了澄清一下,我对Godot并没有做任何事情,我只是出于好奇而特别尝试了这个项目:
image

闪烁发生在测试播放中,而不发生在编辑器上。 有趣的是,如果我尝试2D运动角色演示,则情况恰恰相反,其中编辑器拼贴闪烁但不在测试中。

至少以我的经验,这似乎可以在稳定的godot中解决
3.0版本。

2018年2月4日,星期日,Archeia [email protected]写道:2:56

您好,为了补充说明一下,我什么都没做
和Godot在一起,我刚尝试了这个项目,
好奇:
[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)

似乎此错误发生在GTX 970M以上的Nvidia图形卡上吗?

GeForce GTX 970在这里。

这是我的一些发现以及一个重现此问题的简单项目。 (包含2种精灵的tilemap,包括godot图标和具有反色的godot图标,且在tilemap上方带有标签,其中包含已转换为tileset的场景)

Flicker.zip

  • 也发生在此场景中的标签上,单个字符随机移动(甚至旋转),就像tilemaps瓦片一样
  • 如果您在编辑器内部并在选中图块的同时在网格上移动鼠标,有时您会以冻结状态看到此问题,直到将鼠标移到其他网格部分
  • 场景树中节点的顺序会更改其频率(如果tilemap是最后一个节点,则它在图块地图上发生的频率更高,如果tilemap是第一个节点,则在标签上它发生频率更高)

编辑:这是问题的屏幕截图。 您会看到第一行的2个E奇怪地延伸到了tilemap的一个tile区域。 (红)

bug

从场景中移除图块贴图后,标签停止闪烁。

我希望这将有助于解决此问题。

45ab9cdfb55eed4eef59feee225248ccc20a6235
在Linux上导出(发布)到Windows(32位和64位)
带有Nvidia GTX 750 Ti的Win 10上的闪烁器(无权对此机器进行调试)

带有Debian或Win7的Nvidia GTX 760无法重现。

对我来说,Win7上的GTX 1060存在闪烁。 我真的希望这一问题能尽快得到解决,因为像现在这样,TileMap根本无法用于生产。 :(

此处瓷砖之间闪烁的线条也存在同样的问题。 看一下这个
平台程序tut.zip
非常烦人和令人不愉快的故障=(((

瓷砖之间的@podmentor线是正常的,并且与此问题无关。 这里有多种解决您问题的方法: http :

我的游戏也有这个问题。 但是只有当我打开dGPU(Nvidia)时。 我还没有通过集成的Intel GPU注意到它。

可能有帮助的说明。 我在win10和nvidia gtx 1070上遇到了这个问题。但是在tilemap上启用ysort似乎可以消除故障。

请注意,Ysort强制~~(像元)〜象限大小= 1。

@securas哇,这确实有效! 感谢那。 :)
@ bojidar-bg也许我误会了你的意思,但是我有一个单元格大小为(16,16)的图块地图,并且启用Ysort对此没有任何改变...

@securas很抱歉提出这个新问题,但在哪里可以找到ysort?

@Archeia在检查图块地图时,可以在“单元”下找到它。

编辑:在上面的示例中,即使启用Y-Sort,标签仍然闪烁,但是我还没有看到tilemap闪烁。

Edit2:刚刚看到启用Y-Sort的瓷砖闪烁。 这似乎无法解决此问题。 但是,它的发生频率似乎要低得多。

谢谢! 那确实为我解决了。

谢谢@ bojidar-bg。 我给人的印象是像元的大小与像元的大小一样……您所说的像元大小是什么意思?

@securas哦,我的意思是我的意思是象限大小。 不知道为什么我误解了...。

抱歉,如果这不会给对话增加太多,但是我注意到在编辑器和导出的可执行文件中都通过Kinematic Collision演示进行了闪烁。 Windows 10 64位。 GTX 1080 Ti。 2个显示器@ 1440p 我正在运行稳定的godot 3.0.2的自编译版本。 我已经在debug,release和release_debug中进行了尝试,并且在所有实例中都存在闪烁。

编辑:乍一看,似乎为图块地图启用ysort可以消除闪烁。

我开始怀疑这是否不是驱动程序问题。 似乎每个遇到问题的人都在使用nvidia卡,听起来大多数人都在Windows 10上。

Gettnig也是如此,我在这里使用GTX970 Manjaro

我可以对此进行复制,也可以确认启用Y Sort可以解决此问题。 我正在使用GeForce GTX 1060运行Windows 8.1。

编辑:实际上,我认为闪烁可能与象限大小有关,如@ bojidar-bg所示。 禁用Y排序后,随着象限大小的变化,我会看到不同程度的闪烁。 我尚未观察到象限大小为1、2、64或128的闪烁。我看到16-32范围内有很多闪烁。

@ecdavis您确定它完全停止闪烁了吗? 我也使用了GTX 1060,但我仍然注意到Y Sort闪烁,但频率却要低得多。

我真的很好奇有时会导致标签字母放置在tilemap瓷砖中的原因。

许多事情似乎都对闪烁的频率产生影响,例如节点顺序,我认为这与象限大小没有非常紧密的关系。

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

将“象限大小”设置为任何值!1时,瓦片位移问题不断发生。

将“象限大小”设置为1时,没有得到任何位移的图块,但仅在一次帧中出现了几帧撕裂故障。 可能无关。

通过在项目设置(渲染->质量-> 2d)中启用Pixel Snap,可以解决我的闪烁问题。 而且,我遇到了一个棘手的问题,通过弄乱我要导入的tilesheet图像和tilemap上的设置来解决。 即“过滤器”和“ mipmaps”。 我只是告诉它使用2d Pixel预设,并将其设置为纹理的默认值。

@rosshadden将在回家时尝试并更新结果。 感谢分享!

当我执行此操作时,Pixel snap已打开,但无法解决问题。
我实际上已经找到了可能的解决方案。
如果您在像元大小上启用Y排序并增大象限大小以匹配像元大小(在我的情况下为128),似乎至少可以完全消除此问题

@irresistiblejelly正如@ bojidar-bg所指出的那样,在内部将y-sort集象限设为1,而忽略了在编辑器上设置的值。 再一次,不仅是图块的问题,因为具有mipmaping和filter激活的动态字体也存在相同的问题(在这种情况下为字母移位)。

需要进行详尽的测试以查明确切的问题。

我刚刚尝试了@rosshadden提出的启用Pixel Snap的建议,这似乎已经为我解决了。

它仍然在iOS和macOS中发生,而在Android中则没有发生。
我激活了“渲染”->“质量”->“ 2d”->“像素捕捉”,这有助于降低频率,但这种情况仍在发生。
captura de tela 2018-05-02 as 15 00 15
captura de tela 2018-05-02 as 15 00 11

@ByTheQuietLake以前是否看到过这些问题,我相信您是第一个使用非NVIDIA卡的人。

那么,这可能是nvidia驱动程序的问题。

使用Godot 3.0.2在Windows 10上对其进行了测试:

  • Nvidia 1070 GTX(驱动程序397.64):问题正在发生。
  • 英特尔HD 4600:问题未发生。

这是一个确定的问题,至少对于使用Nvidia gpus的用户来说是这样。 我注意到,随着鼠标光标沿场景和侧面选项卡移动,这些图块正在以编辑模式在场景周围随机绘制。 运行游戏时也会发生这种情况。 将象限大小设置为1(Y排序将其设置为1)时,强度似乎确实降低了,但是仍然会发生,并且这会消除大型地图上的优化,从而导致沉重的帧速率下降。

在大型地图上更改设置后,尝试将象限大小设置回1(或尝试检查Y排序)时,我也遇到了崩溃(我用#19617打开了问题)。 这似乎表明涉及了过多的处理(或者是否可能发生内存泄漏?),并且可能与将TileMap编码为要渲染的整体问题有关,这导致了瓦片的绘制不规则。 我怀疑问题出在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 :
如果有人要测试,请使用以下项目: Flicker.zip

更新:
在我的示例中,我没有使用TileMap,它只是创建该网格的简单绘制函数​​(draw_line和draw_rect)。

@guilhermefelipecgs我真的不认为这是一个真正的解决方案。 我假设Nvidia X Server是一个类似于Windows 10的Nvidia控制面板的linux操作系统程序。我将电源管理设置设置为“首选最大性能”,这似乎减少了重定位磁贴,但是我仍然看到它在发生之后更改设置。 该错误很奇怪,因为在使用该程序时并不总是显示该错误,但是确实会发生。 也许您应该使用实际的TileMap尝试此操作。

即使该设置有效。 为什么会起作用? 将电源管理器设置为最高性能是否意味着代码很难在处理器上执行? 这似乎对我有所帮助,但并不能完全解决问题。 我仍然可以捕捉到不适当绘制的瓷砖。

@ jamesaddy789我并不是说这是一种解决方案,只是试图了解可能导致这种情况的线索。 我很感兴趣,因为当我使用Intel gpu时,可以正常工作,仅在nvidia上发生,并且我注意到,当gpu时钟下降时,会出现闪烁,但这不巧,我不知道。 我也尝试了TileMap,至少对我来说是一样的想法。

奇怪的是你没有和我一样的经历。 出于好奇,您的nvidia驱动程序版本是什么?

@guilhermefelipecgs这是版本398.11。 看来PowerMizer是便携式计算机应用程序,而我使用的是台式机,所以我没有该程序。 我只是在Nvidia控制面板中将电源管理设置更改为“更喜欢最高性能”。 它似乎确实减少了错位的瓷砖的数量,但是在运行游戏时我仍然注意到它。 与将象限大小设置为1相似,它降低了频率,但不能完全解决问题。 还有一个问题是,如果我在大地图上将象限大小更改为1,编辑器将崩溃。 将设置更改为最高性能后,这种情况也不太常见,但是我刚刚对其进行了测试,然后它崩溃了。

注意我的GPU是具有上述驱动程序的Nvidia Gtx 1060 6gb。 我的操作系统是Windows 10专业版。

我也在这里使用PC。 在WIndows上,控制面板确实有些不同,您更改的选项与我在此处测试的选项相同。 邓诺该怎么办。 这个错误很无聊。 :(

这是渲染代码中必须存在的问题。 我对引擎代码没有足够的经验来自行测试和解决。 有趣的是,您(@guilhermefelipecgs)在手动绘制网格时注意到了该问题。 我认为问题只存在于TileMap源代码中。

如果即使在不使用TileMap节点的情况下都在各处绘制矩形,则我必须假定该bug在draw_rect()函数中也处于活动状态(在源代码中位于https://github.com/godotengine/godot/第47行的blob / master / scene / resources / texture.cpp)。

绘制TileMaps的大部分功能都使用VS(在https://github.com/godotengine/godot/blob/master/scene/2d/tile_map.cpp中),而draw_rect()功能则使用VisualServer(我猜这是同样的事情)。

为什么这会影响Nvidia GPU? 我在其他程序(其他游戏引擎)中没有看到这种类型的问题,因此我只能将其作为源代码中的一个问题,该问题由于某种原因影响(至少更为明显地影响)Nvidia图形处理器。

@guilhermefelipecgs问题是更改电源管理设置后出现的频率降低了很多,这也许就是为什么您没有注意到它的原因。 在我再次看到故障之前,实际上花了一些时间运行游戏并四处走动。 在发现瓷砖放置不当之前,我用KinematicBody2D在游戏中走了几分钟。 我看到足以知道该问题仍然存在。

我98%确信这是驱动程序问题。 将nvidia驱动程序Power management modePrefer maximum performance似乎可以解决此问题。

以下测试使用@guilhermefelipecgs闪烁项目并将其剥离为仍会触发问题的基础知识。

我一直在尝试使用RenderDoc进行GPU跟踪大约4个小时,从而在游戏中启用低处理模式(基本上每秒1帧),但是,尽管我认为我能够捕获一些有问题的帧,但我看不到opengl命令或RenderDoc重构的帧中的任何错误。 再次,我认为我得到了一些有问题的框架...当它们是随机的时,很难获得它们。

我还记录了发送到着色器的rect,以将每个rect绘制到文件中,并搜索x <60或x> 420或y <60或y> 420之外或宽度或高度不同于20且我什么都没发现,我100%肯定应该有坏的rect,因为我在运行项目和记录日志时已经看到了它们。 以下是日志godot_tilemap_issue_logs.zip如果你们觉得通过他们去(145项目,然后去掉了一堆rects的,然后再145然后rects然后...)什么是记录dst_rect从这里的https:/ /github.com/godotengine/godot/blob/master/drivers/gles3/rasterizer_canvas_gles3.cpp#L687 -L701

这是Windows版本以及我用来记录rect的godot.windows.opt.tools.64.exe > log.txt类的东西(不是powershell,因为它使用其他编码,这很麻烦)

作为参考,我尝试了@guilhermefelipecgs的Flicker测试(Linux x86_64)和@mrcdk的修改版本(Wine),并且在以下系统上无法重现任何闪烁:

  • Mageia 6 x86_64
  • X11 1.19.5,Plasma / KWin 5.12.2(在合成ON和OFF下测试)
  • Optimus笔记本电脑,通过Nvidia PRIME使用Nvidia GTX 670MX(驱动程序390.59)
  • 经过Godot vsync ON和OFF以及驱动程序vsync ON和OFF的测试

驱动程序错误可能仅影响台式机或最新的GPU。

这也是我的假设,因为7天系列10卡出现问题
在更大的范围内。 我无缘无故从160降到10
Nvidia GeForce 6Gb gtx 1060在最低设置上运行。台式电脑

2018年6月19日,星期二,09:04RémiVerschelde, notifications@ github.com
写道:

作为参考,我尝试了两个@guilhermefelipecgs
https://github.com/guilhermefelipecgs的Flicker测试(Linux x86_64)和
@mrcdk https://github.com/mrcdk的修改版(Wine),无法
在以下系统上重现所有闪烁:

  • Mageia 6 x86_64
  • X11 1.19.5,Plasma / KWin 5.12.2(在合成ON和OFF下测试)
  • Optimus笔记本电脑,通过Nvidia PRIME使用Nvidia GTX 670MX(驱动程序)
    390.59)
  • 经过Godot vsync ON和OFF以及驱动程序vsync ON和OFF的测试

驱动程序错误可能仅影响台式机或最新的GPU。

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在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上,我使用了一个程序来查看我的gpu时钟是否发生变化:
whatsapp image 2018-06-19 at 14 13 41
*该问题还影响到使用最新驱动程序(398.11)的Windows,但是频率降低了,我需要等待更多时间。 忽略此屏幕截图中的驱动器版本,我只是将驱动器降级以查看其是否有任何区别。

新项目: Flicker_2.zip
视频1:https://youtu.be/01LWVQqp5yg
视频2:https://youtu.be/XTKTe9aZAuU?t = 50s

我必须尝试5〜8次,直到出现更强烈的闪烁。 看来我玩的越多,效果越强烈。

视频2与视频1相同,但是由于某种原因,视频的最后部分的性能会提高,当这种情况发生时,您会注意到闪烁消失了。

视频以60 fps的速度在Linux上录制(因为该错误在Linux上更为严重)。

我98%确信这是驱动程序问题。

我同意,我查看了代码(godot),但找不到任何奇怪的东西。

好的,我能够使用apitrace启动项目,并且现在我99.9998%确信这是与Power management mode相关的驱动程序问题,这是flicker_trace.zip文件,因此你们也可以在终端上运行它。

这是我录制的视频: https ://streamable.com/yk1qq质量有点差,所以这是原始的(效果并不好😅)

前20秒是项目的运行和日志记录。 我第一次使用apitrace时忘了最小化OBS,并且我的gpu时钟被锁定到最大值(这是右上角的图形),并且没有闪烁。 跳到aprox。 3:15,在此我最小化了OBS,并在重播跟踪时出现了该错误。 然后,我使用Show thumbnails选项为每个帧创建一个缩略图。 然后,我在缩略图中进行搜索,直到找到带有错误的框架。 我运行lookup state来获取该具体框架的opengl状态,完成后,我显示了没有错误的帧缓冲。

因此,如果此问题是由godot引起的,则不仅跟踪应该每次都显示它(这不是我在打开OBS时第一次运行它),并且缩略图和查找状态帧缓冲区应该看起来相同(他们显然没有)。

那么我们在这里可以做什么? 我认为我们(作为一个社区)不一定具有从NVIDIA本身发起变革的影响力。 还是我们?

那么我们在这里可以做什么? 我认为我们(作为一个社区)不一定具有从NVIDIA本身发起变革的影响力。 还是我们?

IMO值得一试:)最坏的情况是我们没有答案,但是在Nvidia开发论坛中打开有关此话题的线程将是不错的。

嗨,大家好,

我想知道,当您使用Nvidia Inspector并禁用CUDA-Force P2 State时,仍然会出现问题吗? 这是一个导致其他项目(例如OBS)闪烁的问题。 我也想知道这是否也是电源问题,因为我在另一款(非Godot)游戏中也遇到了类似的问题,并且也开始怀疑驱动程序问题。 GTX750在这里。

我在Godot v3.0.6上也遇到了同样的问题,下载最新的Nvidia驱动程序根本无法解决该问题。 我正在使用Nvidia GTX 750 TI显卡。 反正有解决此问题的方法吗? 另外,当我在网络浏览器上运行游戏时,根本没有出现闪烁的问题吗?

有没有人联系过英伟达这个问题?

该视频的问题为@guilhermefelipecgs ,这正是我正在发生的事情。
我使用的是gtx950。我尝试了象限大小的&& ysort,但没有运气。

我不确定该怎么办。 本来打算发布一个新的问题,但想我会在此发布。 我也在Godot v3.0.6上

有没有人在激活了GLES2.0的3.1 alpha版本上尝试过它? 也许是OpenGL3 x nvidia驱动程序问题?

我想我将不得不更改rects的绘制方式,这表明OpenGL驱动程序支持的情况有多么糟糕,以及为什么需要尽快迁移到Vulkan。

还有,有人用GLES2 renderre测试过吗?

@reduz很抱歉花了这么长时间。 终于有3.1可以编译
是的,我cna确认GLES2渲染器上仍在闪烁

我已经对此进行了一些测试,并且无法在128x128单元大小的图块集(象限16)上触发任何黑色图块闪烁。
我不确定这是否有帮助,但我认为这是有帮助的
e:顺便说一句,如果有人要我编辑一些c ++代码并重新编译以测试内容,则为lmk
e2:nvm刚回来。 是的,虽然频率要低得多

我找到了一个临时解决方案,实际上效果很好。 (如果有人即将发布游戏)

-平铺

  • 创建一个新的平铺地图并将图块数量设置为40x40
  • 选择地面瓷砖
  • 然后单击顶部标题栏上的存储桶填充工具(键f ),然后单击平铺网格上的任意位置
  • 现在转到文件->导出为图像,取消选中_draw tile并包括背景color_,然后单击导出。
  • 转到tinypng.org,将其压缩(我保存了71%的文件大小)。

-在godot中:

  • 向您的tilemap图层添加一个sprite节点。
  • 将精灵的纹理设置为从平铺的导出图像。
  • 设置网格步长选项以适合您的像元大小(在我的情况下为48x48)

image

现在,您只需在Sprite上执行ctrl + d并将其捕捉即可。 没有闪烁,性能也很棒(godot内部仅在画布上渲染内容)

e:希望这会有所帮助。 有点奇怪,但这是一个解决方案(不是最好的,但有一些东西)
e:您仍然可以将其他tilemap图层用于对象等。 这只是为了在保持良好性能的同时停止闪烁(在地面tilemap图层上启用ysort会使fps下降)

@ByTheQuietLake np,我很高兴! 我有nvidia gtx 950,我可以确认其正常工作。 超过20个小时以上没有看到任何黑色瓷砖闪烁。 在编辑器或游戏中。 我唯一注意到的是加载时间增加了20毫秒(实际上几乎没有增加),但这只是因为图像很大。 但是,当与角色一起在地图上移动时,感觉就像是平铺地图一样平滑。

不确定灵活性。 长话短说,只需将您的地砖创建为平铺的,导出为图像,然后将其作为精灵用作子对象即可。 然后,一旦reduz / nvidia devs / etc找到一个修复程序,只需删除您的旧精灵并像平常一样使用tilemap。 这应该是一个容易的过渡。

解决方案是否有效,如果您没有nvidia gpu :(

e:此错误仅在nvidia GPU上发生bythequietlake

这是我在github上的第一篇文章,如果在错误的位置(从google找到此线程),我深表歉意。

从2.1版转换游戏后,我最近遇到了同样的问题。 Girng的解决方案确实对我有用,但似乎有点不客气。 我还注意到移动时(使用他的解决方案)Sprite节点纹理和tilemap单元纹理之间存在一些偏移。 使用地板图块时,这并不明显。

我使用的是GTX960。在Windows 10上找不到任何PowerMizer设置(来自guilhermefelipecg的上述文章)。 那可能是因为我在Windows上,可能是Linux。 我还在上面读过,即使那样也不能解决问题。

这可能有点题外话,但是我应该坚持使用2.1直到问题解决,还是我需要编译Godot的“自定义版本”?

亲切的问候,

-亚伦

与亚伦(Aaron)一样,我们还有其他选择吗? 这是一个非常令人讨厌的问题,这使Godot不适合生产,请给它更高的优先级。

我发现对我有用的一件事是在项目设置中禁用HDR。

我发现对我有用的一件事是在项目设置中禁用HDR。

不适合我,唯一起作用的是启用Ysort,但这不是一个可行的选择(将象限大小设置为1)

我也遇到了这个问题,并且每次运行场景时都能够始终如一地重现。
有人尝试过弄乱渲染质量设置吗? 专门将Framebuffer Allocation为2D?

到目前为止,它看起来像这样可能有效……或者至少使它发生的频率降低了(我还没有看到闪烁再次发生..._还_)

到目前为止, @ ByTheQuietLake看起来根本没有闪烁的实例。

@XNargaHuntress真的吗? 您为帧缓冲区分配设置了什么? 那可能是一个很好的临时解决方案
编辑:nvm读错了,要对此进行2d framebuffer测试

@XNargaHuntress对于我来说,将帧缓冲区分配设置为2D时,闪烁仍在发生。 我觉得现在这种情况发生的频率更高,但这可能是一个巧合。
我在Windows 7 x64和Godot 3.0.6稳定版上使用Nvidia GTX 750 Ti。

编辑:我只是尝试将帧缓冲区分配设置为“没有采样的2D”。 仍然闪烁。

编辑2:使用GLES3渲染器的Godot 3.1 alpha也会发生闪烁。 但是当使用GLES2渲染器时,我根本没有发现任何闪烁。

也许我可能是错的,但是在最新的nvidia驱动程序更新之后,直到现在我都看不到任何闪烁。 今天在家时将进行全面测试。

GTX 1050TI,Windows 10,Godot 3.1 alpha

编辑:经过大量测试,它再次显示...但是很少.....但仍然存在

在以前的驱动程序更新之后,我已经有一段时间没有看到这个问题了。 不确定到底是哪个更新修复了该更新,并且可能取决于特定的GPU,但是...

请记住,GLES2驱动程序在Master上没有出现此问题。

将相机变焦设置回(1,1)可能已经解决了我的问题,之前我将其设置为(0.5,0.5)时出现了闪烁。 到目前为止,我还没有看到任何闪烁。 其他人可以确认吗?

只要ysort选项为OFF,我总是会闪烁。

在2018年11月19日星期一星期一2: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在带有GTX 960的

NVIDIA仍未解决其着色器磁盘缓存锁定问题。 可悲的是,使用NVIDIA卡的Windows用户没有充分发挥Godot的潜力。

大多数供应商最近都不愿透露有关OpenGL的信息,而解决此问题则相当复杂。
目前,Godot 3.1中最好的解决方法是切换到OpenGL2,在这里工作良好。
最终,将在Vulkan中弃用GLES3,希望该情况不再发生。

在带有GLES2的3.1alpha中仍然会发生(如此gif右上角所示):
sssaturday5

我发现可以使用的一种临时解决方案,应该一直保留到Vulkan:

  • 对每个单独的地砖使用Sprite节点。 在编辑时启用捕捉,以便更轻松地模仿相同的地面布局。 这种方式实际上不是我发现的性能问题。 这很耗时,而且有点奇怪。 这显然不是理想的,但是它确实可以解决问题。

我也可以确认在GLES2上也发生了这种情况:/(最后一次构建b47d4e1ba5d72bac5c2e671d9e4c0ae037a248c0)

那甚至还没有接近有效的解决方法。 首先,您失去了使用平铺地图的所有理由。

那甚至还没有接近有效的解决方法。 首先,您失去了使用平铺地图的所有理由。

是的,但是我的意思是,它停止了闪烁,并且仅适用于地面层。并且您的游戏看起来完全一样。 但是我同意你的观点,它没有利用tilemap功能,但是我认为在获得修复之前这是一个公平的权衡

我再也看不到闪烁了,这很奇怪,因为我肯定很长一段时间以前都看到过随机闪烁。

上次我还尝试使用draw_rect函数在canvasItem上绘制瓦片,模拟tilemap并在canvasItem上仅调用一次update(),因此在程序启动时它仅绘制一次。 令人惊讶的是,canvasItem也具有类似的随机闪烁(可能不那么频繁吗?),但仅在相机放大(0.5,0.5)时才出现,而在相机处于(1,1)时则没有。 我知道这听起来很奇怪,也许我误解了一些东西。

现在,闪烁不再发生,对于使用自定义canvasItem draw的闪烁和使用Godot的默认TileMap的闪烁都是如此。 我怀疑驱动程序更新了吗? 我的卡是Windows上的Nvdia GeForce GTX 970。 旁注有人可以检查他们当前安装的openGl版本吗? 我听说在linux上做起来比较容易。

编辑:不确定性不是很好,我认为,需要Vulkan来确保没有问题。

我更改了在OpenGL ES 2.0渲染器中绘制它们的方式,因此它在那里肯定可以正常工作。 在OpenGL ES 3.0上,我能想到的任何解决方法都可能会损害性能,因此将优先考虑在3.1淘汰后尽快使Vulkan尽快工作。

请确认是否可以在OpenGL ES 2.0渲染器中不再失败。

@reduz我已经在这里测试了几分钟,但没有发生。 感谢您解决此问题! :)
注意:
我不知道它是否相关,但是当相机抖动时,我仍然可以看到瓷砖之间的水平白线。

感谢reduz对OpenGL ES 2.0的修复!

@mikeleeman和其他人:
这是自11月20日以来针对NVIDIA GeForce卡的最近3个补丁说明:
11月20日12月3日和12月12日。 已解决的问题列表在第15页

我发现唯一可能相关(不确定)的问题是12月12日:

  • [Hitman 2 Silent Assassin]:游戏中闪烁的纹理损坏。
    [200472315]

我还注意到我的tilemap出了点问题:
capture3

我不确定除了当前的修复方法之外,我还能做更多的事情。 在发布3.1之后,该错误很可能不会在Vulkan上出现,并且现在应该从ES2渲染器中消除。

测试alpha 4,我使用GLES2和GLES3看到了这一点。 没有着色器,没有什么特别的。 只是图块。
test

@securas您是否使用变焦相机?

没有

在2018年12月29日星期六,上午12: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,PR即将推出

将其移至3.2,因为目前无法进行其他操作。 也希望nvidia永久修复此问题,我也直接与他们联系以确保也从他们这方面解决此问题。 通过Vulkan重写,希望这种情况不再发生,但同时请使用GLES2。

抱歉并不意味着要关闭

是否有其他使用GLES3的开放源代码游戏引擎具有tilemap类或可以查看的某些渲染? 我只是看日期,已经有530天了,它的时间会更长:/

我与不和谐(@ bojidar-bg)的godot开发人员联系,并获得了很多帮助。 我试图显示问题,但在OBS中录制时无法显示黑色磁贴。 然后,他建议我在NVIDIA控制面板中更改某些设置。

信息:fa7329f6485058fde30b8e2bfe26291dfbfc4434,GLES3,W10-64bit, GTX950

  • 转到NVIDIA Control Panel
  • 点击Manage 3D settings
  • 向下滚动至电源管理模式,将其从最佳电源更改为更喜欢的性能
    image
  • 点击应用

我还没有看过一个黑色的头衔(重新加载游戏约20次以上,并将继续进行测试,直到母牛回家)。 到现在为止还挺好! 希望这会有所帮助,非常感谢Bojidar!

girng:我在出口中也看到了同样的现象。 这就是我最担心的地方。 我们不必要求我们的最终用户更改其GPU设置,使其不会间歇性消失。 您是否没有尝试使用nvidia tile hack进行最新的3.1 beta测试?

  • 向下滚动到电源管理模式,将其从_optimal power_更改为首选最高性能

这不是暗示驱动程序有故障,我不确定引擎如何解决每个潜在的驱动程序错误。

@ OvermindDL1是的,reduz表示他直接与nvidia开发人员联系,非常感谢! 我对开发的电源管理模式解决方案感到满意。 我认为在nvidia自己解决之前,它应该使我们坚持下去。

@agameraaron我只使用gles3(游戏是gpu粒子绑定的)。 抱歉,无法对图块黑客发表评论。 但我听说它有效

从我刚才与nv代表讨论的内容来看,他们说他们不再能观察到此问题。 你们可以尝试使用最新的驱动程序版本,如果失败,则报告有关您硬件的更多信息? (GPU型号,已安装驱动程序,电源管理设置)?

@reduz在最新的驱动程序( 419.17 )上进行了测试。 现在,瓷砖闪烁会在以下电源模式下发生:偏好最高性能最佳自适应

GTX 950,W10,GLES3

  • 当OBS工作室打开时,闪烁消失

@reduz @girng @xsellier
GTX 1070,GLES2,W10
最新驱动程序419.35
无论使用哪种电源模式,都不会闪烁fl

GLES3似乎也可以工作..也在堆栈溢出时发现了此问题:
gles2屏幕闪烁

GTX 1060,W10
使用与上述相同的驱动程序(419.35),GLES2和3仍在闪烁。
您只需要在UI中单击,然后将鼠标悬停在控件上,因为默认的重绘设置现在是“更改时”,可以通过单击右上角的圆圈来更改它。

使用我在https://github.com/godotengine/godot/issues/9913#issuecomment -364707061上发布的旧项目,一切仍在发生-标签和tilemap闪烁,并且字母以怪异的方式在某些图块上延伸。

Screenshot_20190322_021011

试试这个选项。

我知道此选项,仅在GLES2中有效

@reduz @girng @xsellier
GTX 1070,GLES2,W10
最新驱动程序419.35
无论使用哪种电源模式,都不会闪烁fl

GLES3似乎也可以工作..也在堆栈溢出时发现了此问题:
gles2屏幕闪烁

上面的评论仅表明该问题不再存在。

@MennoMax,您是对的,闪烁仍然会发生..但是GLES2的解决方法有效,希望Vulkan的支持能尽快到来🙏

@ gavriil07问题是,gles2解决方法意味着您不能使用gpu颗粒:/
同样,当我在2月11日发布时,闪烁已固定在gles3上(电源模式设置为偏好最大性能)。 现在,闪烁已恢复,并且在使用更新后的新驱动程序的所有3个电源模式选项上均发生了闪烁。 没道理,其中一个驱动程序版本已针对首选最大性能修正了闪烁,现在新的驱动程序未对其进行修复。

@girng与gpu粒子有什么关系?
@reduz您有初步Vulkan渲染器的预计

@ gavriil07如果游戏使用GLES3(带有gpu粒子),那么使用gles2并不是真正的解决方法。 原因是,不支持GPU粒子

@girng CPUParticles仍然可以在GLES2中使用; 它们足以应付许多用例(在更简单的2D游戏中尤其如此)。 请让讨论保持话题:slightly_smiling_face:

但是,CPUParticles仍可以在GLES2中使用。 它们足以应付许多用例(在更简单的2D游戏中尤其如此)。 请保持讨论的主题

我说的是GPU颗粒,不是CPU

在几个月前写的https://www.reddit.com/r/godot/comments/9ljor3/psa_tilemap_flickering_possible_fix/上看到了一个帖子,上面写着“尝试在项目设置中禁用HDR”。 (渲染->质量->深度-> Hdr)

我在GLES3项目上进行了尝试,到目前为止,它似乎对我仍然有效(Nvidia 970版本415.27,Linux Mint)。 抱歉,如果这是重复的消息。

我可以说Nvidia gtx760(Windows 10 x64)上的GLES2驱动程序存在此错误。 以下视频:

https://www.youtube.com/watch?v=TM1BN4uwMfA
视频中发生的第一个实例是在0:36,然后在大约5秒钟内再次发生。

GLES2修复似乎为我减轻了这个问题。

在项目设置中禁用HDR对我有用。 谢谢!

Windows 10专业版64位
nVidia驱动程序430.39

Godot 3.1.1稳定
OpenGL ES 2.0渲染器:GeForce GTX 1080 / PCIe / SSE2

闪烁发生。

关闭HDR大多可以消除闪烁,但是在某些情况下又会出现这种情况,我无法进一步缩小范围。

Windows 10家庭版
Godot 3.1稳定
GTX 1070,驱动程序430.86
启用HDR的GLES 3.0闪烁,关闭后即可修复。

已使用自定义网格进行了测试(带有子级精灵的Node2D)

Godot 3.1.1稳定
Windows 10
GTX1080驱动程序430.86
关闭HDR的GLES 3.0,闪烁继续,当打开“首选最大性能”时,它似乎消失了(感谢部分解决方案的开发人员)。 很高兴看到开发者意识到了这一点,看起来它比Godot更像是一个nvidia问题。 装有amd卡的任何1个都有此问题?

关闭HDR的GLES 3.0,闪烁继续,当打开“首选最大性能”时,它似乎消失了(感谢部分解决方案的开发人员)。 很高兴看到开发者意识到了这一点,看起来它比Godot更像是一个nvidia问题。 装有amd卡的任何1个都有此问题?

AMD卡不会发生问题(标题显示为nvidia驱动程序btw)

OpenGL ES 3.0 Renderer: GeForce GTX 1060 6GB/PCIe/SSE2 Godot 3.1.1中存在此问题。
我没有图块地图,只有一堆自定义draw_texture() 。 我得到随机的闪烁点,但有时几乎是全屏故障。

在这一点上,我认为Vulkan将是一劳永逸的解决方案。

我的项目中也出现了奇怪的闪烁,但是Gles 2 Use Nvidia Rect Flicker Workaround设置修复了它。

Screen record from 2019-08-01 19 18 43

可以在GTX 980稳定的版本3.1.1上重现。
禁用HDR可以为我解决此问题。

只是一个更新,我仍然看到磁贴弹出了,到目前为止,我已经尝试了这里提到的所有内容。 我只能希望Vulkan可以修复它,但是如果他们也能在3.2中找到它,那就太好了。

最近我一直很积极,但是这个错误确实使我疲惫不堪,并且对我的工作流程非常有害(我已经尝试了所有方法)。 由于不可避免的黑色瓷砖闪烁,我不得不按F5。 我可以容忍一次在蓝色月亮或其他物体中闪烁,但是现在闪烁一直是不变的。 我爱Godot,现在没有回头路可走了,但变得越来越沮丧。

我不喜欢写这样的帖子,因为它没有帮助,而且发牢骚,但我不知道该说什么。 同时,我希望核心开发人员知道此错误如何影响Godot体验。 😭请@ reduz /核心开发人员,如果您可以阐明此bug的状态以及可能的解决方案(Vulkan?),那将是很棒的!

Windows 10家庭版
Geforce GTX 1060驱动程序版本440.97
Godot 3.1.1使用GLES3稳定
我尝试了此处列出的一些建议(禁用HDR,单击“ Gles2使用nvidia矩形闪烁解决方法”选项,并弄乱了我的性能设置),但没有一个可以解决该问题

同样在这里,忽隐忽现。 设置3个图块,其中1个用于水位,1个用于地平面,1个用于启用Y-Sorting的云。

Windows 10家庭版
Geforce GTX 1060最新驱动程序
上周使用GLES3编译的Godot 3.2 beta
gdscript,关闭HDR

看到水砖间歇性弹出或闪烁。

更新:

看来我必须使用GLES2并单击“ NVIDIA闪烁修复程序”,以消除闪烁。 此修复程序是否有机会适应GLES3?

我刚刚购买了新的ASUS RTX2060,可以解决此问题,但是可惜不是这样。 闪烁继续。 尝试使用3.2和VULKAN分支进行构建。

Windows 10
RTX 2060最新驱动程序
戈多3.1.1

天啊
我尝试了所有方法,但是仍然存在,即使我激活了“ 2d / gles2_use_nvidia_rect_flicker_workaround”,我的游戏仍可以与GLES2一起工作,但是仍然闪烁。
我甚至爱Godot甚至更喜欢Godot新版本3.1,但是请解决此问题。

好消息是VULKAN版本可以解决此问题。 所以我不知道这是否会在3.X分支中得到纠正。

那么,带有VULKAN的Godot何时抵达?

据我从上面的评论中知道,在Godot 3.x中不会解决此问题,这会阻止任何基于GLES 3的基于tilemap的项目。开发人员指出,这是NVIDIA问题,因此他们无能为力。 您可以使用Vulkan等待4.0(不少于6到8个月),或者花一些时间,或者从3.x开始并希望轻松升级到4.0。 我怀疑升级是否会很容易,特别是如果您使用的是花式着色器和GPU粒子等GLES 3功能。
我的解决方法是在tilemap选项上使用y-sorting。 这似乎减少了问题发生的频率。 但是,我仍然有玩家抱怨游戏世界的某些部分会消失。

如果是NVIDIA问题,为什么没有在Unity上发生? (就是想)

我认为,商业图书馆与开放源码图书馆。 检查上一个
开发人员的帖子。

2020年1月12日,星期日,谢尔盖·科斯帕诺夫(Sergey Kospanov)21:33 [email protected]
写道:

如果是NVIDIA问题,为什么没有在Unity上发生? (只是
想知道)

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/godotengine/godot/issues/9913吗
或退订
https://github.com/notifications/unsubscribe-auth/AAV7RWYIXVBYAYGZ3VLSPF3Q5ME3HANCNFSM4DUVCVVA

@securas这是不正确的,因为许多其他开源框架都没有遭受此问题的困扰(即使它们使用OpenGL进行渲染)。

这只是一个错误,很难诊断,并且目前没有人愿意花时间在它上面。

这只是一个错误,很难诊断,并且目前没有人愿意花时间在它上面。

为了澄清,当前的理解是我们正在解决Nvidia驱动程序错误。 这是由我们使用OpenGL API的方式触发的,如果其他项目没有遇到相同的问题,那是因为它们可能使用的OpenGL不同,或者是了解触发该错误的原因并编写了解决方法来防止它发生(例如,我们对GLES2的选项,但会降低性能)。

据我们了解,按照OpenGL规范,使用API​​的方式是完全合适的。 但是驱动程序错误意味着即使合法使用API​​也会产生有问题的结果。

我的错。 对于那个很抱歉。 我对
实施细节。

2020年1月12日,星期日,22:46RémiVerschelde [email protected]
写道:

这只是一个很难诊断的错误,没有
目前,一个人愿意花时间。

需要澄清的是,当前的理解是我们正在寻找Nvidia驱动程序
错误。 它是由我们使用OpenGL API的方式以及其他项目触发的
不会遇到相同的问题,这是因为它们可能使用OpenGL
不同,或了解是什么导致了该错误并编写了变通办法以
阻止它(就像我们对GLES2的选择所做的那样,代价是
性能)。

据我们了解,使用API​​的方式完全适合
根据OpenGL规范。 但是驱动程序错误意味着即使合法使用
API可能会产生有问题的结果。

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/godotengine/godot/issues/9913吗
或退订
https://github.com/notifications/unsubscribe-auth/AAV7RW4WGXFM7MQZKAQJ4X3Q5MNJVANCNFSM4DUVCVVA

这很可能是由于当前每帧多次重复使用顶点缓冲区(这也可能导致性能问题)。 也就是说,顶点缓冲区用于绘制一个对象,在途中进行了更改以开始绘制下一个对象。 正在调查。

我怀疑正确的2d批处理将解决此问题和2d性能问题。

看来这不是Nvidia的问题。 我和一个朋友(分别是AMD和Intel)也会发生这种情况,而且具有讽刺意味的是,我的另一个使用Nvidia的朋友也不会发生这种情况。 这个线程中指定的所有内容都发生在我和我的Intel朋友身上。

我在笔记本电脑上的集成Intel HD Graphics 620上遇到了这个问题。 切换到GLES2对我来说可以解决此问题。 对我来说另一件事是,它似乎仅在2D灯光打开时发生

有趣的是-我将需要检查是否也有照明

抱歉,我的场景中确实有此图像,但是删除它没有任何效果。 对我来说,这似乎更多是因为tilemap上的瓦片数量大-谁知道

昨天我做了一个有趣的实验-我使用TILED创建了相同的地图,并使用VNEN的TILED导入器将其导入,并且没有打扰-因此,这使我认为它是场景中的其他东西,或者我设置的方式拼贴图-因此我正在做更多研究,并将向您报告

FWIW,我一直只使用Tiled,但我仍然遇到问题。

@jonbonazza我很遗憾听到这个消息-让我觉得直到4.0到来之前,对它都没有希望-或者我使用了GLES2,但我不想使用它

还发现自己遇到了这个问题。 当程序被编译并作为可执行文件而不是在编辑器中运行时,它是否仍然存在?

当程序被编译并作为可执行文件而不是在编辑器中运行时,它是否仍然存在?

是的,因为编辑器和发行版导出模板之间的呈现代码相同。

我有一台电脑:i3 2120,gt630。
在这台计算机上,一切正常。 在我的另一台计算机上:ryzen 1600,gtx1060。 瓷砖像疯了似的闪烁着。都与Windows 10专业版x64。

驱动程序名称:GLES2
Gles 2 Use Nvidia Rect Flicker解决方法:打开
我的1060的平均速度为30〜50 Fps
等待Vulkan ...

任何在GLES2中具有此功能的人都可能想尝试我们正在制作的测试版本#37349。 它可能会有所帮助,因为它使用其他方法来绘制矩形。

有同样的问题。 GTX 1060 6GB和Ryzen 7 1700X。 启用cell_y_sort可以为我修复此问题,但会导致巨大的性能问题(fps下降)。 将cell_quadrant_size为1。

再问一次,有人可以在use_batching设置为on的情况下尝试3.2.2 beta吗? 也是这次,也将use_nvidia_workaround为on。

不幸的是,自从我之前的评论:disappointed:(调皮的测试人员)以来,没有闪烁问题的人对其进行过测试,并且从那时起,现在就有了使用旧方法的单个rect的备份路径,这可能会再次提出问题

但是,如果通过分批处理和nvidia解决方法进行固化,则可以确定均匀的绘制方法是导致闪烁问题的原因,并且可以将其删除,从而彻底解决了问题。

所以我刚刚下载了3.2.2。 beta 1并与Use BatchingGles 2 use Nvidia Rect Filcker Workaround一起使用Driver Name: GLES2 Gles 2 use Nvidia Rect Filcker Workaround似乎可以解决此问题。 尽管我已经很长时间没有测试它了(因为3.2.1的闪烁仅在几分钟后才出现,对我来说至少)。

所以我刚刚下载了3.2.2。 beta 1并与Use BatchingGles 2 use Nvidia Rect Filcker Workaround一起使用Driver Name: GLES2 Gles 2 use Nvidia Rect Filcker Workaround似乎可以解决此问题。 尽管我已经很长时间没有测试它了(因为3.2.1的闪烁仅在几分钟后才出现,对我来说至少)。

啊,太好了。 我怀疑会。 通过对单个rect使用解决方法,我们知道这种方法有效,并且不会引起闪烁。 但是其余的精灵将使用批处理代码绘制,而批处理代码使用索引基元进行绘制,我怀疑这可能可以解决问题,而且确实如此。 :+1:

我看一下是否可以从批处理渲染器中完全删除旧的统一方法,这应该可以彻底解决该问题。 同时,您可能会发现,批处理+ nvidia解决方法组合比旧的渲染器要快,并且不会闪烁。

是的,它肯定更快。 在GLES2驱动程序中使用稳定的godot 3.2.1时,我只能达到20 fps,而在godot 3.2.2 beta 1中使用godot 3.2.1时,我可以轻松达到60 fps。 但是我很好奇:

我看一下是否可以从批处理渲染器中完全删除旧的统一方法,这应该可以很好地解决问题

这是否意味着将针对GLES3进行修复?

是的,它肯定更快。 在GLES2驱动程序中使用稳定的godot 3.2.1时,我只能达到20 fps,而在godot 3.2.2 beta 1中使用godot 3.2.1时,我可以轻松达到60 fps。 但是我很好奇:

啊,很好! :咧着嘴笑:

这是否意味着将针对GLES3进行修复?

GLES3到目前为止,我还没有做任何事情。 我们可能最终会做一个大大简化和简化的批处理版本,只是为了让GLES3家伙受骗直到4.x发布(但是我不能在此阶段作出承诺,路线图上有很多东西)。 如果出现在GLES3上,那也应该解决该问题。

我们可能最终会做一个大大简化并缩减版本的批处理,只是为了让GLES3家伙受挫直到4.x发布

Pleaease(到4.x为止的时间表是什么?从时间上看,我怀疑是几个月,如果不是半年的话)

我认为,如果有数百人报告此问题,则需要修复。 我认为我们没有。 至少这个线程没有建议。

就是说,如果有一些受此困扰的商业发行版,最好帮助他们。 如果我有更多的经验,我会潜心学习,但是我不知道从哪里开始。 我刚刚开始研究Godot代码,顺便说一下,它很不错。

在这里,为需要修复的关键错误设置投票系统将是不错的选择。

我的投票是等待4.x,并将资源集中于此。 我们知道Vulkan已经解决了这个问题。

在这里,为需要修复的关键错误设置投票系统将是不错的选择。

根据我的经验,投票通常不利于更快地修复错误。 在社区开发的项目中确实如此,但是即使是商业专有软件也面临同样的问题(请参阅Discord的功能跟踪器)。

真正。 我并不是说这将有助于修复它。 这将更能衡量问题的广泛程度。 我认为参与讨论的人数可以衡量。 无论如何,我几乎已经完成了该线程,并且会耐心等待4.x

我也面临这个问题。 正常自动倾斜时,我从没面对过。 如果我手动绘制地图(我在另一个项目中使用相同的tilemaps绘制),则我从未遇到过这个问题。 但是,当我开始使用tilemap.set_cellv(...)渲染程序生成的地牢时,我始终遇到此问题。 我都提出了建议,唯一可行的方法是将GLES2与解决方法结合使用。 但是,这是一个非常严重的问题! 最基本的tilemap渲染失败。 为什么没有针对GLES3 btw的解决方法? 我知道一些OpenGL,我编写了一个基本的游戏引擎,该引擎使用着色器渲染纹理,仅此而已。 有人可以确切解释是什么原因吗? 希望我能理解。 <3

我也面临这个问题。 正常自动倾斜时,我从没面对过。 如果我手动绘制地图(我在另一个项目中使用相同的tilemaps绘制),则我从未遇到过这个问题。 但是,当我开始使用tilemap.set_cellv(...)渲染程序生成的地牢时,我始终遇到此问题。 我都提出了建议,唯一可行的方法是将GLES2与解决方法结合使用。 但是,这是一个非常严重的问题! 最基本的tilemap渲染失败。 为什么没有针对GLES3 btw的解决方法? 我知道一些OpenGL,我编写了一个基本的游戏引擎,该引擎使用着色器渲染纹理,仅此而已。 有人可以确切解释是什么原因吗? 希望我能理解。 <3

此线程上已经有一些解释。 我想在这一点上,除非4.0(vulkan)版本发布,否则不会有新的解决方法或修复此问题,除非社区提出了一些建议。 恕我直言,维护人员是正确的,因为4.0即将面世,因此不必担心可能存在的复杂修复。

为什么没有针对GLES3 btw的解决方法?

我实际上并没有注意到,明天也许可以尝试将变通方法代码移植到GLES3。 但是,如果我们能够使其正常运行,那将会很慢。

对于GLES3,我现在有一个WIP PR(请参见上文)。 我还对固定统一的绘制方法有一些想法,因为着色器对于所需的东西似乎过于复杂。 我可能需要一些帮助测试是否可以解决问题,因为我无法重复机器上的闪烁。

我想我可以帮忙。 我应该能够在您的PR上进行自定义Windows构建。

我现在正在重写快速路径着色器以防止闪烁。 我现在有一个可供尝试使用的原型#38628。 如果有人可以尝试使用具有闪烁特性的硬件,并且PR中有说明,我将不胜感激。

好更新:

  • 似乎GLES3解决方法可以正常使用:partying_face:(_它应该在下一个beta_中),
  • 但是,使用快速路径着色器进行的实验没有帮助:disappointed:,并且在测试之后,似乎可以将着色器排除为原因。

因此,目前我正在考虑某种奇怪的情况,即仅在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听起来

我设法通过将受影响的场景嵌套在其自己的“视口”节点中来解决此问题,因此在项目内部也包含了针对该场景的示例设置。

在我看来,那个gif有点像垂直同步/屏幕撕裂。

此页面是否有帮助?
0 / 5 - 0 等级