HLSL gölgelendiricilerden, drop shadow, pivot vb. Gibi Photoshop filtreleri eklemek için kullanılan bir görüntü işleme projesi üzerinde çalışıyorum. Şimdi HLSL'de bir dış parıltı efekti uygulamak için bir yaklaşım arıyorum.Dış Glow HLSL shader olarak
1) parıltı (parametre oluşturmak için geçerli doku ölçeklendirme: anahat boyutunu)
2) Bulanıklık yatay
setleri glowSize, Şu anda aşağıdaki fikri ile deniyorum
3) bulanıklık dikey, renk, parlaklık ve ışıltı oluşturma için aşağıdaki çoklu geçiş HLSL shader kullanıyorum üst
orijinal doku eklemek için bulanıklık değişimi rengi:
float4 PS_Scale(VS_OUTPUT IN) : COLOR0
{
float2 tex = IN.texture0;
float2 scaleCenter = float2(0.5f, 0.5f);
float2 scaleTex = (tex - scaleCenter) * glowSize + scaleCenter;
return tex2D(foreground, scaleTex);
}
float4 PS_GlowH(VS_OUTPUT IN) : COLOR0
{
float2 Tex = IN.texture0;
float4 sum = float4(0.0, 0.0, 0.0, 0.0);
sum += tex2D(secondForeground, float2(Tex.x - 4.0*blur, Tex.y))*0.05;
sum += tex2D(secondForeground, float2(Tex.x - 3.0*blur, Tex.y))*0.09;
sum += tex2D(secondForeground, float2(Tex.x - 2.0*blur, Tex.y))*0.12;
sum += tex2D(secondForeground, float2(Tex.x - blur, Tex.y))*0.15;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y))*0.16;
sum += tex2D(secondForeground, float2(Tex.x + blur, Tex.y))*0.15;
sum += tex2D(secondForeground, float2(Tex.x + 2.0*blur, Tex.y))*0.12;
sum += tex2D(secondForeground, float2(Tex.x + 3.0*blur, Tex.y))*0.09;
sum += tex2D(secondForeground, float2(Tex.x + 4.0*blur, Tex.y))*0.05;
return sum;
}
float4 PS_GlowV(VS_OUTPUT IN) : COLOR0
{
float2 Tex = IN.texture0;
float4 sum = float4(0.0, 0.0, 0.0, 0.0);
sum += tex2D(secondForeground, float2(Tex.x, Tex.y - 4.0*blur))*0.05;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y - 3.0*blur))*0.09;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y - 2.0*blur))*0.12;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y - blur))*0.15;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y))*0.16;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y + blur))*0.15;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y + 2.0*blur))*0.12;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y + 3.0*blur))*0.09;
sum += tex2D(secondForeground, float2(Tex.x, Tex.y + 4.0*blur))*0.05;
float4 result = sum * opacity;
result.rgb = float3(glowColor.r, glowColor.g, glowColor.b)/255.0f;
float4 src = tex2D(foreground, IN.texture0.xy);
return result * (1-src.a) + src;
}
Bu kodun sonucu elips gibi basit şekiller kullanırken Tamam görünüyor, ama metin üzerinde gölgelendiriciyi uygularken çalışmaz:
Bu bir sorun ile orada aşikardır ölçekleme. Orijinal dokuyu anahat olarak kullanmak için nasıl ölçeklendirileceğine dair hiçbir fikrim yok. Bu mümkün mü? HLSL'de dış parıltı veya anahat filtresi nasıl uygulanacağı konusunda başka fikirler var mı?
Önceden teşekkür ederiz.
nasıl yukarıda gönderdiniz gibi bir bulanıklık gölgelendirici Photoshop Glow harmanlama seçeneğine benzer sonuçlar sağlayabilir? – barnacleboy
Kodum zaten bunu yapıyor, ancak parlama boyutunu ölçeklendirme olmadan ayarlamak için bir yol bulamıyorum. Gölgemden aldığım parıltı tamam, ama ölçekleme olmadan büyüyemez ... – barnacleboy
Geç cevap için özür dilerim. Cevabınızı güncellediğinizi görmediniz. – barnacleboy