Всем добрый вечер.
Собсно сабж. Как прикрутить PCF размытие к Cube ShadowMap?
сами тени вычисляются так:
Fragment
uniform samplerCube shadowMap;
.
.
.
const vec4 upk = vec4(256.0, 1.0, 0.00390625, 0.0000152587890625);
void main (void)
{
float shadowFactor = 1.0;
float depth= dot(textureCube(shadowMap, dir), upk);
shadowFactor = step(length(dir), depth + 0.1);
.
.
.
}где dir - это
Vertex . . . vec4 pos = gl_ModelViewMatrix * gl_Vertex; dir = vec3( gl_TextureMatrixInverse[2] * pos - light_pos); . . .
сделать несколько выборок по dir с небольшим смещением ?
Тоже делал как-то.. Но проблемма у меня возникала, что нужно было сместить ровно на один тексель, а не на просто подобранное значение..
MoKa
> Но проблемма у меня возникала, что нужно было сместить ровно на один тексель, а
> не на просто подобранное значение..
Делаешь развёртку cubeMap по s,t,r
> сделать несколько выборок по dir с небольшим смещением ?
ммм размывает, но это неособо помогло...
shadowFactor += step(length(dir+vec4(0.0,0.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(-20.0,-20.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(-20.0,20.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(20.0,20.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(20.0,-20.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(0.0,-20.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(-20.0,0.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(0.0,20.0,0.0,0.0)), depth + 0.1);
shadowFactor += step(length(dir+vec4(20.0,0.0,0.0,0.0)), depth + 0.1);
shadowFactor *=0.1;и как же сделать мягкие CubeMap тени?
вот, еще вопрос вдогонку, как сделать, чтобы тень "легла на bump", а то плоская тень на объемной поверхности плохо смотрится.
Тема в архиве.