【发布时间】:2021-06-25 06:01:42
【问题描述】:
我已经使用 BokehPass 实现了景深效果(基于https://threejs.org/examples/?q=dof#webgl_postprocessing_dof)
它在台式机(PC 或 Mac)上运行良好,但在我的 iPhone 上它坏了。它只会模糊整个场景(基于设置 - 所以它实际上是在做某事),但它缺少焦点(锐利)区域。因此,如果“focus”值设置为 0,则整个屏幕清晰,当我提高它时,整个屏幕会变得模糊。在桌面上它按预期工作 - 提高焦点值“移动”焦点区域,因此前景模糊,背景模糊,但焦点区域清晰。
我的代码没什么特别的:
this._composer = new EffectComposer(this._renderer);
const renderPass = new RenderPass(this._scene, camera);
this._bokehPass = new BokehPass(this._scene, camera, {
focus: 1.0,
aperture: 0.025,
maxblur: 0.01,
width: window.innerWidth,
height: window.innerHeight,
});
const gammaCorrectionPass = new ShaderPass(GammaCorrectionShader);
this._composer.addPass(renderPass);
this._composer.addPass(gammaCorrectionPass);
this._composer.addPass(this._bokehPass);
非常感谢
【问题讨论】:
-
你介意用一个活生生的例子来演示这个问题吗?顺便说一句:伽玛校正应该在 DOF 之后。
-
我在这里创建了一个简单的演示:kroscloud.com/Tester(等待几秒钟加载 3D 模型)焦点在水箱的中间。在 PC/Mac 上它可以工作,但在 iPhone x iPad 上一切都是模糊的,没有焦点
-
去掉
setPixelRatio()的调用有什么不同吗? -
不,当我删除 setPixelRatio() 时没有差异当加载 GLTF 模型并将其添加到场景中时,我需要调用 bokehPass.uniforms['aperture'].value 来有点“激活”它。但是更改任何其他设置 - 焦点或 maxBlur,都不会这样做。设置光圈时似乎激活了一些“触发器”。如果在将模型添加到场景后删除此设置器,则一切都是模糊的,没有焦点区域。这不能是一个线索吗?也许iOS需要触发其他东西......顺便说一句。我在 Android 设备上对其进行了测试,它在那里正常工作。
-
好吧,光圈均匀的东西只是我的错误,所以......这不是一个线索......我在 iPad 上的 ThreeJS 上再次测试了 DOF 示例,它工作正常.那么我的情况有什么不同...
标签: ios three.js shader post-processing