Manual selection lod of mipmaps in a fragment shader using three.js

岁酱吖の 提交于 2020-01-02 05:12:42

问题


I'm writing a physically based shader using glsl es in three.js. For the addition of specular global illumination I use a cubemap dds texture with mipmap chain inside (precalculate with CubeMapGen as it's explained here). I need to access this texture in fragment shader and I would like to select manually the index of mipmap. The correct function for doing this is

vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)

but it's available only in vertex shader. In my fragment shader I'm using the similar function

vec4 textureCube(samplerCube sampler, vec3 coord, float bias)

but it doesn't work well, because the bias parameter is just added to the automatically calculated level of detail. So, when I zoom in or zoom out on the scene the LOD of mipmap change, but for my shader it must be the same (it must depends only on the rough parameter, as explained in the link above).

I would like to select manually the level of mipmap in fragment shader only depends on the roughness of the material (for example using the formula mipMapIndex = roughness*numMipMap), so it must be costant with the distance and no automatically changed when zooming. How can I solve this?


回答1:


It wont work with webGL atm, because there is no support for this feature. You can experiment with textureLOD extensions though with recent builds of chrome canary, but it still needs some tweaking. Go about flags and look for this:

Enable WebGL Draft Extensions

WebGL textureCube bias causing seams



来源:https://stackoverflow.com/questions/25218267/manual-selection-lod-of-mipmaps-in-a-fragment-shader-using-three-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!