Godot: Tilemap / draw_rect piscando aleatoriamente com drivers Nvidia

Criado em 27 jul. 2017  ·  191Comentários  ·  Fonte: godotengine/godot

Sistema operacional ou dispositivo - versão Godot:
Windows 10, godot3.0alpha1

Descrição do problema:
Eu fiz um kinematicbody2D e um mapa de blocos, movendo o corpo cinemático funcionou normalmente, no entanto, ocasionalmente, um dos blocos no mapa de blocos desaparecia mais rápido do que qualquer software de gravação de tela poderia capturar. às vezes, 2 desapareciam, mas eram redesenhados

Passos para reproduzir:
Faça um mapa de blocos, carregue alguns blocos, faça um corpo cinemático
mova o corpo ao redor do jogo, mantenha os olhos abertos, não pisque, observe enquanto alguns blocos desaparecem da renderização e voltam rapidamente

bug confirmed high priority rendering

Comentários muito úteis

Isso pode muito bem ser devido aos buffers de vértice atualmente sendo reutilizados várias vezes por quadro (o que provavelmente também está causando problemas de desempenho). Ou seja, o buffer de vértice está sendo usado para desenhar um objeto, alterado no meio do caminho para começar a desenhar o próximo. Estou investigando.

Suspeito que o envio em lote 2D adequado resolverá esse e os problemas de desempenho 2D.

Todos 191 comentários

Pode confirmar que isso ainda está acontecendo usando Godot 3.0 custom build https://github.com/godotengine/godot/commit/29db531fc8360b1e6d5e23008b208517b6d8c627

Também acontece no editor:

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

Deve ser tudo grama.

EDITAR: Parece que se o tamanho do quadrante for definido como 1, o problema desaparece

EDIT 2: as peças não desaparecem, mas são movidas (um problema de transformação?)

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

EDIT 3: um vídeo de baixa qualidade. https://streamable.com/6a07b Levei um tempo para acionar o problema (o editor está configurado para atualizar sempre)

Esse problema ainda está acontecendo no último mestre 1f4685375f2d2e36a2e19e67ac9f614b8c99ea28

Parece que o problema não é apenas um mapa de blocos relacionado. Encontrei os mesmos problemas com um grande texto dentro de uma etiqueta. Tenho a sensação de que só acontece depois de usar percent_visible e / ou mover o rótulo. Dessa vez só pude perceber enquanto o jogo estava rodando, mas não descartaria o mesmo acontecimento no editor. Não consegui tirar uma foto ou gravar um vídeo, mas alguns caracteres começam a piscar e se mover para outra posição com uma transformação diferente (você pode ver um pedaço de letras na textura da fonte)

Atualização: Este é um problema central. Isso também está acontecendo com o próprio Editor. Não consegui fazer uma captura de tela porque, no momento em que percebo e desejo fazer uma captura de tela, o editor provavelmente já foi atualizado e o problema desapareceu. Notei o problema em duas seções do editor, não é que isso aconteça nessas duas seções, mas nas seções eu percebi o problema: No conteúdo de saída algumas letras piscaram e um dos rótulos da guia na parte inferior da tela onde os rótulos Output, Debugger, Audio, ... são. O D do rótulo do Debugger começou a piscar. Não é fácil de acionar, mas é o mesmo problema.

Eu tenho o problema da etiqueta no vídeo (tremulação começa em metade do vídeo) https://streamable.com/e31xp olhe atentamente para o final da 4ª linha e você verá algumas letras tremendo

Não acho que a edição enviará notificações e acho que essa é uma questão importante

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

Estou tendo o mesmo problema ... (por volta de 0:04 você vê uma oscilação no bloco)
Estou apenas usando um Sprite e meu próprio script de movimento

Depois de muitos testes, estou confiante de que meu problema (# 15113) é o mesmo que este. O que é estranho são algumas coisas:

  1. Eu estava originalmente vendo exatamente o mesmo problema que o @Remixful estava vendo com quadrados inteiros piscando, mas então isso foi embora sem mudar nada e, em vez disso, eu estava vendo essas linhas estranhas piscando. Então, eles desapareceram do nada e os quadrados piscantes originais retornaram ... Oo
  2. Se eu apenas deixar a cena ociosa, não vejo nenhum artefatos estranhos ou cintilação, mas uma vez que começo a mover meu personagem (ou talvez seja da câmera se movendo?) É quando eu começo a ver cintilação de alguma forma.
  3. Consigo capturar facilmente a cintilação do quadrado completo no vídeo, mas quando tento gravar a cintilação da linha, apesar de ter ocorrido definitivamente durante as filmagens, a cintilação não é encontrada em nenhum lugar do vídeo.

Além disso, FWIW, isso não ocorreu em 2.1 com exatamente o mesmo projeto.

Seria bom ter um projeto de exemplo que reproduzisse o problema (eu sei que deve ser fácil de fazer com base nas etapas fornecidas para reproduzir, mas o tempo de desenvolvimento do mecanismo é um recurso escasso :)).

@ akien-mga
flickertest.zip

Pode ser necessário executar o projeto algumas vezes antes de vê-lo, mas depois de iniciado, deixe-o parado e você deverá vê-lo.

Tentei várias coisas para ver se isso acontecia em diferentes cenários. Eu só pude reproduzi-lo quando um Camera2D era filho de um YSort. Isso pode ser uma pista.

Eu vi isso ontem na demonstração kinematic_char: \

O que descobri sobre esse problema é que:

  • É difícil reproduzir e capturar em vídeo. Às vezes, você o verá o tempo todo e ao tentar gravá-lo com o OBS ou qualquer software de gravação de tela, o problema não acontecerá. Por outro lado, às vezes acontecerá mesmo durante a gravação, então não sei know
  • Pode acontecer a qualquer hora e em qualquer lugar (até no próprio editor, não apenas na cena que está sendo editada)
  • Parece acontecer apenas com TileMap s com um quadrante de célula de tamanho> 1 e, às vezes, texto. Não estou dizendo que isso não aconteça com outras coisas, mas só vi acontecer ao usar essas duas coisas.
  • E não consigo ver nada de errado com o código. Admito que não sou um especialista nisso nem nada. A única coisa que consigo pensar é que alguma transformação não está sendo definida corretamente ao acaso ... não sei mesmo really

Consulte # 16277 para outro projeto de exemplo que deve reproduzir o problema.

Consulte 16280 para outro problema relacionado a isso.

Olá, para completar e apenas para esclarecer, não fiz nada com Godot e apenas experimentei este projeto especificamente porque estava curioso:
image

A oscilação acontece em um teste de jogo, mas não no editor. Curiosamente, o oposto acontece se eu tentar o 2D Kinematic Character Demo, onde os blocos do editor piscam, mas não no teste.

Pelo menos na minha experiência, isso parece ser resolvido no godot estável
Versão 3.0.

No domingo, 4 de fevereiro de 2018, 2h56, Archeia [email protected] escreveu:

Olá, para acrescentar e esclarecer, não fiz nada
com Godot e eu tentei este projeto especificamente desde que eu era
curioso:
[imagem: imagem]
https://user-images.githubusercontent.com/6222499/35776735-0b413ce2-09dd-11e8-81cc-be7a097d61cd.png

Curiosamente, não vejo esse problema com o personagem cinemático 2D
Demo

-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-362898191 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ABW9yzPGCmyxZONEuNXLFKU_PtY3ADsvks5tRYzmgaJpZM4OlRVq
.

@jonbonazza Eu usei o godot3 estável mais recente e ainda acontece. Minha imagem mostra no canto superior direito também T_T)

Parece que esse bug acontece em placas de vídeo Nvidia que estão acima da GTX 970M?

GeForce GTX 970 aqui.

Aqui estão algumas das minhas descobertas e um projeto simples para reproduzir esse problema. (um mapa de blocos com 2 sprites diferentes, o ícone de godot e o ícone de godot com cores invertidas, com rótulos acima do mapa de blocos, cena que foi convertida em tileset incluída)

Flicker.zip

  • também acontecendo com os rótulos nesta cena, personagens únicos se movem aleatoriamente (até giram), assim como os blocos de tile
  • se você estiver dentro do editor e mover o mouse na grade enquanto seleciona um bloco, às vezes você pode ver este problema em um estado congelado até mover o mouse para uma seção diferente da grade
  • a ordem dos nós na árvore de cena muda a frequência disso (se o mapa de blocos for o último nó, isso acontece com mais freqüência para o mapa de blocos e se o mapa de blocos for o primeiro nó, isso acontece com mais freqüência para os rótulos)

Edit: Aqui está uma captura de tela do problema. Você pode ver 2 E's da primeira linha estranhamente esticada em uma seção de ladrilho do mapa de ladrilhos. (vermelho)

bug

Os rótulos param de piscar quando o mapa de blocos é removido da cena.

Espero que isso ajude a resolver esse problema.

45ab9cdfb55eed4eef59feee225248ccc20a6235
exportado (lançamento) em Linux para windows (32 e 64 bits)
Pisca no Win 10 com Nvidia GTX 750 Ti (não tem acesso a esta máquina para depurar)

Não foi possível reproduzir em Nvidia GTX 760 com Debian ou Win7.

Flickering está presente com uma GTX 1060 no Win7 para mim. Eu realmente espero que isso seja corrigido muito em breve, porque como está agora, o TileMap simplesmente não pode ser usado para produção. :(

mesmo problema com linhas piscando entre os ladrilhos aqui. Veja isso
platformer tut.zip
Falha muito irritante e desagradável = (((

@podmentor linhas entre os ladrilhos é normal e não está relacionado a esse problema. Existem várias maneiras de resolver seu problema aqui: http://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html?highlight=tilemap#offset -and-scaling-artifacts

Eu também tenho esse problema com meu jogo. Mas só quando ligo o dGPU (Nvidia). Ainda não percebi isso com a GPU Intel integrada.

Uma nota que pode ajudar. Eu tenho esse problema com win10 e nvidia gtx 1070. Mas ligar o ysort no mapa de blocos pareceu parar a falha.

Observe que Ysort força ~~ (Célula) ~ Tamanho do quadrante = 1.

@securas Uau, funcionou mesmo! Obrigado por isso. :)
@ bojidar-bg Talvez eu tenha entendido mal o que você quer dizer, mas eu tenho um mapa de blocos com um tamanho de célula de (16, 16) e ativar Ysort não mudou nada sobre isso ...

@securas, desculpe por fazer essa pergunta newbish, mas onde posso encontrar ysort?

@Archeia Você pode encontrá-lo em "Célula" ao inspecionar o mapa de blocos.

Edit: No meu exemplo acima, os rótulos ainda piscam mesmo com o Y-Sort ativado, mas eu não vi o mapa de blocos ainda.

Edit2: Acabei de ver um azulejo cintilar com Y-Sort ativado. Isso não parece resolver o problema. No entanto, parece acontecer com muito menos frequência.

Obrigado! Isso resolveu para mim.

Obrigado @ bojidar-bg. Tive a impressão de que o tamanho das células era algo parecido com o tamanho das células ... O que você quis dizer com tamanho das células?

@securas oh, que pena, eu quis dizer Tamanho do Quadrante. Não sei por que eu confundi isso ...

Peço desculpas se isso não adicionar muito à conversa, mas estou percebendo essa oscilação com a demo Kinematic Collision no editor e como um executável exportado. Windows 10 de 64 bits. GTX 1080 Ti. 2 monitores a 1440p. Estou executando uma versão compilada do godot 3.0.2 estável. Eu tentei isso em debug, release e release_debug e a oscilação está presente em todas as instâncias.

Editar: à primeira vista, parece que a ativação de ysort para o mapa de blocos faz com que a cintilação desapareça.

Estou começando a me perguntar se isso não é um problema de driver. Parece que todos que estão tendo o problema estão usando uma placa nvidia e parece que a maioria das pessoas usa o Windows 10.

Obtenha isso também e estou em Manjaro, GTX970 aqui

Posso reproduzir isso e também confirmar se a ativação do Y Sort corrige o problema. Estou executando o Windows 8.1 com uma GeForce GTX 1060.

EDIT: Na verdade, acho que a cintilação pode estar relacionada ao tamanho do quadrante, como @ bojidar-bg sugere. Com o Y Sort desativado, vejo vários níveis de cintilação conforme vario o tamanho do quadrante. Ainda não observei cintilação nos tamanhos de quadrante 1, 2, 64 ou 128. Vejo muitos na faixa de 16-32.

@ecdavis Tem certeza de que para de piscar completamente? Estou usando uma GTX 1060 também e ainda percebi a oscilação com o Y Sort ativado, mas com muito menos frequência.

Estou realmente curioso para saber o que às vezes pode fazer com que as letras dos rótulos sejam colocadas dentro dos blocos do tilemap.

Muitas coisas parecem ter um impacto na frequência da cintilação, como a ordem dos nós, não acho que seja muito relacionado ao tamanho do quadrante.

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

Com o tamanho do quadrante definido como qualquer um! 1, o problema de deslocamento do ladrilho acontece constantemente.

Com o tamanho do quadrante definido como 1, nenhum ladrilho foi deslocado, mas ocorreu uma falha de rasgo em alguns quadros, apenas uma vez. Provavelmente não relacionado.

A cintilação para mim foi corrigida habilitando Pixel Snap nas configurações do projeto (Rendering -> Quality -> 2d). E eu tive um problema de rasgo que foi corrigido para mim ao mexer nas configurações das imagens e mapas de blocos que estava importando. Ou seja, "filtro" e "mipmaps". Eu apenas disse a ele para usar o preset 2d Pixel e definir isso como o padrão para texturas.

@rosshadden tentará quando estiver em casa e atualizará os resultados. Obrigado por compartilhar!

O pixel snap estava ativado quando fiz isso e não resolveu o problema.
Na verdade, encontrei o que pode ser uma solução.
Se você ativar a classificação Y no tamanho da célula E aumentar o tamanho do quadrante para corresponder ao tamanho da célula (no meu caso 128), parece eliminar completamente o problema, pelo menos para mim

@irresistiblejelly Como @ bojidar-bg apontou, ligar y-sort define o quadrante como 1 internamente, ignorando o valor definido no editor. Então, novamente, não é apenas um problema de tilesets, porque fontes dinâmicas com mipmaping e filtro ativado têm o mesmo problema (deslocamento de letra neste caso).

É necessário fazer testes exaustivos para identificar o problema exato.

Acabei de experimentar a sugestão de @rosshadden de ligar o Pixel Snap, que parece ter resolvido para mim.

Ainda está acontecendo no iOS e no macOS, não está acontecendo no Android.
Eu ativei Rendering -> Quality -> 2d -> Pixel Snap que ajudou a reduzir a frequência, mas ainda está acontecendo.
captura de tela 2018-05-02 as 15 00 15
captura de tela 2018-05-02 as 15 00 11

@ByTheQuietLake você viu esse problema anteriormente, acredito que você é a primeira pessoa a intervir com uma placa que não é NVIDIA.

Isso pode muito bem ser um problema de driver da nvidia.

Testei no Windows 10 usando Godot 3.0.2:

  • Nvidia 1070 GTX (driver 397.64): o problema está acontecendo.
  • Intel HD 4600: o problema NÃO está acontecendo.

Este é um problema definitivo que está ocorrendo pelo menos com usuários com NVIDIA GPUS. Percebo que os ladrilhos estão desenhando aleatoriamente ao redor da cena no modo de edição conforme o cursor do mouse se move ao longo da cena e das guias laterais. Também ocorre durante a execução do jogo. A intensidade parece diminuída ao definir o tamanho do quadrante para 1 (Y Sort define para 1), mas ainda ocorre e isso tira a otimização em mapas grandes, causando grandes quedas na taxa de quadros.

Também experimentei travamentos ao tentar definir o tamanho do quadrante de volta para 1 (ou ao tentar verificar a classificação Y) depois de alterar a configuração em um mapa grande (abri o problema com # 19617). Isso parece mostrar que o processamento excessivamente pesado está envolvido (ou vazamento de memória, talvez?) E pode estar relacionado ao problema geral com a maneira como os TileMaps são codificados para serem renderizados que está fazendo com que os ladrilhos sejam desenhados irregularmente. Suspeito que o problema esteja em tile_map.cpp e possivelmente em VS ou qualquer código que esteja lidando com a renderização de tiles.

Ainda não experimentei o problema com as fontes desenhadas incorretamente mencionadas acima, mas também posso não ter mexido com as fontes o suficiente para enfrentar o problema. A menos que as coisas sejam examinadas e consertadas, temo poder ver isso também.

Isso realmente precisa ser analisado e resolvido, já que muitos usuários têm placas Nvidia e a publicação no desktop significa que muitas pessoas com placas Nvidia estarão jogando e notando esses problemas.

Parece que o problema talvez esteja relacionado com o "PowerMizer", quando o modo preferido é definido como "Adaptativo" os níveis de desempenho diminuem para zero (após 35 ~ 40 segundos) e então a cintilação começa, mas se eu definir para "Preferir Desempenho máximo ", a cintilação desaparece.

Testei com Linux (driver 390,59 e 396,24) e Windows (driver 388,71 e 398,11).
~ No Windows, após atualizar meu driver para 398.11, parece que o problema parou ~
captura de tela de 2018-06-18 14-06-54

Vídeo que gravei mostrando o bug: https://youtu.be/R6TLpDX71RQ?t=32s
Se alguém quiser testar, aqui está o projeto usado: Flicker.zip

Atualizar:
Em meu exemplo, não estou usando TileMap, são apenas funções de desenho simples (draw_line e draw_rect) para criar essa grade.

@guilhermefelipecgs Eu realmente não acho que seja uma solução verdadeira. Estou assumindo que o Nvidia X Server é um programa de sistema operacional Linux semelhante ao Nvidia Control Panel com windows 10. Eu defini a configuração de gerenciamento de energia para "preferir desempenho máximo" e parece reduzir o deslocamento de blocos, mas ainda vi isso ocorrer depois alterando a configuração. Este bug é estranho porque nem sempre aparece durante o uso do programa, mas ocorre. Talvez você deva tentar isso com um TileMap real.

Mesmo se essa configuração funcionasse. POR QUE isso funcionaria? Configurar o gerenciador de energia para desempenho máximo não significaria que o código é difícil para o processador? Pareceu fazer diferença para mim, mas não resolveu completamente o problema. Ainda consigo ver os ladrilhos desenhados fora do lugar.

@ jamesaddy789 Não estou dizendo que seja uma solução, apenas estou tentando ter alguma pista sobre o que pode causar isso. Fiquei intrigado porque quando eu uso meu Intel gpu, funciona bem, só acontece com nvidia e notei que quando o relógio gpu cai o pisca aparece, mas isso pode ser apenas uma coincidência, não sei. Também tentei com o TileMap e, pelo menos para mim, é a mesma coisa.

É estranho que você não tenha tido a mesma experiência que eu. Apenas por curiosidade, qual é a versão do seu driver nvidia?

@guilhermefelipecgs É a versão 398.11. Parece que o PowerMizer é um aplicativo para laptop, embora eu esteja usando um PC desktop, então não tenho esse programa. Acabei de alterar a configuração de gerenciamento de energia para "preferir desempenho máximo" no Painel de Controle da Nvidia. Pareceu reduzir a quantidade de peças deslocadas, mas ao executar o jogo eu ainda percebi. Da mesma forma que definir o tamanho do quadrante para 1, reduziu a frequência, mas não resolveu o problema completamente. Também ainda tenho o problema de que, se eu alterar o tamanho do quadrante para 1 em um mapa grande, o editor trava. Isso também é menos frequente depois de alterar a configuração para desempenho máximo, mas testei agora e travou.

Observação Meu GPU é Nvidia Gtx 1060 6gb com o driver mencionado. Meu sistema operacional é o Windows 10 Professional.

Também estou usando um PC aqui. No Windows, o painel de controle é um pouco diferente, a opção que você alterou é a mesma que testei aqui. Não sei o que fazer. Esse bug é muito chato. :(

É um problema que deve estar no código de renderização. Não tenho experiência suficiente com o código do motor para testá-lo e resolvê-lo sozinho. É interessante que você (@guilhermefelipecgs) percebeu o problema ao desenhar a grade manualmente. Achei que o problema residia apenas no código-fonte do TileMap.

Se os retângulos forem desenhados em todos os lugares, mesmo quando não estiver usando o nó TileMap, devo assumir que o bug também está ativo na função draw_rect () (no código-fonte em https://github.com/godotengine/godot/ blob / master / scene / resources / texture.cpp na linha 47).

O Drawing TileMaps usa VS na maioria de suas funções (em https://github.com/godotengine/godot/blob/master/scene/2d/tile_map.cpp) e a função draw_rect () usa VisualServer (suponho que sejam a mesma coisa).

Por que isso afetaria NVIDIA GPUS? Não vejo esse tipo de problema em outros programas (outros motores de jogo), então posso apenas apontar para que seja um problema no código-fonte que por algum motivo impacta (pelo menos impacta de forma mais perceptível) os processadores gráficos da Nvidia.

@guilhermefelipecgs O problema é MUITO menos frequente depois de alterar a configuração de gerenciamento de energia e pode ser por isso que você não está percebendo. Na verdade, demorou um pouco para rodar o jogo e andar antes de ver a falha novamente. Eu andei pelo jogo com um KinematicBody2D por alguns minutos antes de perceber que as peças estavam sendo colocadas no lugar errado. Eu vi o suficiente para saber que o problema ainda existe.

Tenho 98% de certeza de que é um problema de driver. Definir o driver nvidia Power management mode para Prefer maximum performance parece resolver o problema.

Os testes a seguir usam o projeto flicker @guilhermefelipecgs e reduzem-no ao básico que ainda aciona o problema.

Estou tentando obter um rastreamento de GPU com RenderDoc por cerca de 4 horas, habilitando o modo de baixo processo no jogo (então, 1 quadro por segundo, basicamente), mas, embora eu ache que consegui capturar alguns quadros problemáticos, não consegui ver qualquer erro nos comandos opengl ou no quadro reconstruído do RenderDoc. Novamente, ACHO que obtive alguns frames problemáticos ... é meio difícil obtê-los quando são aleatórios.

Também registrei os retos que são enviados ao sombreador para desenhar cada retângulo em um arquivo e procurei por qualquer retângulo fora de x <60 ou x> 420 ou y <60 ou y> 420 ou com largura ou altura diferente de 20 e Não encontrei nada e estou 100% certo de que deve haver defeitos porque os vi enquanto executava o projeto e o registrava. Aqui estão os logs godot_tilemap_issue_logs.zip se vocês dst_rect daqui https: / /github.com/godotengine/godot/blob/master/drivers/gles3/rasterizer_canvas_gles3.cpp#L687 -L701

Aqui está o windows build mais a cintilação modificada que usei para registrar os retos. Se você quiser registrá-lo, use algo como godot.windows.opt.tools.64.exe > log.txt em um cmd (não um PowerShell porque ele usa outra codificação e é uma dor)

Para referência, tentei o teste Flicker de @guilhermefelipecgs (Linux x86_64) e a versão modificada de @mrcdk (Wine) e não consegui reproduzir nenhuma cintilação no seguinte sistema:

  • Mageia 6 x86_64
  • X11 1.19.5, Plasma / KWin 5.12.2 (testado com composição LIGADA e DESLIGADA)
  • Laptop Optimus, usando Nvidia GTX 670MX via Nvidia PRIME (drivers 390.59)
  • Testado com Godot vsync ON e OFF, bem como drivers vsync ON e OFF

Pode ser que o bug dos drivers afete apenas a área de trabalho ou GPUs recentes.

Essa também é minha suposição, já que 7 dias está tendo problemas com os cartões da série 10
em uma escala muito maior. Recebo quedas de fps aleatórias de 160 para 10 sem motivo
nas configurações mínimas com uma Nvidia GeForce 6Gb gtx 1060. PC desktop

Na terça, 19 de junho de 2018, 09:04 Rémi Verschelde, [email protected]
escrevi:

Para referência, tentei os dois @guilhermefelipecgs
https://github.com/guilhermefelipecgs's Flicker test (Linux x86_64) e
@mrcdk https://github.com/mrcdk's versão modificada (Wine) e não poderia
reproduzir qualquer cintilação no seguinte sistema:

  • Mageia 6 x86_64
  • X11 1.19.5, Plasma / KWin 5.12.2 (testado com composição LIGADA e DESLIGADA)
  • Laptop Optimus, usando Nvidia GTX 670MX via Nvidia PRIME (drivers
    390,59)
  • Testado com Godot vsync ON e OFF, bem como drivers vsync ON e
    FORA

Pode ser que o bug dos drivers afete apenas a área de trabalho ou GPUs recentes.

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-398311432 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AS-y9jLkTsEpQyBdu204PCK63wHgD1dxks5t-LCXgaJpZM4OlRVq
.

@ akien-mga o relógio gráfico muda durante a execução do teste, como mostra @guilhermefelipecgs em seu vídeo?

o relógio gráfico muda durante a execução do teste, como mostra @guilhermefelipecgs em seu vídeo?

Não muda, quando eu inicio o Godot ele se move para o valor de clock mais alto e permanece lá. Isso explica por que eu não veria tremulação, de acordo com o vídeo de

screenshot_20180619_191134

Quando você pensa que isso não pode ficar mais estranho ...

Fiz um novo projeto e notei 2 comportamentos estranhos.

1) Eu sei "exatamente" onde estará a cintilação.
2) Control 3 nunca fica "piscando".

Vou tentar explicar o que está acontecendo:
1) Eu adicionei 4 controles na cena como este:
captura de tela de 2018-06-19 15-45-25
Todos os controles usam o mesmo código base. Control 1 será o único nó com cintilação.

2) Depois de algum tempo (20 ~ 50 segundos), Node.gd reparará os nós, como este:
captura de tela de 2018-06-19 15-50-18
E então, a cintilação saltará de Control1 para Control 2 , ou seja, apenas o primeiro filho terá cintilação.
Nota1: acho que isso provavelmente acontece porque as funções de desenho serão enfileiradas na ordem dos nós.
Nota2: Control 2 está usando draw_texture , este método também tem cintilação.

3) Quando Control 3 se torna o primeiro filho, a cintilação desaparece magicamente, e o motivo é este sinalizador:
captura de tela de 2018-06-19 15-45-52
O sinalizador Invert diz ao código para inverter as funções de desenho, então meu código chamará primeiro draw_line e depois draw_rect , então os retângulos vermelhos ficarão na frente da grade.

4) E finalmente, a cintilação voltou em Control 4 , aqui eu chamo apenas draw_rect .

Eu esqueci de dizer antes que tenho uma GTX970.

No Windows, usei um programa para ver a mudança do relógio gpu:
whatsapp image 2018-06-19 at 14 13 41
* O problema também afeta o Windows com o driver mais recente (398.11), mas com menos frequência e preciso aguardar um pouco mais. Ignore a versão da unidade nesta captura de tela, acabei de fazer o downgrade da minha unidade para ver se há alguma diferença.

Novo projeto: Flicker_2.zip
Vídeo 1: https://youtu.be/01LWVQqp5yg
Vídeo 2: https://youtu.be/XTKTe9aZAuU?t=50s

Devo tentar 5 ~ 8 vezes até obter uma cintilação mais intensa. Parece que quanto mais toco, mais intenso é o efeito.

O vídeo 2 é a mesma coisa que o vídeo 1, mas o nível de desempenho aumenta na parte final do vídeo por algum motivo e quando isso acontece você pode notar que a cintilação desaparece.

Os vídeos são gravados no Linux (porque o bug é mais intenso no Linux) com 60 fps.

Tenho 98% de certeza de que é um problema de driver.

Concordo, procurei no código (godot) e não encontro nada de estranho.

Ok, consegui lançar o projeto com o apitrace e agora estou 99,9998% certo de que é um problema de driver relacionado ao Power management mode Aqui está o arquivo flicker_trace.zip para que vocês também possam executá-lo .

E aqui está um vídeo que gravei: https://streamable.com/yk1qq A qualidade é meio ruim, então aqui está o original (que não é muito melhor 😅)

Os primeiros 20 segundos são o projeto em execução e registro. Esqueci de minimizar o OBS na primeira vez que usei o apitrace e meu relógio gpu estava travado no máximo (é o gráfico no canto superior direito) e a oscilação não estava lá. Pule para aprox. 3:15 onde eu minimizei OBS e fiz o bug aparecer ao reproduzir o rastreamento. Em seguida, usei a opção Show thumbnails para criar uma miniatura para cada quadro. Em seguida, procurei nas miniaturas até encontrar um quadro com o bug. Executei o lookup state para obter o estado opengl daquele frame de concreto e, depois que terminou, mostrei o framebuffer sem o bug.

Portanto, se esse problema foi causado por godot, não apenas o trace deve mostrá-lo todas as vezes (não mostra na primeira vez que o executo enquanto deixo o OBS aberto) e a miniatura e o framebuffer do estado de pesquisa deveriam ter a mesma aparência (que eles claramente não fizeram).

Então, o que podemos fazer aqui? Não acho que nós (como comunidade) tenhamos necessariamente a influência necessária para iniciar a mudança da NVIDIA por conta própria. Ou não?

Então, o que podemos fazer aqui? Não acho que nós (como comunidade) tenhamos necessariamente a influência necessária para iniciar a mudança da NVIDIA por conta própria. Ou não?

IMO, vale a pena tentar :) Na pior das hipóteses, não obtemos uma resposta, mas abrir um tópico sobre isso no fórum de dev da Nvidia seria bom.

Oi pessoal,

Eu estou me perguntando, o problema ainda ocorre quando você usa o Nvidia Inspector e desativa CUDA - Forçar estado P2? Este foi um problema que causou oscilação em alguns outros projetos (como OBS). Gostaria de saber se é um problema de energia também, já que estou vendo um problema semelhante em outro jogo (não-godot) e estou começando a suspeitar de um problema de driver também. GTX750 aqui.

Ainda estou tendo o mesmo problema no Godot v3.0.6 e baixar os drivers da Nvidia mais recentes não ajuda em nada com esse problema. Estou usando uma placa de vídeo Nvidia GTX 750 TI. Existe alguma maneira de corrigir esse problema? Além disso, quando executo meu jogo em um navegador da web, o problema de flashing não aparece?

Alguém já entrou em contato com a nvidia sobre esse problema?

tenho esse problema ty @guilhermefelipecgs para aquele vídeo, exatamente o que está acontecendo comigo.
Estou no GTX 950. Tentei fazer o tamanho do quadrante && ysort, mas sem sorte.

Não estou certo do que fazer. ia criar um novo problema, mas achei melhor postar nisso. também estou usando Godot v3.0.6

Alguém já experimentou com a versão 3.1 alpha com GLES2.0 ativado? Talvez seja um problema de driver OpenGL3 x nvidia?

Acho que terei que mudar a forma como os retos são desenhados, isso mostra o quão ruim está a situação com o suporte ao driver OpenGL e porque mudar para o Vulkan será necessário em breve.

Além disso, alguém testou com o renderre GLES2?

@reduz sinto muito por ter demorado tanto. finalmente consegui 3.1 para compilar
sim, posso confirmar que a cintilação ainda está acontecendo no renderizador GLES2

Tenho feito alguns testes com isso e não consigo acionar nenhum mosaico preto piscando em um tileset de tamanho de célula de 128x128 (quadrante 16).
Não tenho certeza se isso ajuda, mas acho que é alguma coisa
e: btw se alguém quiser que eu edite algum código c ++ e recompile para testar coisas, basta lmk
e2: nvm acabou de voltar. sim, é muito menos frequente embora

Encontrei uma solução temporária que funciona muito bem, na verdade. (se alguém estiver lançando seu jogo em breve)

- em mosaico :

  • crie um novo mapa de blocos e defina a quantidade de blocos como 40x40
  • selecione seu tileset chão
  • em seguida, clique na ferramenta de preenchimento de balde na barra de cabeçalho superior (tecla f ), clique em qualquer lugar na grade de blocos
  • agora vá para arquivo -> exportar como imagem, desmarque _desenhar bloco e incluir cor de fundo_, clique em exportar.
  • vá para tinypng.org, compacte-o (salvei 71% do tamanho do arquivo).

- em godot:

  • adicione um nó sprite à sua camada de mapa de blocos.
  • definir a textura do sprite para a imagem exportada do lado a lado.
  • defina as opções de etapa da grade para caber no mesmo tamanho de sua célula (no meu caso, era 48x48)

image

agora, você pode apenas fazer ctrl + d no sprite e girá-lo. sem cintilação e o desempenho é ótimo (o godot apenas renderiza internamente o que está na tela)

e: espero que isso ajude. é um pouco estranho, mas é uma solução (não é a melhor, mas é alguma coisa)
e: você ainda pode usar as outras camadas do mapa de blocos para objetos e outros enfeites. isso é apenas para que o solo pare a cintilação enquanto mantém um bom desempenho (habilitar ysort em uma camada de mapa de blocos do solo cai fps ruim)

@ByTheQuietLake np, o prazer é meu! eu tenho nvidia gtx 950 e posso confirmar seu funcionamento. não vi nenhum azulejo preto piscando por mais de 20 horas . no editor ou no jogo. a única coisa que notei é que o tempo de carregamento aumentou em cerca de 20 ms (o que quase não é nada), mas isso só porque a imagem é enorme. entretanto, ao se mover pelo mapa com seu personagem, parece tão suave como se fosse um mapa de blocos.

não tenho certeza sobre flexibilidade. Para encurtar a história, basta criar seus blocos de chão em mosaico, exportar como imagem e usá-los como um sprite como uma criança em seu mapa de blocos. então, uma vez que reduz / nvidia devs / etc encontrar uma correção, apenas delete seus sprites antigos e use o tilemap como você faria normalmente. deve ser uma transição fácil.

solução funcionou ou não se você não tiver uma NVIDIA GPU :(

e: este bug só acontece com NVIDIA GPUS bythequietlake

Este é o meu primeiro post no github, e peço desculpas se estiver no lugar errado (encontrei este tópico do google).

Recentemente, tive esse mesmo problema depois de converter um jogo do 2.1. A solução de Girng funciona para mim, mas parece um pouco hacky. Também notei que há um ligeiro deslocamento entre a textura de um nó Sprite e as texturas de células do mapa de blocos ao se mover (usando sua solução). Isso não era aparente usando um mapa de ladrilhos.

Estou em uma GTX 960. Não consigo encontrar nenhuma configuração do PowerMizer no Windows 10 (da postagem de guilhermefelipecg acima). Isso pode ser porque estou no Windows, e pode ser uma coisa do Linux. Eu também li acima, que mesmo isso não resolveu.

Isso pode ser um pouco fora do tópico, mas devo permanecer na versão 2.1 até que isso seja corrigido ou precisarei compilar uma "versão personalizada" de Godot?

Atenciosamente,

- Aaron

A mesma pergunta aqui do Aaron, temos outras opções? Este é um problema muito desagradável e torna Godot não adequado para produção, por favor, dê a ele uma prioridade mais alta.

Uma coisa que descobri que funcionou para mim foi desativar o HDR nas configurações do projeto.

Uma coisa que descobri que funcionou para mim foi desativar o HDR nas configurações do projeto.

Não para mim, o único que funcionou foi ativar o Ysort, mas não é uma opção viável (define o tamanho do quadrante para 1)

Eu estava passando por isso também ... e era capaz de reproduzir consistentemente todas as vezes que exibia a cena.
Alguém já tentou mexer nas configurações de qualidade de renderização? Definindo especificamente Framebuffer Allocation para 2D?

Até agora, _parece_ que pode estar funcionando ... ou pelo menos fazendo com que aconteça com muito menos frequência (não vi a oscilação ocorrer novamente ..._ ainda_)

@ByTheQuietLake até agora, parece que não há ocorrências de oscilação.

@XNargaHuntress realmente? O que você definiu para a alocação do framebuffer? isso poderia ser uma boa solução temporária
editar: nvm leu errado, vou testar isso para o framebuffer 2d

@XNargaHuntress A oscilação ainda está acontecendo para mim com Framebuffer Allocation definido como 2D. Sinto que está acontecendo com ainda mais frequência agora, mas pode ser uma coincidência.
Estou usando uma Nvidia GTX 750 Ti no Windows 7 x64, Godot 3.0.6 estável.

Edit: Eu apenas tentei definir Framebuffer Allocation para "2D Without Sampling". Ainda pisca.

Edit 2: Flickering também acontece com Godot 3.1 alpha usando o renderizador GLES3. Mas ao usar o renderizador GLES2, não notei nenhuma cintilação.

Talvez eu possa estar errado, mas após a última atualização do driver da nvidia, não pude ver nenhuma oscilação até agora. Será totalmente testado quando estiver em casa hoje.

GTX 1050TI, Windows 10, Godot 3.1 alpha

EDIT: Depois de muitos testes, ele apareceu novamente ... mas muito poucos ... mas ainda está lá

Depois de uma atualização de driver anterior, não vejo o problema há algum tempo. Não tenho certeza exatamente qual atualização corrigiu isso e provavelmente vai depender da GPU específica, mas sim ...

Lembrem galera que o driver GLES2 não apresenta esse problema no Master.

Definir o zoom da câmera de volta para (1,1) pode ter corrigido o problema para mim, antes eu o definia para (0,5, 0,5) e estava vendo tremores. Até agora não estou vendo nenhuma oscilação. Alguém mais pode confirmar?

Desde que a opção ysort esteja DESLIGADA, sempre fico piscando.

Na segunda-feira, 19 de novembro de 2018 às 14h10, mikeleeman [email protected] escreveu:

Definir o zoom da câmera de volta para (1,1) pode ter resolvido o problema para mim,
anteriormente eu o definia para (0,5, 0,5) e estava vendo tremulações. Até agora não estou
vendo qualquer cintilação. Alguém mais pode confirmar?

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-439773424 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ACv4240No-elY7BK16HKAmxhHrFRaOj4ks5uwj1UgaJpZM4OlRVq
.

@mikeleeman Ainda acontecendo no GLES3 com uma GTX 960. Tentei o modo framebuffer 2D, manobras de câmera, etc. Neste ponto, acho que Vulkan é nossa única esperança.

A NVIDIA ainda não corrigiu o problema de bloqueio do cache de disco do shader. É triste porque as pessoas que usam Windows com placas NVIDIA não estão experimentando todo o potencial de Godot.

A maioria dos fornecedores não está divulgando nada sobre o OpenGL recentemente e trabalhar em torno disso é bastante complicado.
Por enquanto, a melhor solução alternativa em Godot 3.1 é mudar para OpenGL2, onde funciona bem.
Eventualmente, GLES3 será posteriormente descontinuado para Vulkan, onde isso deve não acontecer mais.

Ainda acontece em 3.1alpha com GLES2 (conforme mostrado no canto superior direito deste gif):
sssaturday5

Uma solução temporária que encontrei para funcionar, que deve nos segurar até Vulkan:

  • Use nós Sprite para cada ladrilho de chão separado. Ative o ajuste ao editar para que seja mais fácil imitar o mesmo layout de solo. Esta forma, na verdade, não é um problema de desempenho que eu encontrei. É demorado e um pouco estranho de fazer. Obviamente não é o ideal, mas funciona por enquanto.

Também posso confirmar que isso acontece no GLES2: / (última compilação b47d4e1ba5d72bac5c2e671d9e4c0ae037a248c0)

Isso não é nem perto de uma solução válida. Você perde literalmente todos os motivos para usar mapas de blocos em primeiro lugar.

Isso não é nem perto de uma solução válida. Você perde literalmente todos os motivos para usar mapas de blocos em primeiro lugar.

Sim, mas quero dizer que para a oscilação e é apenas para a camada do solo .. E seu jogo parece exatamente o mesmo. Mas eu concordo com você, ele não tira proveito dos recursos do mapa de blocos, mas eu sinto que é uma troca justa até que uma correção entre

Não estou mais vendo cintilações, o que é estranho porque há muito tempo eu estava vendo cintilações aleatórias.

Da última vez, também tentei desenhar blocos em um canvasItem com funções draw_rect, emulando um mapa de blocos e chamando update () no canvasItem apenas uma vez, portanto, desenha apenas uma vez no início do programa. Surpreendentemente, o canvasItem também tem tremulações aleatórias semelhantes (talvez menos frequentes?), Mas apenas quando a câmera está ampliada (0,5,0,5), mas não quando a câmera está em (1,1). Eu sei que parece estranho, talvez eu tenha entendido algo errado.

Agora as oscilações não estão mais acontecendo, tanto para aquele que usa o desenho canvasItem personalizado quanto para aqueles que usam o TileMap padrão de Godot. Eu suspeito de uma atualização de driver? Minha placa é Nvdia GeForce GTX 970, no windows. Observação lateral: alguém pode verificar sua versão openGl atualmente instalada? Ouvi dizer que é mais fácil de fazer no Linux.

editar: A incerteza não é boa, eu acho, preciso do Vulkan para ter certeza de que não há problemas.

Eu mudei como eles são desenhados no renderizador OpenGL ES 2.0, então definitivamente deve funcionar bem lá. No OpenGL ES 3.0, qualquer solução que eu possa imaginar provavelmente afetará o desempenho, então a prioridade será colocar o Vulkan para funcionar o mais rápido possível após o lançamento do 3.1.

Por favor, confirme se você pode que isso não falha mais no renderizador OpenGL ES 2.0.

@reduz eu testei alguns minutos aqui e não aconteceu. Obrigado por corrigir isso! :)
Nota:
Não sei se está relacionado, mas ainda posso ver algumas linhas brancas horizontais entre os ladrilhos quando a câmera treme.

obrigado reduz para a correção OpenGL ES 2.0!

para @mikeleeman e outros:
aqui estão as últimas 3 notas de patch desde 20 de novembro para placas NVIDIA GeForce:
20 de novembro , 3 de dezembro e página 15 .

o único problema que descobri que pode ser relevante (não tenho certeza) foi em 12 de dezembro:

  • [Assassino silencioso do Hitman 2]: Há corrupção de textura cintilante no jogo.
    [200472315]

Também notei que alguns deram errado com meu mapa de blocos:
capture3

Não tenho certeza se posso fazer mais por isso do que a correção atual. Depois que o 3.1 for lançado, esse bug provavelmente não estará presente no Vulkan e deve ter sido removido do renderizador ES2 agora.

Testando alfa 4, vi isso usando GLES2 e GLES3. Sem shaders, nada de especial em particular. Apenas mapas de azulejos.
test

@securas Você está usando câmera com zoom?

não

Sábado, 29/12/2018 às 12h35 Guilherme Felipe de CG da Silva <
notificaçõ[email protected]> escreveu:

@securas https://github.com/securas Você está usando a câmera com zoom?

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/godotengine/godot/issues/9913#issuecomment-450378016 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ACv425NmiZKRUJHDzxg0NPB-PszWJaa2ks5u9jpGgaJpZM4OlRVq
.

@securas Esse parece ser um problema diferente, é mais um problema com a exatidão dos pixels do que com a cintilação dos blocos.

@ akien-mga Bastante justo ... Parece que só acontece com os tilemaps, então imaginei que pertencia a este lugar.

@ gcardozo123 parece # 24642 ​​para mim, PR em breve

Irá mover para 3.2, pois nada mais pode ser feito por enquanto. Também espero que a nvidia conserte isso para sempre. Entrei em contato com eles diretamente para garantir que isso também seja corrigido. Com a reescrita de Vulkan, espero que isso não aconteça mais, mas enquanto isso, use o GLES2.

desculpe, não quis fechar

Existem outros motores de jogo de código aberto que usam GLES3 que têm uma classe de mapa de blocos ou alguma renderização que poderia ser observada? Eu estava apenas olhando as datas, já se passaram mais de 530 dias e vai ser atrasado ainda mais: /

Procurei um devedor Godot sobre discórdia (@ bojidar-bg) e recebi ampla ajuda. Eu estava tentando mostrar o problema, mas não conseguia fazer com que os blocos pretos aparecessem durante a gravação no OBS. ele então me recomendou alterar algumas configurações no painel de controle da NVIDIA.

informações: fa7329f6485058fde30b8e2bfe26291dfbfc4434, GLES3, W10-64bit, GTX950

  • Vá para o NVIDIA Control Panel
  • Clique em Manage 3D settings
  • Role para baixo até o modo de gerenciamento de energia , altere-o de energia ideal para preferir desempenho máximo
    image
  • Clique em Aplicar

ainda não vi um título preto (jogo recarregado cerca de 20 vezes e continuarei testando até que as vacas voltem para casa). Por enquanto, tudo bem! Espero que isso ajude, e um grande obrigado a Bojidar!

girng: Eu vi esse mesmo fenômeno nas exportações. É aí que reside a minha maior preocupação. Não devemos precisar pedir aos nossos usuários finais para alterar suas configurações de GPU para que os blocos não desapareçam intermitentemente. Você não experimentou o mais recente 3.1 beta com o hack nvidia tile?

  • Role para baixo até o modo de gerenciamento de energia , mude de _optimal power_ para dar preferência ao

Isso não implica uma falha de driver? Não tenho certeza de como um motor poderia contornar todos os possíveis bugs de driver.

@ OvermindDL1 sim, reduz afirmou que ele contatou os devs da nvidia diretamente, o que é muito apreciado! estou satisfeito com a solução de modo de gerenciamento de energia para desenvolvimento . Acho que isso deve nos segurar até que a própria nvidia conserte.

@agameraaron eu só uso gles3 (o jogo é limitado por partículas gpu). desculpe, não posso comentar sobre o hack do tile. mas eu ouvi que funciona

Pelo que acabei de discutir com os representantes da nv, eles dizem que não conseguem mais observar esse problema. Vocês podem tentar com as versões de driver mais recentes e, se falhar, relatar um pouco mais de informações sobre seu hardware? (Modelo de GPU, driver instalado, configurações de gerenciamento de energia)?

@reduz testado no driver mais recente ( 419.17 ). a oscilação do ladrilho agora acontece com os seguintes modos de energia: prefira desempenho máximo , ótimo e adaptável .

GTX 950, W10, GLES3

  • quando o OBS Studio é aberto, a cintilação desaparece

@reduz @girng @xsellier
GTX 1070, GLES2, W10
Driver mais recente 419,35
Sem cintilação, independentemente do modo de energia usado 👍

GLES3 também parece funcionar ... também encontrei este problema no estouro de pilha:
cintilação da tela do gles2

GTX 1060, W10
Com o mesmo driver acima (419.35), a cintilação ainda está acontecendo em GLES2 e 3.
Você apenas tem que clicar na IU e passar o mouse sobre os controles, já que a configuração de redesenho padrão agora é "nas alterações", que pode ser alterada clicando no círculo no canto superior direito.

Usei o projeto antigo que postei em https://github.com/godotengine/godot/issues/9913#issuecomment -364707061, tudo ainda está acontecendo - rótulo e mapa de mosaico piscando e as letras sendo esticadas em alguns blocos de uma forma estranha.

Screenshot_20190322_021011

tente esta opção.

Estou ciente dessa opção, que só funciona no GLES2

@reduz @girng @xsellier
GTX 1070, GLES2, W10
Driver mais recente 419,35
Sem cintilação, independentemente do modo de energia usado 👍

GLES3 também parece funcionar ... também encontrei este problema no estouro de pilha:
cintilação da tela do gles2

O comentário acima apenas sugeriu que o problema não estava mais presente.

@MennoMax você está certo, a oscilação ainda acontece ... mas a solução para o GLES2 funciona, espero que o suporte Vulkan venha logo 🙏

O problema de
Além disso, a cintilação foi corrigida no gles3 quando postei em 11 de fevereiro (com o modo de energia definido para preferir desempenho máximo). agora, a cintilação voltou e acontece em todas as 3 opções de modo de energia com os novos drivers atualizados. não faz sentido, uma de suas versões de driver tem a cintilação corrigida no desempenho máximo de preferência, agora os novos drivers não têm isso corrigido.

@girng o que isso tem a ver com partículas de gpu?
@reduz , você tem um ETA para um renderizador Vulkan preliminar?

@ gavriil07 se um jogo usa GLES3 (com partículas gpu), não é realmente uma solução alternativa para eles usarem gles2. porque, então, as partículas de gpu não são suportadas

@girng CPUParticles ainda podem ser usados ​​em GLES2; eles são suficientes para muitos casos de uso (o que é especialmente verdadeiro em jogos 2D mais simples). Por favor, mantenha a discussão no tópico: ligeiramente_smiling_face:

CPUParticles ainda podem ser usados ​​em GLES2; eles são suficientes para muitos casos de uso (o que é especialmente verdadeiro em jogos 2D mais simples). Por favor, mantenha a discussão no tópico

estou falando sobre partículas de gpu, não CPU

Vi uma postagem em https://www.reddit.com/r/godot/comments/9ljor3/psa_tilemap_flickering_possible_fix/ escrita meses atrás que diz "tente desabilitar HDR nas configurações do projeto". (Renderização -> Qualidade -> Profundidade -> Hdr)

Eu tentei isso em um projeto GLES3 e parece funcionar até agora para mim (Nvidia 970 versão 415.27, Linux Mint). Desculpe se esta é uma mensagem repetida.

Posso dizer que esse bug existe para o driver GLES2 na minha Nvidia gtx760 (Windows 10 x64). Vídeo abaixo:

https://www.youtube.com/watch?v=TM1BN4uwMfA
A primeira vez que isso acontece no vídeo é às 0:36 e acontece novamente em cerca de 5 segundos.

A correção GLES2 pareceu aliviar o problema para mim.

Desativar HDR na configuração do projeto funcionou para mim. Obrigado!

Windows 10 Pro 64 bits
driver nVidia 430,39

Godot 3.1.1 estável
Renderizador OpenGL ES 2.0: GeForce GTX 1080 / PCIe / SSE2

Cintilação acontece.

Desligar o HDR remove principalmente a cintilação, mas ela volta em algumas situações que não consegui diminuir ainda mais.

Windows 10 Home
Godot 3.1 estável
GTX 1070, driver 430,86
GLES 3.0 com HDR ligado, piscando, desligando corrige.

Testei isso com uma grade personalizada (Node2D com sprites como filhos)

Godot 3.1.1 estável
Windows 10
Driver GTX1080 430,86
GLES 3.0 com HDR desligado, a cintilação continua, ao ligar "prefira desempenho máximo" parece que desaparece (obrigado dev pela solução parcial). Fico feliz em ver que os desenvolvedores estão cientes disso, parece que é mais um problema da nvidia do que Godot. Qualquer 1 com cartões AMD com esse problema?

GLES 3.0 com HDR desligado, a cintilação continua, ao ligar "prefira desempenho máximo" parece que desaparece (obrigado dev pela solução parcial). Fico feliz em ver que os desenvolvedores estão cientes disso, parece que é mais um problema da nvidia do que Godot. Qualquer 1 com cartões AMD com esse problema?

Problema não acontece com placas AMD (o título diz com drivers nvidia btw)

Tendo este problema no Godot 3.1.1 em OpenGL ES 3.0 Renderer: GeForce GTX 1060 6GB/PCIe/SSE2 .
Eu não tenho um mapa de blocos, apenas um monte de draw_texture() . Recebo pontos de oscilação aleatórios, mas às vezes é uma falha quase na tela inteira.

Neste ponto, acho que Vulkan será a solução para esse problema de uma vez por todas.

Eu estava ficando com uma cintilação estranha no meu projeto também, mas a configuração Gles 2 Use Nvidia Rect Flicker Workaround corrigiu.

Screen record from 2019-08-01 19 18 43

Pode reproduzir na versão 3.1.1 estável com GTX 980.
Desativar o HDR corrige o problema para mim.

Apenas uma atualização de que ainda estou vendo os blocos saindo e tentei tudo o que foi mencionado aqui até agora. Só espero que o Vulkan consiga consertá-lo, mas seria bom se eles pudessem descobrir isso para o 3.2 também.

Tenho sido muito otimista ultimamente, mas esse bug está realmente me desgastando e se tornando muito prejudicial ao meu fluxo de trabalho (eu tentei de tudo). A tal ponto que estou com medo de pressionar F5 por causa da inevitável cintilação dos ladrilhos pretos. Eu posso tolerar a oscilação uma vez na lua azul ou algo assim, mas a oscilação é uma coisa constante agora. Eu amo Godot, não há como voltar atrás agora, mas está se tornando extremamente frustrante.

Não gosto de escrever posts como este porque não ajuda e soa como uma reclamação, mas não sei mais o que dizer / fazer. Ao mesmo tempo, quero que os desenvolvedores principais saibam como esse bug está afetando a experiência de Godot. 😭 Por favor, @reduz / core developers se vocês puderem esclarecer o status desse bug e qual seria a solução possível (Vulkan?), Seria ótimo!

Windows 10 Home
Driver Geforce GTX 1060 versão 440.97
Godot 3.1.1 estável usando GLES3
Tentei algumas das sugestões listadas aqui (desativar HDR, clicar na opção "Gles2 usar nvidia rect flicker" opção e alterar minhas configurações de desempenho) e nenhuma apareceu para resolver o problema

O mesmo aqui, ficando piscando. Tenha 3 mapas de blocos, 1 para o nível da água e 1 para o nível do solo, 1 para nuvens com a classificação Y ativada.

Windows 10 Home
Driver mais recente da Geforce GTX 1060
Godot 3.2 beta compilado na semana passada, usando GLES3
gdscript, desligue o HDR

Veja os ladrilhos de água pipocando intermitentemente ou tremendo.

Atualizada:

Parece que tenho que usar o GLES2 e clicar no botão 'correção de cintilação NVIDIA' para fazer com que a cintilação desapareça. Essa correção poderia ser adaptada para GLES3 por acaso?

Acabei de comprar um novo ASUS RTX2060 hjoping que corrigiria o problema, mas, infelizmente, não era para ser. O piscar continua. Vou tentar uma compilação com os branches 3.2 e VULKAN.

Windows 10
RTX 2060 Último Driver
Godot 3.1.1

OH DEUS
Eu tento de tudo, mas ainda está lá, meu jogo funciona com GLES2 mesmo eu ativo "2d / gles2_use_nvidia_rect_flicker_workaround", mas ainda piscando.
Eu amo Godot, até amo Godot nova versão 3.1 mais, mas por favor resolva esse problema.

A boa notícia é que a versão VULKAN corrige esse problema. Portanto, não sei se isso será corrigido no branch 3.X.

Então, quando chegar o Godot com VULKAN construído?

Pelo que eu sei pelos comentários acima, isso não será corrigido no Godot 3.x, o que impede qualquer projeto baseado em mapa de blocos com GLES 3. Os desenvolvedores afirmam que este é um problema da NVIDIA, então não há muito que eles possam fazer sobre isso . Você pode esperar pelo 4.0 com o Vulkan (não menos que 6 ~ 8 meses), o que levará um tempo, ou começar com o 3.xe esperar por uma atualização fácil para o 4.0. Duvido que a atualização seja fácil, especialmente se você estiver usando recursos do GLES 3, como shaders sofisticados e partículas de GPU.
Minha solução alternativa foi usar a classificação y nas opções do mapa de blocos. Isso parecia ter reduzido a frequência do problema. Mesmo assim, ainda havia jogadores reclamando que, ocasionalmente, partes do mundo do jogo desapareciam.

Se for um problema da NVIDIA, por que não acontece, digamos, no Unity? (Apenas me perguntando)

Bibliotecas comerciais versus bibliotecas de código aberto, eu acho. Verificar anterior
postagens de devs.

No domingo, 12 de janeiro de 2020, 21:33 Sergey Kospanov [email protected]
escrevi:

Se for um problema da NVIDIA, por que não acontece, digamos, no Unity? (Somente
perguntando)

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/godotengine/godot/issues/9913?email_source=notifications&email_token=AAV7RW2ZZLY7ZYQ46RUK7KDQ5ME3HA5CNFSM4DUVCVVKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIWY4MQ#issuecomment-573410866 ,
ou cancelar
https://github.com/notifications/unsubscribe-auth/AAV7RWYIXVBYAYGZ3VLSPF3Q5ME3HANCNFSM4DUVCVVA
.

@securas Isso não é verdade, já que muitos outros frameworks de código aberto não sofrem com esse problema (mesmo que usem OpenGL para renderização).

Este é apenas um bug que é muito difícil de diagnosticar e ninguém está disposto a investir tempo nisso.

Este é apenas um bug que é muito difícil de diagnosticar e ninguém está disposto a investir tempo nisso.

Para esclarecer, o entendimento atual é que estamos encontrando um bug dos drivers da Nvidia. É acionado pela maneira como usamos a API OpenGL, e se outros projetos não tiverem o mesmo problema, é porque eles provavelmente usam OpenGL diferente ou entenderam o que desencadeia o bug e escreveram soluções para evitá-lo (como fizemos com um opção para GLES2, em detrimento do desempenho).

A forma como usamos a API é, em nosso entendimento, completamente apropriada de acordo com as especificações OpenGL. Mas os erros do driver significam que mesmo o uso legal da API pode produzir resultados problemáticos.

Foi mal. Me desculpe por isso. Eu tenho muito pouco entendimento do
detalhes de implementação.

No domingo, 12 de janeiro de 2020, 22:46 Rémi Verschelde [email protected]
escrevi:

Este é apenas um bug que passa a ser muito difícil de diagnosticar, e não
um está atualmente disposto a investir tempo nisso.

Para esclarecer, o entendimento atual é que estamos chegando a drivers da Nvidia
erro. É acionado pela maneira como usamos a API OpenGL e se outros projetos
não têm o mesmo problema, é porque provavelmente usam OpenGL
diferente, ou entendeu o que desencadeia o bug e escreveu soluções alternativas para
evitá-lo (como fizemos com uma opção para GLES2, ao custo de
desempenho).

A forma como usamos a API é, no nosso entendimento, completamente apropriada como
de acordo com a especificação OpenGL. Mas bugs de driver significam que mesmo um uso legal
da API pode produzir resultados problemáticos.

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/godotengine/godot/issues/9913?email_source=notifications&email_token=AAV7RW2U4Q6NE3R62ME75GDQ5MNJVA5CNFSM4DUVCVVKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIW2LOI#issuecomment-573416889 ,
ou cancelar
https://github.com/notifications/unsubscribe-auth/AAV7RW4WGXFM7MQZKAQJ4X3Q5MNJVANCNFSM4DUVCVVA
.

Isso pode muito bem ser devido aos buffers de vértice atualmente sendo reutilizados várias vezes por quadro (o que provavelmente também está causando problemas de desempenho). Ou seja, o buffer de vértice está sendo usado para desenhar um objeto, alterado no meio do caminho para começar a desenhar o próximo. Estou investigando.

Suspeito que o envio em lote 2D adequado resolverá esse e os problemas de desempenho 2D.

Não parece ser um problema da Nvidia. Isso também acontece comigo e com um amigo (AMD e Intel, respectivamente) e, ironicamente, não acontece com meu outro amigo, que usa Nvidia. Tudo o que está especificado neste tópico acontece comigo e com meu amigo Intel.

Eu tenho esse problema em um Intel HD Graphics 620 integrado no meu laptop. Mudar para GLES2 corrige isso para mim. Outra coisa para mim é que parecia ocorrer apenas com as luzes 2D ligadas

interessante - terei de verificar se a iluminação também está ligada

desculpe informar que eu tinha isso na minha cena, mas removê-lo não teve efeito. para mim parece mais por causa da quantidade de blocos no mapa de blocos - quem sabe

Fiz um experimento interessante ontem - criei o mesmo mapa usando TILED e importei-o com o importador TILED da VNEN e NÃO HÁ FLICKERING - então isso está me levando a pensar que é outra coisa na cena, ou a forma como eu configurei o mapa de blocos - então estou fazendo mais pesquisas e apresentarei um relatório

FWIW, eu sempre usei apenas o Tiled e ainda tenho o problema.

@jonbonazza, lamento ouvir isso - faz-me sentir que não há esperança neste até ao 4.0 chegar - ou utilizo o GLES2 que preferiria não usar

Também me encontrei com esse problema. Ainda persiste quando o programa é compilado e executado como um executável, em vez de no Editor?

Ainda persiste quando o programa é compilado e executado como um executável, em vez de no Editor?

Sim, pois o código de renderização entre o editor e um modelo de exportação de lançamento é idêntico.

Eu tenho um computador: i3 2120, gt630.
Neste computador tudo funciona perfeitamente. Em meu outro computador: ryzen 1600, gtx1060. Os tiles piscam loucamente ... Ambos com windows 10 pro x64.

Nome do motorista: GLES2
Gles 2 Use Nvidia Rect Flicker Solução alternativa: Ligado
Meu 1060 funciona em média 30 ~ 50 Fps
Esperando o Vulkan ...

Qualquer pessoa que tenha isso no GLES2 pode querer experimentar as compilações de teste que estamos fazendo em # 37349. É possível que ajude, pois usa um método diferente para desenhar retos.

Tendo o mesmo problema. GTX 1060 6GB e Ryzen 7 1700X. Ativar cell_y_sort corrige isso para mim, mas causa enormes problemas de desempenho (quedas de fps). O mesmo para definir cell_quadrant_size como 1.

Só para perguntar novamente, alguém pode tentar o beta 3.2.2 com use_batching ativado? Também desta vez, defina use_nvidia_workaround como ativado.

Infelizmente, ninguém com o problema de cintilação testou desde meu comentário anterior: desapontado: (testadores impertinentes), e desde então agora há um caminho de backup para retificações únicas, usando o método antigo que pode reintroduzir o problema

No entanto, se for curado com lotes E a solução alternativa da nvidia, ele confirmará que o método de desenho uniforme é a causa dos problemas de cintilação e pode ser removido, curando assim o problema para sempre.

Então, acabei de baixar o 3.2.2. beta 1 e usar Driver Name: GLES2 com Use Batching e Gles 2 use Nvidia Rect Filcker Workaround parece resolver o problema. Embora eu não tenha testado por um longo tempo ainda (já que o piscar no 3.2.1 só acontece depois de alguns minutos, pelo menos para mim).

Então, acabei de baixar o 3.2.2. beta 1 e usar Driver Name: GLES2 com Use Batching e Gles 2 use Nvidia Rect Filcker Workaround parece resolver o problema. Embora eu não tenha testado por um longo tempo ainda (já que o piscar no 3.2.1 só acontece depois de alguns minutos, pelo menos para mim).

Ah, isso é ótimo. Eu suspeitei que sim. Ao usar a solução alternativa para retificações únicas, sabemos que funciona e não causa cintilação. Mas o resto dos sprites serão desenhados usando o código em lote que desenha usando primitivas indexadas, e suspeitei que isso poderia resolver o problema e parece que sim. : +1:

Vou dar uma olhada e ver se podemos remover o método uniforme antigo inteiramente do renderizador em lote, isso deve resolver o problema para sempre. Enquanto isso, a combinação de solução alternativa em lote + nvidia que você provavelmente encontrará é mais rápida do que o renderizador antigo e não pisca.

Sim, é definitivamente mais rápido. Usando godot 3.2.1 estável com o driver GLES2, atingi apenas 20 fps, enquanto usando godot 3.2.2 beta 1 eu atingi 60 fps facilmente. Mas estou curioso:

Vou dar uma olhada e ver se podemos remover o método uniforme antigo inteiramente do renderizador em lote, que deve resolver o problema para sempre

Isso significa que haverá uma correção para GLES3?

Sim, é definitivamente mais rápido. Usando godot 3.2.1 estável com o driver GLES2, atingi apenas 20 fps, enquanto usando godot 3.2.2 beta 1 eu atingi 60 fps facilmente. Mas estou curioso:

Ah isso é bom! : sorrindo:

Isso significa que haverá uma correção para GLES3?

GLES3 Não fiz nada até agora. Poderíamos acabar fazendo uma versão muito simplificada e reduzida de batching apenas para deixar os caras do GLES3 até o lançamento do 4.x (mas não posso fazer promessas neste estágio, há muito no roteiro). Isso deve resolver o problema no GLES3 também se ocorrer lá.

Podemos acabar fazendo uma versão muito simplificada e reduzida de batching apenas para ajudar os caras do GLES3 até o lançamento do 4.x

Por favor (qual é a escala de tempo até 4.x, para colocá-lo em perspectiva? Suspeito que vários meses, se não meio ano)

Eu acho que uma correção seria necessária se centenas de pessoas relatassem esse problema. Eu não acho que temos isso. Pelo menos este tópico não está sugerindo isso.

Dito isso, se houver alguns lançamentos comerciais que estão sofrendo com isso, pode ser bom ajudá-los. Se eu tivesse mais experiência, mergulharia sozinho, mas não saberia por onde começar. Acabei de começar a explorar o código Godot, que está muito bem escrito por sinal.

É aqui que seria bom ter um sistema de votação para bugs cruciais que precisam ser corrigidos.

Meu voto é esperar 4.x, e ter recursos focados nisso. Sabemos que Vulkan já resolve esse problema.

É aqui que seria bom ter um sistema de votação para bugs cruciais que precisam ser corrigidos.

Na minha experiência, votar geralmente não conduz a consertar bugs mais rapidamente. Isso é verdade em projetos desenvolvidos pela comunidade, mas mesmo o software proprietário comercial enfrenta o mesmo problema (veja o rastreador de recursos do Discord).

Verdadeiro. Não estou sugerindo que ajudaria a consertá-lo. Seria mais um indicador da extensão do problema. Suponho que o número de pessoas envolvidas nesta discussão pode ser um indicador. De qualquer forma, estou quase encerrando este tópico e esperarei pacientemente por 4.x

Também estou enfrentando o problema. Eu nunca enfrentei isso durante o autotiling normalmente. Se eu desenhasse o mapa à mão (o que fiz em outro projeto, usando os mesmos mapas de blocos), nunca me deparei com esse problema. Mas quando cheguei a renderizar uma masmorra gerada proceduralmente usando tilemap.set_cellv (...) encontrei o problema de forma consistente. Eu todas as sugestões, e a única que funcionou foi usar o GLES2 com a solução alternativa. Este é um problema muito sério! A renderização mais básica do mapa de blocos está falhando. Por que não há uma solução alternativa para o GLES3 btw? Eu conheço OpenGL, escrevi um motor de jogo básico que renderiza texturas com shaders, mas nada mais. Alguém pode explicar o que está causando isso exatamente? Espero que eu possa entender. <3

Também estou enfrentando o problema. Eu nunca enfrentei isso durante o autotiling normalmente. Se eu desenhasse o mapa à mão (o que fiz em outro projeto, usando os mesmos mapas de blocos), nunca me deparei com esse problema. Mas quando cheguei a renderizar uma masmorra gerada proceduralmente usando tilemap.set_cellv (...) encontrei o problema de forma consistente. Eu todas as sugestões, e a única que funcionou foi usar o GLES2 com a solução alternativa. Este é um problema muito sério! A renderização mais básica do mapa de blocos está falhando. Por que não há uma solução alternativa para o GLES3 btw? Eu conheço OpenGL, escrevi um motor de jogo básico que renderiza texturas com shaders, mas nada mais. Alguém pode explicar o que está causando isso exatamente? Espero que eu possa entender. <3

Já existem algumas explicações neste tópico. Suponho que neste ponto não haverá novas soluções alternativas ou correções para este problema até o lançamento 4.0 (vulkan), a menos que a comunidade apareça com algo. IMHO os mantenedores estão corretos em não se preocupar com uma correção potencialmente complexa agora que 4.0 está no horizonte.

Por que não há uma solução alternativa para o GLES3 btw?

Eu não tinha percebido isso, talvez tentasse portar o código de solução alternativa para o GLES3 amanhã. Mas será lento se conseguirmos fazer funcionar.

Agora tenho um WIP PR (veja acima) para a solução alternativa para GLES3. Também tenho algumas ideias para consertar o método de desenho uniforme, já que o sombreador parece muito complicado para o que é necessário. Posso precisar de ajuda para testar isso, se eu corrigir, pois não consigo repetir a oscilação na minha máquina.

Acho que posso ajudar com isso. Devo ser capaz de criar um Windows personalizado com base no seu PR.

Agora estou trabalhando na reescrita do sombreador de caminho rápido para evitar cintilação. Agora tenho um protótipo disponível para teste em # 38628. Eu apreciaria muito se alguém pudesse experimentá-lo com hardware que exibe cintilação. As instruções estão no PR

Bem, atualização:

  • parece que a solução alternativa do GLES3 funciona bem: partying_face: (_deve estar no próximo beta_),
  • no entanto, os experimentos com o sombreador de caminho rápido não ajudaram: desapontado:, e depois desses testes, parece que o sombreador pode provavelmente ser descartado como a causa.

Então, atualmente estou pensando em termos de ser uma situação estranha em termos de falha de ligação do nosso lado apenas na nvidia, ou um bug de driver (talvez não imaginando este método de desenho, ou não testando?).

Enfim, a boa notícia é que

  • com GLES2 com batching, você nem deve sentir a necessidade de usar o método de fallback em 99% dos jogos, portanto, você não terá oscilação
  • E com GLES3, o substituto da nvidia está confirmado para funcionar para evitar cintilação, embora com um custo de desempenho.

Nesse estágio, acho que meu tempo seria gasto de forma mais produtiva para trabalhar em lotes no GLES3, o que tornaria a diferença de desempenho discutível. : +1:

@lawnjelly É um bug de driver e como ele lida com o gerenciamento de energia. Neste comentário você pode encontrar minhas descobertas.

@lawnjelly É um bug de driver e como ele lida com o gerenciamento de energia. Neste comentário você pode encontrar minhas descobertas.

Ahha! : sorriso:

Um dos problemas é que este tópico se tornou muito longo agora! Na verdade, o rastreamento de API é uma maneira muito boa de determinar se você obtém cintilação em seu hardware, e estou de acordo se você obtiver resultados diferentes cada vez que reproduzir o rastreamento que aponta para um bug de driver. : +1:

@securas Você já confirmou que o problema no vídeo postado foi causado por esse bug de oscilação?

Estou vendo quadros únicos semelhantes de fundo preto + linhas brancas horizontais em meu próprio projeto com o recurso de arrastar de câmera embutido e um script de câmera personalizado, e nenhuma das soluções alternativas mencionadas (GLES2, correção de oscilação NVIDIA, desabilitar HDR, vários diferentes tipos de alocação da janela de visualização) evitam que isso aconteça:

tile-glitch

Este está no 3.2.1 estável, Windows 10, GTX 1080.

A cena tem quatro mapas de blocos de 1400x800 empilhados um em cima do outro para o fundo preto distante, ziguezague próximo ao fundo, primeiro plano e colisão de câmeras.

Eu ficaria muito grato se alguém pudesse oferecer algumas dicas - escrever uma solução alternativa robusta vai ser uma parte considerável do tempo do projeto com a qual prefiro não me comprometer, se puder ser evitado.

Se bem me lembro, foi devido ao ajuste de pixel 2d definido como desligado.

@Shfty Isso realmente parece que pode ser um problema diferente. Isso parece ser confirmado se as soluções alternativas da nvidia não o corrigirem. Você conseguiria abrir um novo exemplar, com detalhes de hardware e um mínimo de projeto de reprodução?

@lawnjelly Isso parece certo. Abri o # 39720 com um projeto de reprodução mínima baseado na cena do gif acima.

Consegui consertar o problema aninhando a cena afetada dentro de seu próprio nó Viewport, então incluí um exemplo de configuração para isso dentro do projeto também.

Esse GIF parece-me com sincronização vertical / tela tearing de certa forma.

Esta página foi útil?
0 / 5 - 0 avaliações