#version 450 // IBL ①:等距柱状 HDR → 环境 cube(6 面重采样)。 // 替代原 CPU 逐像素 SampleEquirect 双线性查表——GPU 上直接用硬件 // 线性过滤采样(经度接缝由 S=eRepeat 处理),观感与 CPU 版一致。 // 输出为 image2DArray(layer = face),图像本体带 CUBE_COMPATIBLE, // 采样端另建 eCube view。 #include "ibl_common.glsl" layout(local_size_x = 8, local_size_y = 8) in; layout(set = 0, binding = 0) uniform sampler2D equirect; layout(set = 0, binding = 1, rgba16f) uniform restrict writeonly image2DArray outCube; void main() { ivec3 gid = ivec3(gl_GlobalInvocationID); ivec2 size = imageSize(outCube).xy; if (gid.x >= size.x || gid.y >= size.y) return; vec2 uv = (vec2(gid.xy) + 0.5) / vec2(size); vec3 dir = iblFaceDir(uint(gid.z), uv.x, uv.y); vec3 rgb = texture(equirect, iblDirToEquirectUv(dir)).rgb; imageStore(outCube, gid, vec4(rgb, 1.0)); }