Преломление и прозрачность фактурного стекла - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь создать шейдер, который позволил бы спрайту как немного увеличить (или просто немного сместить) свой фон, так и показать его текстуру так же, как это сделал бы кусок окрашенного стекла. Я нашел шейдер, который почти делает это, но он также меняет фон в зависимости от яркости верхнего слоя / спрайта:

sampler2D img;
sampler2D bkd : register(s1);

float4 ps_main(in float2 In: TEXCOORD0) : COLOR0    {
    float4 L = tex2D(img,In);
    float4 B = tex2D(bkd,In);
    return (L<0.5)?min(B,(2.0*L)):max(B,(2.0*(L-0.5)));
}

technique tech_main { pass P0 { PixelShader = compile ps_2_0 ps_main(); }  }

Я пытался изменить параметры, но результаты ужасны.

1 Ответ

0 голосов
/ 07 января 2019

Для комбинирования текстур, либо переходите между B и L, либо переходите между B и L * B.Вы можете выставить коэффициент lerp как форму для контроля.

Для увеличения вы хотите масштабировать координаты UV фоновой текстуры в поиске текстуры.Однако простое его масштабирование не сработает, вам нужно получить расстояние между UV-координатами образца буфера экрана и центром вашего увеличительного стекла, масштабировать его, а затем добавить к исходным UV-координатам.

Вот шейдер с коротким увеличительным стеклом, показывающий, что я имею в виду (в GLSL):

https://www.shadertoy.com/view/lsjczh

...