Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Post-Process example #5648

Open
wants to merge 32 commits into
base: master
Choose a base branch
from
Open

Conversation

enzofrancescaHM
Copy link

Description:
Minimal example to show the possibility of implementing Post-Processing in A-Frame.
NOTE: for Post-Processing to work also in VR mode, supermedium/three.js#20 must be implemented in supermedium three.
Changes proposed:
-index.html running a simple scene with simple geometries with and without emission
-bloom.js, a minimal implementation of Bloom effect

@vincentfretin
Copy link
Contributor

Where does all those 1087 lines of code comes from?
You should be able to import the postprocessing library with an importmap, I advice you to base your example on the new importmap example https://github.com/aframevr/aframe/blob/master/examples/boilerplate/importmap/index.html and write a small bloom component of a few lines.
The bloom effect integration in r3f is just this https://github.com/pmndrs/react-postprocessing/blob/master/src/effects/Bloom.tsx

@enzofrancescaHM
Copy link
Author

Where does all those 1087 lines of code comes from? You should be able to import the postprocessing library with an importmap, I advice you to base your example on the new importmap example https://github.com/aframevr/aframe/blob/master/examples/boilerplate/importmap/index.html and write a small bloom component of a few lines. The bloom effect integration in r3f is just this https://github.com/pmndrs/react-postprocessing/blob/master/src/effects/Bloom.tsx

Yes, thanks for pointing that, I completely missed the new feature of A-Frame to use importmap. Sorry for that, I've reduced the bloom.js to the bare minimum to work.

@vincentfretin
Copy link
Contributor

Yes, thanks for pointing that, I completely missed the new feature of A-Frame to use importmap

That new importmap example exist since 2 days ago ;) I'm glad I did it so we can have a simpler example here without copying all the code.

@vincentfretin
Copy link
Contributor

Didn't we agree from supermedium/three.js#20 to use
https://github.com/pmndrs/postprocessing that is more performant than the three/addons effect composer?

@dmarcos
Copy link
Member

dmarcos commented Jan 30, 2025

Didn't we agree from supermedium/three.js#20 to use https://github.com/pmndrs/postprocessing that is more performant than the three/addons effect composer?

Whatever yields 90fps with the simpler code and least amount of dependencies

@enzofrancescaHM
Copy link
Author

Didn't we agree from supermedium/three.js#20 to use https://github.com/pmndrs/postprocessing that is more performant than the three/addons effect composer?

pmndrs does not work in VR at the moment. I have opened tickets there, but at the moment no one is working on it.

@dmarcos
Copy link
Member

dmarcos commented Jan 31, 2025

I merged THREE changes and updated A-Frame so should work on top of master.

Can you put the examples under showcase and rename to post-processing: showcase/post-processing?

Thanks so much for all the effort

this.scene = this.el.object3D;
this.renderer = this.el.renderer;
this.camera = this.el.camera;
this.composer = new EffectComposer(this.renderer);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of recreating EffectComposer, RenderPass and UnrealBloomPass each update, they can be created once in init and only updated here.

},
bind: function () {
const render = this.renderer.render;
const system = this;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: this isn't a system, probably better to name it self.

* Unreal Bloom Effect
* Implementation for A-Frame
* Code modified from Akbartus's UnrealBloomPass.js
* https://github.com/akbartus/A-Frame-Component-Postprocessing
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that the source is MIT licensed, the original copyright and license notice should be included.

"imports": {
"aframe": "../../dist/aframe-master.module.min.js",
"three": "https://cdn.jsdelivr.net/npm/[email protected]/build/three.module.js",
"three/addons/": "https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be

          "three": "../../../super-three-package/build/three.module.js",
          "three/addons/": "../../../super-three-package/examples/jsm/",

like https://github.com/aframevr/aframe/blob/master/examples/boilerplate/importmap/index.html
so it uses the three version from node_modules.

shadow="type: pcfsoft; autoUpdate: true"
background="color:black;"
renderer="anisotropy:4; stencil:true; alpha:false; colorManagement:true; exposure:1.0;"
bloomm="threshold: 1.0; strength: 0.6; radius: 1; exposure: 1.0">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the example still work? there is two m here.

@CodyJasonBennett
Copy link

Just know my PR was intended as a targeted fix and it will need to be reinstated eventually, and your avoidance specifically is why I put a $10,000 bounty and threw in the towel on the space and three.js entirely.

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

then let's talk upstream about exposing TEXTURE_BASE_LEVEL mrdoob/three.js#29779.

@CodyJasonBennett any simple PR we can take in out fork while it’s discussed?

@CodyJasonBennett
Copy link

No, I never got a chance to finish work there. For now, you can try tweaking the bloom kernel, upsampling to reduce overall throughput, and/or reducing the target framerate to minimize reprojection. Ideally, this would be done progressively since high-end headsets are modestly powerful in sustained performance, so you can get away with more bandwidth-hungry graphics in games.

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

Is the current approach sensible for Quest 3 or is it something we should also improve?

Wonder how much effort should go to Quest 2

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

If someone with a Quest 2 can suggest a few improvements on this example it will be super appreciated

@CodyJasonBennett
Copy link

It looks good to me, and I outlined some options that I know allow compromise for low-powered devices. As I said, we'll later use pmndrs/postprocessing here. Ideally, without hacks if upstream improves.

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

It looks good to me, and I outlined some options that I know allow compromise for low-powered devices. As I said, we'll later use pmndrs/postprocessing here. Ideally, without hacks if upstream improves.

Yeah. thanks for the suggestions. Looking for someone with a Quest 2 handy that can test and commit some code to improve. We can have a path specific for low powered headsets (Maybe only Quest2 only worth considering?)

@cabanier
Copy link
Contributor

cabanier commented Feb 4, 2025

It looks good to me, and I outlined some options that I know allow compromise for low-powered devices. As I said, we'll later use pmndrs/postprocessing here. Ideally, without hacks if upstream improves.

Yeah. thanks for the suggestions. Looking for someone with a Quest 2 handy that can test and commit some code to improve. We can have a path specific for low powered headsets (Maybe only Quest2 only worth considering?)

Quest 3 also doesn't make framerate :-\
Making this work efficiently is not easy...

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

It looks good to me, and I outlined some options that I know allow compromise for low-powered devices. As I said, we'll later use pmndrs/postprocessing here. Ideally, without hacks if upstream improves.

Yeah. thanks for the suggestions. Looking for someone with a Quest 2 handy that can test and commit some code to improve. We can have a path specific for low powered headsets (Maybe only Quest2 only worth considering?)

Quest 3 also doesn't make framerate :-\ Making this work efficiently is not easy...

What example have you tried and how are you profiling?

This example https://incluverse.eu/examples/bloomtest5.html gives me 90fps on Quest3 with the OVR Metrics Tool HUD

@CodyJasonBennett
Copy link

I'd like to put a $500 bounty on this PR to be championed by those who are not affiliated with Meta and therefore have no ulterior incentive to shut down work that does not gain them vendor support. Thanks.

@cabanier
Copy link
Contributor

cabanier commented Feb 4, 2025

Quest 3 also doesn't make framerate :-\ Making this work efficiently is not easy...

What example have you tried and how are you profiling?

This example https://incluverse.eu/examples/bloomtest5.html gives me 90fps on Quest3 with the OVR Metrics Tool HUD

That's the one I tried yesterday and it ran at 45.

@CodyJasonBennett
Copy link

I'd be happy to personally issue headsets to reviewers if that helps to profile, but I will not entertain Rik any further.

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

Quest 3 also doesn't make framerate :-\ Making this work efficiently is not easy...

What example have you tried and how are you profiling?
This example https://incluverse.eu/examples/bloomtest5.html gives me 90fps on Quest3 with the OVR Metrics Tool HUD

That's the one I tried yesterday and it ran at 45.

With OVR Metrics tool? My screen recording with https://incluverse.eu/examples/bloomtest5.html showing 90fps on Quest 3

90fps.mp4

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

Got my hands on a Quest 2. https://incluverse.eu/examples/bloomtest5.html yields 30fps in VR mode

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

Can someone confirm my results with the OVR Metrics Tool HUD and https://incluverse.eu/examples/bloomtest5.html?

Quest 3: Stable 90fps
Quest 2: Stable 30fps

If we can bring those Quest2 FPS up we can merge this. Separate paths for Quest 2 and 3 would be acceptable.

Once this merge. At first, instead of having a generic post-processing API we can have effects (built-in or in examples) that know perform well in VR. Starting with this bloom.

@CodyJasonBennett
Copy link

CodyJasonBennett commented Feb 4, 2025

If this isn't simply the result of reprojection and/or supersampling (remember MSAA is enabled, could have needless attachments and/or resolves), then I propose disabling post-processing for Quest 2 outright until we use a performant implementation like in pmndrs/postprocessing. Again, if this entire PR hinges around an unmaintained bloom effect from an example with suboptimal parameters, then it will never get completed except by pure accident. I will put a $500 bounty on the completion of this PR and can issue headsets to anyone willing, but I will not let Rik shoot down yet another PR, as I have reason to believe it's not in good faith nor in alignment with my contacts at Meta who should be working with us in the first place.

@dmarcos
Copy link
Member

dmarcos commented Feb 4, 2025

If this isn't simply the result of reprojection and/or supersampling (remember MSAA is enabled, could have needless attachments and/or resolves), then I propose disabling post-processing for Quest 2 outright until we use a performant implementation like in pmndrs/postprocessing. I will put a $500 bounty on the completion of this PR and can issue headsets to anyone willing, but I will not let Rik shoot down yet another PR, as I have reason to believe it's not in good faith nor in alignment with my contacts at Meta who should be working with us in the first place.

Thanks so much. What's prevent us from using the pmndrs/postprocessing implementation? Some of the pending three work?

Is there a pmndrs/postprocessing example that is known to perform well in Quest 2 in VR?

@cabanier
Copy link
Contributor

cabanier commented Feb 4, 2025

Can someone confirm my results with the OVR Metrics Tool HUD and https://incluverse.eu/examples/bloomtest5.html?

Quest 3: Stable 90fps Quest 2: Stable 30fps

This are my stats on a Quest 3 when that page is running:
02-04 15:52:22.000 29268 30041 I VrApi : FPS=42/90,Prd=58ms,Tear=0,Early=14,Stale=42,Stale2/5/10/max=2/1/0/5,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/4,2361/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=2.10ms,App=13.48ms,GD=0.00ms,CPU&GPU=29.14ms,LCnt=2(DR0,LM0),GPU%=0.98,CPU%=0.48(W0.50),DSF=1.00,CFL=12.52/16.85,ICFLp95=15.33,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0
02-04 15:52:23.000 29268 30041 I VrApi : FPS=51/90,Prd=51ms,Tear=0,Early=1,Stale=45,Stale2/5/10/max=3/0/0/3,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/4,1920/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=2.12ms,App=15.57ms,GD=0.00ms,CPU&GPU=27.33ms,LCnt=2(DR0,LM0),GPU%=0.90,CPU%=0.31(W0.37),DSF=1.00,CFL=12.59/16.28,ICFLp95=14.97,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0
02-04 15:52:24.000 29268 30041 I VrApi : FPS=45/90,Prd=43ms,Tear=0,Early=0,Stale=52,Stale2/5/10/max=7/0/0/3,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/4,2361/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=1.07ms,App=14.20ms,GD=0.00ms,CPU&GPU=24.50ms,LCnt=2(DR0,LM0),GPU%=0.79,CPU%=0.37(W0.42),DSF=1.00,CFL=12.46/15.92,ICFLp95=14.74,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0
02-04 15:52:25.000 29268 30041 I VrApi : FPS=45/90,Prd=40ms,Tear=0,Early=0,Stale=59,Stale2/5/10/max=3/2/1/13,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/5,2361/599MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=1.37ms,App=12.47ms,GD=0.71ms,CPU&GPU=23.50ms,LCnt=3(DR0,LM0),GPU%=0.75,CPU%=0.26(W0.30),DSF=1.00,CFL=12.12/15.64,ICFLp95=14.50,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0

@cabanier
Copy link
Contributor

cabanier commented Feb 4, 2025

... nor in alignment with my contacts at Meta who should be working with us in the first place.

Who is your contact at Meta?

@CodyJasonBennett
Copy link

Felix, who maybe promptly emailed earlier today. You'll have to explain to him why this has been in stasis for the past few years since they specifically asked me about this in New York, and I couldn't say whether there was ever any plan to reinstate changes rather than shut it down entirely. You've lost my trust entirely since it looked either in bad faith or not entirely transparent, and I'm simply tired of the distrust and dysfunction within Meta. You need to talk to each other and get out of your own way, and most of all, not thwart the ecosystem at large. That should also answer the question as to why you can't use pmndrs/postprocessing or any implementation as they are inherently broken without my fixes.

@dmarcos
Copy link
Member

dmarcos commented Feb 5, 2025

Can someone confirm my results with the OVR Metrics Tool HUD and https://incluverse.eu/examples/bloomtest5.html?
Quest 3: Stable 90fps Quest 2: Stable 30fps

This are my stats on a Quest 3 when that page is running: 02-04 15:52:22.000 29268 30041 I VrApi : FPS=42/90,Prd=58ms,Tear=0,Early=14,Stale=42,Stale2/5/10/max=2/1/0/5,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/4,2361/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=2.10ms,App=13.48ms,GD=0.00ms,CPU&GPU=29.14ms,LCnt=2(DR0,LM0),GPU%=0.98,CPU%=0.48(W0.50),DSF=1.00,CFL=12.52/16.85,ICFLp95=15.33,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0 02-04 15:52:23.000 29268 30041 I VrApi : FPS=51/90,Prd=51ms,Tear=0,Early=1,Stale=45,Stale2/5/10/max=3/0/0/3,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/4,1920/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=2.12ms,App=15.57ms,GD=0.00ms,CPU&GPU=27.33ms,LCnt=2(DR0,LM0),GPU%=0.90,CPU%=0.31(W0.37),DSF=1.00,CFL=12.59/16.28,ICFLp95=14.97,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0 02-04 15:52:24.000 29268 30041 I VrApi : FPS=45/90,Prd=43ms,Tear=0,Early=0,Stale=52,Stale2/5/10/max=7/0/0/3,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/4,2361/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=1.07ms,App=14.20ms,GD=0.00ms,CPU&GPU=24.50ms,LCnt=2(DR0,LM0),GPU%=0.79,CPU%=0.37(W0.42),DSF=1.00,CFL=12.46/15.92,ICFLp95=14.74,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0 02-04 15:52:25.000 29268 30041 I VrApi : FPS=45/90,Prd=40ms,Tear=0,Early=0,Stale=59,Stale2/5/10/max=3/2/1/13,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=4/5,2361/599MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=3196MHz,Free=3302MB,PLS=0,Temp=25.0C/0.0C,TW=1.37ms,App=12.47ms,GD=0.71ms,CPU&GPU=23.50ms,LCnt=3(DR0,LM0),GPU%=0.75,CPU%=0.26(W0.30),DSF=1.00,CFL=12.12/15.64,ICFLp95=14.50,LD=0,CABC=1,SF=1.00,LP=0,DVFS=0

Thanks for testing. How do you get those logs? Is then OVR Metrics Tool not a good way to measure FPS?

@dmarcos
Copy link
Member

dmarcos commented Feb 5, 2025

Felix, who maybe promptly emailed earlier today. You'll have to explain to him why this has been in stasis for the past few years since they specifically asked me about this in New York, and I couldn't say whether there was ever any plan to reinstate changes rather than shut it down entirely. You've lost my trust entirely since it looked either in bad faith or not entirely transparent, and I'm simply tired of the distrust and dysfunction within Meta. You need to talk to each other and get out of your own way, and most of all, not thwart the ecosystem at large. That should also answer the question as to why you can't use pmndrs/postprocessing or any implementation as they are inherently broken without my fixes.

Thanks. Can you list what additional fixes are needed? Happy for A-Frame to be the guinea pig and hopefully we can address some of the upstream concerns with working examples.

@CodyJasonBennett
Copy link

I think you need to read and try my original PR, which has many breakdowns and examples. mrdoob/three.js#26160

@cabanier
Copy link
Contributor

cabanier commented Feb 5, 2025

Felix, who maybe promptly emailed earlier today.

Thanks! Felix and I sit next to each other and we already talked this through.
I'm sorry you feel like I was acting in bad faith. That is certainly not my intent!
I'm not against post-processing but I'm wary to add features that are known not to work well. Users are very sensitive to low framerate experiences and we don't want them to get motion sickness or abandon the platform.

I'm hoping to fix these performance issues during the three.js redesign. It seems they're willing to add a proper foundation so we can get efficient postprocessing. I certainly will pressure the w3c immersive group to add APIs to help here.

@cabanier
Copy link
Contributor

cabanier commented Feb 5, 2025

Thanks for testing. How do you get those logs? Is then OVR Metrics Tool not a good way to measure FPS?

adb logcat | grep VrApi

I believe OVR metrics reflects what this service is reporting.

@dmarcos
Copy link
Member

dmarcos commented Feb 5, 2025

I think you need to read and try my original PR, which has many breakdowns and examples. mrdoob/three.js#26160

In A-Frame we now have part (all?) of the changes in that PR: supermedium/three.js@3bc7bc0

What other PRs / changes we need on our side to implement pmndrs/postprocessing approach? Sorry to insist. It's for me hard to tell from the conversation.

@dmarcos
Copy link
Member

dmarcos commented Feb 5, 2025

adb logcat | grep VrApi

Interesting. I think we are seeing different results for some reason. This is what I see with your command, Quest 3 and https://incluverse.eu/examples/bloomtest5.html Result matches what I see in the OVR Metrics Tool HUD.

I'm in v72 if that makes any difference.

02-04 16:21:59.001 22949 18279 I VrApi   : FPS=85/90,Prd=39ms,Tear=0,Early=0,Stale=8,Stale2/5/10/max=0/1/0/5,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=3/4,1651/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=2092MHz,Free=2510MB,PLS=0,Temp=24.0C/0.0C,TW=0.90ms,App=10.27ms,GD=0.00ms,CPU&GPU=21.66ms,LCnt=2(DR0,LM2),GPU%=0.97,CPU%=0.23(W0.41),DSF=1.00,CFL=12.68/17.31,ICFLp95=15.96,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:00.001 22949 18279 I VrApi   : FPS=87/90,Prd=39ms,Tear=0,Early=0,Stale=7,Stale2/5/10/max=1/0/0/2,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=2092MHz,Free=2510MB,PLS=0,Temp=24.0C/0.0C,TW=0.89ms,App=10.44ms,GD=0.00ms,CPU&GPU=20.89ms,LCnt=2(DR0,LM2),GPU%=0.91,CPU%=0.15(W0.26),DSF=1.00,CFL=12.71/17.10,ICFLp95=15.84,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:01.001 22949 18279 I VrApi   : FPS=85/90,Prd=39ms,Tear=0,Early=0,Stale=11,Stale2/5/10/max=2/0/0/3,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=2092MHz,Free=2510MB,PLS=0,Temp=24.0C/0.0C,TW=0.88ms,App=9.12ms,GD=0.00ms,CPU&GPU=20.88ms,LCnt=2(DR0,LM2),GPU%=0.98,CPU%=0.18(W0.30),DSF=1.00,CFL=12.53/17.05,ICFLp95=15.77,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:02.001 22949 18279 I VrApi   : FPS=88/90,Prd=39ms,Tear=0,Early=0,Stale=1,Stale2/5/10/max=0/0/0/1,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=1708MHz,Free=2510MB,PLS=0,Temp=24.0C/0.0C,TW=0.88ms,App=9.56ms,GD=0.00ms,CPU&GPU=20.86ms,LCnt=2(DR0,LM2),GPU%=0.97,CPU%=0.22(W0.30),DSF=1.00,CFL=12.67/16.92,ICFLp95=15.79,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:03.020 22949 18279 I VrApi   : FPS=90/90,Prd=39ms,Tear=0,Early=0,Stale=0,Stale2/5/10/max=0/0/0/0,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=1708MHz,Free=2508MB,PLS=0,Temp=24.0C/0.0C,TW=0.88ms,App=10.10ms,GD=0.00ms,CPU&GPU=20.52ms,LCnt=2(DR0,LM2),GPU%=0.98,CPU%=0.18(W0.20),DSF=1.00,CFL=12.80/16.72,ICFLp95=15.68,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:04.002 22949 18279 I VrApi   : FPS=90/90,Prd=38ms,Tear=0,Early=0,Stale=0,Stale2/5/10/max=0/0/0/0,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=2092MHz,Free=2508MB,PLS=0,Temp=24.0C/0.0C,TW=0.89ms,App=9.76ms,GD=0.00ms,CPU&GPU=20.57ms,LCnt=2(DR0,LM2),GPU%=0.99,CPU%=0.26(W0.45),DSF=1.00,CFL=12.69/16.66,ICFLp95=15.62,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:05.002 22949 18279 I VrApi   : FPS=91/90,Prd=41ms,Tear=0,Early=0,Stale=2,Stale2/5/10/max=1/0/0/2,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=2092MHz,Free=2508MB,PLS=0,Temp=24.0C/0.0C,TW=0.90ms,App=9.32ms,GD=0.00ms,CPU&GPU=21.79ms,LCnt=2(DR0,LM2),GPU%=0.99,CPU%=0.19(W0.40),DSF=1.00,CFL=12.63/17.11,ICFLp95=15.95,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:06.002 22949 18279 I VrApi   : FPS=88/90,Prd=42ms,Tear=0,Early=0,Stale=2,Stale2/5/10/max=0/0/0/1,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=1708MHz,Free=2508MB,PLS=0,Temp=24.0C/0.0C,TW=0.89ms,App=9.38ms,GD=0.00ms,CPU&GPU=22.11ms,LCnt=2(DR0,LM2),GPU%=0.99,CPU%=0.21(W0.29),DSF=1.00,CFL=12.81/17.02,ICFLp95=15.92,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:07.002 22949 18279 I VrApi   : FPS=89/90,Prd=42ms,Tear=0,Early=0,Stale=1,Stale2/5/10/max=0/0/0/1,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=1708MHz,Free=2508MB,PLS=0,Temp=24.0C/0.0C,TW=0.89ms,App=9.82ms,GD=0.00ms,CPU&GPU=22.06ms,LCnt=2(DR0,LM2),GPU%=0.99,CPU%=0.25(W0.38),DSF=1.00,CFL=12.64/17.14,ICFLp95=15.89,LD=0,SF=1.00,LP=0,DVFS=0
02-04 16:22:08.002 22949 18279 I VrApi   : FPS=90/90,Prd=42ms,Tear=0,Early=0,Stale=0,Stale2/5/10/max=0/0/0/0,VSnc=1,Lat=-3,Fov=0,CPU4/GPU=2/4,1382/545MHz,OC=3F,TA=0/0/0,SP=N/N/N,Mem=2092MHz,Free=2508MB,PLS=0,Temp=24.0C/0.0C,TW=0.46ms,App=10.04ms,GD=0.00ms,CPU&GPU=22.17ms,LCnt=2(DR0,LM2),GPU%=0.96,CPU%=0.32(W0.48),DSF=1.00,CFL=12.35/17.13,ICFLp95=15.79,LD=0,SF=1.00,LP=0,DVFS=0

@CodyJasonBennett
Copy link

CodyJasonBennett commented Feb 5, 2025

Thanks! Felix and I sit next to each other and we already talked this through.
I'm sorry you feel like I was acting in bad faith. That is certainly not my intent!
I'm not against post-processing but I'm wary to add features that are known not to work well. Users are very sensitive to low framerate experiences and we don't want them to get motion sickness or abandon the platform.

So instead you want people to test that all is well on everything, including emulator, but breaks on your devices? This isn't just post-processing, but anything offscreen rendering, and renderer state is permanently broken! Who are you to even decide this for everyone? Should we do feature detection to disable the most requested feature in three.js for iPhone too? I'm sure Apple themselves would be happy to see their own pages no longer work. My entire career in real-time graphics has been on handheld mobile/TBDR, and even without post-processing, I've used these (currently broken) codepaths to simply compromise and perform basic upsampling or blitting, which people should be doing in XR also. I couldn't disagree more with this notion, as you are actively gatekeeping in the process and preventing the rest of us from further improving this area. If you really want to shut down or remove anything, it should be three's (unmaintained) upstream implementation, not the whole ecosystem with it. That is why I find this in bad faith since the strategy here is self-sabotaging in my view, and I'm not willing to believe either of you didn't observe nor foresee this, nor acknowledge that this could be a simple combination of poor parameters.

What other PRs / changes we need on our side to implement pmndrs/postprocessing approach? Sorry to insist. It's for me hard to tell from the conversation.

There are no other PRs on our side; they must be made in pmndrs/postprocessing, and they can't be done without upstream improvements. This is what I mean by the ecosystem being in stasis, and it doesn't stop there but anything that uses offscreen rendering (shadows, impostors, LUTs -- although these should probably be parametric functions aside from color grading). Most of Drei is affected, for instance, and it would take many months to fix all the components.

@dmarcos
Copy link
Member

dmarcos commented Feb 5, 2025

and they can't be done without upstream improvements.

I'm happy to take those improvements if there's a reasonable path to maintain them until upstream concerns are resolved

@CodyJasonBennett
Copy link

CodyJasonBennett commented Feb 5, 2025

I don't think you understood what I meant, but those libraries I maintain in Poimandres, and upstream means three.js or mrdoob/three.js#26160, which is among the simplest PRs I've made to three.js and by far the most valuable at $10,000 since I thought that would motivate people to repeat my own work and see past this nonsense. It's not the most complicated to research or repeat, and the changes are still exhaustive today. I put an additional $500 here since I feel the same responsibility with aframe, and I only see Rik shutting this down no matter what I do myself. All of my time has been wasted, and I preach to deaf ears. Not letting that continue to happen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants