Ручной выбор 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

WebGL textureCube смещение, вызывающее швы

Другие вопросы по тегам