<p>troika-3d-text 渲染问题没有错误</p>

创建于 2019-11-06  ·  43评论  ·  资料来源: protectwise/troika

使用 aframe 组件和直接 troika 构建和示例对此进行了测试

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

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

所有43条评论

谷歌浏览器 | 78.0.3904.87(Offizieller 构建)(64 位)
Linux
JavaScript | V8 7.8.279.19

供应商 = 0x1002 [X.Org],设备 = 0x67ef [AMD Radeon (TM) RX 460 显卡(POLARIS11、DRM 3.33.0、5.3.7-301.fc31.x86_64、LLVM 9.0.0)]活动

我记得如果我第一次发现它有效

所以我尝试一些旧版本! 是的,它适用于 e600d2cd v0.12.0
Bildschirmfoto von 2019-11-06 22-00-02

好的最后一个工作版本是
f4fcbb8d v0.12.1

v0.13.0 中断渲染

哎呀! 感谢您报告这一点,并缩小了它崩溃的确切版本。 我会查看这些提交是否有任何明显的内容,但我担心如果它特定于您的 Linux 发行版或 GPU 驱动程序,我将无法验证修复。

试着做一个预感......在你的浏览器中,你看到这里飞来飞去的意大利面了吗? https://troika-examples.netlify.com/#bezier3d

是的,这看起来不错

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

制作了这个问题的小视频,看起来如果渲染器只使用 SDF(小尺寸)就可以了

在 oculus 上运行良好

ezgif com-video-to-gif

该死,这打破了我的预感。

那个视频很吸引人。 我可以想到一些可能发生行为的原因,但这些在 0.12.1 中也应该失败。 会继续找...

为了确保我们不会跨时间处理多个不同的问题,您能否验证以下构建都以相同的方式失败?

是的,都失败了

好吧,目前我被这个难住了。 通过https://github.com/protectwise/troika/compare/v0.12.1...v0.13.0差异,我没有看到应该导致这种行为的差异。 那里唯一会影响文本渲染的更改是切换到createDerivedShader抽象以进行着色器操作。 我已经逐行比较了这两个版本的着色器输出,我可以看到注入的逻辑没有区别,只是它发生的位置略有不同(例如在 glsl 函数中而不是在 void main 中或顺序略有不同.) 我不明白为什么会导致这个问题,但我想它可能会触发特定的 OpenGL 驱动程序中的错误/怪癖。

除了根据预感尝试一些更改并让您测试它们之外,不确定从这里去哪里。 无法轻易复制这是一种痛苦。

好的,我明白了,是的,我也认为这更像是一个 opengl 驱动程序问题:/ 一个发现是当我缩放时,我看到了字体视频->
ezgif com-video-to-gif (1)

此处参考opengl版本
GL_VENDOR X.Org GL_RENDERER 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(核心配置文件)Mesa 19.2.2

大声笑,这是一种整洁的效果! 🤣

知道我可以测试什么吗?

@lojjic呜哈! 如果我在场景中添加雾,会发现一些有趣的东西!

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

添加了带有sceneEl.setAttribute("fog", "type: linear; far:300;color: 0xefd1b5");

越来越好奇。 三驾马车示例页面上的“雾”复选框是否也有效?

嗯,不,这不会改变任何东西

哈哈,是的,如果我设置 MeshBasicMaterial 并选择 Fog!

好的,谢谢,这可能给了我进一步调查的线索。

我将尝试在今天晚些时候找一些时间来推送一个分支,尝试进行一些孤立的更改,看看是否有任何帮助。

好的,这是第一次尝试 - 如果没有更改、更改但仍有错误或已修复,请告诉我: https ://5dc9dc90ab55b5000a1db32c--troika-examples.netlify.com/#text

看起来像一个很好的镜头! :>

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

MeshStandard 和 MeshBasic Material 的正常使用对我来说看起来是固定的

仅使用自定义着色器材质是错误的
Bildschirmfoto von 2019-11-11 23-42-22

那太棒了! 我们正在取得进展。

你现在可以试试这个吗: https ://5dc9e7dcea3f6e00084d01a6--troika-examples.netlify.com/#text
我试图用这个来隔离两个潜在的根本原因之一。

好的,这仅适用于 MeshBasicMaterial 和 Fog 启用

所以执行顺序有点奇怪。 最后两个测试之间的唯一区别是在自定义文本着色器逻辑之后或之前发生的身份分配( gl_FragColor = functionThatReturnsArg(gl_FragColor); )。 如果它在它工作之后出现,并且如果它在它之前出现则失败(除非启用了雾,它在文本逻辑之前添加了额外的gl_FragColor.rgb = ... ,这也有效,但仅在 MeshBasicMaterial 中。叹息

这是一个讨厌的黑客,只是看看在最后添加一个gl_FragColor = gl_FragColor;是否会给它一个刺激: https ://5dc9f0d8e82cdf00089f6b6c--troika-examples.netlify.com/#text

好的,与最后一个相同,仅适用于 BasicMaterial 和 Fog ...

好吧,再试几次……

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

所有三个相同的仅适用于 BasicMaterial 和 Fog 启用

啊。 感谢您如此耐心地测试我所有的疯狂猜测。 这对我来说仍然没有意义。

测试另一个假设: https ://5dcaea1c9bbf6e00074b3c7a--troika-examples.netlify.com/#text

np,这总是会在关闭雾和所有材料时中断

有时间的话,能否请您从其他示例中获取更多屏幕截图:

1) https://troika-examples.netlify.com/#arcs 选择了“Double-Derived”着色器
2) https://troika-examples.netlify.com/#ui
3) https://troika-examples.netlify.com/#bezier3d ,“虚线”选项的值为非零

这些示例使用与文本片段着色器类似的技术,所以我想看看它们的行为是否有共同点。

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

感谢您的屏幕截图。 我预计其中至少有一个会以与文本类似的方式失败,因为它们使用相同的实用工具来修改其片段着色器。 但他们都没有失败。 所以也许它是文本 glsl 中的特定内容。 我想我会开始一一删除/调整文本 glsl 中的内容,看看我们是否可以缩小确切的触发范围。

几次尝试:
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 all 1. 2. and 3. 适用于所有材料,有雾和无雾!

😮 太棒了!

好的最后一件事要检查,然后我应该有足够的信息进行最终修复:
https://5dcc47d956b59f00070bea55--troika-examples.netlify.com/#text

你能验证一下阴影复选框也可以吗?

嗯,这不起作用......奇怪:>
Bildschirmfoto von 2019-11-13 21-02-11
Bildschirmfoto von 2019-11-13 21-01-56
Bildschirmfoto von 2019-11-13 21-01-45

这其实是个好消息! 它指出了导致问题的一个非常具体的条件:

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

看起来只用discard替换那个条件是让它开始工作的原因。 这很奇怪,因为uTroikaSDFDebug是制服,所以无论如何它应该总是去else 。 但由于某种原因,您的系统不喜欢这样。

所以我将删除条件。 我可以尝试将其重新表述为 DEFINE 或其他内容,但无论如何它并不是那么有用。

我会在 master 上完成最终修复,让您再验证一次,然后发布一个新版本并在 aframe 组件中更新它。 不过可能需要一两天。

当您有机会时,进行测试的主构建: https ://troika-examples.netlify.com/#text

是的,这适用于所有材料和雾开/关!

@arpu再次感谢您花时间和耐心帮助我追查这个问题。 此修复程序已在 0.15.7 中发布。

我还将aframe-troika-text升级到使用固定版本的 0.1.2 版本。 它还包含您之前提到的 ThreeJS r110 的修复程序。

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

相关问题

stephencorwin picture stephencorwin  ·  39评论

natarius picture natarius  ·  14评论

Ocelyn picture Ocelyn  ·  13评论

asbjornlystrup picture asbjornlystrup  ·  7评论

atlmtw picture atlmtw  ·  47评论