A-Frame - 渲染到 RenderTarget 会导致屏幕闪烁,仅在 VR 模式下
A-Frame - rendering to a RenderTarget causes screen flickering, in VR mode only
我使用 three.js 和 A-Frame 为 Conway 的生命游戏编写了一个自定义着色器,它在片段着色器中进行所有处理。它在桌面上的网络浏览器中完美运行。它在 Quest 浏览器中似乎也可以工作,但是当进入 VR 模式时,整个屏幕开始在场景和黑屏之间闪烁。
我怀疑问题出在 RenderTarget 设置上,或者我在渲染目标之间切换的方式,但我不确定。相关代码出现在一个A-Frame组件tick函数中,周期性地在两个渲染目标之间切换并返回主场景如下:
this.el.sceneEl.renderer.setRenderTarget(this.renderTarget0);
this.el.sceneEl.renderer.render(this.rtScene0, this.rtCamera);
this.el.sceneEl.renderer.setRenderTarget(this.renderTarget1);
this.el.sceneEl.renderer.render(this.rtScene1, this.rtCamera);
this.el.sceneEl.renderer.setRenderTarget(null);
如果相关,我还禁用了 RenderTarget 对象上的深度缓冲区。完整代码可在 GitHub https://github.com/stemkoski/A-Frame-Examples/blob/master/conway-shader.html and a live version is at https://stemkoski.github.io/A-Frame-Examples/conway-shader.html.
上获得
我的问题是:在 A-Frame 中使用 RenderTargets 时,如何在 VR 模式下阻止屏幕闪烁?
如果您遵循 Marquizzo 引用的 Mugen87 comment(“想法是禁用 xr,执行渲染,然后再次启用 xr”)。在 VR 中一切正常。要在 gpgpu 计算之前禁用 XR 和阴影贴图,请执行以下操作:
this.el.sceneEl.renderer.xr.enabled = false;
this.el.sceneEl.renderer.shadowMap.autoUpdate = false;
然后重新激活它(如果在 vr 中):
this.el.sceneEl.renderer.xr.enabled = true;
this.el.sceneEl.renderer.shadowMap.autoUpdate = true;
工作 A-Frame 源代码:
https://glitch.com/edit/#!/experienced-political-share?path=index.html%3A204%3A12
演示:
我使用 three.js 和 A-Frame 为 Conway 的生命游戏编写了一个自定义着色器,它在片段着色器中进行所有处理。它在桌面上的网络浏览器中完美运行。它在 Quest 浏览器中似乎也可以工作,但是当进入 VR 模式时,整个屏幕开始在场景和黑屏之间闪烁。
我怀疑问题出在 RenderTarget 设置上,或者我在渲染目标之间切换的方式,但我不确定。相关代码出现在一个A-Frame组件tick函数中,周期性地在两个渲染目标之间切换并返回主场景如下:
this.el.sceneEl.renderer.setRenderTarget(this.renderTarget0);
this.el.sceneEl.renderer.render(this.rtScene0, this.rtCamera);
this.el.sceneEl.renderer.setRenderTarget(this.renderTarget1);
this.el.sceneEl.renderer.render(this.rtScene1, this.rtCamera);
this.el.sceneEl.renderer.setRenderTarget(null);
如果相关,我还禁用了 RenderTarget 对象上的深度缓冲区。完整代码可在 GitHub https://github.com/stemkoski/A-Frame-Examples/blob/master/conway-shader.html and a live version is at https://stemkoski.github.io/A-Frame-Examples/conway-shader.html.
上获得我的问题是:在 A-Frame 中使用 RenderTargets 时,如何在 VR 模式下阻止屏幕闪烁?
如果您遵循 Marquizzo 引用的 Mugen87 comment(“想法是禁用 xr,执行渲染,然后再次启用 xr”)。在 VR 中一切正常。要在 gpgpu 计算之前禁用 XR 和阴影贴图,请执行以下操作:
this.el.sceneEl.renderer.xr.enabled = false;
this.el.sceneEl.renderer.shadowMap.autoUpdate = false;
然后重新激活它(如果在 vr 中):
this.el.sceneEl.renderer.xr.enabled = true;
this.el.sceneEl.renderer.shadowMap.autoUpdate = true;
工作 A-Frame 源代码:
https://glitch.com/edit/#!/experienced-political-share?path=index.html%3A204%3A12
演示: