我正在使用 three.js 中的 glsl es 编写一个基于物理的着色器。为了添加镜面全局照明,我使用内部带有 mipmap 链的立方体贴图 dds 纹理(使用 CubeMapGen 进行预计算,如这里所述)。我需要在片段着色器中访问这个纹理,我想手动选择 mipmap 的索引。这样做的正确功能是
vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)
但它仅在顶点着色器中可用。在我的片段着色器中,我使用了类似的功能
vec4 textureCube(samplerCube sampler, vec3 coord, float bias)
但它效果不佳,因为偏差参数只是添加到自动计算的细节级别。因此,当我放大或缩小场景时,mipmap 的 LOD 会发生变化,但对于我的着色器,它必须相同(它必须仅取决于粗略参数,如上面的链接中所述)。
我想手动选择片段着色器中mipmap的级别仅取决于材质的粗糙度(例如使用公式mipMapIndex = roughness*numMipMap
),因此它必须与距离一致,并且在缩放时不会自动更改。我该如何解决这个问题?