0

我正在构建一个依赖于three.js 的webGL 光线追踪器。为了加快计算速度并使其实时化,而不是对屏幕的所有像素进行光线追踪,我只考虑其中的一个子集(我考虑的是像素块而不是独立的每个像素)。

因此我使用了不同的阴影,即:

  1. 将光线追踪器应用于像素子集,并将生成的图像存储在纹理中(纹理的大小为 screenWidth/blockSize、screenHeight/blockSize)。
  2. 在全屏四边形上渲染纹理

这是它的three.js代码:

// first rendering: render the scene in a low resolution texture
rayTracingRenderer.setSize(window.innerWidth/blockSize,window.innerHeight/blockSize);
rayTracingRenderer.render(scene, camera, texture, true);

// second rendering: render the texture on a full screen quad
rayTracingRenderer.setSize(window.innerWidth,window.innerHeight);
rayTracingRenderer.render(scenePostProcess, cameraRTT);

为了为第一次渲染计算更少的像素,我只是减小了渲染器的大小。之后我调整它的大小以计算正确的像素数量。

但是此代码不起作用:它会打印带有白噪声的黑屏。显然问题来自我在两次render()调用之间调整渲染器的大小。确实,当我一劳永逸地设置分辨率时,无论值是多少,它都有效。

例如,当我将分辨率设置为 screenWidth/blockSize,screenHeight/blockSize 时,我的屏幕上会出现一个小图像,而当我将其设置为 screenWidth,screenHeight 时,我会得到一个全屏模糊图像。(该全屏模糊图像是预期结果,其纹理大小为低分辨率,但处理的像素数是屏幕的像素数,因此我根本没有加快任何速度。)

你能发现我可能犯的任何错误,还是它是一个错误,我应该采取一种解决方法?

4

0 回答 0