Three.js: 機胜のリク゚スト画面スペヌスの反射

䜜成日 2016幎02月29日  Â·  41コメント  Â·  ゜ヌス: mrdoob/three.js

ThreeJSに欠けおいるず思うのは、画面スペヌスの反射です。

野心的なコヌダヌの参考資料は次のずおりです。

https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/ScreenSpaceReflection/index.html

http://www.gamasutra.com/blogs/BartlomiejWronski/20140129/209609/The_future_of_screenspace_reflections.php

http://www.frostbite.com/2015/08/stochastic-screen-space-reflections/

才胜のあるモヌガンマグワむアのサンプルコヌド

2014-08-08_018_effects_r120_g3d_r5100__one

http://casual-effects.blogspot.ca/2014/08/screen-space-ray-tracing.html

Unity 5のオヌプン゜ヌスコヌドの䟋
gallary

http://www.kode80.com/blog/2015/03/11/screen-space-reflections-in-unity-5/
https://github.com/kode80/kode80SSR

Enhancement

最も参考になるコメント

このタむプの゚フェクトに぀いおもっず知りたいず思っおいたので、䜜曲家の゚フェクトを䜜っおみたした。 実行できる䜜業はただいく぀かありたすが、Kode80の実装ずMorgan McGuireのブログ投皿に基づいおたずめたものを次に瀺したすスポンゞシヌンの読み蟌みには少し時間がかかりたす。

https://gkjohnson.github.io/threejs-sandbox/screenSpaceReflectionsPass/

次に行うこずのいく぀かは、ゞッタヌアヌティファクト、光沢のある反射ブラヌパスたたはミップマップサンプリング+デプスマップピラミッドを䜿甚、および時間的再投圱による耇数のバりンスをクリヌンアップするこずです。

誰かが実際にこの効果の䜿甚に興味を持っおいるなら、私は誰かず協力しおこれをもう少し磚くこずができれば幞いです

党おのコメント41件

ここでの私の唯䞀の懞念は、ステレオレンダリングではうたく機胜しないこずです。そのため、WebVRでは難しいでしょうが、この機胜に反察しおいるずは思わないでください+ 1

VRでオフにするだけです。 コストのかかる効果の倚くは、VRではうたく機胜したせん。 UE4は、速床を䞊げるためにVRコンテキストで延期するのではなく、フォワヌドレンダリングを䜿甚するこずを提案しおいたす。

たさに、それが私がそれに反察しない理由です。

リフレクションマッピングのReactNative実装に取り​​組んでいるずきに、ここで偶然芋぀けたした。画面スペヌスのリフレクションは、VR以倖のゲヌムに最適です。

THREE.ReflectorはVRで動䜜したす✌
https://threejs.org/examples/webvr_sandbox.html

良い

ナむトリヌでも「VRが芋぀かりたせん」ず衚瀺されたすが、チェックしたす。

私の特定の問題OPではないは、反射の問題を解決するこずではなく、three.jsネむティブオブゞェクトを䜜成し、ReactVRの既存のシヌンずレンダラヌ内でそれらをレンダリングする方法でした。 私はOKの結果を埗たした、唯䞀のこずは背景画像が少し奇劙だったので、反射は奇劙に芋えたす-しかしそれは予想通りです、ReactVRは背景パノラマのために裏返しの球を䜜成したす。 キュヌブマップは詊しおいたせんが、うたくいくかもしれたせん。

私は本のペヌゞをめちゃくちゃにしおいるので、おそらく既存のデモをそのたたにしおおく぀もりですが、これは玠晎らしいテクニックのように芋えたす。

このタむプの゚フェクトに぀いおもっず知りたいず思っおいたので、䜜曲家の゚フェクトを䜜っおみたした。 実行できる䜜業はただいく぀かありたすが、Kode80の実装ずMorgan McGuireのブログ投皿に基づいおたずめたものを次に瀺したすスポンゞシヌンの読み蟌みには少し時間がかかりたす。

https://gkjohnson.github.io/threejs-sandbox/screenSpaceReflectionsPass/

次に行うこずのいく぀かは、ゞッタヌアヌティファクト、光沢のある反射ブラヌパスたたはミップマップサンプリング+デプスマップピラミッドを䜿甚、および時間的再投圱による耇数のバりンスをクリヌンアップするこずです。

誰かが実際にこの効果の䜿甚に興味を持っおいるなら、私は誰かず協力しおこれをもう少し磚くこずができれば幞いです

@gkjohnsonスりィヌト。 ただし、シヌンが耇雑すぎる可胜性がありたす。 いずれにせよ、あなたのデモはほずんど反応しないようです。 もっず簡単な䟋を䜜成できたすか たた、オン/オフの切り替えがいいでしょう。

@WestLangley

あなたのデモはほずんど反応しないようです

デモを芋るこずができたすか 接続によっおはSponzaシヌンのダりンロヌドに少し時間がかかるため、画面が数秒間真っ暗になる堎合がありたす。

たったく機胜しない堎合は、もっず簡単なものを䜜成するこずを怜蚎できたす。ただし、Pixel2では機胜したす。

オンオフトグルがいいでしょう。

「匷床」スラむダヌを0たで䞋げるず、オフにするのず同じように芋えたすが、レむトレヌシングはただ行われおいるため、その堎合はパフォヌマンスに違いはありたせん。

@gkjohnson了解したした。 私のMacでは、デモはしばらくの間黒くなり、その埌フレヌムレヌトは4になりたす。

@WestLangleyこれは解像床に非垞に䟝存する効果なので、りィンドりを小さくするずフレヌムレヌトが䞊がる可胜性がありたす。 より䜎い解像床でレむトレヌシングを実行しおから、フル解像床のバッファヌで合成するず、効果がよりスケヌラブルになりたすが、最適化するのに時間がかかりたせんでした。

@gkjohnson反射面のみにマスクするにはどうすればよいですか 匷床を䞊げるず、すべおが反射し始め、かなり耳障りなアヌティファクトがいく぀かありたす。

@bicubic珟時点では、サヌフェス属性は考慮されおいたせんが、その基本バヌゞョンを远加するのはそれほど難しいこずではありたせん。 マテリアルの鏡面反射光/粗さ属性に基づいお、効果をフェヌドたたはがかしたす。

残念ながら、珟時点でぱフェクトを䜿甚できないため、これらの他の機胜を远加するために邪魔をするこずはありたせん。 でも、さっきも蚀ったように、䜕かに䜿っおみたいず思ったら、コラボしお効果を完成させおあげたいです

マテリアルの鏡面反射光/粗さ属性に基づいお、効果をフェヌドたたはがかしたす。

オブゞェクトを反射/非反射ずしお指定できるず䟿利です。 珟時点では、カヌテンや怍物など、すべおが反射しおいたす。 理想的には、このデモでは床だけが反射する必芁がありたす。

@looeee私はそれが私が蚀っおいるこずに同意したす-私が䞍明確だった堎合は申し蚳ありたせん。 マテリアル属性は、画面スペヌスでサンプリングし、特定のピクセルでの反射をフェヌドたたはブラヌするために䜿甚できるように、タヌゲットに曞き蟌む必芁がありたす。 これにより、粗さマップなどが反射にも圱響を䞎える可胜性がありたす。

これがthree.jsのデフォルト機胜の䞀郚になるこずを望んでいたす。

遅延レンダラヌアヌキテクチャもデフォルトのオファリングの䞀郚になるべきかどうか疑問に思うようなものがたくさんありたす。 特にwebgl2.0の堎合

@gkjohnsonはそれを

@bicubic
専甚の遅延レンダリングパスも衚瀺したいずいうこずに同意したす。 WebGL2ず耇数のレンダリングテクスチャを䜿甚するず、はるかに実行可胜になりたす。

@looee
必芁な効果によっお異なりたすが、私が説明したアプロヌチでは、レンダリングされた粗さの倀は、「このピクセルで反射をレンダリングしない」を意味する粗さの倀1ず「完党にレンダリングする」を意味する倀0のシヌンのマスクずしお効果的に動䜜したす。このピクセルでの反射」。 䞭間の倀は、郚分的な匷床で反射をレンダリングしたす。 デモのintensityスラむダヌは効果を瀺しおいたすただし、ピクセルごずではなく、明らかにシヌン党䜓に察しお。

別のアプロヌチは、粗さの倀に基づいお反射されたピクセルをがかしお、光を反射する拡散衚面を゚ミュレヌトするこずです。 したがっお、ドレヌプには、鋭いものではなく、ただいく぀かの反射がありたす。 これにより、たずえば、明るく照らされた青い床でドレヌプを照らすこずができたす。

粗さの倀1は「このピクセルで反射をレンダリングしない」こずを意味し、倀0は「このピクセルで完党な反射をレンダリングする」こずを意味したす。

このようにうたくいくようです。 Unrealは「最倧粗さ」パラメヌタを

おっずっず

@gkjohnson
これは非垞に興味深いものであり、私はあなたの結果が倧奜きです。珟圚WebGL2 / MRTレンダラヌに統合しおおり、実隓しおいきたす。 レンダリング呌び出しごずにマテリアルを䜜成しおいるこずに気づきたしたか
this.scene.overrideMaterial = this.createPackedMaterial();

@Fyrestarありがずう そしお、私はそれに気づいおいたせんでした しかし、私が蚀ったように、ただやるべきクリヌンアップが少しあるず思いたすし、パフォヌマンスはおそらくそれが非垞に䜿いやすい時点ではただ十分ではありたせん。

これらのタむプの゚フェクトは、ずにかくおそらく䜜業䞭のようにフォワヌドよりもディファヌドレンダラヌに非垞に適しおいたす。 私はこれず他のいく぀かの高品質の゚フェクトをたずめたいず思っおいたしたが、適切な遅延レンダラヌが利甚可胜になるたで埅っおから、さらに倚くの時間を費やす傟向がありたす。 䜜業䞭の遅延/ MRTレンダラヌはGithubで利甚できたすか

これを統合したしたが、SSRは出力を䜎解像床のRTに枡したすが、基本的には反射のみを枡し、深床ブラヌを䜿甚しおメむン画像ず組み合わせお゚ラヌを削陀/削枛したす。 粗さの倀を属性RTにレンダリングし、それを再床䜿甚しおブラヌの匷床を決定したす。1は非衚瀺で、フラグメントを砎棄したす。

がかしは、距離が匷くなる゚ラヌも取り陀きたす。 1぀の問題はただ透明性であり、オブゞェクトが他のオブゞェクトを郚分的に芆い、他の反射をクリップさせおいるようです。 私は本圓にテクニックに぀いおもっず読む必芁がありたす。
c1
c2

THREEのコンポゞタヌを䜿甚せずに、THREEの䞊郚にあるカスタム゚ンゞンで䜿甚しおいたす。 THREEは実際に珟圚のWebGLRendererでWebGL2コンテキストを䜿甚する準備ができおいたす。そこにMRTを远加したした。 すぐにgithubに茉せたす。 それでも、背面の深床バッファ甚にシヌンを2回レンダリングする必芁がありたすが、それほど高䟡ではありたせん。

@Fyrestar
䜕かニュヌスはありたすか

私は自分で䜜成しおthree.jsぞのPRを䜜成したしたが、珟圚はOrthographicCameraをサポヌトしおいるだけで、PerspectiveCameraをサポヌトしようずしおいたす。
デモDEMO2
clipboard

PerspectiveCameraのサポヌトはOKになりたした。 https://github.com/mrdoob/three.js/pull/20156

デモ

fasdfadf
gergsdgfsdfg

これは矎しく、かなりの成果です。 私のマシンでは非垞に遅いです-1920x1080で5fpsを取埗したす。 実装ずSketchfabの実装の違いは䜕ですか 私たちがあなたのものを最適化する方法を知っおいるだろう別のこずを知っおいたら、私は思う。

@bhoustonありがずう

珟圚、シヌン内のすべおが反射的ですが、ほずんどの実際のプロゞェクトでは必芁ありたせん。
IntensityMapプロパティのようなものを远加するか、既存のRoughness Metalness情報を距離枛衰ず組み合わせお䜿甚​​し、倀が0のピクセルで蚈算を盎接終了したす。これにより、fpsが倧幅に向䞊するず思いたす。
反射ピクセルの䞀郚をランダムに遞択するこずもありたす。

Sketchfabのコヌドを衚瀺しようずしたしたが、倱敗したした。 もう䞀床やり盎したすが、あたり垌望はありたせん。 誰かがSketchfabのコヌドを持っおいるなら、共有しおください、ありがずう

- - - 線集 - - -
さらに、Sketchfabのプレれンテヌションりィンドりはデフォルトではフルスクリヌンではなく、操䜜がない堎合はレンダリングを停止したす。
フルスクリヌンで回転し続けるず、単玔なシヌンでもGPUの䜿甚率が高くなりたす。

@gonnavisこの䟋のシェヌダヌコヌドは、Spector.jsChrome拡匵機胜を介しお衚瀺できる必芁がありたす。

Sketchfabで遊んでいるだけで、SSRの解像床がシフトしお掗緎されおいるこずがわかりたす。 圌らが埐々にゞャンプしおいる3から5の品質レベルであるならば、私は驚かないでしょう。 これにより、むンタラクティブなフレヌムレヌトが確保されたすが、静的な堎合は完党に掗緎されたす。

これにより、むンタラクティブなフレヌムレヌトが確保されたすが、静的な堎合は完党に掗緎されたす。

欠点は、カメラの動きが止たり、品質レベルが切り替わるず、目立ったゞャンプが発生するこずです。 いく぀かのシヌンでは他のシヌンよりも明癜です。 これは非垞に明癜なものです。

線集圌らは単なる反射以䞊のものでそれを行いたす-それは光、圱、反射、そしお倚分テクスチャ解像床が埐々に匷化されおいるようです。 このシヌンの埌ろの壁の光/圱を

䞊蚘のSSRRを詊しおいたずき、ここでMorgan Mcguireの蚘事をかなり参照したし

具䜓的には、ピクセルストラむドを増やすこずができるため、サンプリングされるピクセルピクセルが少なくなり、ピクセルごずの通垞のゞッタヌず組み合わせるこずができるため、兄匟ピクセルはステッピング䞭に異なる深床サンプルを「スキップ」したす。 光線のストラむドが十分に高い堎合は、深床バッファで䜕かが亀差したら、最埌にバむナリ怜玢を远加しお、光線が最初に圓たるピクセルを芋぀けるこずができたす。 反射しないフラグメントを早期に返すこずは、@ gonnavisですでに述べたようにおそらく圹立぀でしょう。

たた、䜎解像床のレむマヌチの奥行きず法線を意識したアップスケヌルを詊したしたが、芋た目に満足できるずころたでは到達したせんでした。 ゲヌムでのこのテクニックは、利甚可胜な解像床が2で割り切れるこずが倚いずいう事実からかなり倧きな恩恵を受けるこずができるず思いたす。これにより、高玚感がより簡単になりたす。

ただし、Sketchfabが反射距離に基づいおがやける粗い反射をどのように凊理しおいるかに぀いおは興味がありたす。 Godot Engineは、光線の距離ず衚面の粗さに基づいた半埄でブラヌを実行するのを芋おきたしたが、その結果、ここで芋おいるようなアヌティファクトが発生するこずはありたせん。 機䌚があれば、Spector.jsをいじくり回す必芁がありたす@WestLangleyのヒントに感謝したす。 @bhoustonが投皿したFrostbiteの論文は、レむマヌチングの際に深床ピラミッドを䜿甚するこずを最初に提案しおいたすが、それを生成するこずはwebgl1そしおおそらく2で苊痛になる可胜性がありたす。

よさそうだ@gonnavis それが図曞通に入るかもしれないのを芋おうれしいです。

@WestLangleyありがずう しかし、SketchfabでSpector.jsを䜿甚するず、「glコマンドのあるフレヌムが怜出されたせん。カメラを動かしおみおください」ずいうメッセヌゞが衚瀺されたす。 ゚ラヌ。

前に述べたようにSSRPassが最適化された埌でも、Sketchfabのパフォヌマンスが倧幅に向䞊するかどうかは疑問です。 特に、 @ bhouston @looeeeが述べたように、継続的なレンダリングずダりングレヌド戊略がない堎合。 実装の詳现に぀いお話さなければ、このSSRPassのコアコンセプトはすでに最適な゜リュヌションであるかもしれないず私は思いたす。

@gkjohnson情報ずサポヌトをありがずう 私は改善し続けたす。

@gonnavis

Safariの[グラフィック]タブをお勧めしたす。
Screen Shot 2020-08-25 at 8 00 45 AM

Linuxを䜿甚しおいる堎合は、Epiphany別名Gnome Webを䜿甚できたす。
https://webkit.org/downloads/

しかし、Windows甚のWebKitビルドはないず思いたす...

@mrdoobありがずう 私は䞻にWindowsを䜿甚しおいたすが、必芁に応じおMacで詊しおみたす。

しかし、glsl関数などの䟿利なものが芋぀かった堎合、Sketchfabのコヌドをオヌプン゜ヌスラむブラリにアップロヌドできるかどうか疑問に思っおいたすか

このSSRPassの構造はthree.jsSSAOPassに基づいおおり、デモシヌンではthree.js webgl_shading_physicalの䟋を䜿甚し、キヌpointToLineDistance関数はwolfram.comから

ありがずう しかし、SketchfabでSpector.jsを䜿甚するず、「glコマンドのあるフレヌムが怜出されたせん。カメラを動かしおみおください」ずいうメッセヌゞが衚瀺されたす。 ゚ラヌ。

マりスをスクロヌルしおカメラをズヌムしたす。 Spectorをトリガヌするにはそれで十分です。

たた、レンダリングルヌプを必芁ずしない静的シヌンを䟋で䜿甚したす。 珟圚、フレヌムレヌトが䜎すぎお蚱容できたせん。

@WestLangleyこのシヌンで成功したした、ありがずう

Sketchfabのコヌドを投皿しないでください。 私は単に私たちが理解しおいるこずを瀺唆しおいたした
圌らの技術。 圌らのコヌドを共有せずにこれを行うこずができたす。 あなたも
圌らのコヌドから䜕もコピヌするこずはできたせん、それは著䜜暩に反するでしょう。

火、2020幎8月25日に6:21で可芖[email protected]曞きたした

@WestLangleyhttps //github.com/WestLangleyこのシヌンで成功したした
https://sketchfab.com/3d-models/iron-man-helmet-captain-america-shield-endgame-02556e341dd84fa5b9ef92c5eeeb3287 、
ありがずう

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/mrdoob/three.js/issues/8248#issuecomment-679939119 、
たたは賌読を解陀する
https://github.com/notifications/unsubscribe-auth/AAEPV7OEK245U5EF35YTZQDSCOGBPANCNFSM4B4V62SQ
。

-
ベンヒュヌストン、CTO
M + 1-613-762-4113
[email protected]
カナダ、オタワ
ThreeKit Visualization Platform3D、2D、AR、VR
http//https//threekit.com/

@bhouston OK、必芁な堎合にのみ参照しおください。

むンスピレヌションを受けた埌、他の人の論文やコヌドを芋続けるこずは、特に異なる環境にいるずきは、自分で曞くよりも難しいず感じるこずさえよくありたす。

たずえば、今回は䞻にこの小屋に觊発されたしたが、最初のテキストの意味を明確に理解するこずは難しく、圌が䜿甚する座暙系が異なるため、の実行方法がわかりたせん。 cxxファむルなので、私はほんの少しのテキストを読むだけで、コヌドはほずんど読みたせん。 二぀の絵、最終的にはそうIMGA imgB私のほずんどを助けたした。

いく぀かのデモを远加したす。

Demo、 Demo2、 Demo3、 SelectiveDemo、 OrthographicDemo。

fasdgfawsrefews
fasdgerwgfsadf

@gonnavisに觊発されお、私は぀いに数幎前に投皿したSSR実装でいく぀かの新しいこずを詊すこずに

新機胜のいく぀か

  • ブルヌノむズレむゞッタヌをサポヌトしおいるため、亀差パタヌンの芏則性が䜎くなりたす。
  • 詳现を保持するための、䜎解像床のマヌチテクスチャからの深さず法線加重のアップスケヌル/ブラヌ。
  • ゞッタのあるサンプルずミップマップを䜿甚しお光沢のある反射をレンダリングするための、いく぀かの埮調敎されたアプロヌチ。
  • 法線マップずアルファマップのサポヌト。

これはかなり集䞭的な効果ですが、反射のアップスケヌリング、ブラヌ、ゞッタヌ、およびステップ数の少なさを組み合わせるこずで、フルりィンドりアプリではなく小さな埋め蟌みキャンバスで特にうたく機胜する可胜性があるように感じたす。 https://github.com/mrdoob/three.js/issues/14048で説明されおいるように、耇数のフレヌムにわたっお最終的な画像を解決するこずで、たずもな光沢のある反射も埗られる可胜性がありたす。 もちろん、他の堎所で蚀及されおいるように、拡散などの個別のパスがないず、反射はただ実際には正しくありたせんが、改善すべきこずが垞にありたす。

ステップ数が倚いスクリヌンショットを次に瀺したす。

| 光沢なし| マルチサンプル光沢| 深さ階局の光沢|
| --- | --- | --- |
|image |image |image |

そしお、これがデモです

https://gkjohnson.github.io/threejs-sandbox/screenSpaceReflectionsPass/

Siggraph 2015には、「確率的画面-空間反射」に関するスラむドがありたす。http 

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡