testei isso com o componente aframe e construção direta da troika e exemplo em
https://troika-examples.netlify.com/#text
Google Chrome | 78.0.3904.87 (Compilação Offizieller) (64 bits)
Linux
JavaScript | V8 7.8.279.19
FORNECEDOR = 0x1002 [X.Org], DEVICE= 0x67ef [AMD Radeon (TM) RX 460 Graphics (POLARIS11, DRM 3.33.0, 5.3.7-301.fc31.x86_64, LLVM 9.0.0)] ATIVO
eu lembro se eu encontrei isso na primeira vez que funciona
então eu tento alguma versão mais antiga! e sim, funciona com e600d2cd v0.12.0
ok última versão de trabalho é
f4fcbb8d v0.12.1
v0.13.0 quebra a renderização
Caramba! Obrigado por relatar isso e por restringir a versão exata em que ele quebrou. Vou procurar por esses commits em busca de algo óbvio, mas estou preocupado em não poder verificar uma correção se for específica para sua distribuição Linux ou drivers de GPU.
Tentando fazer um palpite... No seu navegador você vê o espaguete voador aqui? https://troika-examples.netlify.com/#bezier3d
sim isso parece bom
fiz um pequeno video do problema, parece que se o rendere usar apenas SDF ( tamanho pequeno) funciona
no oculus go funciona bem
Droga, isso quebrou meu palpite.
Esse vídeo é fascinante. Posso pensar em alguns motivos para que o comportamento possa ocorrer, mas eles também deveriam ter falhado na versão 0.12.1. Vai continuar procurando...
Para garantir que não estamos lidando com vários problemas diferentes ao longo do tempo, você pode verificar se as compilações a seguir falham da mesma maneira?
sim todos falham com o mesmo
Bem, no momento estou perplexo com este. Passando pelo https://github.com/protectwise/troika/compare/v0.12.1...v0.13.0 diff, não estou vendo uma diferença que deveria causar esse comportamento. A única mudança que deve afetar a renderização do texto é a mudança para a abstração createDerivedShader
para a manipulação do sombreador. Eu comparei a saída do shader dessas 2 versões linha por linha e não há diferença na lógica injetada que posso ver, apenas pequenas diferenças em onde ela ocorre (por exemplo, dentro de uma função glsl em vez de void main ou em ordem ligeiramente diferente .) Não vejo por que isso causaria esse problema, mas suponho que seja possível que haja um bug/peculiaridade nesse driver OpenGL específico que possa ser acionado.
Não tenho certeza para onde ir a partir daqui, além de experimentar algumas alterações com base em palpites e testá-las. Não ser capaz de reproduzir prontamente isso é uma dor.
OK, eu entendo, e sim, eu também acho que isso é mais um problema de driver opengl: / Uma descoberta é quando eu dimensiono vejo o vídeo da fonte ->
para referência aqui nas versões opengl
GL_VENDOR X.Org GL_RENDERER AMD Radeon (TM) RX 460 Graphics (POLARIS11, DRM 3.33.0, 5.3.8-300.fc31.x86_64, LLVM 9.0.0) GL_VERSION 4.5 (Core Profile) Mesa 19.2.2
LOL que tipo de efeito legal! 🤣
alguma ideia do que eu poderia testar?
@lojjic uau! achei algo interessante se eu adicionar uma névoa na cena funciona!
com névoa de aframe adicionada com sceneEl.setAttribute("fog", "type: linear; far:300;color: 0xefd1b5");
Curioso e curioso. A caixa de seleção "Fog" na página de exemplos da troika também funciona?
hmm não isso não muda nada
ha sim, funciona se eu definir MeshBasicMaterial e selecionar o Fog!
OK obrigado que talvez me dê uma pista para investigar mais.
Vou tentar encontrar algum tempo mais tarde hoje para enviar uma ramificação com algumas tentativas de alterações isoladas e ver se alguma delas ajuda.
OK, aqui está a primeira tentativa - deixe-me saber se não houver alteração, uma alteração, mas ainda com erros ou corrigida: https://5dc9dc90ab55b5000a1db32c--troika-examples.netlify.com/#text
parece um tiro muito bom! :>
o uso normal com MeshStandard e MeshBasic Material parece corrigido para mim
apenas com Custom Shader Material é buggy
esta mudança corrigiu para mim https://github.com/protectwise/troika/commit/85c71d6af2c1e09966c5e588745008dc4b923ae2
Isso é ótimo! Estamos chegando a algum lugar.
Você pode tentar este agora, por favor: https://5dc9e7dcea3f6e00084d01a6--troika-examples.netlify.com/#text
Estou tentando isolar uma das duas causas potenciais com esta.
ok isso só funciona correto com MeshBasicMaterial e Fog habilitados
Então é alguma peculiaridade estranha com a ordem de execução. A única diferença entre esses 2 últimos testes foi o que equivale a uma atribuição de identidade ( gl_FragColor = functionThatReturnsArg(gl_FragColor);
) acontecendo após ou antes da lógica do sombreador de texto personalizado. Se vier depois, funciona, e se vier antes, falha (a menos que o fog esteja ativado, o que adiciona um gl_FragColor.rgb = ...
extra antes da lógica do texto, e isso também funciona, mas apenas em MeshBasicMaterial. sigh .
Aqui está um hack desagradável apenas para ver se adicionar um gl_FragColor = gl_FragColor;
no final dá um chute: https://5dc9f0d8e82cdf00089f6b6c--troika-examples.netlify.com/#text
ok mesmo com o ultimo só funciona com BasicMaterial e Fog on...
OK, mais algumas tentativas para você...
1) https://5dcadbdfa8565d0008ff1af5--troika-examples.netlify.com/#text
2) https://5dcadfaac107620008043289--troika-examples.netlify.com/#text
3) https://5dcae02c8de52400077b3a8b--troika-examples.netlify.com/#text
todos os três o mesmo só funciona com BasicMaterial e Fog ativado
ECA. Obrigado por ser tão paciente em testar todos os meus palpites malucos. Isso ainda não faz sentido para mim.
Testando mais uma hipótese: https://5dcaea1c9bbf6e00074b3c7a--troika-examples.netlify.com/#text
np, isso sempre quebra com a névoa desligada e todos os materiais
Você poderia, por favor, pegar mais algumas capturas de tela de outros exemplos para mim quando tiver um momento:
1) https://troika-examples.netlify.com/#arcs com o shader "Double-Derived" selecionado
2) https://troika-examples.netlify.com/#ui
3) https://troika-examples.netlify.com/#bezier3d com um valor diferente de zero para a opção "tracejado"
Esses exemplos usam técnicas semelhantes ao sombreador de fragmento de texto, portanto, quero ver se há semelhança em seu comportamento.
Obrigado pelas capturas de tela. Eu esperava que pelo menos um deles falhasse de maneira semelhante ao texto, pois eles usam o mesmo utilitário exato para modificar seu sombreador de fragmento. Mas nenhum deles falha. Então talvez seja algo específico no texto glsl. Acho que vou começar a remover/ajustar as coisas uma a uma no texto glsl e ver se podemos diminuir o gatilho exato.
Algumas tentativas:
1) https://5dcc2b581b644200098d5e75--troika-examples.netlify.com/#text
2) https://5dcc302d78835c00089437e2--troika-examples.netlify.com/#text
3) https://5dcc31b70765f2000991ad0f--troika-examples.netlify.com/#text
ok tudo 1. 2. e 3. funciona com todo material e com e sem neblina!
😮 Incrível!
OK, uma última coisa para verificar e, em seguida, devo ter informações suficientes para uma correção final:
https://5dcc47d956b59f00070bea55--troika-examples.netlify.com/#text
E você pode verificar se a caixa de seleção Shadows também funciona, por favor?
hmm isso não funciona ... estranho :>
Isso é realmente uma boa notícia! Ele aponta para uma condicional muito específica como causa do problema:
if (uTroikaSDFDebug) {
gl_FragColor *= 0.5;
} else {
discard;
}
Parece que substituir essa condicional por apenas discard
foi o que fez com que ela começasse a funcionar. O que é muito estranho, porque uTroikaSDFDebug
é um uniforme, então deve sempre ir para else
qualquer maneira. Mas por algum motivo seu sistema não gosta disso.
Então, vou apenas remover a condicional. Eu poderia tentar reformulá-lo como um DEFINE ou algo assim, mas não é tão útil de qualquer maneira.
Vou trabalhar isso em uma correção final no master, faça você verificar isso mais uma vez e, em seguida, publicar uma nova versão e atualizá-la no componente aframe. Pode levar um dia ou dois embora.
Master build para testar, quando você tiver uma chance: https://troika-examples.netlify.com/#text
sim, isso funciona com todos os materiais e neblina ligado/desligado!
@arpu Obrigado mais uma vez por seu tempo e paciência em me ajudar a rastrear esse problema. Esta correção foi publicada em 0.15.7.
Eu também troquei aframe-troika-text
para a versão 0.1.2 que usa a versão fixa. Ele também contém correções para o ThreeJS r110 que você mencionou antes.