<p>troika-3d-text render problema sin error</p>

Creado en 6 nov. 2019  ·  43Comentarios  ·  Fuente: protectwise/troika

probé esto con el componente aframe y la compilación directa de troika y el ejemplo en

https://troika-examples.netlify.com/#text

Bildschirmfoto von 2019-11-06 21-33-50
Bildschirmfoto von 2019-11-06 21-33-34

Todos 43 comentarios

cromo de google | 78.0.3904.87 (compilación oficial) (64 bits)
linux
JavaScript | V8 7.8.279.19

VENDEDOR = 0x1002 [X.Org], DISPOSITIVO = 0x67ef [Gráficos AMD Radeon (TM) RX 460 (POLARIS11, DRM 3.33.0, 5.3.7-301.fc31.x86_64, LLVM 9.0.0)] ACTIVO

recuerdo si encontre esto a la primera funciona

¡así que pruebo una versión anterior! y sí, funciona con e600d2cd v0.12.0
Bildschirmfoto von 2019-11-06 22-00-02

ok, la última versión de trabajo es
f4fcbb8d v0.12.1

v0.13.0 rompe el renderizado

¡Ay! Gracias por informar esto y por reducir la versión exacta donde se rompió. Revisaré esas confirmaciones en busca de algo obvio, pero me preocupa no poder verificar una solución si es específica para su distribución de Linux o controladores de GPU.

Tratando de tener una corazonada... En su navegador, ¿ve los espaguetis voladores aquí? https://troika-examples.netlify.com/#bezier3d

si esto se ve bien

Bildschirmfoto von 2019-11-07 11-58-41

hice un pequeño video del problema, parece que si el rendere solo usa SDF (tamaño pequeño) funciona

en oculus go funciona bien

ezgif com-video-to-gif

Demonios, eso rompió mi corazonada.

Ese video es fascinante. Puedo pensar en algunas razones por las que podría ocurrir el comportamiento, pero esas también deberían haber fallado en 0.12.1. Seguire buscando...

Para asegurarnos de que no estamos lidiando con múltiples problemas diferentes a lo largo del tiempo, ¿podría verificar que las siguientes compilaciones fallan todas de la misma manera?

si todos fallan con lo mismo

Bueno, por el momento estoy perplejo en este caso. Revisando la diferencia https://github.com/protectwise/troika/compare/v0.12.1...v0.13.0 , no veo una diferencia que deba causar este comportamiento. El único cambio que debería afectar la representación del texto es el cambio a la abstracción createDerivedShader para la manipulación del sombreado. He comparado la salida del sombreador de esas 2 versiones línea por línea y no hay diferencia en la lógica inyectada que puedo ver, solo ligeras diferencias en el lugar donde ocurre (por ejemplo, dentro de una función glsl en lugar de void principal o en un orden ligeramente diferente .) No veo por qué eso podría causar este problema, pero supongo que es posible que haya un error/peculiaridad en ese controlador OpenGL en particular que puede desencadenar.

No estoy seguro de adónde ir desde aquí, aparte de probar algunos cambios basados ​​​​en corazonadas y hacer que los pruebe. No poder reproducir fácilmente esto es un dolor.

OK, lo entiendo, y sí, también creo que esto es más un problema con el controlador OpenGL: / Un hallazgo es que cuando escalo veo el video de la fuente ->
ezgif com-video-to-gif (1)

para referencia aquí a las versiones opengl
GL_VENDOR X.Org GL_RENDERER Gráficos AMD Radeon (TM) RX 460 (POLARIS11, DRM 3.33.0, 5.3.8-300.fc31.x86_64, LLVM 9.0.0) GL_VERSION 4.5 (Perfil central) Mesa 19.2.2

LOL eso es una especie de efecto limpio! 🤣

¿Alguna idea de lo que podría probar?

@lojjic wuha! ¡Encontré algo interesante si agrego una niebla a la escena, funciona!

Bildschirmfoto von 2019-11-11 11-54-36

con un marco de niebla agregado con sceneEl.setAttribute("niebla", "tipo: lineal; lejos: 300; color: 0xefd1b5");

Más y más curioso. ¿La casilla de verificación "Niebla" en la página de ejemplos de troika también funciona entonces?

hmm no esto no cambia nada

ja, sí, funciona si configuro MeshBasicMaterial y selecciono Fog.

OK gracias que tal vez me da una pista para investigar más a fondo.

Voy a tratar de encontrar algo de tiempo más tarde hoy para impulsar una rama con algunos intentos de cambios aislados, y ver si alguno de ellos ayuda.

Bien, aquí está el primer intento: avíseme si no hay cambios, si hay un cambio pero todavía hay errores o si se solucionó: https://5dc9dc90ab55b5000a1db32c--troika-examples.netlify.com/#text

parece una muy buena toma! :>

Bildschirmfoto von 2019-11-11 23-40-48

el uso normal con MeshStandard y MeshBasic Material me parece solucionado

solo con Custom Shader Material tiene errores
Bildschirmfoto von 2019-11-11 23-42-22

¡Eso es genial! Estamos llegando a alguna parte.

¿Puedes probar este ahora, por favor?: https://5dc9e7dcea3f6e00084d01a6--troika-examples.netlify.com/#text
Estoy tratando de aislar una de las dos causas principales potenciales con esta.

ok, esto solo funciona correctamente con MeshBasicMaterial y Fog habilitados

Así que es una peculiaridad extraña con el orden de ejecución. La única diferencia entre esas últimas 2 pruebas fue lo que equivale a una asignación de identidad ( gl_FragColor = functionThatReturnsArg(gl_FragColor); ) que ocurre antes o después de la lógica del sombreador de texto personalizado. Si viene después, funciona, y si viene antes, entonces falla (a menos que la niebla esté habilitada, lo que agrega gl_FragColor.rgb = ... extra antes de la lógica de texto, y eso también funciona, pero solo en MeshBasicMaterial. suspiro ).

Aquí hay un truco desagradable solo para ver si agregar gl_FragColor = gl_FragColor; al final le da una patada: https://5dc9f0d8e82cdf00089f6b6c--troika-examples.netlify.com/#text

ok, lo mismo con el último solo funciona con BasicMaterial y Fog on ...

OK, algunos intentos más para ti...

1) https://5dcadbdfa8565d0008ff1af5--troika-examples.netlify.com/#text
2) https://5dcadfaac107620008043289--troika-examples.netlify.com/#text
3) https://5dcae02c8de52400077b3a8b--troika-examples.netlify.com/#text

los tres iguales solo funcionan con BasicMaterial y Fog habilitados

Puaj. Gracias por ser tan paciente al probar todas mis conjeturas salvajes. Esto todavía no tiene sentido para mí.

Probando otra hipótesis más: https://5dcaea1c9bbf6e00074b3c7a--troika-examples.netlify.com/#text

np, esto siempre se rompe con niebla y todos los materiales

¿Podría tomar algunas capturas de pantalla más de otros ejemplos para mí cuando tenga un momento?

1) https://troika-examples.netlify.com/#arcs con el shader "Double-Derived" seleccionado
2) https://troika-examples.netlify.com/#ui
3) https://troika-examples.netlify.com/#bezier3d con un valor distinto de cero para la opción "discontinua"

Estos ejemplos usan técnicas similares a las del sombreador de fragmentos de texto, así que quiero ver si hay algo en común en su comportamiento.

Bildschirmfoto von 2019-11-13 14-49-48
Bildschirmfoto von 2019-11-13 14-49-18
Bildschirmfoto von 2019-11-13 14-49-02

Gracias por las capturas de pantalla. Esperaba que al menos uno de ellos fallara de manera similar al texto, ya que usan exactamente la misma utilidad para modificar su sombreador de fragmentos. Pero ninguno de ellos falla. Entonces, tal vez sea algo específico en el texto glsl. Supongo que comenzaré a eliminar/modificar las cosas una por una en el texto glsl y veré si podemos reducir el desencadenante exacto.

Algunos intentos:
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 todo 1. 2. y 3. funciona con todo el material y con y sin niebla!

😮 ¡Increíble!

OK, una última cosa para verificar y luego debería tener suficiente información para una solución final:
https://5dcc47d956b59f00070bea55--troika-examples.netlify.com/#text

¿Y puede verificar que la casilla de verificación Sombras también funcione, por favor?

hmm esto no funciona... extraño :>
Bildschirmfoto von 2019-11-13 21-02-11
Bildschirmfoto von 2019-11-13 21-01-56
Bildschirmfoto von 2019-11-13 21-01-45

¡Eso es realmente una buena noticia! Apunta a un condicional muy específico como causante del problema:

if (uTroikaSDFDebug) {
    gl_FragColor *= 0.5;
  } else {
    discard;
  }

Parece que reemplazar ese condicional con solo discard es lo que hizo que comenzara a funcionar. Lo cual es muy extraño, porque uTroikaSDFDebug es un uniforme, por lo que siempre debería ir a else todos modos. Pero por alguna razón a su sistema no le gusta eso.

Así que quitaré el condicional. Podría tratar de reformularlo como DEFINE o algo así, pero de todos modos no es tan útil.

Convertiré esto en una solución final en el maestro, pídale que lo verifique una vez más y luego publique una nueva versión y actualícela en el componente aframe. Aunque puede tardar uno o dos días.

Compilación maestra para probar, cuando tenga la oportunidad: https://troika-examples.netlify.com/#text

¡sí, esto funciona con todos los materiales y se activa/desactiva la niebla!

@arpu Gracias una vez más por su tiempo y paciencia para ayudarme a localizar este problema. Esta corrección se ha publicado en 0.15.7.

También pasé aframe-troika-text a la versión 0.1.2 que usa la versión fija. También contiene correcciones para ThreeJS r110 que mencionó anteriormente.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

drcmda picture drcmda  ·  11Comentarios

stephencorwin picture stephencorwin  ·  39Comentarios

atlmtw picture atlmtw  ·  47Comentarios

lojjic picture lojjic  ·  11Comentarios

lojjic picture lojjic  ·  18Comentarios