小编tlc*_*kpl的帖子

将 HDR 10 位 AVIF 图像加载到 WebGPU 中的 rgba16float 纹理中

问题

我正在尝试将 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)

由于图像是等距柱状投影,我使用以下着色器将其转换为立方体贴图: …

hdr typescript webgpu avif

5
推荐指数
0
解决办法
309
查看次数

标签 统计

avif ×1

hdr ×1

typescript ×1

webgpu ×1