問題タブ [webxr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Chrome Android で readRenderTargetPixels() を使用すると、2 番目の深度カメラを使用すると大幅な遅延が発生する - 完全なデモ
これは明らかに WEBGL-Gurus への呼び出しです。
2 番目の深度カメラを使用して 2x2 ピクセルの解像度でレンダリングしていますが、1 ピクセルしか読み取っていません。
私が試してみました:
renderer.readRenderTargetPixels()
Three.js で (これgl.readPixels
は pureと同じになると思いますWEBGL
)。getImageData()
にレンダリングした後Canvas
。
どちらも非常に遅いようです。私の場合、2x2 ピクセルのレンダー ターゲットの場合でも、最大 25 ミリ秒かかります。特にの不当な低効率gl.readpixels
もここで言及されています: gl.readPixels を使用する正しい方法は何ですか?
だから、私は解決策を探しています-その単一ピクセルを効率的に読み取り、それをJS配列またはオブジェクトに入れる任意の解決策。ありがとう。
アップデート:
- タイトルと本文をより的を得たものに更新しました。
- readRenderTargetPixels() (gl.readpixels() と同等) のレイテンシを示すために JSFiddle を作成しました。私はそれをできるだけシンプルにしようとしましたが、そうではありません...シンプル:)
注意事項・使い方:
このデモは、通常モードと WebXR モードの両方で実行されます。 巨大な遅延を確認するために VR に入る必要はありません。JSFiddle にはバグがあり、モバイルで VRButton が表示されません。モバイルで VR に入るには、コードを index.html にコピーし、WIFI 経由で安全なローカル サーバー (HTTPS) を実行するか、VRButton を非表示にしない JSFiddle 代替を使用する必要があります。多くをテストしましたが、機能するものを見つけることができませんでした(!)
このデモでは、便宜上、画面上の通常モードと WebXR モードの両方で、最後の 10 フレームのレンダリング統計(最小および最大ミリ秒のレンダリング時間) を表示するため、モバイルでも簡単に確認できます。
メインカメラとデプスカメラがあります。深度カメラの解像度は 2x2 ピクセルで、FOV は 0.015 度です。回転する立方体を指し、深さを測定し、立方体の表面に光線と点を描画します。コードを最適化して、JS でのコストのかかるデコード計算を排除しました。
私は主にモバイルに興味があります。モバイルではレイテンシーがはるかに高く、便宜上 QR コードを提供しています。モバイルでテストするには、次の #1 QR コードをスキャンし、安定するまで 1 分待ってから、2 番目の QR コードをスキャンして比較してください。JSFiddle のコードを表示/編集するには、URL から「show」を削除し、ページをリロードします。
Chrome ブラウザでデモをテストしてください。PC でデモを実行する場合は、遅延を判断する前に 1 分間待つことも重要です。PC 上の Firefox は、PC 上の Chrome よりもはるかに待ち時間が短く、はるかに安定していることに気付きましたが、私が興味を持っている機能は FF ではサポートされていないため、Chrome だけに興味があります。私の PC では、Chrome は約 5 ミリ秒のレンダリング時間で始まり (その機能がない場合は 1 ~ 2 ミリ秒であるのに対して、これはまだ巨大です)、しばらくすると 2 倍や 3 倍になります。モバイルでは、ほとんどの場合、15 ~ 30 ミリ秒 (強力なモバイル) と高くなります。
readRenderTargetPixels() オン:
https://jsfiddle.net/dlllb/h3ywjeud/show
readRenderTargetPixels() オフ:
https://jsfiddle.net/dlllb/mbk4Lfy1/show
更新 #2
Andre van Kammen の mod:モバイル (Xiaomi Redmi Note 9S) で依然として非常に大きな遅延が発生しています。
ウェブカメラで撮影した動画: https://www.bitchute.com/video/5WJxdo649KiF/
Pixel Buffer Objects (PBO) に関する詳細な記事があり ます 。スペースを押すとオフとオンが切り替わるデモを試して、ゼロ(0)の差が得られるまで!PC: http://www.songho.ca/opengl/files/pboUnpack.zip
どうやら、gl.readpixels が導入されてから 30 年経った今でも、テクノロジはいまいましいピクセルを読み取るための信頼できる効率的な方法を提供できていません。これは非常に恥ずべきことです。私はハードウェアを設計していました。何年にもわたって、すべての問題にはエレクトロニクスの解決策があり、同じことがソフトウェアや他のすべてのセクターにも当てはまります。どうやら、業界の一部では、パフォーマンス優先ではなく、ずさんさ優先のようです。私が間違っていることを証明してください。
javascript - ページをリロードせずにナビゲーターを更新する
<object data="" type="text/html"></object>
タグを使用して追加のコンテンツ ページを読み込むページがあります。個々のページが機能する前に行う必要があることの 1 つは、以下を使用して XR コンテンツがサポートされているかどうかを判断することです。
これは 90% の確率で機能します。immersive-vr
ただし、親ページがロードされた後に何らかの理由でサポートが失われた場合、すべての子コンテンツ ページはtrue
、プロミスが解決されたときに誤った値を返します。
シナリオ: SteamVR がバックグラウンドで実行されている状態で Web ページをロードし、1 つの XR プレゼンテーションを正常に体験した後、SteamVR が閉じたり、クラッシュしたりします。リストから次のコンテンツ アイテムを選択するか、別のxrSession
. immersive-vr
サポートされなくなったため、xrSession の作成時にエラーがスローされます。
Web ページ全体を再読み込みせずにナビゲーターを更新する方法はありますか?