<p>troika-3d-エラーのないテキストレンダリングの問題</p>

作成日 2019年11月06日  ·  43コメント  ·  ソース: protectwise/troika

これをaframeコンポーネントとダイレクトトロイカビルドでテストし、

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

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

全てのコメント43件

Google Chrome | 78.0.3904.87(Offiziellerビルド)(64ビット)
Linux
JavaScript | V8 7.8.279.19

VENDOR = 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)]アクティブ

私はこれを最初に見つけた場合はそれが機能することを覚えています

だから私はいくつかの古いバージョンを試してみます! はい、e600d2cdv0.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(小さいサイズ)のみを使用している場合は機能するようです。

oculusgoでは問題なく動作します

ezgif com-video-to-gif

ダン、それは私の予感を破った。

そのビデオは魅力的です。 動作が発生する可能性があるいくつかの理由を考えることができますが、それらも0.12.1で失敗するはずです。 探し続けます...

時間の経過とともに複数の異なる問題に対処していないことを確認するために、次のビルドがすべて同じように失敗することを確認できますか?

はい、すべて同じで失敗します

さて、今のところ私はこれに困惑しています。 https://github.com/protectwise/troika/compare/v0.12.1...v0.13.0 diffを調べても、この動作を引き起こすような違いは見られません。 テキストレンダリングに影響を与える必要がある唯一の変更は、シェーダー操作のためのcreateDerivedShader抽象化への切り替えです。 これらの2つのバージョンからのシェーダー出力を行ごとに比較しましたが、挿入されたロジックに違いはなく、発生する場所にわずかな違いがあります(たとえば、voidmainではなくglsl関数内またはわずかに異なる順序で。)それがこの問題を引き起こす理由はわかりませんが、その特定のOpenGLドライバーにバグ/癖があり、それがトリガーされる可能性があると思います。

ハンチに基づいていくつかの変更を試し、それらをテストしてもらう以外に、ここからどこに行くべきかわからない。 これを簡単に再現できないのは苦痛です。

OK、私は理解しています、そしてはい、これもopenglドライバーの問題だと思います:/ 1つの発見は、スケーリングするとフォントビデオが表示されることです->
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 wuha! 動作するシーンにフォグを追加すると、面白いものが見つかりました。

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

シーンEl.setAttribute( "fog"、 "type:linear; far:300; color:0xefd1b5");でフレームフォグが追加されました。

好奇心旺盛で好奇心旺盛。 トロイカの例のページの「霧」チェックボックスも機能しますか?

うーん、これは何も変わりません

はい、MeshBasicMaterialを設定してFogを選択すると機能します。

OKありがとう、それは私にさらに調査するための手がかりを与えるかもしれません。

今日はしばらくしてから、孤立した変更を試みてブランチをプッシュし、それらのいずれかが役立つかどうかを確認しようと思います。

OK、これが最初の試みです-変更がないか、変更されているがまだバグがあるか、修正されているかどうかを知らせてください: https ://5dc9dc90ab55b5000a1db32c--troika-examples.netlify.com/#text

とても良いショットのように見えます! :>

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

MeshStandardとMeshBasicMaterialの通常の使用法は、私にとっては修正されているように見えます

カスタムシェーダーマテリアルでのみバグがあります
Bildschirmfoto von 2019-11-11 23-42-22

それは素晴らしいことです! 私たちはどこかに到達しています。

今すぐ試してみてください: https ://5dc9e7dcea3f6e00084d01a6--troika-examples.netlify.com/#text
私はこれで2つの潜在的な根本原因の1つを分離しようとしています。

これは、MeshBasicMaterialとFogが有効になっている場合にのみ正しく機能します。

ですから、実行の順序には奇妙な癖があります。 これらの最後の2つのテストの唯一の違いは、カスタムテキストシェーダーロジックの後でまたは前に発生するID割り当て( gl_FragColor = functionThatReturnsArg(gl_FragColor); )に相当するものでした。 それが機能した後に来る場合、そしてそれが前に来る場合、それは失敗します(フォグが有効になっていない限り、テキストロジックの前に余分なgl_FragColor.rgb = ...が追加され、それも機能しますが、MeshBasicMaterialでのみ機能します。ため息をつきます。

これは、最後にgl_FragColor = gl_FragColor;を追加することでキックが得られるかどうかを確認するだけの厄介なハックです: https ://5dc9f0d8e82cdf00089f6b6c--troika-examples.netlify.com/#text

前回と同じように、BasicMaterialとFogでのみ機能します...

OK、もう少し試してみてください...

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

3つすべて同じで、BasicMaterialとFogが有効になっている場合にのみ機能します

うーん。 私のすべての野蛮な推測をテストすることにとても忍耐強くしてくれてありがとう。 これはまだ私には意味がありません。

さらに別の仮説をテストする: https ://5dcaea1c9bbf6e00074b3c7a--troika-examples.netlify.com/#text

np、これは常にフォグオンオフとすべてのマテリアルで壊れます

少し時間を取ったら、他の例からスクリーンショットをもう少し撮っていただけませんか。

1)「Double-Derived」シェーダーが選択されたhttps://troika-examples.netlify.com/#arcs
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

スクリーンショットをありがとう。 フラグメントシェーダーを変更するためにまったく同じユーティリティを使用しているため、少なくとも1つはテキストと同様の方法で失敗することを期待していました。 しかし、どれも失敗しません。 だから多分それはテキスト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

すべての1.2。および3.は、すべてのマテリアルで、霧の有無にかかわらず機能します。

😮すごい!

最後にもう1つ確認してください。そうすれば、最終的な修正に十分な情報が得られるはずです。
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か何かとして再定式化することを試みることができましたが、とにかくそれはそれほど有用ではありません。

これをマスターの最終修正に仕上げ、もう一度確認してから、新しいバージョンを公開してaframeコンポーネントで更新します。 ただし、1日か2日かかる場合があります。

機会があれば、テストするマスタービルド: https ://troika-examples.netlify.com/#text

はい、これはすべてのマテリアルとフォグのオン/オフで機能します!

@arpuこの問題の追跡にご協力いただき、誠にありがとうございます。 この修正は0.15.7で公開されています。

また、固定バージョンを使用するバージョン0.1.2にaframe-troika-textをバンプしました。 また、前に述べたThreeJSr110の修正も含まれています。

このページは役に立ちましたか?
0 / 5 - 0 評価