| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
|
||
| function isNode (node) { | ||
| return node.tagName.toLowerCase() in knownTags || node.isNode; | ||
| return node.tagName.toLowerCase() in knownTags || node.isAframeNode; |
There was a problem hiding this comment.
We should def understand what's going on here
Sorry, something went wrong.
There was a problem hiding this comment.
The infinite loop was here https://github.com/mrdoob/three.js/blob/a5734130516db50c1de2cdfe27f477a33ecd1c87/src/nodes/core/Node.js#L640-L648
I don't know much about the new node system to say what that code is doing.
Sorry, something went wrong.
There was a problem hiding this comment.
As I said in #5363 (comment) my guess is that in aframe we set a reference to the entity with el on a three object.
Doing a search I get the following places:
$ ag "\.el = " src/ src/core/system.js 31: this.el = sceneEl; src/core/component.js 66: this.el = el; src/core/a-entity.js 36: this.object3D.el = this; 111: this.object3D.el = null; 140: obj.el = this; 143: child.el = self; src/components/material.js 112: shaderInstance.el = this.el; src/components/light.js 205: this.light.el = el; src/components/text.js 437: shaderObject.el = el;
My guess is that the one set on shaderInstance.el is the culprit and end up in the shader/material being build, but not sure how, I'm not familiar with the new webgpu code path.
Sorry, something went wrong.
There was a problem hiding this comment.
I'm not aware of any community components that is using an isNode check, I think it's fine to rename it to isANode and add a note about it in the release notes.
Sorry, something went wrong.
|
Cool. I would postpone this to 1.8.0. I will be cool to have a WebGPU path. |
Sorry, something went wrong.
Sorry, something went wrong.
|
http://127.0.0.1:8080/docs/basic-scene/ http://127.0.0.1:8080/showcase/curved-mockups/ |
Sorry, something went wrong.
|
http://127.0.0.1:8080/boilerplate/hello-world/ WebGPURenderer (webgpu backend or webgl2 fallback with r173) |
Sorry, something went wrong.
|
for me the only question is, what is the usecase for renderer.xr.setPoseTarget i never need this and its only used at aframe/src/core/scene/a-scene.js Line 553 in b9e4838 |
Sorry, something went wrong.
|
@dmarcos I think we could add a TSL example and then merge this, all the changes here are backward compatible with the WebGLRenderer aframe umd build. We can then make other changes if needed, mainly the text component that is completely broken by replacing it with troika-text if that one work with WebGPU backend. As of three r173, VR mode is not working with WebGPU, we get the error: |
Sorry, something went wrong.
Good question, we have that patch supermedium/three.js@3bfa95d (in 0.173.4 branch) |
Sorry, something went wrong.
@arpu In Three.js the WebXRManager moves the "user" camera to match the xr camera. In A-Frame the camera is conceptually an <a-camera> or <a-entity camera>, which has the actual camera as a child. Just like how components such as look-controls and wasd-controls move the camera entity and not the camera itself, the setPoseTarget is there to let Three.js do the same. |
Sorry, something went wrong.
|
So I guess we will need to do a similar patch to XRManager (used by WebGPU backend) to implement setPoseTarget when VR will be supported. |
Sorry, something went wrong.
|
There is an alternative which I use in my fork, namely disabling XR camera updates in Three.js and doing it ourselves in the camera component. Not only does this avoid needing a modification to Three.js, it also ensures that the camera is up-to-date after the camera component. So any logic that is based on the users head position/orientation can use after: ['camera']. Currently these components tend to use 1 frame stale data. |
Sorry, something went wrong.
Correct. That method or similar existed in WebVRManager and WebXRManager and was removed at some point. Since the pose applies only to the camera and one cannot apply it to an arbitrary Object3D. I raised the concern to THREE but was ignored. |
Sorry, something went wrong.
How do you disable camera updates? |
Sorry, something went wrong.
By setting renderer.xr.cameraAutoUpdate to false (see https://github.com/mrdoob/three.js/blob/dev/src/renderers/WebGLRenderer.js#L1160). But as with anything, it isn't without its drawbacks. If the camera component handles the updating, then any camera movement afterwards (directly or indirectly through a camera rig) needs to be propagated to the world matrices of the sub cameras. This only needs to be done right before rendering, but it no longer happens automatically. Basically the above flag is an all-or-nothing and in an ideal world the part that transfers the WebXR pose onto the camera is done in the camera component and the part that updates the world matrices of the underlying eye cameras is done right before rendering. But I have no idea if the XRManager for WebGPURenderer is going to have the same behaviour, probably best to wait and see how that implementation will behave. |
Sorry, something went wrong.
Thanks. I like the idea of having more control of the lower level parts that concern XR. So in your case the pose used for rendering is not the most current one since it’s done in the component? |
Sorry, something went wrong.
|
I ported the galaxy example. |
Sorry, something went wrong.
Thanks. Does it work in VR? |
Sorry, something went wrong.
|
No, three r173 doesn't support WebXR with WebGPU. |
Sorry, something went wrong.
| <head> | ||
| <meta charset="utf-8" /> | ||
| <title>TSL • A-Frame</title> | ||
| <meta name="description" content="TSL • A-Frame" /> |
There was a problem hiding this comment.
Would probably name this example 'webgpu' instead of tsl?
Sorry, something went wrong.
There was a problem hiding this comment.
The main reason I did this example is to play with TSL that is currently only available with WebGPURenderer, but that example may also run with WebGL2 for systems that doesn't support WebGPU, so I would like to keep TSL here in the title.
I renamed directory to webgpu and changed the title to "WebGPURenderer and TSL" so that matches what I put in the root index.html
Sorry, something went wrong.
|
Thanks! |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Description:
For those that want to play with WebGPURenderer and TSL.
Run
Start from
https://localhost:8080/showcase/tsl/
and port an example from https://threejs.org/examples/?q=tsl
Changes proposed:
All the changes here are backward compatible with the default WebGLRenderer umd aframe build.
You can use WebGPURenderer in two ways:
via an importmap defining three and three/webpgu to use three.webgpu.js instead of three.module.js
in your webpack project defining the correct alias:
and using in package.json this PR for now:
Using WebGPURenderer with classic aframe umd build is not supported, we don't generate a build for that.