我正在使用 Three.js 中的 glsl es 编写一个基于物理的着色器。为了添加镜面全局照明,我使用内部带有 mipmap 链的立方体贴图 dds 纹理(按照 CubeMapGen 的说明进行预先计算here http://seblagarde.wordpress.com/2012/06/10/amd-cubemapgen-for-physically-based-rendering/)。我需要在片段着色器中访问此纹理,并且我想手动选择 mipmap 的索引。执行此操作的正确函数是
vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)
但它仅在顶点着色器中可用。在我的片段着色器中我使用类似的函数
vec4 textureCube(samplerCube sampler, vec3 coord, float bias)
但效果不佳,因为偏差参数只是添加到自动计算的细节级别中。因此,当我放大或缩小场景时,mipmap 的 LOD 会发生变化,但对于我的着色器来说,它必须是相同的(它必须仅取决于粗略参数,如上面的链接中所述)。
我想手动选择片段着色器中的 mipmap 级别仅取决于材质的粗糙度(例如使用公式mipMapIndex = roughness*numMipMap
),所以它必须与距离一致,并且在缩放时不会自动改变。我该如何解决这个问题?
它不能与 webGL atm 一起使用,因为不支持此功能。尽管您可以使用最新版本的 chrome canary 来尝试textureLOD 扩展,但它仍然需要一些调整。去查看标志并寻找这个:
启用 WebGL 草稿扩展
WebGL 纹理立方体偏差导致接缝 https://stackoverflow.com/questions/22977236/webgl-texturecube-bias-causing-seams
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)