Three.js、256×256 png 纹理崩溃 chrome 选项卡
Three.js, 256×256 png textures crash chrome tab
正在将 256x256 纹理加载到 Three.js 材质中,然后用于平面几何变形。在第 15 个纹理处遇到瓶颈。 Chrome 显然在渲染调用时崩溃了。当每个网格添加到场景时,我调用 renderer.render 调用,但顺序非常紧凑,所以我相信,gpu 总线可能不堪重负。很难相信少量如此小的纹理就足以造成这种情况。 Cpu 内存不是问题,因为纹理被加载到 cpu 并且如果网格未添加到场景,则不会崩溃。此外,将纹理从 cpu 复制到 gpu 时会有明显的延迟。
function loadTexture(texture) {
var x = 512;
var y = 512;
var dx = 256;
var dy = 256;
var geometry = new THREE.PlaneGeometry(x, y, dx, dy);
var material = new THREE.ShaderMaterial({
side: THREE.DoubleSide,
uniforms: {
heightMap: {
type: "t",
value: texture
}
},
vertexShader: vertexShader,
fragmentShader: fragmentShader
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
this.renderer.render(scene, camera);
}
PlaneGeometries 在 Three.js r76 中变得很昂贵。我不能创建超过 14 个(在提到的 256x256 数据点的分辨率下)。我碰巧需要很多但数量有限的平面几何体,所以我可以继续突破这个限制,但最终我将需要更多的内存来存储 PlaneGeometries。这个瓶颈只是 GPU,因为这只发生在 renderer.render 调用上。
正在将 256x256 纹理加载到 Three.js 材质中,然后用于平面几何变形。在第 15 个纹理处遇到瓶颈。 Chrome 显然在渲染调用时崩溃了。当每个网格添加到场景时,我调用 renderer.render 调用,但顺序非常紧凑,所以我相信,gpu 总线可能不堪重负。很难相信少量如此小的纹理就足以造成这种情况。 Cpu 内存不是问题,因为纹理被加载到 cpu 并且如果网格未添加到场景,则不会崩溃。此外,将纹理从 cpu 复制到 gpu 时会有明显的延迟。
function loadTexture(texture) {
var x = 512;
var y = 512;
var dx = 256;
var dy = 256;
var geometry = new THREE.PlaneGeometry(x, y, dx, dy);
var material = new THREE.ShaderMaterial({
side: THREE.DoubleSide,
uniforms: {
heightMap: {
type: "t",
value: texture
}
},
vertexShader: vertexShader,
fragmentShader: fragmentShader
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
this.renderer.render(scene, camera);
}
PlaneGeometries 在 Three.js r76 中变得很昂贵。我不能创建超过 14 个(在提到的 256x256 数据点的分辨率下)。我碰巧需要很多但数量有限的平面几何体,所以我可以继续突破这个限制,但最终我将需要更多的内存来存储 PlaneGeometries。这个瓶颈只是 GPU,因为这只发生在 renderer.render 调用上。