我正在尝试将 10 位 AVIF 加载到 rgba16float 纹理中,但它没有作为 HDR 图像加载(它不会渲染任何大于 1.0 的值)。我将在下面发布屏幕截图,但这就是我正在做的:
首先,我获取 HDR 图像并将其转换为 blob:
const assetRequest = await fetch(assetUrl);
const assetBlob = await assetRequest.blob();
Run Code Online (Sandbox Code Playgroud)
然后我从 blob 创建一个位图:
const bitmap = await createImageBitmap(
assetBlob,
{
colorSpaceConversion: 'none',
imageOrientation: 'flipY',
resizeQuality: 'high'
}
);
Run Code Online (Sandbox Code Playgroud)
最后,我创建一个纹理并将位图上传到其中:
const tex = device.createTexture({
size: [bitmap.width, bitmap.height],
format: 'rgba16float',
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
});
device.queue.copyExternalImageToTexture(
{ source: bitmap },
{ texture: tex, colorSpace: 'display-p3' },
{ width: bitmap.width, height: bitmap.height }
);
Run Code Online (Sandbox Code Playgroud)
由于图像是等距柱状投影,我使用以下着色器将其转换为立方体贴图: …