I’m trying to render screenshots of the same scene, same exact perspective, at different resolutions.
This works great when I increase/decrase the width and height of the shot by the same factor.
I’m using both CreateScreenshot and CreateScreenshotUsingRenderTarget depending on my shader rendering mode, as that was the only way I found to toggle on/off the rendering pipeline for the screenshots.
async function screenshot(scene) {
let canvas = scene.getEngine().getRenderingCanvas()
for (let rx of [1, 2, 4])
for (let ry of [1, 2, 4]) {
canvas.style.height = `${2160/ry}px`
canvas.style.width = `${3840/rx}px`
for (let [i, name] of modes.entries()) {
scene.renderMode = i
electron.ipcRenderer.send('screenshot', {
image: i == 0 ?
await scene.whenReady() && await BABYLON.Tools.CreateScreenshotAsync(scene.getEngine(), scene.activeCamera, {precision: 1}) :
await BABYLON.Tools.CreateScreenshotUsingRenderTargetAsync(scene.getEngine(), scene.activeCamera, {width: 3840/rx, height: 2160/ry}),
mode: `${rx}x${ry}_${name}`,
source: scene.source,
})
}
}
canvas.style.height = null
canvas.style.width = null
scene.renderMode = 0
}