Ручной выбор lod mipmaps во фрагментном шейдере с помощью three.js
Я пишу физически основанный шейдер, используя glsl es в three.js. Для добавления зеркального глобального освещения я использую текстуру dube cubemap с цепочкой mipmap внутри (предварительно рассчитайте с CubeMapGen, как это объясняется здесь). Мне нужно получить доступ к этой текстуре во фрагментном шейдере, и я хотел бы вручную выбрать индекс mipmap. Правильная функция для этого
vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)
но он доступен только в вершинном шейдере. В моем фрагментном шейдере я использую похожую функцию
vec4 textureCube(samplerCube sampler, vec3 coord, float bias)
но это не работает, потому что параметр смещения просто добавляется к автоматически вычисляемому уровню детализации. Таким образом, когда я увеличиваю или уменьшаю масштаб сцены, LOD mipmap изменяется, но для моего шейдера он должен быть таким же (он должен зависеть только от грубого параметра, как объяснено в ссылке выше).
Я хотел бы выбрать вручную уровень mipmap во фрагментном шейдере, зависит только от шероховатости материала (например, с помощью формулы mipMapIndex = roughness*numMipMap
), поэтому он должен быть затратным с расстоянием и не изменяться автоматически при масштабировании. Как я могу решить это?
1 ответ
Он не будет работать с атм WebGL, потому что нет поддержки этой функции. Вы можете поэкспериментировать с расширениями textureLOD, хотя и с последними сборками Chrome Canary, но для этого все же требуется некоторая настройка. Пойдите о флагах и ищите это:
Включить черновые расширения WebGL